diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml
index 4857fda3f..b6388804b 100644
--- a/.github/workflows/build-test.yml
+++ b/.github/workflows/build-test.yml
@@ -72,6 +72,20 @@ jobs:
- name: Install dependencies
run: pnpm install --frozen-lockfile
+ - name: Gradle Wrapper Validation
+ uses: gradle/wrapper-validation-action@v1.1.0
+
+ - name: Setup Java
+ uses: actions/setup-java@v4
+ with:
+ distribution: zulu
+ java-version: 17
+
+ - name: Setup Gradle
+ uses: gradle/gradle-build-action@v2
+ with:
+ gradle-home-cache-cleanup: true
+
- name: Build
run: DEFAULT_NPM_TAG=latest pnpm run build
diff --git a/README.md b/README.md
index 56d1c16dd..be3242a65 100644
--- a/README.md
+++ b/README.md
@@ -176,7 +176,7 @@ The following diagram gives a high-level architecture overview of ZenStack.
### Todo SaaS App
-Check out the [Collaborative Todo App](https://zenstack-todo.vercel.app/) for a running example. You can find different implementations below:
+Check out the [Multi-tenant Todo App](https://zenstack-todo.vercel.app/) for a running example. You can find different implementations below:
- [Next.js 13 + NextAuth + SWR](https://github.com/zenstackhq/sample-todo-nextjs)
- [Next.js 13 + NextAuth + TanStack Query](https://github.com/zenstackhq/sample-todo-nextjs-tanstack)
diff --git a/package.json b/package.json
index dbedaf9dd..19cac9cd5 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "zenstack-monorepo",
- "version": "1.5.0",
+ "version": "1.6.0",
"description": "",
"scripts": {
"build": "pnpm -r build",
diff --git a/packages/ide/jetbrains/.gitignore b/packages/ide/jetbrains/.gitignore
new file mode 100644
index 000000000..80b28c077
--- /dev/null
+++ b/packages/ide/jetbrains/.gitignore
@@ -0,0 +1,18 @@
+.gradle
+build/
+!gradle/wrapper/gradle-wrapper.jar
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### IntelliJ IDEA ###
+.idea/modules.xml
+.idea/jarRepositories.xml
+.idea/compiler.xml
+.idea/libraries/
+*.iws
+*.iml
+*.ipr
+out/
+!**/src/main/**/out/
+!**/src/test/**/out/
+.sign
diff --git a/packages/ide/jetbrains/.idea/.gitignore b/packages/ide/jetbrains/.idea/.gitignore
new file mode 100644
index 000000000..13566b81b
--- /dev/null
+++ b/packages/ide/jetbrains/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/packages/ide/jetbrains/.idea/.name b/packages/ide/jetbrains/.idea/.name
new file mode 100644
index 000000000..8aa065d41
--- /dev/null
+++ b/packages/ide/jetbrains/.idea/.name
@@ -0,0 +1 @@
+zenstack
\ No newline at end of file
diff --git a/packages/ide/jetbrains/.idea/gradle.xml b/packages/ide/jetbrains/.idea/gradle.xml
new file mode 100644
index 000000000..ce1c62c7c
--- /dev/null
+++ b/packages/ide/jetbrains/.idea/gradle.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/ide/jetbrains/.idea/kotlinc.xml b/packages/ide/jetbrains/.idea/kotlinc.xml
new file mode 100644
index 000000000..ae3f30ae1
--- /dev/null
+++ b/packages/ide/jetbrains/.idea/kotlinc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/ide/jetbrains/.idea/misc.xml b/packages/ide/jetbrains/.idea/misc.xml
new file mode 100644
index 000000000..68bf986ec
--- /dev/null
+++ b/packages/ide/jetbrains/.idea/misc.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/ide/jetbrains/.idea/vcs.xml b/packages/ide/jetbrains/.idea/vcs.xml
new file mode 100644
index 000000000..c2365ab11
--- /dev/null
+++ b/packages/ide/jetbrains/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/ide/jetbrains/build.gradle.kts b/packages/ide/jetbrains/build.gradle.kts
new file mode 100644
index 000000000..18f83ebf0
--- /dev/null
+++ b/packages/ide/jetbrains/build.gradle.kts
@@ -0,0 +1,68 @@
+plugins {
+ id("java")
+ id("org.jetbrains.kotlin.jvm") version "1.9.21"
+ id("org.jetbrains.intellij") version "1.16.1"
+}
+
+group = "dev.zenstack"
+version = "1.6.0"
+
+repositories {
+ mavenCentral()
+}
+
+// Configure Gradle IntelliJ Plugin
+// Read more: https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html
+intellij {
+ version.set("2023.3.2")
+ type.set("IU") // Target IDE Platform
+
+ plugins.set(listOf("JavaScript", "org.jetbrains.plugins.textmate"))
+}
+
+tasks {
+ // Set the JVM compatibility versions
+ withType {
+ sourceCompatibility = "17"
+ targetCompatibility = "17"
+ }
+ withType {
+ kotlinOptions.jvmTarget = "17"
+ }
+
+ prepareSandbox {
+ doLast {
+ copy {
+ from("${project.projectDir}/../../schema/bundle/language-server/main.js")
+ into("${destinationDir.path}/zenstack/language-server/")
+ }
+ copy {
+ from("${project.projectDir}/../../schema/src/res/stdlib.zmodel")
+ into("${destinationDir.path}/zenstack/res/")
+ }
+ copy {
+ from("${project.projectDir}/src/main/textMate/zmodel.tmbundle")
+ into("${destinationDir.path}/zenstack/res/zmodel.tmbundle")
+ }
+ copy {
+ from("${project.projectDir}/../../language/syntaxes/zmodel.tmLanguage")
+ into("${destinationDir.path}/zenstack/res/zmodel.tmbundle/Syntaxes/")
+ }
+ }
+ }
+
+ patchPluginXml {
+ sinceBuild.set("231")
+ untilBuild.set("241.*")
+ }
+
+ signPlugin {
+ certificateChain.set(System.getenv("CERTIFICATE_CHAIN"))
+ privateKey.set(System.getenv("PRIVATE_KEY"))
+ password.set(System.getenv("PRIVATE_KEY_PASSWORD"))
+ }
+
+ publishPlugin {
+ token.set(System.getenv("PUBLISH_TOKEN"))
+ }
+}
diff --git a/packages/ide/jetbrains/gradle.properties b/packages/ide/jetbrains/gradle.properties
new file mode 100644
index 000000000..e1c1990f8
--- /dev/null
+++ b/packages/ide/jetbrains/gradle.properties
@@ -0,0 +1,6 @@
+# Opt-out flag for bundling Kotlin standard library -> https://jb.gg/intellij-platform-kotlin-stdlib
+kotlin.stdlib.default.dependency=false
+# Enable Gradle Configuration Cache -> https://docs.gradle.org/current/userguide/configuration_cache.html
+org.gradle.configuration-cache=false
+# Enable Gradle Build Cache -> https://docs.gradle.org/current/userguide/build_cache.html
+org.gradle.caching=true
diff --git a/packages/ide/jetbrains/gradle/wrapper/gradle-wrapper.jar b/packages/ide/jetbrains/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 000000000..249e5832f
Binary files /dev/null and b/packages/ide/jetbrains/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/packages/ide/jetbrains/gradle/wrapper/gradle-wrapper.properties b/packages/ide/jetbrains/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 000000000..a59520664
--- /dev/null
+++ b/packages/ide/jetbrains/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/packages/ide/jetbrains/gradlew b/packages/ide/jetbrains/gradlew
new file mode 100755
index 000000000..1b6c78733
--- /dev/null
+++ b/packages/ide/jetbrains/gradlew
@@ -0,0 +1,234 @@
+#!/bin/sh
+
+#
+# Copyright © 2015-2021 the original authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+#
+# Gradle start up script for POSIX generated by Gradle.
+#
+# Important for running:
+#
+# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+# noncompliant, but you have some other compliant shell such as ksh or
+# bash, then to run this script, type that shell name before the whole
+# command line, like:
+#
+# ksh Gradle
+#
+# Busybox and similar reduced shells will NOT work, because this script
+# requires all of these POSIX shell features:
+# * functions;
+# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+# * compound commands having a testable exit status, especially «case»;
+# * various built-in commands including «command», «set», and «ulimit».
+#
+# Important for patching:
+#
+# (2) This script targets any POSIX shell, so it avoids extensions provided
+# by Bash, Ksh, etc; in particular arrays are avoided.
+#
+# The "traditional" practice of packing multiple parameters into a
+# space-separated string is a well documented source of bugs and security
+# problems, so this is (mostly) avoided, by progressively accumulating
+# options in "$@", and eventually passing that to Java.
+#
+# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+# see the in-line comments for details.
+#
+# There are tweaks for specific operating systems such as AIX, CygWin,
+# Darwin, MinGW, and NonStop.
+#
+# (3) This script is generated from the Groovy template
+# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# within the Gradle project.
+#
+# You can find Gradle at https://github.com/gradle/gradle/.
+#
+##############################################################################
+
+# Attempt to set APP_HOME
+
+# Resolve links: $0 may be a link
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+ APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
+ [ -h "$app_path" ]
+do
+ ls=$( ls -ld "$app_path" )
+ link=${ls#*' -> '}
+ case $link in #(
+ /*) app_path=$link ;; #(
+ *) app_path=$APP_HOME$link ;;
+ esac
+done
+
+APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
+
+APP_NAME="Gradle"
+APP_BASE_NAME=${0##*/}
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD=maximum
+
+warn () {
+ echo "$*"
+} >&2
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+} >&2
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "$( uname )" in #(
+ CYGWIN* ) cygwin=true ;; #(
+ Darwin* ) darwin=true ;; #(
+ MSYS* | MINGW* ) msys=true ;; #(
+ NONSTOP* ) nonstop=true ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD=$JAVA_HOME/jre/sh/java
+ else
+ JAVACMD=$JAVA_HOME/bin/java
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD=java
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+ case $MAX_FD in #(
+ max*)
+ MAX_FD=$( ulimit -H -n ) ||
+ warn "Could not query maximum file descriptor limit"
+ esac
+ case $MAX_FD in #(
+ '' | soft) :;; #(
+ *)
+ ulimit -n "$MAX_FD" ||
+ warn "Could not set maximum file descriptor limit to $MAX_FD"
+ esac
+fi
+
+# Collect all arguments for the java command, stacking in reverse order:
+# * args from the command line
+# * the main class name
+# * -classpath
+# * -D...appname settings
+# * --module-path (only if needed)
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+ APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+ CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+ JAVACMD=$( cygpath --unix "$JAVACMD" )
+
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ for arg do
+ if
+ case $arg in #(
+ -*) false ;; # don't mess with options #(
+ /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
+ [ -e "$t" ] ;; #(
+ *) false ;;
+ esac
+ then
+ arg=$( cygpath --path --ignore --mixed "$arg" )
+ fi
+ # Roll the args list around exactly as many times as the number of
+ # args, so each arg winds up back in the position where it started, but
+ # possibly modified.
+ #
+ # NB: a `for` loop captures its iteration list before it begins, so
+ # changing the positional parameters here affects neither the number of
+ # iterations, nor the values presented in `arg`.
+ shift # remove old arg
+ set -- "$@" "$arg" # push replacement arg
+ done
+fi
+
+# Collect all arguments for the java command;
+# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
+# shell script including quotes and variable substitutions, so put them in
+# double quotes to make sure that they get re-expanded; and
+# * put everything else in single quotes, so that it's not re-expanded.
+
+set -- \
+ "-Dorg.gradle.appname=$APP_BASE_NAME" \
+ -classpath "$CLASSPATH" \
+ org.gradle.wrapper.GradleWrapperMain \
+ "$@"
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+# set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+ printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+ xargs -n1 |
+ sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+ tr '\n' ' '
+ )" '"$@"'
+
+exec "$JAVACMD" "$@"
diff --git a/packages/ide/jetbrains/gradlew.bat b/packages/ide/jetbrains/gradlew.bat
new file mode 100644
index 000000000..ac1b06f93
--- /dev/null
+++ b/packages/ide/jetbrains/gradlew.bat
@@ -0,0 +1,89 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/packages/ide/jetbrains/package.json b/packages/ide/jetbrains/package.json
new file mode 100644
index 000000000..7914671a7
--- /dev/null
+++ b/packages/ide/jetbrains/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "jetbrains",
+ "version": "1.6.0",
+ "displayName": "ZenStack JetBrains IDE Plugin",
+ "description": "ZenStack JetBrains IDE plugin",
+ "homepage": "https://zenstack.dev",
+ "private": true,
+ "scripts": {
+ "build": "./gradlew buildPlugin"
+ },
+ "author": "ZenStack Team",
+ "license": "MIT",
+ "devDependencies": {
+ "zenstack": "workspace:*",
+ "@zenstackhq/language": "workspace:*"
+ }
+}
diff --git a/packages/ide/jetbrains/settings.gradle.kts b/packages/ide/jetbrains/settings.gradle.kts
new file mode 100644
index 000000000..e0ac2ff8b
--- /dev/null
+++ b/packages/ide/jetbrains/settings.gradle.kts
@@ -0,0 +1,8 @@
+pluginManagement {
+ repositories {
+ mavenCentral()
+ gradlePluginPortal()
+ }
+}
+
+rootProject.name = "zenstack"
\ No newline at end of file
diff --git a/packages/ide/jetbrains/src/main/kotlin/dev/zenstack/Utils.kt b/packages/ide/jetbrains/src/main/kotlin/dev/zenstack/Utils.kt
new file mode 100644
index 000000000..b35ae1ec0
--- /dev/null
+++ b/packages/ide/jetbrains/src/main/kotlin/dev/zenstack/Utils.kt
@@ -0,0 +1,28 @@
+package dev.zenstack
+
+import com.intellij.lang.javascript.service.JSLanguageServiceUtil
+import org.jetbrains.plugins.textmate.TextMateService
+import org.jetbrains.plugins.textmate.configuration.TextMateUserBundlesSettings
+
+class Utils {
+ companion object {
+ fun addTextMateBundle() {
+ println("Adding ZenStack textmate bundle")
+ val textMateBundle = JSLanguageServiceUtil.getPluginDirectory(javaClass, "res/zmodel.tmbundle")
+ TextMateUserBundlesSettings.instance?.addBundle(textMateBundle.path, "zmodel")
+ reloadTextMateBundles()
+ }
+
+ fun disableTextMateBundle() {
+ println("Disabling ZenStack textmate bundle")
+ val textMateBundle = JSLanguageServiceUtil.getPluginDirectory(javaClass, "res/zmodel.tmbundle")
+ TextMateUserBundlesSettings.instance?.disableBundle(textMateBundle.path)
+ reloadTextMateBundles()
+ }
+
+ private fun reloadTextMateBundles() {
+ val textMateService = TextMateService.getInstance();
+ textMateService.reloadEnabledBundles()
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/ide/jetbrains/src/main/kotlin/dev/zenstack/lang/ZModelFileType.kt b/packages/ide/jetbrains/src/main/kotlin/dev/zenstack/lang/ZModelFileType.kt
new file mode 100644
index 000000000..b0c4ada21
--- /dev/null
+++ b/packages/ide/jetbrains/src/main/kotlin/dev/zenstack/lang/ZModelFileType.kt
@@ -0,0 +1,14 @@
+package dev.zenstack.lang
+
+import com.intellij.openapi.fileTypes.LanguageFileType
+import javax.swing.Icon
+
+object ZModelFileType : LanguageFileType(ZModelLanguage) {
+ override fun getName(): String = "ZModel"
+
+ override fun getDescription(): String = "ZModel Language"
+
+ override fun getDefaultExtension(): String = "zmodel"
+
+ override fun getIcon(): Icon = ZModelIcons.ZModel
+}
\ No newline at end of file
diff --git a/packages/ide/jetbrains/src/main/kotlin/dev/zenstack/lang/ZModelIcons.kt b/packages/ide/jetbrains/src/main/kotlin/dev/zenstack/lang/ZModelIcons.kt
new file mode 100644
index 000000000..f168410d6
--- /dev/null
+++ b/packages/ide/jetbrains/src/main/kotlin/dev/zenstack/lang/ZModelIcons.kt
@@ -0,0 +1,8 @@
+package dev.zenstack.lang
+
+import com.intellij.openapi.util.IconLoader;
+
+object ZModelIcons {
+ @JvmField
+ val ZModel = IconLoader.getIcon("/icons/zmodel.png", javaClass)
+}
diff --git a/packages/ide/jetbrains/src/main/kotlin/dev/zenstack/lang/ZModelLanguage.kt b/packages/ide/jetbrains/src/main/kotlin/dev/zenstack/lang/ZModelLanguage.kt
new file mode 100644
index 000000000..cfc60749f
--- /dev/null
+++ b/packages/ide/jetbrains/src/main/kotlin/dev/zenstack/lang/ZModelLanguage.kt
@@ -0,0 +1,7 @@
+package dev.zenstack.lang
+
+import com.intellij.lang.Language
+
+object ZModelLanguage : Language("ZModel") {
+ override fun getDisplayName(): String = "ZModel"
+}
diff --git a/packages/ide/jetbrains/src/main/kotlin/dev/zenstack/lsp/ZenStackLspServerDescriptor.kt b/packages/ide/jetbrains/src/main/kotlin/dev/zenstack/lsp/ZenStackLspServerDescriptor.kt
new file mode 100644
index 000000000..524d9e812
--- /dev/null
+++ b/packages/ide/jetbrains/src/main/kotlin/dev/zenstack/lsp/ZenStackLspServerDescriptor.kt
@@ -0,0 +1,55 @@
+package dev.zenstack.lsp
+
+import com.intellij.execution.ExecutionException
+import com.intellij.execution.configurations.GeneralCommandLine
+import com.intellij.javascript.nodejs.interpreter.NodeCommandLineConfigurator
+import com.intellij.javascript.nodejs.interpreter.NodeJsInterpreterManager
+import com.intellij.javascript.nodejs.interpreter.local.NodeJsLocalInterpreter
+import com.intellij.javascript.nodejs.interpreter.wsl.WslNodeInterpreter
+import com.intellij.lang.javascript.service.JSLanguageServiceUtil
+import com.intellij.openapi.project.Project
+import com.intellij.openapi.vfs.VirtualFile
+import com.intellij.platform.lsp.api.ProjectWideLspServerDescriptor
+import com.intellij.platform.lsp.api.customization.LspFormattingSupport
+import dev.zenstack.lang.ZModelFileType
+import dev.zenstack.Utils
+
+class ZenStackLspServerDescriptor(project: Project) : ProjectWideLspServerDescriptor(project, "ZenStack") {
+
+ override fun isSupportedFile(file: VirtualFile) = file.fileType == ZModelFileType
+
+ override fun createCommandLine(): GeneralCommandLine {
+
+ Utils.Companion.addTextMateBundle()
+
+ // start language server
+ val interpreter = NodeJsInterpreterManager.getInstance(project).interpreter
+ if (interpreter !is NodeJsLocalInterpreter && interpreter !is WslNodeInterpreter) {
+ throw ExecutionException("Interpreter not configured")
+ }
+
+ val lsp = JSLanguageServiceUtil.getPluginDirectory(javaClass, "language-server/main.js")
+ if (lsp == null || !lsp.exists()) {
+ // broken plugin installation?
+ throw ExecutionException("Language server not found")
+ }
+
+ return GeneralCommandLine().apply {
+ withParentEnvironmentType(GeneralCommandLine.ParentEnvironmentType.CONSOLE)
+ withCharset(Charsets.UTF_8)
+ addParameter(lsp.path)
+ addParameter("--stdio")
+
+ NodeCommandLineConfigurator.find(interpreter)
+ .configure(this, NodeCommandLineConfigurator.defaultOptions(project))
+ }
+ }
+
+ override val lspGoToDefinitionSupport = true
+
+ override val lspHoverSupport = true
+
+ override val lspFormattingSupport = object : LspFormattingSupport() {
+ override fun shouldFormatThisFileExclusivelyByServer(file: VirtualFile, ideCanFormatThisFileItself: Boolean, serverExplicitlyWantsToFormatThisFile: Boolean) = file.fileType == ZModelFileType
+ }
+}
diff --git a/packages/ide/jetbrains/src/main/kotlin/dev/zenstack/lsp/ZenStackLspServerSupportProvider.kt b/packages/ide/jetbrains/src/main/kotlin/dev/zenstack/lsp/ZenStackLspServerSupportProvider.kt
new file mode 100644
index 000000000..6fb6d79db
--- /dev/null
+++ b/packages/ide/jetbrains/src/main/kotlin/dev/zenstack/lsp/ZenStackLspServerSupportProvider.kt
@@ -0,0 +1,20 @@
+package dev.zenstack.lsp
+
+import com.intellij.javascript.nodejs.interpreter.NodeJsInterpreterManager
+import com.intellij.javascript.nodejs.interpreter.local.NodeJsLocalInterpreter
+import com.intellij.javascript.nodejs.interpreter.wsl.WslNodeInterpreter
+import com.intellij.openapi.project.Project
+import com.intellij.openapi.vfs.VirtualFile
+import com.intellij.platform.lsp.api.LspServerSupportProvider
+import dev.zenstack.lang.ZModelFileType
+
+class ZenStackLspServerSupportProvider : LspServerSupportProvider {
+ override fun fileOpened(project: Project, file: VirtualFile, serverStarter: LspServerSupportProvider.LspServerStarter) {
+ if (file.fileType != ZModelFileType) return
+
+ val node = NodeJsInterpreterManager.getInstance(project).interpreter
+ if (node !is NodeJsLocalInterpreter && node !is WslNodeInterpreter) return
+
+ serverStarter.ensureServerStarted(ZenStackLspServerDescriptor(project))
+ }
+}
\ No newline at end of file
diff --git a/packages/ide/jetbrains/src/main/kotlin/dev/zenstack/plugin/PluginStateListener.kt b/packages/ide/jetbrains/src/main/kotlin/dev/zenstack/plugin/PluginStateListener.kt
new file mode 100644
index 000000000..984f3f0ba
--- /dev/null
+++ b/packages/ide/jetbrains/src/main/kotlin/dev/zenstack/plugin/PluginStateListener.kt
@@ -0,0 +1,18 @@
+package dev.zenstack.plugin
+
+import com.intellij.ide.plugins.DynamicPluginListener
+import com.intellij.ide.plugins.IdeaPluginDescriptor
+import dev.zenstack.Utils
+import org.jetbrains.plugins.textmate.TextMateService
+
+class PluginStateListener: DynamicPluginListener {
+ override fun beforePluginLoaded(pluginDescriptor: IdeaPluginDescriptor) {
+ // install TextMate bundle
+ Utils.Companion.addTextMateBundle()
+ }
+
+ override fun beforePluginUnload(pluginDescriptor: IdeaPluginDescriptor, isUpdate: Boolean) {
+ // uninstall TextMate bundle
+ Utils.disableTextMateBundle()
+ }
+}
\ No newline at end of file
diff --git a/packages/ide/jetbrains/src/main/resources/META-INF/plugin.xml b/packages/ide/jetbrains/src/main/resources/META-INF/plugin.xml
new file mode 100644
index 000000000..9c5ddb5f8
--- /dev/null
+++ b/packages/ide/jetbrains/src/main/resources/META-INF/plugin.xml
@@ -0,0 +1,67 @@
+
+
+
+ dev.zenstack.zenstack
+
+
+ ZenStack Language Tools
+
+
+ ZenStack
+
+
+ ZenStack is a toolkit that simplifies the development of a web app's backend. This plugin provides code editing experiences for its ZModel schema language.
+
+ Features
+
+
+ - Syntax highlighting
+ - Error highlighting
+ - Go to definition
+ - Code completion
+ - Formatting
+
+ ]]>
+
+
+ com.intellij.modules.ultimate
+ JavaScript
+ org.jetbrains.plugins.textmate
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/ide/jetbrains/src/main/resources/META-INF/pluginIcon.svg b/packages/ide/jetbrains/src/main/resources/META-INF/pluginIcon.svg
new file mode 100644
index 000000000..c70b27f19
--- /dev/null
+++ b/packages/ide/jetbrains/src/main/resources/META-INF/pluginIcon.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/packages/ide/jetbrains/src/main/resources/META-INF/pluginIcon_dark.svg b/packages/ide/jetbrains/src/main/resources/META-INF/pluginIcon_dark.svg
new file mode 100644
index 000000000..6f52be69d
--- /dev/null
+++ b/packages/ide/jetbrains/src/main/resources/META-INF/pluginIcon_dark.svg
@@ -0,0 +1,15 @@
+
+
+
diff --git a/packages/ide/jetbrains/src/main/resources/icons/zmodel.png b/packages/ide/jetbrains/src/main/resources/icons/zmodel.png
new file mode 100644
index 000000000..dab4013a3
Binary files /dev/null and b/packages/ide/jetbrains/src/main/resources/icons/zmodel.png differ
diff --git a/packages/ide/jetbrains/src/main/resources/icons/zmodel_dark.png b/packages/ide/jetbrains/src/main/resources/icons/zmodel_dark.png
new file mode 100644
index 000000000..7b4b2b226
Binary files /dev/null and b/packages/ide/jetbrains/src/main/resources/icons/zmodel_dark.png differ
diff --git a/packages/ide/jetbrains/src/main/textMate/zmodel.tmbundle/info.plist b/packages/ide/jetbrains/src/main/textMate/zmodel.tmbundle/info.plist
new file mode 100644
index 000000000..9abe98fab
--- /dev/null
+++ b/packages/ide/jetbrains/src/main/textMate/zmodel.tmbundle/info.plist
@@ -0,0 +1,16 @@
+
+
+
+
+ contactEmailRot13
+ contact@zenstack.dev
+ contactName
+ ZenStack Team
+ description
+ ZModel Language
+ name
+ zmodel
+ uuid
+ 0EA94AB2-A210-4A58-9A25-CFFF59AC430B
+
+
diff --git a/packages/language/package.json b/packages/language/package.json
index fff1840c2..784000a45 100644
--- a/packages/language/package.json
+++ b/packages/language/package.json
@@ -1,15 +1,15 @@
{
"name": "@zenstackhq/language",
- "version": "1.5.0",
+ "version": "1.6.0",
"displayName": "ZenStack modeling language compiler",
"description": "ZenStack modeling language compiler",
"homepage": "https://zenstack.dev",
"scripts": {
"clean": "rimraf dist",
- "generate": "langium generate",
+ "generate": "langium generate && npx ts-node script/generate-plist.ts",
"watch": "concurrently \"langium generate --watch\" \"tsc --watch\"",
"lint": "eslint src --ext ts",
- "build": "pnpm lint --max-warnings=0 && pnpm clean && pnpm generate && tsc && copyfiles -F ./README.md ./LICENSE ./package.json dist && pnpm pack dist --pack-destination '../../../.build'",
+ "build": "pnpm lint --max-warnings=0 && pnpm clean && pnpm generate && tsc && copyfiles -F ./README.md ./LICENSE ./package.json 'syntaxes/**/*' dist && pnpm pack dist --pack-destination '../../../.build'",
"prepublishOnly": "pnpm build"
},
"publishConfig": {
@@ -19,24 +19,27 @@
"author": "ZenStack Team",
"license": "MIT",
"devDependencies": {
- "langium-cli": "1.2.0"
+ "langium-cli": "1.2.0",
+ "plist2": "^1.1.3"
},
"dependencies": {
- "langium": "1.2.0"
+ "langium": "1.2.0"
},
"contributes": {
- "languages": [
- {
- "id": "zmodel",
- "extensions": [".zmodel"]
- }
- ],
- "grammars": [
- {
- "language": "zmodel",
- "scopeName": "source.zmodel",
- "path": "./syntaxes/zmodel.tmLanguage.json"
- }
- ]
+ "languages": [
+ {
+ "id": "zmodel",
+ "extensions": [
+ ".zmodel"
+ ]
+ }
+ ],
+ "grammars": [
+ {
+ "language": "zmodel",
+ "scopeName": "source.zmodel",
+ "path": "./syntaxes/zmodel.tmLanguage.json"
+ }
+ ]
}
}
diff --git a/packages/language/script/generate-plist.ts b/packages/language/script/generate-plist.ts
new file mode 100644
index 000000000..f987f71ed
--- /dev/null
+++ b/packages/language/script/generate-plist.ts
@@ -0,0 +1,12 @@
+// convert textmate grammar from json to plist with fixes
+
+import { json2plist } from 'plist2';
+import fs from 'fs';
+import path from 'path';
+
+const src = fs.readFileSync(path.resolve(__dirname, '../syntaxes/zmodel.tmLanguage.json'), 'utf-8');
+const json = JSON.parse(src);
+json['fileTypes'] = ['zmodel'];
+
+const plist = json2plist(JSON.stringify(json));
+fs.writeFileSync(path.resolve(__dirname, '../syntaxes/zmodel.tmLanguage'), plist, 'utf-8');
diff --git a/packages/language/syntaxes/zmodel.tmLanguage b/packages/language/syntaxes/zmodel.tmLanguage
new file mode 100644
index 000000000..bacb471c3
--- /dev/null
+++ b/packages/language/syntaxes/zmodel.tmLanguage
@@ -0,0 +1,113 @@
+
+
+
+
+ name
+ zmodel
+ scopeName
+ source.zmodel
+ fileTypes
+
+ zmodel
+
+ patterns
+
+
+ include
+ #comments
+
+
+ name
+ keyword.control.zmodel
+ match
+ \b(Any|Asc|BigInt|Boolean|Bytes|ContextType|DateTime|Decimal|Desc|FieldReference|Float|Int|Json|Null|Object|String|TransitiveFieldReference|Unsupported|abstract|attribute|datasource|enum|extends|false|function|generator|import|in|model|plugin|sort|true|view)\b
+
+
+ name
+ string.quoted.double.zmodel
+ begin
+ "
+ end
+ "
+ patterns
+
+
+ include
+ #string-character-escape
+
+
+
+
+ name
+ string.quoted.single.zmodel
+ begin
+ '
+ end
+ '
+ patterns
+
+
+ include
+ #string-character-escape
+
+
+
+
+ repository
+
+ comments
+
+ patterns
+
+
+ name
+ comment.block.zmodel
+ begin
+ /\*
+ beginCaptures
+
+ 0
+
+ name
+ punctuation.definition.comment.zmodel
+
+
+ end
+ \*/
+ endCaptures
+
+ 0
+
+ name
+ punctuation.definition.comment.zmodel
+
+
+
+
+ begin
+ //
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.whitespace.comment.leading.zmodel
+
+
+ end
+ (?=$)
+ name
+ comment.line.zmodel
+
+
+
+ string-character-escape
+
+ name
+ constant.character.escape.zmodel
+ match
+ \\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|u\{[0-9A-Fa-f]+\}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)
+
+
+
+
\ No newline at end of file
diff --git a/packages/misc/redwood/LICENSE b/packages/misc/redwood/LICENSE
new file mode 120000
index 000000000..5853aaea5
--- /dev/null
+++ b/packages/misc/redwood/LICENSE
@@ -0,0 +1 @@
+../../../LICENSE
\ No newline at end of file
diff --git a/packages/misc/redwood/README.md b/packages/misc/redwood/README.md
new file mode 100644
index 000000000..7c4742dc4
--- /dev/null
+++ b/packages/misc/redwood/README.md
@@ -0,0 +1,97 @@
+# ZenStack RedwoodJS Integration
+
+This package provides the CLI and runtime APIs for integrating [ZenStack](https://zenstack.dev) into a [RedwoodJS](https://redwoodjs.com/) project. You can use ZenStack as a drop-in replacement to Prisma and define flexible access control policies declaratively inside the database schema. It's especially useful for building multi-tenant applications which tend to have complex authorization requirements beyond RBAC.
+
+ZenStack is a full-stack toolkit built above Prisma ORM. It extends Prisma at the schema and the runtime level for adding the following capabilities:
+
+- Flexible access control
+- Data validation rules
+- Multi-file schemas
+- Custom attributes and functions in schemas
+
+You can find a more detailed integration guide [here](https://zenstack.dev/docs/guides/redwood).
+
+### Setting up
+
+Run the following package setup command:
+
+```bash
+yarn rw setup package @zenstackhq/redwood
+```
+
+The setup command will:
+
+1. Update "redwood.toml" to allow ZenStack CLI plugin.
+1. Install ZenStack dependencies.
+1. Copy your Prisma schema file "api/db/schema.prisma" to "api/db/schema.zmodel".
+1. Add a "zenstack" section into "api/package.json" to specify the location 1f both the "schema.prisma" and "schema.zmodel" files.
+1. Install a GraphQLYoga plugin in "api/src/functions/graphql.[ts|js]".
+1. Eject service templates and modify the templates to use `context.db` (ZenStack-enhanced `PrismaClient`) instead of `db` for data access.
+
+### Modeling data and access policies
+
+ZenStack's ZModel language is a superset of Prisma schema language. You should use it to define both the data schema and access policies. [The Complete Guide](https://zenstack.dev/docs/the-complete-guide/part1/) of ZenStack is the best way to learn how to author ZModel schemas.
+
+You should run the following command after updating "schema.zmodel":
+
+```bash
+yarn rw @zenstackhq generate
+```
+
+The command does the following things:
+
+1. Regenerate "schema.prisma"
+2. Run `prisma generate` to regenerate PrismaClient
+3. Generates supporting JS modules for enforcing access policies at runtime
+
+
+
+### Development workflow
+
+The workflow of using ZenStack is very similar to using Prisma in RedwoodJS projects. The two main differences are:
+
+1. Generation
+
+ You should run `yarn rw @zenstackhq generate` in place of `yarn rw prisma generate`. The ZenStack's generate command internally regenerates the Prisma schema from the ZModel schema, runs `prisma generate` automatically, and also generates other modules for supporting access policy enforcement at the runtime.
+
+2. Database access in services
+
+ In your service code, you should use `context.db` instead of `db` for accessing the database. The `context.db` is an enhanced Prisma client that enforces access policies.
+
+ The "setup" command prepared a customized service code template. When you run `yarn rw g service`, the generated code will already use `context.db`.
+
+Other Prisma-related workflows like generation migration or pushing schema to the database stay unchanged.
+
+### Deployment
+
+You should run the "generate" command in your deployment script before `yarn rw deploy`. For example, to deploy to Vercel, the command can be:
+
+```bash
+yarn rw @zenstackhq generate && yarn rw deploy vercel
+```
+
+### Using the `@zenstackhq` CLI plugin
+
+The `@zenstackhq/redwood` package registers a set of custom commands to the RedwoodJS CLI under the `@zenstackhq` namespace. You can run it with:
+
+```bash
+yarn rw @zenstackhq [options]
+```
+
+The plugin is a simple wrapper of the standard `zenstack` CLI, similar to how RedwoodJS wraps the standard `prisma` CLI. It's equivalent to running `npx zenstack ...` inside the "api" directory.
+
+See the [CLI references](https://zenstack.dev/docs/reference/cli) for the full list of commands.
+
+### Sample application
+
+You can find a complete multi-tenant Todo application built with RedwoodJS and ZenStack at: [https://github.com/zenstackhq/sample-todo-redwood](https://github.com/zenstackhq/sample-todo-redwood).
+
+### Getting help
+
+The best way to get help and updates about ZenStack is by joining our [Discord server](https://discord.gg/Ykhr738dUe).
diff --git a/packages/misc/redwood/bin/cli b/packages/misc/redwood/bin/cli
new file mode 100755
index 000000000..ef22870e9
--- /dev/null
+++ b/packages/misc/redwood/bin/cli
@@ -0,0 +1,3 @@
+#!/usr/bin/env node
+
+require('../dist/setup-package').default();
diff --git a/packages/misc/redwood/package.json b/packages/misc/redwood/package.json
new file mode 100644
index 000000000..fd4d3c63a
--- /dev/null
+++ b/packages/misc/redwood/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "@zenstackhq/redwood",
+ "displayName": "ZenStack RedwoodJS Integration",
+ "version": "1.6.0",
+ "description": "CLI and runtime for integrating ZenStack with RedwoodJS projects.",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/zenstackhq/zenstack"
+ },
+ "scripts": {
+ "clean": "rimraf dist",
+ "build": "pnpm lint --max-warnings=0 && pnpm clean && tsc",
+ "watch": "tsc --watch",
+ "lint": "eslint src --ext ts",
+ "prepublishOnly": "pnpm build"
+ },
+ "main": "./dist/index.js",
+ "types": "./dist/index.d.ts",
+ "exports": {
+ ".": {
+ "default": "./dist/index.js",
+ "types": "./dist/index.d.ts"
+ },
+ "./graphql": {
+ "default": "./dist/graphql.js",
+ "types": "./dist/graphql.d.ts"
+ },
+ "./package.json": {
+ "default": "./package.json"
+ }
+ },
+ "bin": "bin/cli",
+ "engines": {
+ "redwoodjs": ">=6.0.0"
+ },
+ "author": {
+ "name": "ZenStack Team"
+ },
+ "homepage": "https://zenstack.dev",
+ "license": "MIT",
+ "dependencies": {
+ "@zenstackhq/runtime": "workspace:*",
+ "colors": "1.4.0",
+ "ts-morph": "^16.0.0",
+ "@redwoodjs/cli-helpers": "^6.6.0",
+ "execa": "^5.0.0",
+ "listr2": "^6.0.0",
+ "terminal-link": "^2.0.0",
+ "yargs": "^17.7.2"
+ },
+ "devDependencies": {
+ "@redwoodjs/graphql-server": "^6.6.0",
+ "@types/yargs": "^17.0.32",
+ "graphql-yoga": "^5.0.2"
+ }
+}
diff --git a/packages/misc/redwood/src/cli-passthrough.ts b/packages/misc/redwood/src/cli-passthrough.ts
new file mode 100644
index 000000000..367b5f06f
--- /dev/null
+++ b/packages/misc/redwood/src/cli-passthrough.ts
@@ -0,0 +1,49 @@
+import { getPaths } from '@redwoodjs/cli-helpers';
+import colors from 'colors';
+import execa from 'execa';
+import { CommandModule } from 'yargs';
+
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+async function runCommand(command: string, options: any) {
+ const args = ['zenstack', command];
+ for (const [name, value] of Object.entries(options)) {
+ args.push(name.length > 1 ? `--${name}` : `-${name}`);
+ if (typeof value === 'string') {
+ // Make sure options that take multiple quoted words
+ // are passed to zenstack with quotes.
+ value.split(' ').length > 1 ? args.push(`"${value}"`) : args.push(value);
+ }
+ }
+
+ console.log();
+ console.log(colors.green('Running ZenStack CLI...'));
+ console.log(colors.underline('$ npx ' + args.join(' ')));
+ console.log();
+
+ try {
+ await execa('npx', args, { cwd: getPaths().api.base, shell: true, stdio: 'inherit', cleanup: true });
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ } catch (e: any) {
+ process.exit(e?.exitCode || 1);
+ }
+}
+
+/**
+ * Creates a yargs command that passes all options to the ZenStack CLI command.
+ */
+export function makePassthroughCommand(command: string): CommandModule {
+ return {
+ command,
+ describe: `Run \`zenstack ${command} ...\``,
+ builder: (yargs) => {
+ return yargs
+ .strictOptions(false)
+ .strictCommands(false)
+ .strict(false)
+ .parserConfiguration({ 'camel-case-expansion': false, 'boolean-negation': false });
+ },
+ handler: async ({ _, $0: _$0, ...options }) => {
+ await runCommand(command, options);
+ },
+ };
+}
diff --git a/packages/misc/redwood/src/commands/setup.ts b/packages/misc/redwood/src/commands/setup.ts
new file mode 100644
index 000000000..b8f9f16f0
--- /dev/null
+++ b/packages/misc/redwood/src/commands/setup.ts
@@ -0,0 +1,262 @@
+import { getPaths, updateTomlConfig } from '@redwoodjs/cli-helpers';
+import colors from 'colors';
+import execa from 'execa';
+import fs from 'fs';
+import { Listr, ListrTask } from 'listr2';
+import path from 'path';
+import terminalLink from 'terminal-link';
+import { Project, SyntaxKind, type PropertyAssignment } from 'ts-morph';
+import type { CommandModule } from 'yargs';
+import { addApiPackages } from '../utils';
+
+function updateToml() {
+ return {
+ title: 'Updating redwood.toml...',
+ task: () => {
+ updateTomlConfig('@zenstackhq/redwood');
+ },
+ };
+}
+
+function installDependencies() {
+ return addApiPackages([
+ { pkg: 'zenstack', dev: true },
+ { pkg: '@zenstackhq/runtime' },
+ { pkg: '@zenstackhq/redwood' },
+ ]);
+}
+
+// copy schema.prisma to schema.zmodel, and update package.json
+function bootstrapSchema() {
+ return {
+ title: 'Bootstrapping ZModel schema...',
+ task: () => {
+ const apiPaths = getPaths().api;
+ const zmodel = path.join(path.dirname(apiPaths.dbSchema), 'schema.zmodel');
+ if (!fs.existsSync(zmodel)) {
+ fs.cpSync(apiPaths.dbSchema, zmodel);
+ } else {
+ console.info(
+ colors.blue(`Schema file "${path.relative(getPaths().base, zmodel)}" already exists. Skipping.`)
+ );
+ }
+
+ const pkgJson = path.join(apiPaths.base, 'package.json');
+ if (fs.existsSync(pkgJson)) {
+ const content = fs.readFileSync(pkgJson, 'utf-8');
+ const pkg = JSON.parse(content);
+ if (!pkg.zenstack) {
+ pkg.zenstack = {
+ schema: path.relative(apiPaths.base, zmodel),
+ prisma: path.relative(apiPaths.base, apiPaths.dbSchema),
+ };
+ fs.writeFileSync(pkgJson, JSON.stringify(pkg, null, 4));
+ }
+ }
+ },
+ };
+}
+
+// install ZenStack GraphQLYoga plugin
+function installGraphQLPlugin() {
+ return {
+ title: 'Installing GraphQL plugin...',
+ task: async () => {
+ // locate "api/functions/graphql.[js|ts]"
+ let graphQlSourcePath: string | undefined;
+ const functionsDir = getPaths().api.functions;
+ if (fs.existsSync(path.join(functionsDir, 'graphql.ts'))) {
+ graphQlSourcePath = path.join(functionsDir, 'graphql.ts');
+ } else if (fs.existsSync(path.join(functionsDir, 'graphql.js'))) {
+ graphQlSourcePath = path.join(functionsDir, 'graphql.js');
+ }
+
+ if (!graphQlSourcePath) {
+ console.warn(
+ colors.yellow(`Unable to find handler source file: ${path.join(functionsDir, 'graphql.(js|ts)')}`)
+ );
+ return;
+ }
+
+ // add import
+ const project = new Project();
+ const graphQlSourceFile = project.addSourceFileAtPathIfExists(graphQlSourcePath)!;
+ let graphQlSourceFileChanged = false;
+ let identified = false;
+
+ const imports = graphQlSourceFile.getImportDeclarations();
+ if (!imports.some((i) => i.getModuleSpecifierValue() === '@zenstackhq/redwood')) {
+ graphQlSourceFile.addImportDeclaration({
+ moduleSpecifier: '@zenstackhq/redwood',
+ namedImports: ['useZenStack'],
+ });
+ graphQlSourceFileChanged = true;
+ }
+
+ // add "extraPlugins" option to `createGraphQLHandler` call
+ graphQlSourceFile.getDescendantsOfKind(SyntaxKind.CallExpression).forEach((expr) => {
+ if (identified) {
+ return;
+ }
+
+ if (expr.getExpression().asKind(SyntaxKind.Identifier)?.getText() === 'createGraphQLHandler') {
+ const arg = expr.getArguments()[0]?.asKind(SyntaxKind.ObjectLiteralExpression);
+ if (arg) {
+ identified = true;
+ const props = arg.getProperties();
+ const pluginsProp = props.find(
+ (p): p is PropertyAssignment =>
+ p.asKind(SyntaxKind.PropertyAssignment)?.getName() === 'extraPlugins'
+ );
+ if (pluginsProp) {
+ const pluginArr = pluginsProp.getInitializerIfKind(SyntaxKind.ArrayLiteralExpression);
+ if (pluginArr) {
+ if (!pluginArr.getElements().some((e) => e.getText().includes('useZenStack'))) {
+ pluginArr.addElement('useZenStack(db)');
+ graphQlSourceFileChanged = true;
+ }
+ }
+ } else {
+ arg.addPropertyAssignment({
+ name: 'extraPlugins',
+ initializer: '[useZenStack(db)]',
+ });
+ graphQlSourceFileChanged = true;
+ }
+ }
+ }
+ });
+
+ if (!identified) {
+ console.warn(
+ colors.yellow(
+ 'Unable to determine how to install ZenStack GraphQL plugin. Please add it manually following https://zenstack.dev/docs/guides/redwood.'
+ )
+ );
+ }
+
+ if (graphQlSourceFileChanged) {
+ graphQlSourceFile.formatText();
+ }
+
+ // create type-def file to add `db` into global context
+ let contextTypeDefCreated = false;
+ if (graphQlSourcePath.endsWith('.ts')) {
+ const typeDefPath = path.join(getPaths().api.src, 'zenstack.d.ts');
+ if (!fs.existsSync(typeDefPath)) {
+ const typeDefSourceFile = project.createSourceFile(
+ typeDefPath,
+ `import type { PrismaClient } from '@prisma/client'
+
+declare module '@redwoodjs/graphql-server' {
+ interface GlobalContext {
+ db: PrismaClient
+ }
+}
+`
+ );
+ typeDefSourceFile.formatText();
+ contextTypeDefCreated = true;
+ }
+ }
+
+ if (graphQlSourceFileChanged || contextTypeDefCreated) {
+ await project.save();
+ }
+ },
+ };
+}
+
+// eject templates used for `yarn rw generate service`
+function ejectServiceTemplates() {
+ return {
+ title: 'Ejecting service templates...',
+ task: async () => {
+ if (fs.existsSync(path.join(getPaths().api.base, 'generators', 'service'))) {
+ console.info(colors.blue('Service templates already ejected. Skipping.'));
+ return;
+ }
+
+ await execa('yarn', ['rw', 'setup', 'generator', 'service'], { cwd: getPaths().api.base });
+ const serviceTemplateTsFile = path.join(
+ getPaths().api.base,
+ 'generators',
+ 'service',
+ 'service.ts.template'
+ );
+ const serviceTemplateJsFile = path.join(
+ getPaths().api.base,
+ 'generators',
+ 'service',
+ 'service.js.template'
+ );
+ const serviceTemplateFile = fs.existsSync(serviceTemplateTsFile)
+ ? serviceTemplateTsFile
+ : fs.existsSync(serviceTemplateJsFile)
+ ? serviceTemplateJsFile
+ : undefined;
+
+ if (!serviceTemplateFile) {
+ console.warn(colors.red('Unable to find the ejected service template file.'));
+ return;
+ }
+
+ // replace `db.` with `context.db.`
+ const templateContent = fs.readFileSync(serviceTemplateFile, 'utf-8');
+ const newTemplateContent = templateContent
+ .replace(/^import { db } from.*\n$/gm, '')
+ .replace(/return db\./g, 'return context.db.');
+ fs.writeFileSync(serviceTemplateFile, newTemplateContent);
+ },
+ };
+}
+
+function whatsNext() {
+ const zmodel = path.relative(getPaths().base, path.join(path.dirname(getPaths().api.dbSchema), 'schema.zmodel'));
+ const task: ListrTask = {
+ title: `What's next...`,
+ task: (_ctx, task) => {
+ task.title =
+ `What's next...\n\n` +
+ ` - Install ${terminalLink('IDE extensions', 'https://zenstack.dev/docs/guides/ide')}.\n` +
+ ` - Use "${zmodel}" to model database schema and access control.\n` +
+ ` - Run \`yarn rw @zenstackhq generate\` to regenerate Prisma schema and client.\n` +
+ ` - Learn ${terminalLink(
+ "how ZenStack extends Prisma's power",
+ 'https://zenstack.dev/docs/the-complete-guide/part1'
+ )}.\n` +
+ ` - Create a sample schema with \`yarn rw @zenstackhq sample\`.\n` +
+ ` - Join ${terminalLink(
+ 'Discord community',
+ 'https://discord.gg/Ykhr738dUe'
+ )} for questions and updates.\n`;
+ },
+ };
+ return task;
+}
+
+const setupCommand: CommandModule = {
+ command: 'setup',
+ describe: 'Set up ZenStack environment',
+ builder: (yargs) => yargs,
+ handler: async () => {
+ const tasks = new Listr([
+ updateToml(),
+ installDependencies(),
+ bootstrapSchema(),
+ installGraphQLPlugin(),
+ ejectServiceTemplates(),
+ whatsNext(),
+ ]);
+
+ try {
+ await tasks.run();
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ } catch (e: any) {
+ console.error(colors.red(e.message));
+ process.exit(e?.exitCode || 1);
+ }
+ },
+};
+
+export default setupCommand;
diff --git a/packages/misc/redwood/src/graphql.ts b/packages/misc/redwood/src/graphql.ts
new file mode 100644
index 000000000..69267b5e2
--- /dev/null
+++ b/packages/misc/redwood/src/graphql.ts
@@ -0,0 +1,61 @@
+import { ForbiddenError } from '@redwoodjs/graphql-server';
+import {
+ CrudFailureReason,
+ EnhancementOptions,
+ PrismaErrorCode,
+ ValidationError,
+ enhance,
+ isPrismaClientKnownRequestError,
+ type AuthUser,
+} from '@zenstackhq/runtime';
+import { type Plugin } from 'graphql-yoga';
+
+/**
+ * Plugin options
+ */
+export type ZenStackPluginOptions = EnhancementOptions;
+
+/**
+ * A GraphQLYoga plugin that adds a ZenStack-enhanced PrismaClient into the context
+ * as `context.db`.
+ * @param db The original PrismaClient.
+ * @param getAuthUser A hook function for getting the current user. By default `context.currentUser` is used.
+ * @param options Options for creating the enhanced PrismaClient. See https://zenstack.dev/docs/reference/runtime-api#enhance for more details.
+ * @returns
+ */
+export function useZenStack(
+ db: PrismaClient,
+ getAuthUser?: (currentUser: unknown) => Promise,
+ options?: ZenStackPluginOptions
+): Plugin<{ currentUser: unknown; db: PrismaClient }> {
+ return {
+ onContextBuilding: () => {
+ return async ({ context }) => {
+ const user = getAuthUser ? await getAuthUser(context.currentUser) : (context.currentUser as AuthUser);
+ context.db = enhance(
+ db,
+ { user },
+ {
+ errorTransformer: transformError,
+ ...options,
+ }
+ );
+ };
+ },
+ };
+}
+
+// Transforms ZenStack errors into appropriate RedwoodJS errors
+function transformError(error: unknown) {
+ if (isPrismaClientKnownRequestError(error) && error.code === PrismaErrorCode.CONSTRAINED_FAILED) {
+ if (
+ error.meta?.reason === CrudFailureReason.ACCESS_POLICY_VIOLATION ||
+ error.meta?.reason === CrudFailureReason.RESULT_NOT_READABLE
+ ) {
+ return new ForbiddenError(error.message);
+ } else if (error.meta?.reason === CrudFailureReason.DATA_VALIDATION_VIOLATION) {
+ return new ValidationError(error.message);
+ }
+ }
+ return error;
+}
diff --git a/packages/misc/redwood/src/index.ts b/packages/misc/redwood/src/index.ts
new file mode 100644
index 000000000..67585bb3f
--- /dev/null
+++ b/packages/misc/redwood/src/index.ts
@@ -0,0 +1,11 @@
+import { makePassthroughCommand } from './cli-passthrough';
+import setup from './commands/setup';
+
+export const commands = [
+ setup,
+ makePassthroughCommand('generate'),
+ makePassthroughCommand('info'),
+ makePassthroughCommand('format'),
+ makePassthroughCommand('repl'),
+];
+export * from './graphql';
diff --git a/packages/misc/redwood/src/setup-package.ts b/packages/misc/redwood/src/setup-package.ts
new file mode 100644
index 000000000..8d916ac3a
--- /dev/null
+++ b/packages/misc/redwood/src/setup-package.ts
@@ -0,0 +1,11 @@
+import yargs from 'yargs';
+import { hideBin } from 'yargs/helpers';
+import setupCommand from './commands/setup';
+
+export default async function setupPackage() {
+ await yargs(hideBin(process.argv))
+ .scriptName('zenstack-setup')
+ // @ts-expect-error yargs types are wrong
+ .command('$0', 'set up ZenStack', setupCommand.builder, setupCommand.handler)
+ .parseAsync();
+}
diff --git a/packages/misc/redwood/src/utils.ts b/packages/misc/redwood/src/utils.ts
new file mode 100644
index 000000000..dbf8a1a04
--- /dev/null
+++ b/packages/misc/redwood/src/utils.ts
@@ -0,0 +1,20 @@
+import { getPaths } from '@redwoodjs/cli-helpers';
+import execa from 'execa';
+
+/**
+ * Utility for adding npm dependencies to "api" package
+ */
+export const addApiPackages = (apiPackages: { pkg: string; dev?: boolean }[]) => ({
+ title: 'Adding required api packages...',
+ task: async () => {
+ const devPkgs = apiPackages.filter((p) => p.dev).map((p) => p.pkg);
+ if (devPkgs.length > 0) {
+ await execa('yarn', ['add', '-D', ...devPkgs], { cwd: getPaths().api.base });
+ }
+
+ const runtimePkgs = apiPackages.filter((p) => !p.dev).map((p) => p.pkg);
+ if (runtimePkgs.length > 0) {
+ await execa('yarn', ['add', ...runtimePkgs], { cwd: getPaths().api.base });
+ }
+ },
+});
diff --git a/packages/misc/redwood/tsconfig.json b/packages/misc/redwood/tsconfig.json
new file mode 100644
index 000000000..a11845a55
--- /dev/null
+++ b/packages/misc/redwood/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "extends": "../../../tsconfig.base.json",
+ "compilerOptions": {
+ "lib": ["ESNext"],
+ "outDir": "dist"
+ },
+ "include": ["src/**/*.ts"]
+}
diff --git a/packages/plugins/openapi/package.json b/packages/plugins/openapi/package.json
index 00267ae73..f576acc09 100644
--- a/packages/plugins/openapi/package.json
+++ b/packages/plugins/openapi/package.json
@@ -1,7 +1,7 @@
{
"name": "@zenstackhq/openapi",
"displayName": "ZenStack Plugin and Runtime for OpenAPI",
- "version": "1.5.0",
+ "version": "1.6.0",
"description": "ZenStack plugin and runtime supporting OpenAPI",
"main": "index.js",
"repository": {
@@ -32,7 +32,9 @@
"change-case": "^4.1.2",
"lower-case-first": "^2.0.2",
"openapi-types": "^12.1.0",
+ "semver": "^7.3.8",
"tiny-invariant": "^1.3.1",
+ "ts-pattern": "^4.3.0",
"upper-case-first": "^2.0.2",
"yaml": "^2.2.1",
"zod": "^3.22.4",
@@ -41,6 +43,7 @@
"devDependencies": {
"@readme/openapi-parser": "^2.4.0",
"@types/pluralize": "^0.0.29",
+ "@types/semver": "^7.3.13",
"@types/tmp": "^0.2.3",
"@zenstackhq/testtools": "workspace:*",
"pluralize": "^8.0.0",
diff --git a/packages/plugins/openapi/src/generator-base.ts b/packages/plugins/openapi/src/generator-base.ts
index 5f3e5d933..d00c081fc 100644
--- a/packages/plugins/openapi/src/generator-base.ts
+++ b/packages/plugins/openapi/src/generator-base.ts
@@ -4,8 +4,11 @@ import { Model } from '@zenstackhq/sdk/ast';
import type { OpenAPIV3_1 as OAPI } from 'openapi-types';
import { fromZodError } from 'zod-validation-error';
import { SecuritySchemesSchema } from './schema';
+import semver from 'semver';
export abstract class OpenAPIGeneratorBase {
+ protected readonly DEFAULT_SPEC_VERSION = '3.1.0';
+
constructor(protected model: Model, protected options: PluginOptions, protected dmmf: DMMF.Document) {}
abstract generate(): string[];
@@ -25,6 +28,43 @@ export abstract class OpenAPIGeneratorBase {
}
}
+ protected wrapNullable(
+ schema: OAPI.ReferenceObject | OAPI.SchemaObject,
+ isNullable: boolean
+ ): OAPI.ReferenceObject | OAPI.SchemaObject {
+ if (!isNullable) {
+ return schema;
+ }
+
+ const specVersion = this.getOption('specVersion', this.DEFAULT_SPEC_VERSION);
+
+ // https://stackoverflow.com/questions/48111459/how-to-define-a-property-that-can-be-string-or-null-in-openapi-swagger
+ // https://stackoverflow.com/questions/40920441/how-to-specify-a-property-can-be-null-or-a-reference-with-swagger
+ if (semver.gte(specVersion, '3.1.0')) {
+ // OAPI 3.1.0 and above has native 'null' type
+ if ((schema as OAPI.BaseSchemaObject).oneOf) {
+ // merge into existing 'oneOf'
+ return { oneOf: [...(schema as OAPI.BaseSchemaObject).oneOf!, { type: 'null' }] };
+ } else {
+ // wrap into a 'oneOf'
+ return { oneOf: [{ type: 'null' }, schema] };
+ }
+ } else {
+ if ((schema as OAPI.ReferenceObject).$ref) {
+ // nullable $ref needs to be represented as: { allOf: [{ $ref: ... }], nullable: true }
+ return {
+ allOf: [schema],
+ nullable: true,
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ } as any;
+ } else {
+ // nullable scalar: { type: ..., nullable: true }
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ return { ...schema, nullable: true } as any;
+ }
+ }
+ }
+
protected array(itemType: OAPI.SchemaObject | OAPI.ReferenceObject) {
return { type: 'array', items: itemType } as const;
}
diff --git a/packages/plugins/openapi/src/rest-generator.ts b/packages/plugins/openapi/src/rest-generator.ts
index 70b2dd18a..9dceeec3e 100644
--- a/packages/plugins/openapi/src/rest-generator.ts
+++ b/packages/plugins/openapi/src/rest-generator.ts
@@ -12,12 +12,13 @@ import {
resolvePath,
} from '@zenstackhq/sdk';
import { DataModel, DataModelField, DataModelFieldType, Enum, isDataModel, isEnum } from '@zenstackhq/sdk/ast';
-import * as fs from 'fs';
+import fs from 'fs';
import { lowerCaseFirst } from 'lower-case-first';
import type { OpenAPIV3_1 as OAPI } from 'openapi-types';
-import * as path from 'path';
+import path from 'path';
import pluralize from 'pluralize';
import invariant from 'tiny-invariant';
+import { P, match } from 'ts-pattern';
import YAML from 'yaml';
import { name } from '.';
import { OpenAPIGeneratorBase } from './generator-base';
@@ -49,7 +50,7 @@ export class RESTfulOpenAPIGenerator extends OpenAPIGeneratorBase {
}
const openapi: OAPI.Document = {
- openapi: this.getOption('specVersion', '3.1.0'),
+ openapi: this.getOption('specVersion', this.DEFAULT_SPEC_VERSION),
info: {
title: this.getOption('title', 'ZenStack Generated API'),
version: this.getOption('version', '1.0.0'),
@@ -483,9 +484,8 @@ export class RESTfulOpenAPIGenerator extends OpenAPIGeneratorBase {
schema = this.fieldTypeToOpenAPISchema(field.type);
}
}
- if (array) {
- schema = { type: 'array', items: schema };
- }
+
+ schema = this.wrapArray(schema, array);
return {
name: name === 'id' ? 'filter[id]' : `filter[${field.name}${name}]`,
@@ -576,10 +576,10 @@ export class RESTfulOpenAPIGenerator extends OpenAPIGeneratorBase {
description: 'Pagination information',
required: ['first', 'last', 'prev', 'next'],
properties: {
- first: this.nullable({ type: 'string', description: 'Link to the first page' }),
- last: this.nullable({ type: 'string', description: 'Link to the last page' }),
- prev: this.nullable({ type: 'string', description: 'Link to the previous page' }),
- next: this.nullable({ type: 'string', description: 'Link to the next page' }),
+ first: this.wrapNullable({ type: 'string', description: 'Link to the first page' }, true),
+ last: this.wrapNullable({ type: 'string', description: 'Link to the last page' }, true),
+ prev: this.wrapNullable({ type: 'string', description: 'Link to the previous page' }, true),
+ next: this.wrapNullable({ type: 'string', description: 'Link to the next page' }, true),
},
},
_errors: {
@@ -634,7 +634,7 @@ export class RESTfulOpenAPIGenerator extends OpenAPIGeneratorBase {
type: 'object',
description: 'A to-one relationship',
properties: {
- data: this.nullable(this.ref('_resourceIdentifier')),
+ data: this.wrapNullable(this.ref('_resourceIdentifier'), true),
},
},
_toOneRelationshipWithLinks: {
@@ -643,7 +643,7 @@ export class RESTfulOpenAPIGenerator extends OpenAPIGeneratorBase {
description: 'A to-one relationship with links',
properties: {
links: this.ref('_relationLinks'),
- data: this.nullable(this.ref('_resourceIdentifier')),
+ data: this.wrapNullable(this.ref('_resourceIdentifier'), true),
},
},
_toManyRelationship: {
@@ -680,13 +680,16 @@ export class RESTfulOpenAPIGenerator extends OpenAPIGeneratorBase {
},
_toOneRelationshipRequest: {
description: 'Input for manipulating a to-one relationship',
- ...this.nullable({
- type: 'object',
- required: ['data'],
- properties: {
- data: this.ref('_resourceIdentifier'),
+ ...this.wrapNullable(
+ {
+ type: 'object',
+ required: ['data'],
+ properties: {
+ data: this.ref('_resourceIdentifier'),
+ },
},
- }),
+ true
+ ),
},
_toManyRelationshipResponse: {
description: 'Response for a to-many relationship',
@@ -841,7 +844,7 @@ export class RESTfulOpenAPIGenerator extends OpenAPIGeneratorBase {
const fields = model.fields.filter((f) => !isIdField(f));
const attributes: Record = {};
- const relationships: Record = {};
+ const relationships: Record = {};
const required: string[] = [];
@@ -853,7 +856,7 @@ export class RESTfulOpenAPIGenerator extends OpenAPIGeneratorBase {
} else {
relType = field.type.array ? '_toManyRelationshipWithLinks' : '_toOneRelationshipWithLinks';
}
- relationships[field.name] = this.ref(relType);
+ relationships[field.name] = this.wrapNullable(this.ref(relType), field.type.optional);
} else {
attributes[field.name] = this.generateField(field);
if (
@@ -911,48 +914,33 @@ export class RESTfulOpenAPIGenerator extends OpenAPIGeneratorBase {
}
private generateField(field: DataModelField) {
- return this.wrapArray(this.fieldTypeToOpenAPISchema(field.type), field.type.array);
- }
-
- private get specVersion() {
- return this.getOption('specVersion', '3.0.0');
+ return this.wrapArray(
+ this.wrapNullable(this.fieldTypeToOpenAPISchema(field.type), field.type.optional),
+ field.type.array
+ );
}
private fieldTypeToOpenAPISchema(type: DataModelFieldType): OAPI.ReferenceObject | OAPI.SchemaObject {
- switch (type.type) {
- case 'String':
- return { type: 'string' };
- case 'Int':
- case 'BigInt':
- return { type: 'integer' };
- case 'Float':
- return { type: 'number' };
- case 'Decimal':
- return this.oneOf({ type: 'number' }, { type: 'string' });
- case 'Boolean':
- return { type: 'boolean' };
- case 'DateTime':
- return { type: 'string', format: 'date-time' };
- case 'Bytes':
- return { type: 'string', format: 'byte', description: 'Base64 encoded byte array' };
- case 'Json':
- return {};
- default: {
+ return match(type.type)
+ .with('String', () => ({ type: 'string' }))
+ .with(P.union('Int', 'BigInt'), () => ({ type: 'integer' }))
+ .with('Float', () => ({ type: 'number' }))
+ .with('Decimal', () => this.oneOf({ type: 'number' }, { type: 'string' }))
+ .with('Boolean', () => ({ type: 'boolean' }))
+ .with('DateTime', () => ({ type: 'string', format: 'date-time' }))
+ .with('Bytes', () => ({ type: 'string', format: 'byte', description: 'Base64 encoded byte array' }))
+ .with('Json', () => ({}))
+ .otherwise((t) => {
const fieldDecl = type.reference?.ref;
- invariant(fieldDecl);
+ invariant(fieldDecl, `Type ${t} is not a model reference`);
return this.ref(fieldDecl?.name);
- }
- }
+ });
}
private ref(type: string) {
return { $ref: `#/components/schemas/${type}` };
}
- private nullable(schema: OAPI.SchemaObject | OAPI.ReferenceObject) {
- return this.specVersion === '3.0.0' ? { ...schema, nullable: true } : this.oneOf(schema, { type: 'null' });
- }
-
private parameter(type: string) {
return { $ref: `#/components/parameters/${type}` };
}
diff --git a/packages/plugins/openapi/src/rpc-generator.ts b/packages/plugins/openapi/src/rpc-generator.ts
index 207dd66bf..13bb91272 100644
--- a/packages/plugins/openapi/src/rpc-generator.ts
+++ b/packages/plugins/openapi/src/rpc-generator.ts
@@ -16,6 +16,7 @@ import { lowerCaseFirst } from 'lower-case-first';
import type { OpenAPIV3_1 as OAPI } from 'openapi-types';
import * as path from 'path';
import invariant from 'tiny-invariant';
+import { match, P } from 'ts-pattern';
import { upperCaseFirst } from 'upper-case-first';
import YAML from 'yaml';
import { name } from '.';
@@ -62,7 +63,7 @@ export class RPCOpenAPIGenerator extends OpenAPIGeneratorBase {
this.pruneComponents(paths, components);
const openapi: OAPI.Document = {
- openapi: this.getOption('specVersion', '3.1.0'),
+ openapi: this.getOption('specVersion', this.DEFAULT_SPEC_VERSION),
info: {
title: this.getOption('title', 'ZenStack Generated API'),
version: this.getOption('version', '1.0.0'),
@@ -710,14 +711,14 @@ export class RPCOpenAPIGenerator extends OpenAPIGeneratorBase {
return result;
}
- private generateField(def: { kind: DMMF.FieldKind; type: string; isList: boolean }) {
+ private generateField(def: { kind: DMMF.FieldKind; type: string; isList: boolean; isRequired: boolean }) {
switch (def.kind) {
case 'scalar':
- return this.wrapArray(this.prismaTypeToOpenAPIType(def.type), def.isList);
+ return this.wrapArray(this.prismaTypeToOpenAPIType(def.type, !def.isRequired), def.isList);
case 'enum':
case 'object':
- return this.wrapArray(this.ref(def.type, false), def.isList);
+ return this.wrapArray(this.wrapNullable(this.ref(def.type, false), !def.isRequired), def.isList);
default:
throw new PluginError(this.options.name, `Unsupported field kind: ${def.kind}`);
@@ -735,9 +736,18 @@ export class RPCOpenAPIGenerator extends OpenAPIGeneratorBase {
f.location !== 'fieldRefTypes'
)
.map((f) => {
- return this.wrapArray(this.prismaTypeToOpenAPIType(f.type), f.isList);
+ return this.wrapArray(this.prismaTypeToOpenAPIType(f.type, false), f.isList);
});
- properties[field.name] = options.length > 1 ? { oneOf: options } : options[0];
+
+ let prop = options.length > 1 ? { oneOf: options } : options[0];
+
+ // if types include 'Null', make it nullable
+ prop = this.wrapNullable(
+ prop,
+ field.inputTypes.some((f) => f.type === 'Null')
+ );
+
+ properties[field.name] = prop;
}
const result: OAPI.SchemaObject = { type: 'object', properties };
@@ -752,11 +762,12 @@ export class RPCOpenAPIGenerator extends OpenAPIGeneratorBase {
switch (field.outputType.location) {
case 'scalar':
case 'enumTypes':
- outputType = this.prismaTypeToOpenAPIType(field.outputType.type);
+ outputType = this.prismaTypeToOpenAPIType(field.outputType.type, !!field.isNullable);
break;
case 'outputObjectTypes':
outputType = this.prismaTypeToOpenAPIType(
- typeof field.outputType.type === 'string' ? field.outputType.type : field.outputType.type.name
+ typeof field.outputType.type === 'string' ? field.outputType.type : field.outputType.type.name,
+ !!field.isNullable
);
break;
}
@@ -786,30 +797,19 @@ export class RPCOpenAPIGenerator extends OpenAPIGeneratorBase {
}
}
- private prismaTypeToOpenAPIType(type: DMMF.ArgType): OAPI.ReferenceObject | OAPI.SchemaObject {
- switch (type) {
- case 'String':
- return { type: 'string' };
- case 'Int':
- case 'BigInt':
- return { type: 'integer' };
- case 'Float':
- return { type: 'number' };
- case 'Decimal':
- return this.oneOf({ type: 'string' }, { type: 'number' });
- case 'Boolean':
- case 'True':
- return { type: 'boolean' };
- case 'DateTime':
- return { type: 'string', format: 'date-time' };
- case 'Bytes':
- return { type: 'string', format: 'byte' };
- case 'JSON':
- case 'Json':
- return {};
- default:
- return this.ref(type.toString(), false);
- }
+ private prismaTypeToOpenAPIType(type: DMMF.ArgType, nullable: boolean): OAPI.ReferenceObject | OAPI.SchemaObject {
+ const result = match(type)
+ .with('String', () => ({ type: 'string' }))
+ .with(P.union('Int', 'BigInt'), () => ({ type: 'integer' }))
+ .with('Float', () => ({ type: 'number' }))
+ .with('Decimal', () => this.oneOf({ type: 'string' }, { type: 'number' }))
+ .with(P.union('Boolean', 'True'), () => ({ type: 'boolean' }))
+ .with('DateTime', () => ({ type: 'string', format: 'date-time' }))
+ .with('Bytes', () => ({ type: 'string', format: 'byte' }))
+ .with(P.union('JSON', 'Json'), () => ({}))
+ .otherwise((type) => this.ref(type.toString(), false));
+
+ return this.wrapNullable(result, nullable);
}
private ref(type: string, rooted = true, description?: string): OAPI.ReferenceObject {
diff --git a/packages/plugins/openapi/tests/baseline/rest-3.0.0.baseline.yaml b/packages/plugins/openapi/tests/baseline/rest-3.0.0.baseline.yaml
new file mode 100644
index 000000000..2bdc154a5
--- /dev/null
+++ b/packages/plugins/openapi/tests/baseline/rest-3.0.0.baseline.yaml
@@ -0,0 +1,2599 @@
+openapi: 3.0.0
+info:
+ title: ZenStack Generated API
+ version: 1.0.0
+tags:
+ - name: user
+ description: User operations
+ - name: profile
+ description: Profile operations
+ - name: post_Item
+ description: Post-related operations
+paths:
+ /user:
+ get:
+ operationId: list-User
+ description: List "User" resources
+ tags:
+ - user
+ parameters:
+ - $ref: '#/components/parameters/include'
+ - $ref: '#/components/parameters/sort'
+ - $ref: '#/components/parameters/page-offset'
+ - $ref: '#/components/parameters/page-limit'
+ - name: filter[id]
+ required: false
+ description: Id filter
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[createdAt]
+ required: false
+ description: Equality filter for "createdAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[createdAt$lt]
+ required: false
+ description: Less-than filter for "createdAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[createdAt$lte]
+ required: false
+ description: Less-than or equal filter for "createdAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[createdAt$gt]
+ required: false
+ description: Greater-than filter for "createdAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[createdAt$gte]
+ required: false
+ description: Greater-than or equal filter for "createdAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[updatedAt]
+ required: false
+ description: Equality filter for "updatedAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[updatedAt$lt]
+ required: false
+ description: Less-than filter for "updatedAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[updatedAt$lte]
+ required: false
+ description: Less-than or equal filter for "updatedAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[updatedAt$gt]
+ required: false
+ description: Greater-than filter for "updatedAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[updatedAt$gte]
+ required: false
+ description: Greater-than or equal filter for "updatedAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[email]
+ required: false
+ description: Equality filter for "email"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[email$contains]
+ required: false
+ description: String contains filter for "email"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[email$icontains]
+ required: false
+ description: String case-insensitive contains filter for "email"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[email$search]
+ required: false
+ description: String full-text search filter for "email"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[email$startsWith]
+ required: false
+ description: String startsWith filter for "email"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[email$endsWith]
+ required: false
+ description: String endsWith filter for "email"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[role]
+ required: false
+ description: Equality filter for "role"
+ in: query
+ style: form
+ explode: false
+ schema:
+ $ref: '#/components/schemas/role'
+ - name: filter[posts]
+ required: false
+ description: Equality filter for "posts"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: array
+ items:
+ type: string
+ - name: filter[profile]
+ required: false
+ description: Equality filter for "profile"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/UserListResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ post:
+ operationId: create-User
+ description: Create a "User" resource
+ tags:
+ - user
+ requestBody:
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/UserCreateRequest'
+ responses:
+ '201':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/UserResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '/user/{id}':
+ get:
+ operationId: fetch-User
+ description: Fetch a "User" resource
+ tags:
+ - user
+ parameters:
+ - $ref: '#/components/parameters/id'
+ - $ref: '#/components/parameters/include'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/UserResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ put:
+ operationId: update-User-put
+ description: Update a "User" resource
+ tags:
+ - user
+ parameters:
+ - $ref: '#/components/parameters/id'
+ requestBody:
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/UserUpdateRequest'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/UserResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ patch:
+ operationId: update-User-patch
+ description: Update a "User" resource
+ tags:
+ - user
+ parameters:
+ - $ref: '#/components/parameters/id'
+ requestBody:
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/UserUpdateRequest'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/UserResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ delete:
+ operationId: delete-User
+ description: Delete a "User" resource
+ tags:
+ - user
+ parameters:
+ - $ref: '#/components/parameters/id'
+ responses:
+ '200':
+ description: Successful operation
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '/user/{id}/posts':
+ get:
+ operationId: fetch-User-related-posts
+ description: Fetch the related "posts" resource for "User"
+ tags:
+ - user
+ parameters:
+ - $ref: '#/components/parameters/id'
+ - $ref: '#/components/parameters/include'
+ - $ref: '#/components/parameters/sort'
+ - $ref: '#/components/parameters/page-offset'
+ - $ref: '#/components/parameters/page-limit'
+ - name: filter[id]
+ required: false
+ description: Id filter
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[createdAt]
+ required: false
+ description: Equality filter for "createdAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[createdAt$lt]
+ required: false
+ description: Less-than filter for "createdAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[createdAt$lte]
+ required: false
+ description: Less-than or equal filter for "createdAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[createdAt$gt]
+ required: false
+ description: Greater-than filter for "createdAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[createdAt$gte]
+ required: false
+ description: Greater-than or equal filter for "createdAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[updatedAt]
+ required: false
+ description: Equality filter for "updatedAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[updatedAt$lt]
+ required: false
+ description: Less-than filter for "updatedAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[updatedAt$lte]
+ required: false
+ description: Less-than or equal filter for "updatedAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[updatedAt$gt]
+ required: false
+ description: Greater-than filter for "updatedAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[updatedAt$gte]
+ required: false
+ description: Greater-than or equal filter for "updatedAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[email]
+ required: false
+ description: Equality filter for "email"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[email$contains]
+ required: false
+ description: String contains filter for "email"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[email$icontains]
+ required: false
+ description: String case-insensitive contains filter for "email"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[email$search]
+ required: false
+ description: String full-text search filter for "email"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[email$startsWith]
+ required: false
+ description: String startsWith filter for "email"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[email$endsWith]
+ required: false
+ description: String endsWith filter for "email"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[role]
+ required: false
+ description: Equality filter for "role"
+ in: query
+ style: form
+ explode: false
+ schema:
+ $ref: '#/components/schemas/role'
+ - name: filter[posts]
+ required: false
+ description: Equality filter for "posts"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: array
+ items:
+ type: string
+ - name: filter[profile]
+ required: false
+ description: Equality filter for "profile"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/post_ItemListResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '/user/{id}/relationships/posts':
+ get:
+ operationId: fetch-User-relationship-posts
+ description: Fetch the "posts" relationships for a "User"
+ tags:
+ - user
+ parameters:
+ - $ref: '#/components/parameters/id'
+ - $ref: '#/components/parameters/sort'
+ - $ref: '#/components/parameters/page-offset'
+ - $ref: '#/components/parameters/page-limit'
+ - name: filter[id]
+ required: false
+ description: Id filter
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[createdAt]
+ required: false
+ description: Equality filter for "createdAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[createdAt$lt]
+ required: false
+ description: Less-than filter for "createdAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[createdAt$lte]
+ required: false
+ description: Less-than or equal filter for "createdAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[createdAt$gt]
+ required: false
+ description: Greater-than filter for "createdAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[createdAt$gte]
+ required: false
+ description: Greater-than or equal filter for "createdAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[updatedAt]
+ required: false
+ description: Equality filter for "updatedAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[updatedAt$lt]
+ required: false
+ description: Less-than filter for "updatedAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[updatedAt$lte]
+ required: false
+ description: Less-than or equal filter for "updatedAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[updatedAt$gt]
+ required: false
+ description: Greater-than filter for "updatedAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[updatedAt$gte]
+ required: false
+ description: Greater-than or equal filter for "updatedAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[email]
+ required: false
+ description: Equality filter for "email"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[email$contains]
+ required: false
+ description: String contains filter for "email"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[email$icontains]
+ required: false
+ description: String case-insensitive contains filter for "email"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[email$search]
+ required: false
+ description: String full-text search filter for "email"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[email$startsWith]
+ required: false
+ description: String startsWith filter for "email"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[email$endsWith]
+ required: false
+ description: String endsWith filter for "email"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[role]
+ required: false
+ description: Equality filter for "role"
+ in: query
+ style: form
+ explode: false
+ schema:
+ $ref: '#/components/schemas/role'
+ - name: filter[posts]
+ required: false
+ description: Equality filter for "posts"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: array
+ items:
+ type: string
+ - name: filter[profile]
+ required: false
+ description: Equality filter for "profile"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_toManyRelationshipResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ put:
+ operationId: update-User-relationship-posts-put
+ description: Update "posts" relationships for a "User"
+ tags:
+ - user
+ parameters:
+ - $ref: '#/components/parameters/id'
+ requestBody:
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_toManyRelationshipRequest'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_toManyRelationshipResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ patch:
+ operationId: update-User-relationship-posts-patch
+ description: Update "posts" relationships for a "User"
+ tags:
+ - user
+ parameters:
+ - $ref: '#/components/parameters/id'
+ requestBody:
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_toManyRelationshipRequest'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_toManyRelationshipResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ post:
+ operationId: create-User-relationship-posts
+ description: Create new "posts" relationships for a "User"
+ tags:
+ - user
+ parameters:
+ - $ref: '#/components/parameters/id'
+ requestBody:
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_toManyRelationshipRequest'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_toManyRelationshipResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '/user/{id}/profile':
+ get:
+ operationId: fetch-User-related-profile
+ description: Fetch the related "profile" resource for "User"
+ tags:
+ - user
+ parameters:
+ - $ref: '#/components/parameters/id'
+ - $ref: '#/components/parameters/include'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/ProfileResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '/user/{id}/relationships/profile':
+ get:
+ operationId: fetch-User-relationship-profile
+ description: Fetch the "profile" relationships for a "User"
+ tags:
+ - user
+ parameters:
+ - $ref: '#/components/parameters/id'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_toOneRelationshipResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ put:
+ operationId: update-User-relationship-profile-put
+ description: Update "profile" relationship for a "User"
+ tags:
+ - user
+ parameters:
+ - $ref: '#/components/parameters/id'
+ requestBody:
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_toOneRelationshipRequest'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_toOneRelationshipResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ patch:
+ operationId: update-User-relationship-profile-patch
+ description: Update "profile" relationship for a "User"
+ tags:
+ - user
+ parameters:
+ - $ref: '#/components/parameters/id'
+ requestBody:
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_toOneRelationshipRequest'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_toOneRelationshipResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ /profile:
+ get:
+ operationId: list-Profile
+ description: List "Profile" resources
+ tags:
+ - profile
+ parameters:
+ - $ref: '#/components/parameters/include'
+ - $ref: '#/components/parameters/sort'
+ - $ref: '#/components/parameters/page-offset'
+ - $ref: '#/components/parameters/page-limit'
+ - name: filter[id]
+ required: false
+ description: Id filter
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[image]
+ required: false
+ description: Equality filter for "image"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[image$contains]
+ required: false
+ description: String contains filter for "image"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[image$icontains]
+ required: false
+ description: String case-insensitive contains filter for "image"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[image$search]
+ required: false
+ description: String full-text search filter for "image"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[image$startsWith]
+ required: false
+ description: String startsWith filter for "image"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[image$endsWith]
+ required: false
+ description: String endsWith filter for "image"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[user]
+ required: false
+ description: Equality filter for "user"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/ProfileListResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ post:
+ operationId: create-Profile
+ description: Create a "Profile" resource
+ tags:
+ - profile
+ requestBody:
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/ProfileCreateRequest'
+ responses:
+ '201':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/ProfileResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '/profile/{id}':
+ get:
+ operationId: fetch-Profile
+ description: Fetch a "Profile" resource
+ tags:
+ - profile
+ parameters:
+ - $ref: '#/components/parameters/id'
+ - $ref: '#/components/parameters/include'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/ProfileResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ put:
+ operationId: update-Profile-put
+ description: Update a "Profile" resource
+ tags:
+ - profile
+ parameters:
+ - $ref: '#/components/parameters/id'
+ requestBody:
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/ProfileUpdateRequest'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/ProfileResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ patch:
+ operationId: update-Profile-patch
+ description: Update a "Profile" resource
+ tags:
+ - profile
+ parameters:
+ - $ref: '#/components/parameters/id'
+ requestBody:
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/ProfileUpdateRequest'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/ProfileResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ delete:
+ operationId: delete-Profile
+ description: Delete a "Profile" resource
+ tags:
+ - profile
+ parameters:
+ - $ref: '#/components/parameters/id'
+ responses:
+ '200':
+ description: Successful operation
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '/profile/{id}/user':
+ get:
+ operationId: fetch-Profile-related-user
+ description: Fetch the related "user" resource for "Profile"
+ tags:
+ - profile
+ parameters:
+ - $ref: '#/components/parameters/id'
+ - $ref: '#/components/parameters/include'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/UserResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '/profile/{id}/relationships/user':
+ get:
+ operationId: fetch-Profile-relationship-user
+ description: Fetch the "user" relationships for a "Profile"
+ tags:
+ - profile
+ parameters:
+ - $ref: '#/components/parameters/id'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_toOneRelationshipResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ put:
+ operationId: update-Profile-relationship-user-put
+ description: Update "user" relationship for a "Profile"
+ tags:
+ - profile
+ parameters:
+ - $ref: '#/components/parameters/id'
+ requestBody:
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_toOneRelationshipRequest'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_toOneRelationshipResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ patch:
+ operationId: update-Profile-relationship-user-patch
+ description: Update "user" relationship for a "Profile"
+ tags:
+ - profile
+ parameters:
+ - $ref: '#/components/parameters/id'
+ requestBody:
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_toOneRelationshipRequest'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_toOneRelationshipResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ /post_Item:
+ get:
+ operationId: list-post_Item
+ description: List "post_Item" resources
+ tags:
+ - post_Item
+ parameters:
+ - $ref: '#/components/parameters/include'
+ - $ref: '#/components/parameters/sort'
+ - $ref: '#/components/parameters/page-offset'
+ - $ref: '#/components/parameters/page-limit'
+ - name: filter[id]
+ required: false
+ description: Id filter
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[createdAt]
+ required: false
+ description: Equality filter for "createdAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[createdAt$lt]
+ required: false
+ description: Less-than filter for "createdAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[createdAt$lte]
+ required: false
+ description: Less-than or equal filter for "createdAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[createdAt$gt]
+ required: false
+ description: Greater-than filter for "createdAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[createdAt$gte]
+ required: false
+ description: Greater-than or equal filter for "createdAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[updatedAt]
+ required: false
+ description: Equality filter for "updatedAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[updatedAt$lt]
+ required: false
+ description: Less-than filter for "updatedAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[updatedAt$lte]
+ required: false
+ description: Less-than or equal filter for "updatedAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[updatedAt$gt]
+ required: false
+ description: Greater-than filter for "updatedAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[updatedAt$gte]
+ required: false
+ description: Greater-than or equal filter for "updatedAt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[title]
+ required: false
+ description: Equality filter for "title"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[title$contains]
+ required: false
+ description: String contains filter for "title"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[title$icontains]
+ required: false
+ description: String case-insensitive contains filter for "title"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[title$search]
+ required: false
+ description: String full-text search filter for "title"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[title$startsWith]
+ required: false
+ description: String startsWith filter for "title"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[title$endsWith]
+ required: false
+ description: String endsWith filter for "title"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[author]
+ required: false
+ description: Equality filter for "author"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[published]
+ required: false
+ description: Equality filter for "published"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: boolean
+ - name: filter[viewCount]
+ required: false
+ description: Equality filter for "viewCount"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: integer
+ - name: filter[viewCount$lt]
+ required: false
+ description: Less-than filter for "viewCount"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: integer
+ - name: filter[viewCount$lte]
+ required: false
+ description: Less-than or equal filter for "viewCount"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: integer
+ - name: filter[viewCount$gt]
+ required: false
+ description: Greater-than filter for "viewCount"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: integer
+ - name: filter[viewCount$gte]
+ required: false
+ description: Greater-than or equal filter for "viewCount"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: integer
+ - name: filter[notes]
+ required: false
+ description: Equality filter for "notes"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[notes$contains]
+ required: false
+ description: String contains filter for "notes"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[notes$icontains]
+ required: false
+ description: String case-insensitive contains filter for "notes"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[notes$search]
+ required: false
+ description: String full-text search filter for "notes"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[notes$startsWith]
+ required: false
+ description: String startsWith filter for "notes"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[notes$endsWith]
+ required: false
+ description: String endsWith filter for "notes"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/post_ItemListResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ post:
+ operationId: create-post_Item
+ description: Create a "post_Item" resource
+ tags:
+ - post_Item
+ requestBody:
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/post_ItemCreateRequest'
+ responses:
+ '201':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/post_ItemResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '/post_Item/{id}':
+ get:
+ operationId: fetch-post_Item
+ description: Fetch a "post_Item" resource
+ tags:
+ - post_Item
+ parameters:
+ - $ref: '#/components/parameters/id'
+ - $ref: '#/components/parameters/include'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/post_ItemResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ put:
+ operationId: update-post_Item-put
+ description: Update a "post_Item" resource
+ tags:
+ - post_Item
+ parameters:
+ - $ref: '#/components/parameters/id'
+ requestBody:
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/post_ItemUpdateRequest'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/post_ItemResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ patch:
+ operationId: update-post_Item-patch
+ description: Update a "post_Item" resource
+ tags:
+ - post_Item
+ parameters:
+ - $ref: '#/components/parameters/id'
+ requestBody:
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/post_ItemUpdateRequest'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/post_ItemResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ delete:
+ operationId: delete-post_Item
+ description: Delete a "post_Item" resource
+ tags:
+ - post_Item
+ parameters:
+ - $ref: '#/components/parameters/id'
+ responses:
+ '200':
+ description: Successful operation
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '/post_Item/{id}/author':
+ get:
+ operationId: fetch-post_Item-related-author
+ description: Fetch the related "author" resource for "post_Item"
+ tags:
+ - post_Item
+ parameters:
+ - $ref: '#/components/parameters/id'
+ - $ref: '#/components/parameters/include'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/UserResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '/post_Item/{id}/relationships/author':
+ get:
+ operationId: fetch-post_Item-relationship-author
+ description: Fetch the "author" relationships for a "post_Item"
+ tags:
+ - post_Item
+ parameters:
+ - $ref: '#/components/parameters/id'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_toOneRelationshipResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ put:
+ operationId: update-post_Item-relationship-author-put
+ description: Update "author" relationship for a "post_Item"
+ tags:
+ - post_Item
+ parameters:
+ - $ref: '#/components/parameters/id'
+ requestBody:
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_toOneRelationshipRequest'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_toOneRelationshipResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ patch:
+ operationId: update-post_Item-relationship-author-patch
+ description: Update "author" relationship for a "post_Item"
+ tags:
+ - post_Item
+ parameters:
+ - $ref: '#/components/parameters/id'
+ requestBody:
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_toOneRelationshipRequest'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_toOneRelationshipResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+components:
+ schemas:
+ _jsonapi:
+ type: object
+ description: An object describing the server’s implementation
+ required:
+ - version
+ properties:
+ version:
+ type: string
+ _meta:
+ type: object
+ description: Meta information about the request or response
+ properties:
+ serialization:
+ description: Superjson serialization metadata
+ additionalProperties: true
+ _resourceIdentifier:
+ type: object
+ description: Identifier for a resource
+ required:
+ - type
+ - id
+ properties:
+ type:
+ type: string
+ description: Resource type
+ id:
+ type: string
+ description: Resource id
+ _resource:
+ allOf:
+ - $ref: '#/components/schemas/_resourceIdentifier'
+ - type: object
+ description: A resource with attributes and relationships
+ properties:
+ attributes:
+ type: object
+ description: Resource attributes
+ relationships:
+ type: object
+ description: Resource relationships
+ _links:
+ type: object
+ required:
+ - self
+ description: Links related to the resource
+ properties:
+ self:
+ type: string
+ description: Link for refetching the curent results
+ _pagination:
+ type: object
+ description: Pagination information
+ required:
+ - first
+ - last
+ - prev
+ - next
+ properties:
+ first:
+ type: string
+ description: Link to the first page
+ nullable: true
+ last:
+ type: string
+ description: Link to the last page
+ nullable: true
+ prev:
+ type: string
+ description: Link to the previous page
+ nullable: true
+ next:
+ type: string
+ description: Link to the next page
+ nullable: true
+ _errors:
+ type: array
+ description: An array of error objects
+ items:
+ type: object
+ required:
+ - status
+ - code
+ properties:
+ status:
+ type: string
+ description: HTTP status
+ code:
+ type: string
+ description: Error code
+ prismaCode:
+ type: string
+ description: Prisma error code if the error is thrown by Prisma
+ title:
+ type: string
+ description: Error title
+ detail:
+ type: string
+ description: Error detail
+ reason:
+ type: string
+ description: Detailed error reason
+ zodErrors:
+ type: object
+ additionalProperties: true
+ description: Zod validation errors if the error is due to data validation
+ failure
+ _errorResponse:
+ type: object
+ required:
+ - errors
+ description: An error response
+ properties:
+ jsonapi:
+ $ref: '#/components/schemas/_jsonapi'
+ errors:
+ $ref: '#/components/schemas/_errors'
+ _relationLinks:
+ type: object
+ required:
+ - self
+ - related
+ description: Links related to a relationship
+ properties:
+ self:
+ type: string
+ description: Link for fetching this relationship
+ related:
+ type: string
+ description: Link for fetching the resource represented by this relationship
+ _toOneRelationship:
+ type: object
+ description: A to-one relationship
+ properties:
+ data:
+ allOf:
+ - $ref: '#/components/schemas/_resourceIdentifier'
+ nullable: true
+ _toOneRelationshipWithLinks:
+ type: object
+ required:
+ - links
+ - data
+ description: A to-one relationship with links
+ properties:
+ links:
+ $ref: '#/components/schemas/_relationLinks'
+ data:
+ allOf:
+ - $ref: '#/components/schemas/_resourceIdentifier'
+ nullable: true
+ _toManyRelationship:
+ type: object
+ required:
+ - data
+ description: A to-many relationship
+ properties:
+ data:
+ type: array
+ items:
+ $ref: '#/components/schemas/_resourceIdentifier'
+ _toManyRelationshipWithLinks:
+ type: object
+ required:
+ - links
+ - data
+ description: A to-many relationship with links
+ properties:
+ links:
+ $ref: '#/components/schemas/_pagedRelationLinks'
+ data:
+ type: array
+ items:
+ $ref: '#/components/schemas/_resourceIdentifier'
+ _pagedRelationLinks:
+ description: Relationship links with pagination information
+ allOf:
+ - $ref: '#/components/schemas/_pagination'
+ - $ref: '#/components/schemas/_relationLinks'
+ _toManyRelationshipRequest:
+ type: object
+ required:
+ - data
+ description: Input for manipulating a to-many relationship
+ properties:
+ data:
+ type: array
+ items:
+ $ref: '#/components/schemas/_resourceIdentifier'
+ _toOneRelationshipRequest:
+ description: Input for manipulating a to-one relationship
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/_resourceIdentifier'
+ nullable: true
+ _toManyRelationshipResponse:
+ description: Response for a to-many relationship
+ allOf:
+ - $ref: '#/components/schemas/_toManyRelationshipWithLinks'
+ - type: object
+ properties:
+ jsonapi:
+ $ref: '#/components/schemas/_jsonapi'
+ _toOneRelationshipResponse:
+ description: Response for a to-one relationship
+ allOf:
+ - $ref: '#/components/schemas/_toOneRelationshipWithLinks'
+ - type: object
+ properties:
+ jsonapi:
+ $ref: '#/components/schemas/_jsonapi'
+ role:
+ type: string
+ description: The "role" Enum
+ enum:
+ - USER
+ - ADMIN
+ User:
+ type: object
+ description: The "User" model
+ required:
+ - id
+ - type
+ - attributes
+ properties:
+ id:
+ type: string
+ type:
+ type: string
+ attributes:
+ type: object
+ properties:
+ createdAt:
+ type: string
+ format: date-time
+ updatedAt:
+ type: string
+ format: date-time
+ email:
+ type: string
+ role:
+ $ref: '#/components/schemas/role'
+ relationships:
+ type: object
+ properties:
+ posts:
+ $ref: '#/components/schemas/_toManyRelationshipWithLinks'
+ profile:
+ allOf:
+ - $ref: '#/components/schemas/_toOneRelationshipWithLinks'
+ nullable: true
+ UserCreateRequest:
+ type: object
+ description: Input for creating a "User"
+ required:
+ - data
+ properties:
+ data:
+ type: object
+ description: The "User" model
+ required:
+ - type
+ - attributes
+ properties:
+ type:
+ type: string
+ attributes:
+ type: object
+ required:
+ - updatedAt
+ - email
+ properties:
+ createdAt:
+ type: string
+ format: date-time
+ updatedAt:
+ type: string
+ format: date-time
+ email:
+ type: string
+ role:
+ $ref: '#/components/schemas/role'
+ relationships:
+ type: object
+ properties:
+ posts:
+ $ref: '#/components/schemas/_toManyRelationship'
+ profile:
+ allOf:
+ - $ref: '#/components/schemas/_toOneRelationship'
+ nullable: true
+ meta:
+ $ref: '#/components/schemas/_meta'
+ UserUpdateRequest:
+ type: object
+ description: Input for updating a "User"
+ required:
+ - data
+ properties:
+ data:
+ type: object
+ description: The "User" model
+ required:
+ - id
+ - type
+ - attributes
+ properties:
+ id:
+ type: string
+ type:
+ type: string
+ attributes:
+ type: object
+ properties:
+ createdAt:
+ type: string
+ format: date-time
+ updatedAt:
+ type: string
+ format: date-time
+ email:
+ type: string
+ role:
+ $ref: '#/components/schemas/role'
+ relationships:
+ type: object
+ properties:
+ posts:
+ $ref: '#/components/schemas/_toManyRelationship'
+ profile:
+ allOf:
+ - $ref: '#/components/schemas/_toOneRelationship'
+ nullable: true
+ meta:
+ $ref: '#/components/schemas/_meta'
+ UserResponse:
+ type: object
+ description: Response for a "User"
+ required:
+ - data
+ properties:
+ jsonapi:
+ $ref: '#/components/schemas/_jsonapi'
+ data:
+ allOf:
+ - $ref: '#/components/schemas/User'
+ - type: object
+ properties:
+ relationships:
+ type: object
+ properties: &a1
+ posts:
+ $ref: '#/components/schemas/_toManyRelationship'
+ profile:
+ $ref: '#/components/schemas/_toOneRelationship'
+ meta:
+ $ref: '#/components/schemas/_meta'
+ included:
+ type: array
+ items:
+ $ref: '#/components/schemas/_resource'
+ links:
+ $ref: '#/components/schemas/_links'
+ UserListResponse:
+ type: object
+ description: Response for a list of "User"
+ required:
+ - data
+ - links
+ properties:
+ jsonapi:
+ $ref: '#/components/schemas/_jsonapi'
+ data:
+ type: array
+ items:
+ allOf:
+ - $ref: '#/components/schemas/User'
+ - type: object
+ properties:
+ relationships:
+ type: object
+ properties: *a1
+ meta:
+ $ref: '#/components/schemas/_meta'
+ included:
+ type: array
+ items:
+ $ref: '#/components/schemas/_resource'
+ links:
+ allOf:
+ - $ref: '#/components/schemas/_links'
+ - $ref: '#/components/schemas/_pagination'
+ Profile:
+ type: object
+ description: The "Profile" model
+ required:
+ - id
+ - type
+ - attributes
+ properties:
+ id:
+ type: string
+ type:
+ type: string
+ attributes:
+ type: object
+ properties:
+ image:
+ type: string
+ nullable: true
+ userId:
+ type: string
+ relationships:
+ type: object
+ properties:
+ user:
+ $ref: '#/components/schemas/_toOneRelationshipWithLinks'
+ ProfileCreateRequest:
+ type: object
+ description: Input for creating a "Profile"
+ required:
+ - data
+ properties:
+ data:
+ type: object
+ description: The "Profile" model
+ required:
+ - type
+ - attributes
+ properties:
+ type:
+ type: string
+ attributes:
+ type: object
+ required:
+ - userId
+ properties:
+ image:
+ type: string
+ nullable: true
+ userId:
+ type: string
+ relationships:
+ type: object
+ properties:
+ user:
+ $ref: '#/components/schemas/_toOneRelationship'
+ meta:
+ $ref: '#/components/schemas/_meta'
+ ProfileUpdateRequest:
+ type: object
+ description: Input for updating a "Profile"
+ required:
+ - data
+ properties:
+ data:
+ type: object
+ description: The "Profile" model
+ required:
+ - id
+ - type
+ - attributes
+ properties:
+ id:
+ type: string
+ type:
+ type: string
+ attributes:
+ type: object
+ properties:
+ image:
+ type: string
+ nullable: true
+ userId:
+ type: string
+ relationships:
+ type: object
+ properties:
+ user:
+ $ref: '#/components/schemas/_toOneRelationship'
+ meta:
+ $ref: '#/components/schemas/_meta'
+ ProfileResponse:
+ type: object
+ description: Response for a "Profile"
+ required:
+ - data
+ properties:
+ jsonapi:
+ $ref: '#/components/schemas/_jsonapi'
+ data:
+ allOf:
+ - $ref: '#/components/schemas/Profile'
+ - type: object
+ properties:
+ relationships:
+ type: object
+ properties: &a2
+ user:
+ $ref: '#/components/schemas/_toOneRelationship'
+ meta:
+ $ref: '#/components/schemas/_meta'
+ included:
+ type: array
+ items:
+ $ref: '#/components/schemas/_resource'
+ links:
+ $ref: '#/components/schemas/_links'
+ ProfileListResponse:
+ type: object
+ description: Response for a list of "Profile"
+ required:
+ - data
+ - links
+ properties:
+ jsonapi:
+ $ref: '#/components/schemas/_jsonapi'
+ data:
+ type: array
+ items:
+ allOf:
+ - $ref: '#/components/schemas/Profile'
+ - type: object
+ properties:
+ relationships:
+ type: object
+ properties: *a2
+ meta:
+ $ref: '#/components/schemas/_meta'
+ included:
+ type: array
+ items:
+ $ref: '#/components/schemas/_resource'
+ links:
+ allOf:
+ - $ref: '#/components/schemas/_links'
+ - $ref: '#/components/schemas/_pagination'
+ post_Item:
+ type: object
+ description: The "post_Item" model
+ required:
+ - id
+ - type
+ - attributes
+ properties:
+ id:
+ type: string
+ type:
+ type: string
+ attributes:
+ type: object
+ properties:
+ createdAt:
+ type: string
+ format: date-time
+ updatedAt:
+ type: string
+ format: date-time
+ title:
+ type: string
+ authorId:
+ type: string
+ nullable: true
+ published:
+ type: boolean
+ viewCount:
+ type: integer
+ notes:
+ type: string
+ nullable: true
+ relationships:
+ type: object
+ properties:
+ author:
+ allOf:
+ - $ref: '#/components/schemas/_toOneRelationshipWithLinks'
+ nullable: true
+ post_ItemCreateRequest:
+ type: object
+ description: Input for creating a "post_Item"
+ required:
+ - data
+ properties:
+ data:
+ type: object
+ description: The "post_Item" model
+ required:
+ - id
+ - type
+ - attributes
+ properties:
+ id:
+ type: string
+ type:
+ type: string
+ attributes:
+ type: object
+ required:
+ - updatedAt
+ - title
+ properties:
+ createdAt:
+ type: string
+ format: date-time
+ updatedAt:
+ type: string
+ format: date-time
+ title:
+ type: string
+ authorId:
+ type: string
+ nullable: true
+ published:
+ type: boolean
+ viewCount:
+ type: integer
+ notes:
+ type: string
+ nullable: true
+ relationships:
+ type: object
+ properties:
+ author:
+ allOf:
+ - $ref: '#/components/schemas/_toOneRelationship'
+ nullable: true
+ meta:
+ $ref: '#/components/schemas/_meta'
+ post_ItemUpdateRequest:
+ type: object
+ description: Input for updating a "post_Item"
+ required:
+ - data
+ properties:
+ data:
+ type: object
+ description: The "post_Item" model
+ required:
+ - id
+ - type
+ - attributes
+ properties:
+ id:
+ type: string
+ type:
+ type: string
+ attributes:
+ type: object
+ properties:
+ createdAt:
+ type: string
+ format: date-time
+ updatedAt:
+ type: string
+ format: date-time
+ title:
+ type: string
+ authorId:
+ type: string
+ nullable: true
+ published:
+ type: boolean
+ viewCount:
+ type: integer
+ notes:
+ type: string
+ nullable: true
+ relationships:
+ type: object
+ properties:
+ author:
+ allOf:
+ - $ref: '#/components/schemas/_toOneRelationship'
+ nullable: true
+ meta:
+ $ref: '#/components/schemas/_meta'
+ post_ItemResponse:
+ type: object
+ description: Response for a "post_Item"
+ required:
+ - data
+ properties:
+ jsonapi:
+ $ref: '#/components/schemas/_jsonapi'
+ data:
+ allOf:
+ - $ref: '#/components/schemas/post_Item'
+ - type: object
+ properties:
+ relationships:
+ type: object
+ properties: &a3
+ author:
+ $ref: '#/components/schemas/_toOneRelationship'
+ meta:
+ $ref: '#/components/schemas/_meta'
+ included:
+ type: array
+ items:
+ $ref: '#/components/schemas/_resource'
+ links:
+ $ref: '#/components/schemas/_links'
+ post_ItemListResponse:
+ type: object
+ description: Response for a list of "post_Item"
+ required:
+ - data
+ - links
+ properties:
+ jsonapi:
+ $ref: '#/components/schemas/_jsonapi'
+ data:
+ type: array
+ items:
+ allOf:
+ - $ref: '#/components/schemas/post_Item'
+ - type: object
+ properties:
+ relationships:
+ type: object
+ properties: *a3
+ meta:
+ $ref: '#/components/schemas/_meta'
+ included:
+ type: array
+ items:
+ $ref: '#/components/schemas/_resource'
+ links:
+ allOf:
+ - $ref: '#/components/schemas/_links'
+ - $ref: '#/components/schemas/_pagination'
+ parameters:
+ id:
+ name: id
+ in: path
+ description: The resource id
+ required: true
+ schema:
+ type: string
+ include:
+ name: include
+ in: query
+ description: Relationships to include
+ required: false
+ style: form
+ schema:
+ type: string
+ sort:
+ name: sort
+ in: query
+ description: Fields to sort by
+ required: false
+ style: form
+ schema:
+ type: string
+ page-offset:
+ name: page[offset]
+ in: query
+ description: Offset for pagination
+ required: false
+ style: form
+ schema:
+ type: integer
+ page-limit:
+ name: page[limit]
+ in: query
+ description: Limit for pagination
+ required: false
+ style: form
+ schema:
+ type: integer
diff --git a/packages/plugins/openapi/tests/baseline/rest.baseline.yaml b/packages/plugins/openapi/tests/baseline/rest-3.1.0.baseline.yaml
similarity index 71%
rename from packages/plugins/openapi/tests/baseline/rest.baseline.yaml
rename to packages/plugins/openapi/tests/baseline/rest-3.1.0.baseline.yaml
index 3421150c9..ea85b4aa3 100644
--- a/packages/plugins/openapi/tests/baseline/rest.baseline.yaml
+++ b/packages/plugins/openapi/tests/baseline/rest-3.1.0.baseline.yaml
@@ -5,6 +5,8 @@ info:
tags:
- name: user
description: User operations
+ - name: profile
+ description: Profile operations
- name: post_Item
description: Post-related operations
paths:
@@ -183,6 +185,14 @@ paths:
type: array
items:
type: string
+ - name: filter[profile]
+ required: false
+ description: Equality filter for "profile"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
responses:
'200':
description: Successful operation
@@ -507,6 +517,14 @@ paths:
type: array
items:
type: string
+ - name: filter[profile]
+ required: false
+ description: Equality filter for "profile"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
responses:
'200':
description: Successful operation
@@ -701,13 +719,432 @@ paths:
type: array
items:
type: string
+ - name: filter[profile]
+ required: false
+ description: Equality filter for "profile"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_toManyRelationshipResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ put:
+ operationId: update-User-relationship-posts-put
+ description: Update "posts" relationships for a "User"
+ tags:
+ - user
+ parameters:
+ - $ref: '#/components/parameters/id'
+ requestBody:
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_toManyRelationshipRequest'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_toManyRelationshipResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ patch:
+ operationId: update-User-relationship-posts-patch
+ description: Update "posts" relationships for a "User"
+ tags:
+ - user
+ parameters:
+ - $ref: '#/components/parameters/id'
+ requestBody:
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_toManyRelationshipRequest'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_toManyRelationshipResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ post:
+ operationId: create-User-relationship-posts
+ description: Create new "posts" relationships for a "User"
+ tags:
+ - user
+ parameters:
+ - $ref: '#/components/parameters/id'
+ requestBody:
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_toManyRelationshipRequest'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_toManyRelationshipResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '/user/{id}/profile':
+ get:
+ operationId: fetch-User-related-profile
+ description: Fetch the related "profile" resource for "User"
+ tags:
+ - user
+ parameters:
+ - $ref: '#/components/parameters/id'
+ - $ref: '#/components/parameters/include'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/ProfileResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '/user/{id}/relationships/profile':
+ get:
+ operationId: fetch-User-relationship-profile
+ description: Fetch the "profile" relationships for a "User"
+ tags:
+ - user
+ parameters:
+ - $ref: '#/components/parameters/id'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_toOneRelationshipResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ put:
+ operationId: update-User-relationship-profile-put
+ description: Update "profile" relationship for a "User"
+ tags:
+ - user
+ parameters:
+ - $ref: '#/components/parameters/id'
+ requestBody:
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_toOneRelationshipRequest'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_toOneRelationshipResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ patch:
+ operationId: update-User-relationship-profile-patch
+ description: Update "profile" relationship for a "User"
+ tags:
+ - user
+ parameters:
+ - $ref: '#/components/parameters/id'
+ requestBody:
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_toOneRelationshipRequest'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_toOneRelationshipResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ /profile:
+ get:
+ operationId: list-Profile
+ description: List "Profile" resources
+ tags:
+ - profile
+ parameters:
+ - $ref: '#/components/parameters/include'
+ - $ref: '#/components/parameters/sort'
+ - $ref: '#/components/parameters/page-offset'
+ - $ref: '#/components/parameters/page-limit'
+ - name: filter[id]
+ required: false
+ description: Id filter
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[image]
+ required: false
+ description: Equality filter for "image"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[image$contains]
+ required: false
+ description: String contains filter for "image"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[image$icontains]
+ required: false
+ description: String case-insensitive contains filter for "image"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[image$search]
+ required: false
+ description: String full-text search filter for "image"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[image$startsWith]
+ required: false
+ description: String startsWith filter for "image"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[image$endsWith]
+ required: false
+ description: String endsWith filter for "image"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[user]
+ required: false
+ description: Equality filter for "user"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/ProfileListResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ post:
+ operationId: create-Profile
+ description: Create a "Profile" resource
+ tags:
+ - profile
+ requestBody:
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/ProfileCreateRequest'
+ responses:
+ '201':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/ProfileResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '/profile/{id}':
+ get:
+ operationId: fetch-Profile
+ description: Fetch a "Profile" resource
+ tags:
+ - profile
+ parameters:
+ - $ref: '#/components/parameters/id'
+ - $ref: '#/components/parameters/include'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/ProfileResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ put:
+ operationId: update-Profile-put
+ description: Update a "Profile" resource
+ tags:
+ - profile
+ parameters:
+ - $ref: '#/components/parameters/id'
+ requestBody:
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/ProfileUpdateRequest'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/ProfileResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ patch:
+ operationId: update-Profile-patch
+ description: Update a "Profile" resource
+ tags:
+ - profile
+ parameters:
+ - $ref: '#/components/parameters/id'
+ requestBody:
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/ProfileUpdateRequest'
responses:
'200':
description: Successful operation
content:
application/vnd.api+json:
schema:
- $ref: '#/components/schemas/_toManyRelationshipResponse'
+ $ref: '#/components/schemas/ProfileResponse'
'403':
description: Request is forbidden
content:
@@ -720,25 +1157,44 @@ paths:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/_errorResponse'
- put:
- operationId: update-User-relationship-posts-put
- description: Update "posts" relationships for a "User"
+ delete:
+ operationId: delete-Profile
+ description: Delete a "Profile" resource
tags:
- - user
+ - profile
parameters:
- $ref: '#/components/parameters/id'
- requestBody:
- content:
- application/vnd.api+json:
- schema:
- $ref: '#/components/schemas/_toManyRelationshipRequest'
responses:
'200':
description: Successful operation
+ '403':
+ description: Request is forbidden
content:
application/vnd.api+json:
schema:
- $ref: '#/components/schemas/_toManyRelationshipResponse'
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '/profile/{id}/user':
+ get:
+ operationId: fetch-Profile-related-user
+ description: Fetch the related "user" resource for "Profile"
+ tags:
+ - profile
+ parameters:
+ - $ref: '#/components/parameters/id'
+ - $ref: '#/components/parameters/include'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/UserResponse'
'403':
description: Request is forbidden
content:
@@ -751,25 +1207,52 @@ paths:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/_errorResponse'
- patch:
- operationId: update-User-relationship-posts-patch
- description: Update "posts" relationships for a "User"
+ '/profile/{id}/relationships/user':
+ get:
+ operationId: fetch-Profile-relationship-user
+ description: Fetch the "user" relationships for a "Profile"
tags:
- - user
+ - profile
+ parameters:
+ - $ref: '#/components/parameters/id'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_toOneRelationshipResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ put:
+ operationId: update-Profile-relationship-user-put
+ description: Update "user" relationship for a "Profile"
+ tags:
+ - profile
parameters:
- $ref: '#/components/parameters/id'
requestBody:
content:
application/vnd.api+json:
schema:
- $ref: '#/components/schemas/_toManyRelationshipRequest'
+ $ref: '#/components/schemas/_toOneRelationshipRequest'
responses:
'200':
description: Successful operation
content:
application/vnd.api+json:
schema:
- $ref: '#/components/schemas/_toManyRelationshipResponse'
+ $ref: '#/components/schemas/_toOneRelationshipResponse'
'403':
description: Request is forbidden
content:
@@ -782,25 +1265,25 @@ paths:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/_errorResponse'
- post:
- operationId: create-User-relationship-posts
- description: Create new "posts" relationships for a "User"
+ patch:
+ operationId: update-Profile-relationship-user-patch
+ description: Update "user" relationship for a "Profile"
tags:
- - user
+ - profile
parameters:
- $ref: '#/components/parameters/id'
requestBody:
content:
application/vnd.api+json:
schema:
- $ref: '#/components/schemas/_toManyRelationshipRequest'
+ $ref: '#/components/schemas/_toOneRelationshipRequest'
responses:
'200':
description: Successful operation
content:
application/vnd.api+json:
schema:
- $ref: '#/components/schemas/_toManyRelationshipResponse'
+ $ref: '#/components/schemas/_toOneRelationshipResponse'
'403':
description: Request is forbidden
content:
@@ -1026,6 +1509,54 @@ paths:
explode: false
schema:
type: integer
+ - name: filter[notes]
+ required: false
+ description: Equality filter for "notes"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[notes$contains]
+ required: false
+ description: String contains filter for "notes"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[notes$icontains]
+ required: false
+ description: String case-insensitive contains filter for "notes"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[notes$search]
+ required: false
+ description: String full-text search filter for "notes"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[notes$startsWith]
+ required: false
+ description: String startsWith filter for "notes"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[notes$endsWith]
+ required: false
+ description: String endsWith filter for "notes"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
responses:
'200':
description: Successful operation
@@ -1353,24 +1884,24 @@ components:
properties:
first:
oneOf:
+ - type: 'null'
- type: string
description: Link to the first page
- - type: 'null'
last:
oneOf:
+ - type: 'null'
- type: string
description: Link to the last page
- - type: 'null'
prev:
oneOf:
+ - type: 'null'
- type: string
description: Link to the previous page
- - type: 'null'
next:
oneOf:
+ - type: 'null'
- type: string
description: Link to the next page
- - type: 'null'
_errors:
type: array
description: An array of error objects
@@ -1432,8 +1963,8 @@ components:
properties:
data:
oneOf:
- - $ref: '#/components/schemas/_resourceIdentifier'
- type: 'null'
+ - $ref: '#/components/schemas/_resourceIdentifier'
_toOneRelationshipWithLinks:
type: object
required:
@@ -1445,8 +1976,8 @@ components:
$ref: '#/components/schemas/_relationLinks'
data:
oneOf:
- - $ref: '#/components/schemas/_resourceIdentifier'
- type: 'null'
+ - $ref: '#/components/schemas/_resourceIdentifier'
_toManyRelationship:
type: object
required:
@@ -1488,13 +2019,13 @@ components:
_toOneRelationshipRequest:
description: Input for manipulating a to-one relationship
oneOf:
+ - type: 'null'
- type: object
required:
- data
properties:
data:
$ref: '#/components/schemas/_resourceIdentifier'
- - type: 'null'
_toManyRelationshipResponse:
description: Response for a to-many relationship
allOf:
@@ -1547,6 +2078,10 @@ components:
properties:
posts:
$ref: '#/components/schemas/_toManyRelationshipWithLinks'
+ profile:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/_toOneRelationshipWithLinks'
UserCreateRequest:
type: object
description: Input for creating a "User"
@@ -1583,6 +2118,10 @@ components:
properties:
posts:
$ref: '#/components/schemas/_toManyRelationship'
+ profile:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/_toOneRelationship'
meta:
$ref: '#/components/schemas/_meta'
UserUpdateRequest:
@@ -1621,6 +2160,10 @@ components:
properties:
posts:
$ref: '#/components/schemas/_toManyRelationship'
+ profile:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/_toOneRelationship'
meta:
$ref: '#/components/schemas/_meta'
UserResponse:
@@ -1641,6 +2184,8 @@ components:
properties: &a1
posts:
$ref: '#/components/schemas/_toManyRelationship'
+ profile:
+ $ref: '#/components/schemas/_toOneRelationship'
meta:
$ref: '#/components/schemas/_meta'
included:
@@ -1678,6 +2223,154 @@ components:
allOf:
- $ref: '#/components/schemas/_links'
- $ref: '#/components/schemas/_pagination'
+ Profile:
+ type: object
+ description: The "Profile" model
+ required:
+ - id
+ - type
+ - attributes
+ properties:
+ id:
+ type: string
+ type:
+ type: string
+ attributes:
+ type: object
+ properties:
+ image:
+ oneOf:
+ - type: 'null'
+ - type: string
+ userId:
+ type: string
+ relationships:
+ type: object
+ properties:
+ user:
+ $ref: '#/components/schemas/_toOneRelationshipWithLinks'
+ ProfileCreateRequest:
+ type: object
+ description: Input for creating a "Profile"
+ required:
+ - data
+ properties:
+ data:
+ type: object
+ description: The "Profile" model
+ required:
+ - type
+ - attributes
+ properties:
+ type:
+ type: string
+ attributes:
+ type: object
+ required:
+ - userId
+ properties:
+ image:
+ oneOf:
+ - type: 'null'
+ - type: string
+ userId:
+ type: string
+ relationships:
+ type: object
+ properties:
+ user:
+ $ref: '#/components/schemas/_toOneRelationship'
+ meta:
+ $ref: '#/components/schemas/_meta'
+ ProfileUpdateRequest:
+ type: object
+ description: Input for updating a "Profile"
+ required:
+ - data
+ properties:
+ data:
+ type: object
+ description: The "Profile" model
+ required:
+ - id
+ - type
+ - attributes
+ properties:
+ id:
+ type: string
+ type:
+ type: string
+ attributes:
+ type: object
+ properties:
+ image:
+ oneOf:
+ - type: 'null'
+ - type: string
+ userId:
+ type: string
+ relationships:
+ type: object
+ properties:
+ user:
+ $ref: '#/components/schemas/_toOneRelationship'
+ meta:
+ $ref: '#/components/schemas/_meta'
+ ProfileResponse:
+ type: object
+ description: Response for a "Profile"
+ required:
+ - data
+ properties:
+ jsonapi:
+ $ref: '#/components/schemas/_jsonapi'
+ data:
+ allOf:
+ - $ref: '#/components/schemas/Profile'
+ - type: object
+ properties:
+ relationships:
+ type: object
+ properties: &a2
+ user:
+ $ref: '#/components/schemas/_toOneRelationship'
+ meta:
+ $ref: '#/components/schemas/_meta'
+ included:
+ type: array
+ items:
+ $ref: '#/components/schemas/_resource'
+ links:
+ $ref: '#/components/schemas/_links'
+ ProfileListResponse:
+ type: object
+ description: Response for a list of "Profile"
+ required:
+ - data
+ - links
+ properties:
+ jsonapi:
+ $ref: '#/components/schemas/_jsonapi'
+ data:
+ type: array
+ items:
+ allOf:
+ - $ref: '#/components/schemas/Profile'
+ - type: object
+ properties:
+ relationships:
+ type: object
+ properties: *a2
+ meta:
+ $ref: '#/components/schemas/_meta'
+ included:
+ type: array
+ items:
+ $ref: '#/components/schemas/_resource'
+ links:
+ allOf:
+ - $ref: '#/components/schemas/_links'
+ - $ref: '#/components/schemas/_pagination'
post_Item:
type: object
description: The "post_Item" model
@@ -1702,16 +2395,24 @@ components:
title:
type: string
authorId:
- type: string
+ oneOf:
+ - type: 'null'
+ - type: string
published:
type: boolean
viewCount:
type: integer
+ notes:
+ oneOf:
+ - type: 'null'
+ - type: string
relationships:
type: object
properties:
author:
- $ref: '#/components/schemas/_toOneRelationshipWithLinks'
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/_toOneRelationshipWithLinks'
post_ItemCreateRequest:
type: object
description: Input for creating a "post_Item"
@@ -1745,16 +2446,24 @@ components:
title:
type: string
authorId:
- type: string
+ oneOf:
+ - type: 'null'
+ - type: string
published:
type: boolean
viewCount:
type: integer
+ notes:
+ oneOf:
+ - type: 'null'
+ - type: string
relationships:
type: object
properties:
author:
- $ref: '#/components/schemas/_toOneRelationship'
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/_toOneRelationship'
meta:
$ref: '#/components/schemas/_meta'
post_ItemUpdateRequest:
@@ -1787,16 +2496,24 @@ components:
title:
type: string
authorId:
- type: string
+ oneOf:
+ - type: 'null'
+ - type: string
published:
type: boolean
viewCount:
type: integer
+ notes:
+ oneOf:
+ - type: 'null'
+ - type: string
relationships:
type: object
properties:
author:
- $ref: '#/components/schemas/_toOneRelationship'
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/_toOneRelationship'
meta:
$ref: '#/components/schemas/_meta'
post_ItemResponse:
@@ -1814,7 +2531,7 @@ components:
properties:
relationships:
type: object
- properties: &a2
+ properties: &a3
author:
$ref: '#/components/schemas/_toOneRelationship'
meta:
@@ -1843,7 +2560,7 @@ components:
properties:
relationships:
type: object
- properties: *a2
+ properties: *a3
meta:
$ref: '#/components/schemas/_meta'
included:
diff --git a/packages/plugins/openapi/tests/baseline/rest-type-coverage-3.0.0.baseline.yaml b/packages/plugins/openapi/tests/baseline/rest-type-coverage-3.0.0.baseline.yaml
new file mode 100644
index 000000000..a20233b24
--- /dev/null
+++ b/packages/plugins/openapi/tests/baseline/rest-type-coverage-3.0.0.baseline.yaml
@@ -0,0 +1,803 @@
+openapi: 3.0.0
+info:
+ title: ZenStack Generated API
+ version: 1.0.0
+tags:
+ - name: foo
+ description: Foo operations
+paths:
+ /foo:
+ get:
+ operationId: list-Foo
+ description: List "Foo" resources
+ tags:
+ - foo
+ parameters:
+ - $ref: '#/components/parameters/include'
+ - $ref: '#/components/parameters/sort'
+ - $ref: '#/components/parameters/page-offset'
+ - $ref: '#/components/parameters/page-limit'
+ - name: filter[id]
+ required: false
+ description: Id filter
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[string]
+ required: false
+ description: Equality filter for "string"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[string$contains]
+ required: false
+ description: String contains filter for "string"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[string$icontains]
+ required: false
+ description: String case-insensitive contains filter for "string"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[string$search]
+ required: false
+ description: String full-text search filter for "string"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[string$startsWith]
+ required: false
+ description: String startsWith filter for "string"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[string$endsWith]
+ required: false
+ description: String endsWith filter for "string"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: filter[int]
+ required: false
+ description: Equality filter for "int"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: integer
+ - name: filter[int$lt]
+ required: false
+ description: Less-than filter for "int"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: integer
+ - name: filter[int$lte]
+ required: false
+ description: Less-than or equal filter for "int"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: integer
+ - name: filter[int$gt]
+ required: false
+ description: Greater-than filter for "int"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: integer
+ - name: filter[int$gte]
+ required: false
+ description: Greater-than or equal filter for "int"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: integer
+ - name: filter[bigInt]
+ required: false
+ description: Equality filter for "bigInt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: integer
+ - name: filter[bigInt$lt]
+ required: false
+ description: Less-than filter for "bigInt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: integer
+ - name: filter[bigInt$lte]
+ required: false
+ description: Less-than or equal filter for "bigInt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: integer
+ - name: filter[bigInt$gt]
+ required: false
+ description: Greater-than filter for "bigInt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: integer
+ - name: filter[bigInt$gte]
+ required: false
+ description: Greater-than or equal filter for "bigInt"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: integer
+ - name: filter[date]
+ required: false
+ description: Equality filter for "date"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[date$lt]
+ required: false
+ description: Less-than filter for "date"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[date$lte]
+ required: false
+ description: Less-than or equal filter for "date"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[date$gt]
+ required: false
+ description: Greater-than filter for "date"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[date$gte]
+ required: false
+ description: Greater-than or equal filter for "date"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: date-time
+ - name: filter[float]
+ required: false
+ description: Equality filter for "float"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: number
+ - name: filter[float$lt]
+ required: false
+ description: Less-than filter for "float"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: number
+ - name: filter[float$lte]
+ required: false
+ description: Less-than or equal filter for "float"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: number
+ - name: filter[float$gt]
+ required: false
+ description: Greater-than filter for "float"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: number
+ - name: filter[float$gte]
+ required: false
+ description: Greater-than or equal filter for "float"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: number
+ - name: filter[decimal]
+ required: false
+ description: Equality filter for "decimal"
+ in: query
+ style: form
+ explode: false
+ schema:
+ oneOf:
+ - type: number
+ - type: string
+ - name: filter[decimal$lt]
+ required: false
+ description: Less-than filter for "decimal"
+ in: query
+ style: form
+ explode: false
+ schema:
+ oneOf:
+ - type: number
+ - type: string
+ - name: filter[decimal$lte]
+ required: false
+ description: Less-than or equal filter for "decimal"
+ in: query
+ style: form
+ explode: false
+ schema:
+ oneOf:
+ - type: number
+ - type: string
+ - name: filter[decimal$gt]
+ required: false
+ description: Greater-than filter for "decimal"
+ in: query
+ style: form
+ explode: false
+ schema:
+ oneOf:
+ - type: number
+ - type: string
+ - name: filter[decimal$gte]
+ required: false
+ description: Greater-than or equal filter for "decimal"
+ in: query
+ style: form
+ explode: false
+ schema:
+ oneOf:
+ - type: number
+ - type: string
+ - name: filter[boolean]
+ required: false
+ description: Equality filter for "boolean"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: boolean
+ - name: filter[bytes]
+ required: false
+ description: Equality filter for "bytes"
+ in: query
+ style: form
+ explode: false
+ schema:
+ type: string
+ format: byte
+ description: Base64 encoded byte array
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/FooListResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ security: []
+ post:
+ operationId: create-Foo
+ description: Create a "Foo" resource
+ tags:
+ - foo
+ requestBody:
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/FooCreateRequest'
+ responses:
+ '201':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/FooResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ security: []
+ '/foo/{id}':
+ get:
+ operationId: fetch-Foo
+ description: Fetch a "Foo" resource
+ tags:
+ - foo
+ parameters:
+ - $ref: '#/components/parameters/id'
+ - $ref: '#/components/parameters/include'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/FooResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ security: []
+ put:
+ operationId: update-Foo-put
+ description: Update a "Foo" resource
+ tags:
+ - foo
+ parameters:
+ - $ref: '#/components/parameters/id'
+ requestBody:
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/FooUpdateRequest'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/FooResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ security: []
+ patch:
+ operationId: update-Foo-patch
+ description: Update a "Foo" resource
+ tags:
+ - foo
+ parameters:
+ - $ref: '#/components/parameters/id'
+ requestBody:
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/FooUpdateRequest'
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/FooResponse'
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ security: []
+ delete:
+ operationId: delete-Foo
+ description: Delete a "Foo" resource
+ tags:
+ - foo
+ parameters:
+ - $ref: '#/components/parameters/id'
+ responses:
+ '200':
+ description: Successful operation
+ '403':
+ description: Request is forbidden
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ '404':
+ description: Resource is not found
+ content:
+ application/vnd.api+json:
+ schema:
+ $ref: '#/components/schemas/_errorResponse'
+ security: []
+components:
+ schemas:
+ _jsonapi:
+ type: object
+ description: An object describing the server’s implementation
+ required:
+ - version
+ properties:
+ version:
+ type: string
+ _meta:
+ type: object
+ description: Meta information about the request or response
+ properties:
+ serialization:
+ description: Superjson serialization metadata
+ additionalProperties: true
+ _resourceIdentifier:
+ type: object
+ description: Identifier for a resource
+ required:
+ - type
+ - id
+ properties:
+ type:
+ type: string
+ description: Resource type
+ id:
+ type: string
+ description: Resource id
+ _resource:
+ allOf:
+ - $ref: '#/components/schemas/_resourceIdentifier'
+ - type: object
+ description: A resource with attributes and relationships
+ properties:
+ attributes:
+ type: object
+ description: Resource attributes
+ relationships:
+ type: object
+ description: Resource relationships
+ _links:
+ type: object
+ required:
+ - self
+ description: Links related to the resource
+ properties:
+ self:
+ type: string
+ description: Link for refetching the curent results
+ _pagination:
+ type: object
+ description: Pagination information
+ required:
+ - first
+ - last
+ - prev
+ - next
+ properties:
+ first:
+ type: string
+ description: Link to the first page
+ nullable: true
+ last:
+ type: string
+ description: Link to the last page
+ nullable: true
+ prev:
+ type: string
+ description: Link to the previous page
+ nullable: true
+ next:
+ type: string
+ description: Link to the next page
+ nullable: true
+ _errors:
+ type: array
+ description: An array of error objects
+ items:
+ type: object
+ required:
+ - status
+ - code
+ properties:
+ status:
+ type: string
+ description: HTTP status
+ code:
+ type: string
+ description: Error code
+ prismaCode:
+ type: string
+ description: Prisma error code if the error is thrown by Prisma
+ title:
+ type: string
+ description: Error title
+ detail:
+ type: string
+ description: Error detail
+ reason:
+ type: string
+ description: Detailed error reason
+ zodErrors:
+ type: object
+ additionalProperties: true
+ description: Zod validation errors if the error is due to data validation
+ failure
+ _errorResponse:
+ type: object
+ required:
+ - errors
+ description: An error response
+ properties:
+ jsonapi:
+ $ref: '#/components/schemas/_jsonapi'
+ errors:
+ $ref: '#/components/schemas/_errors'
+ Foo:
+ type: object
+ description: The "Foo" model
+ required:
+ - id
+ - type
+ - attributes
+ properties:
+ id:
+ type: string
+ type:
+ type: string
+ attributes:
+ type: object
+ properties:
+ string:
+ type: string
+ int:
+ type: integer
+ bigInt:
+ type: integer
+ date:
+ type: string
+ format: date-time
+ float:
+ type: number
+ decimal:
+ oneOf:
+ - type: number
+ - type: string
+ boolean:
+ type: boolean
+ bytes:
+ type: string
+ format: byte
+ description: Base64 encoded byte array
+ FooCreateRequest:
+ type: object
+ description: Input for creating a "Foo"
+ required:
+ - data
+ properties:
+ data:
+ type: object
+ description: The "Foo" model
+ required:
+ - type
+ - attributes
+ properties:
+ type:
+ type: string
+ attributes:
+ type: object
+ required:
+ - string
+ - int
+ - bigInt
+ - date
+ - float
+ - decimal
+ - boolean
+ - bytes
+ properties:
+ string:
+ type: string
+ int:
+ type: integer
+ bigInt:
+ type: integer
+ date:
+ type: string
+ format: date-time
+ float:
+ type: number
+ decimal:
+ oneOf:
+ - type: number
+ - type: string
+ boolean:
+ type: boolean
+ bytes:
+ type: string
+ format: byte
+ description: Base64 encoded byte array
+ meta:
+ $ref: '#/components/schemas/_meta'
+ FooUpdateRequest:
+ type: object
+ description: Input for updating a "Foo"
+ required:
+ - data
+ properties:
+ data:
+ type: object
+ description: The "Foo" model
+ required:
+ - id
+ - type
+ - attributes
+ properties:
+ id:
+ type: string
+ type:
+ type: string
+ attributes:
+ type: object
+ properties:
+ string:
+ type: string
+ int:
+ type: integer
+ bigInt:
+ type: integer
+ date:
+ type: string
+ format: date-time
+ float:
+ type: number
+ decimal:
+ oneOf:
+ - type: number
+ - type: string
+ boolean:
+ type: boolean
+ bytes:
+ type: string
+ format: byte
+ description: Base64 encoded byte array
+ meta:
+ $ref: '#/components/schemas/_meta'
+ FooResponse:
+ type: object
+ description: Response for a "Foo"
+ required:
+ - data
+ properties:
+ jsonapi:
+ $ref: '#/components/schemas/_jsonapi'
+ data:
+ allOf:
+ - $ref: '#/components/schemas/Foo'
+ - type: object
+ properties:
+ relationships:
+ type: object
+ properties: &a1 {}
+ meta:
+ $ref: '#/components/schemas/_meta'
+ included:
+ type: array
+ items:
+ $ref: '#/components/schemas/_resource'
+ links:
+ $ref: '#/components/schemas/_links'
+ FooListResponse:
+ type: object
+ description: Response for a list of "Foo"
+ required:
+ - data
+ - links
+ properties:
+ jsonapi:
+ $ref: '#/components/schemas/_jsonapi'
+ data:
+ type: array
+ items:
+ allOf:
+ - $ref: '#/components/schemas/Foo'
+ - type: object
+ properties:
+ relationships:
+ type: object
+ properties: *a1
+ meta:
+ $ref: '#/components/schemas/_meta'
+ included:
+ type: array
+ items:
+ $ref: '#/components/schemas/_resource'
+ links:
+ allOf:
+ - $ref: '#/components/schemas/_links'
+ - $ref: '#/components/schemas/_pagination'
+ parameters:
+ id:
+ name: id
+ in: path
+ description: The resource id
+ required: true
+ schema:
+ type: string
+ include:
+ name: include
+ in: query
+ description: Relationships to include
+ required: false
+ style: form
+ schema:
+ type: string
+ sort:
+ name: sort
+ in: query
+ description: Fields to sort by
+ required: false
+ style: form
+ schema:
+ type: string
+ page-offset:
+ name: page[offset]
+ in: query
+ description: Offset for pagination
+ required: false
+ style: form
+ schema:
+ type: integer
+ page-limit:
+ name: page[limit]
+ in: query
+ description: Limit for pagination
+ required: false
+ style: form
+ schema:
+ type: integer
diff --git a/packages/plugins/openapi/tests/baseline/rest-type-coverage.baseline.yaml b/packages/plugins/openapi/tests/baseline/rest-type-coverage-3.1.0.baseline.yaml
similarity index 100%
rename from packages/plugins/openapi/tests/baseline/rest-type-coverage.baseline.yaml
rename to packages/plugins/openapi/tests/baseline/rest-type-coverage-3.1.0.baseline.yaml
index c37e16697..30b1dc4f6 100644
--- a/packages/plugins/openapi/tests/baseline/rest-type-coverage.baseline.yaml
+++ b/packages/plugins/openapi/tests/baseline/rest-type-coverage-3.1.0.baseline.yaml
@@ -522,24 +522,24 @@ components:
properties:
first:
oneOf:
+ - type: 'null'
- type: string
description: Link to the first page
- - type: 'null'
last:
oneOf:
+ - type: 'null'
- type: string
description: Link to the last page
- - type: 'null'
prev:
oneOf:
+ - type: 'null'
- type: string
description: Link to the previous page
- - type: 'null'
next:
oneOf:
+ - type: 'null'
- type: string
description: Link to the next page
- - type: 'null'
_errors:
type: array
description: An array of error objects
diff --git a/packages/plugins/openapi/tests/baseline/rpc.baseline.yaml b/packages/plugins/openapi/tests/baseline/rpc-3.0.0.baseline.yaml
similarity index 67%
rename from packages/plugins/openapi/tests/baseline/rpc.baseline.yaml
rename to packages/plugins/openapi/tests/baseline/rpc-3.0.0.baseline.yaml
index 94d1445ce..0f936771e 100644
--- a/packages/plugins/openapi/tests/baseline/rpc.baseline.yaml
+++ b/packages/plugins/openapi/tests/baseline/rpc-3.0.0.baseline.yaml
@@ -1,10 +1,12 @@
-openapi: 3.1.0
+openapi: 3.0.0
info:
title: ZenStack Generated API
version: 1.0.0
tags:
- name: user
description: User operations
+ - name: profile
+ description: Profile operations
- name: post_Item
description: Post-related operations
components:
@@ -22,6 +24,12 @@ components:
- updatedAt
- email
- role
+ ProfileScalarFieldEnum:
+ type: string
+ enum:
+ - id
+ - image
+ - userId
Post_ItemScalarFieldEnum:
type: string
enum:
@@ -32,6 +40,7 @@ components:
- authorId
- published
- viewCount
+ - notes
SortOrder:
type: string
enum:
@@ -66,12 +75,32 @@ components:
type: array
items:
$ref: '#/components/schemas/Post_Item'
+ profile:
+ allOf:
+ - $ref: '#/components/schemas/Profile'
+ nullable: true
required:
- id
- createdAt
- updatedAt
- email
- role
+ Profile:
+ type: object
+ properties:
+ id:
+ type: string
+ image:
+ type: string
+ nullable: true
+ user:
+ $ref: '#/components/schemas/User'
+ userId:
+ type: string
+ required:
+ - id
+ - user
+ - userId
Post_Item:
type: object
properties:
@@ -86,13 +115,19 @@ components:
title:
type: string
author:
- $ref: '#/components/schemas/User'
+ allOf:
+ - $ref: '#/components/schemas/User'
+ nullable: true
authorId:
type: string
+ nullable: true
published:
type: boolean
viewCount:
type: integer
+ notes:
+ type: string
+ nullable: true
required:
- id
- createdAt
@@ -143,6 +178,11 @@ components:
- $ref: '#/components/schemas/Role'
posts:
$ref: '#/components/schemas/Post_ItemListRelationFilter'
+ profile:
+ oneOf:
+ - $ref: '#/components/schemas/ProfileRelationFilter'
+ - $ref: '#/components/schemas/ProfileWhereInput'
+ nullable: true
UserOrderByWithRelationInput:
type: object
properties:
@@ -158,6 +198,8 @@ components:
$ref: '#/components/schemas/SortOrder'
posts:
$ref: '#/components/schemas/Post_ItemOrderByRelationAggregateInput'
+ profile:
+ $ref: '#/components/schemas/ProfileOrderByWithRelationInput'
UserWhereUniqueInput:
type: object
properties:
@@ -206,6 +248,94 @@ components:
oneOf:
- $ref: '#/components/schemas/EnumroleWithAggregatesFilter'
- $ref: '#/components/schemas/Role'
+ ProfileWhereInput:
+ type: object
+ properties:
+ AND:
+ oneOf:
+ - $ref: '#/components/schemas/ProfileWhereInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/ProfileWhereInput'
+ OR:
+ type: array
+ items:
+ $ref: '#/components/schemas/ProfileWhereInput'
+ NOT:
+ oneOf:
+ - $ref: '#/components/schemas/ProfileWhereInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/ProfileWhereInput'
+ id:
+ oneOf:
+ - $ref: '#/components/schemas/StringFilter'
+ - type: string
+ image:
+ oneOf:
+ - $ref: '#/components/schemas/StringNullableFilter'
+ - type: string
+ nullable: true
+ userId:
+ oneOf:
+ - $ref: '#/components/schemas/StringFilter'
+ - type: string
+ user:
+ oneOf:
+ - $ref: '#/components/schemas/UserRelationFilter'
+ - $ref: '#/components/schemas/UserWhereInput'
+ ProfileOrderByWithRelationInput:
+ type: object
+ properties:
+ id:
+ $ref: '#/components/schemas/SortOrder'
+ image:
+ oneOf:
+ - $ref: '#/components/schemas/SortOrder'
+ - $ref: '#/components/schemas/SortOrderInput'
+ userId:
+ $ref: '#/components/schemas/SortOrder'
+ user:
+ $ref: '#/components/schemas/UserOrderByWithRelationInput'
+ ProfileWhereUniqueInput:
+ type: object
+ properties:
+ id:
+ type: string
+ userId:
+ type: string
+ ProfileScalarWhereWithAggregatesInput:
+ type: object
+ properties:
+ AND:
+ oneOf:
+ - $ref: '#/components/schemas/ProfileScalarWhereWithAggregatesInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/ProfileScalarWhereWithAggregatesInput'
+ OR:
+ type: array
+ items:
+ $ref: '#/components/schemas/ProfileScalarWhereWithAggregatesInput'
+ NOT:
+ oneOf:
+ - $ref: '#/components/schemas/ProfileScalarWhereWithAggregatesInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/ProfileScalarWhereWithAggregatesInput'
+ id:
+ oneOf:
+ - $ref: '#/components/schemas/StringWithAggregatesFilter'
+ - type: string
+ image:
+ oneOf:
+ - $ref: '#/components/schemas/StringNullableWithAggregatesFilter'
+ - type: string
+ nullable: true
+ userId:
+ oneOf:
+ - $ref: '#/components/schemas/StringWithAggregatesFilter'
+ - type: string
Post_ItemWhereInput:
type: object
properties:
@@ -247,6 +377,7 @@ components:
oneOf:
- $ref: '#/components/schemas/StringNullableFilter'
- type: string
+ nullable: true
published:
oneOf:
- $ref: '#/components/schemas/BoolFilter'
@@ -255,10 +386,16 @@ components:
oneOf:
- $ref: '#/components/schemas/IntFilter'
- type: integer
+ notes:
+ oneOf:
+ - $ref: '#/components/schemas/StringNullableFilter'
+ - type: string
+ nullable: true
author:
oneOf:
- $ref: '#/components/schemas/UserRelationFilter'
- $ref: '#/components/schemas/UserWhereInput'
+ nullable: true
Post_ItemOrderByWithRelationInput:
type: object
properties:
@@ -278,6 +415,10 @@ components:
$ref: '#/components/schemas/SortOrder'
viewCount:
$ref: '#/components/schemas/SortOrder'
+ notes:
+ oneOf:
+ - $ref: '#/components/schemas/SortOrder'
+ - $ref: '#/components/schemas/SortOrderInput'
author:
$ref: '#/components/schemas/UserOrderByWithRelationInput'
Post_ItemWhereUniqueInput:
@@ -326,6 +467,7 @@ components:
oneOf:
- $ref: '#/components/schemas/StringNullableWithAggregatesFilter'
- type: string
+ nullable: true
published:
oneOf:
- $ref: '#/components/schemas/BoolWithAggregatesFilter'
@@ -334,6 +476,11 @@ components:
oneOf:
- $ref: '#/components/schemas/IntWithAggregatesFilter'
- type: integer
+ notes:
+ oneOf:
+ - $ref: '#/components/schemas/StringNullableWithAggregatesFilter'
+ - type: string
+ nullable: true
UserCreateInput:
type: object
properties:
@@ -351,6 +498,8 @@ components:
$ref: '#/components/schemas/Role'
posts:
$ref: '#/components/schemas/Post_ItemCreateNestedManyWithoutAuthorInput'
+ profile:
+ $ref: '#/components/schemas/ProfileCreateNestedOneWithoutUserInput'
required:
- email
UserUpdateInput:
@@ -380,6 +529,8 @@ components:
- $ref: '#/components/schemas/EnumroleFieldUpdateOperationsInput'
posts:
$ref: '#/components/schemas/Post_ItemUpdateManyWithoutAuthorNestedInput'
+ profile:
+ $ref: '#/components/schemas/ProfileUpdateOneWithoutUserNestedInput'
UserCreateManyInput:
type: object
properties:
@@ -422,6 +573,56 @@ components:
oneOf:
- $ref: '#/components/schemas/Role'
- $ref: '#/components/schemas/EnumroleFieldUpdateOperationsInput'
+ ProfileCreateInput:
+ type: object
+ properties:
+ id:
+ type: string
+ image:
+ type: string
+ nullable: true
+ user:
+ $ref: '#/components/schemas/UserCreateNestedOneWithoutProfileInput'
+ required:
+ - user
+ ProfileUpdateInput:
+ type: object
+ properties:
+ id:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ image:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/NullableStringFieldUpdateOperationsInput'
+ nullable: true
+ user:
+ $ref: '#/components/schemas/UserUpdateOneRequiredWithoutProfileNestedInput'
+ ProfileCreateManyInput:
+ type: object
+ properties:
+ id:
+ type: string
+ image:
+ type: string
+ nullable: true
+ userId:
+ type: string
+ required:
+ - userId
+ ProfileUpdateManyMutationInput:
+ type: object
+ properties:
+ id:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ image:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/NullableStringFieldUpdateOperationsInput'
+ nullable: true
Post_ItemCreateInput:
type: object
properties:
@@ -439,6 +640,9 @@ components:
type: boolean
viewCount:
type: integer
+ notes:
+ type: string
+ nullable: true
author:
$ref: '#/components/schemas/UserCreateNestedOneWithoutPostsInput'
required:
@@ -473,6 +677,11 @@ components:
oneOf:
- type: integer
- $ref: '#/components/schemas/IntFieldUpdateOperationsInput'
+ notes:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/NullableStringFieldUpdateOperationsInput'
+ nullable: true
author:
$ref: '#/components/schemas/UserUpdateOneWithoutPostsNestedInput'
Post_ItemCreateManyInput:
@@ -490,10 +699,14 @@ components:
type: string
authorId:
type: string
+ nullable: true
published:
type: boolean
viewCount:
type: integer
+ notes:
+ type: string
+ nullable: true
required:
- id
- title
@@ -526,6 +739,11 @@ components:
oneOf:
- type: integer
- $ref: '#/components/schemas/IntFieldUpdateOperationsInput'
+ notes:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/NullableStringFieldUpdateOperationsInput'
+ nullable: true
StringFilter:
type: object
properties:
@@ -632,6 +850,17 @@ components:
$ref: '#/components/schemas/Post_ItemWhereInput'
none:
$ref: '#/components/schemas/Post_ItemWhereInput'
+ ProfileRelationFilter:
+ type: object
+ properties:
+ is:
+ allOf:
+ - $ref: '#/components/schemas/ProfileWhereInput'
+ nullable: true
+ isNot:
+ allOf:
+ - $ref: '#/components/schemas/ProfileWhereInput'
+ nullable: true
Post_ItemOrderByRelationAggregateInput:
type: object
properties:
@@ -757,18 +986,21 @@ components:
properties:
equals:
type: string
+ nullable: true
in:
oneOf:
- type: array
items:
type: string
- type: string
+ nullable: true
notIn:
oneOf:
- type: array
items:
type: string
- type: string
+ nullable: true
lt:
type: string
lte:
@@ -789,51 +1021,18 @@ components:
oneOf:
- type: string
- $ref: '#/components/schemas/NestedStringNullableFilter'
- BoolFilter:
- type: object
- properties:
- equals:
- type: boolean
- not:
- oneOf:
- - type: boolean
- - $ref: '#/components/schemas/NestedBoolFilter'
- IntFilter:
- type: object
- properties:
- equals:
- type: integer
- in:
- oneOf:
- - type: array
- items:
- type: integer
- - type: integer
- notIn:
- oneOf:
- - type: array
- items:
- type: integer
- - type: integer
- lt:
- type: integer
- lte:
- type: integer
- gt:
- type: integer
- gte:
- type: integer
- not:
- oneOf:
- - type: integer
- - $ref: '#/components/schemas/NestedIntFilter'
+ nullable: true
UserRelationFilter:
type: object
properties:
is:
- $ref: '#/components/schemas/UserWhereInput'
+ allOf:
+ - $ref: '#/components/schemas/UserWhereInput'
+ nullable: true
isNot:
- $ref: '#/components/schemas/UserWhereInput'
+ allOf:
+ - $ref: '#/components/schemas/UserWhereInput'
+ nullable: true
SortOrderInput:
type: object
properties:
@@ -848,18 +1047,21 @@ components:
properties:
equals:
type: string
+ nullable: true
in:
oneOf:
- type: array
items:
type: string
- type: string
+ nullable: true
notIn:
oneOf:
- type: array
items:
type: string
- type: string
+ nullable: true
lt:
type: string
lte:
@@ -880,12 +1082,51 @@ components:
oneOf:
- type: string
- $ref: '#/components/schemas/NestedStringNullableWithAggregatesFilter'
+ nullable: true
_count:
$ref: '#/components/schemas/NestedIntNullableFilter'
_min:
$ref: '#/components/schemas/NestedStringNullableFilter'
_max:
$ref: '#/components/schemas/NestedStringNullableFilter'
+ BoolFilter:
+ type: object
+ properties:
+ equals:
+ type: boolean
+ not:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/NestedBoolFilter'
+ IntFilter:
+ type: object
+ properties:
+ equals:
+ type: integer
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: integer
+ - type: integer
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: integer
+ - type: integer
+ lt:
+ type: integer
+ lte:
+ type: integer
+ gt:
+ type: integer
+ gte:
+ type: integer
+ not:
+ oneOf:
+ - type: integer
+ - $ref: '#/components/schemas/NestedIntFilter'
BoolWithAggregatesFilter:
type: object
properties:
@@ -967,6 +1208,55 @@ components:
- type: array
items:
$ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ ProfileCreateNestedOneWithoutUserInput:
+ type: object
+ properties:
+ create:
+ oneOf:
+ - $ref: '#/components/schemas/ProfileCreateWithoutUserInput'
+ - $ref: '#/components/schemas/ProfileUncheckedCreateWithoutUserInput'
+ connectOrCreate:
+ $ref: '#/components/schemas/ProfileCreateOrConnectWithoutUserInput'
+ connect:
+ $ref: '#/components/schemas/ProfileWhereUniqueInput'
+ Post_ItemUncheckedCreateNestedManyWithoutAuthorInput:
+ type: object
+ properties:
+ create:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemCreateWithoutAuthorInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemCreateWithoutAuthorInput'
+ - $ref: '#/components/schemas/Post_ItemUncheckedCreateWithoutAuthorInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemUncheckedCreateWithoutAuthorInput'
+ connectOrCreate:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemCreateOrConnectWithoutAuthorInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemCreateOrConnectWithoutAuthorInput'
+ createMany:
+ $ref: '#/components/schemas/Post_ItemCreateManyAuthorInputEnvelope'
+ connect:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ ProfileUncheckedCreateNestedOneWithoutUserInput:
+ type: object
+ properties:
+ create:
+ oneOf:
+ - $ref: '#/components/schemas/ProfileCreateWithoutUserInput'
+ - $ref: '#/components/schemas/ProfileUncheckedCreateWithoutUserInput'
+ connectOrCreate:
+ $ref: '#/components/schemas/ProfileCreateOrConnectWithoutUserInput'
+ connect:
+ $ref: '#/components/schemas/ProfileWhereUniqueInput'
StringFieldUpdateOperationsInput:
type: object
properties:
@@ -1052,17 +1342,162 @@ components:
- type: array
items:
$ref: '#/components/schemas/Post_ItemScalarWhereInput'
- UserCreateNestedOneWithoutPostsInput:
+ ProfileUpdateOneWithoutUserNestedInput:
type: object
properties:
create:
oneOf:
- - $ref: '#/components/schemas/UserCreateWithoutPostsInput'
- - $ref: '#/components/schemas/UserUncheckedCreateWithoutPostsInput'
+ - $ref: '#/components/schemas/ProfileCreateWithoutUserInput'
+ - $ref: '#/components/schemas/ProfileUncheckedCreateWithoutUserInput'
connectOrCreate:
- $ref: '#/components/schemas/UserCreateOrConnectWithoutPostsInput'
+ $ref: '#/components/schemas/ProfileCreateOrConnectWithoutUserInput'
+ upsert:
+ $ref: '#/components/schemas/ProfileUpsertWithoutUserInput'
+ disconnect:
+ type: boolean
+ delete:
+ type: boolean
connect:
- $ref: '#/components/schemas/UserWhereUniqueInput'
+ $ref: '#/components/schemas/ProfileWhereUniqueInput'
+ update:
+ oneOf:
+ - $ref: '#/components/schemas/ProfileUpdateWithoutUserInput'
+ - $ref: '#/components/schemas/ProfileUncheckedUpdateWithoutUserInput'
+ Post_ItemUncheckedUpdateManyWithoutAuthorNestedInput:
+ type: object
+ properties:
+ create:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemCreateWithoutAuthorInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemCreateWithoutAuthorInput'
+ - $ref: '#/components/schemas/Post_ItemUncheckedCreateWithoutAuthorInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemUncheckedCreateWithoutAuthorInput'
+ connectOrCreate:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemCreateOrConnectWithoutAuthorInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemCreateOrConnectWithoutAuthorInput'
+ upsert:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemUpsertWithWhereUniqueWithoutAuthorInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemUpsertWithWhereUniqueWithoutAuthorInput'
+ createMany:
+ $ref: '#/components/schemas/Post_ItemCreateManyAuthorInputEnvelope'
+ set:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ disconnect:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ delete:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ connect:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ update:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemUpdateWithWhereUniqueWithoutAuthorInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemUpdateWithWhereUniqueWithoutAuthorInput'
+ updateMany:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemUpdateManyWithWhereWithoutAuthorInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemUpdateManyWithWhereWithoutAuthorInput'
+ deleteMany:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemScalarWhereInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemScalarWhereInput'
+ ProfileUncheckedUpdateOneWithoutUserNestedInput:
+ type: object
+ properties:
+ create:
+ oneOf:
+ - $ref: '#/components/schemas/ProfileCreateWithoutUserInput'
+ - $ref: '#/components/schemas/ProfileUncheckedCreateWithoutUserInput'
+ connectOrCreate:
+ $ref: '#/components/schemas/ProfileCreateOrConnectWithoutUserInput'
+ upsert:
+ $ref: '#/components/schemas/ProfileUpsertWithoutUserInput'
+ disconnect:
+ type: boolean
+ delete:
+ type: boolean
+ connect:
+ $ref: '#/components/schemas/ProfileWhereUniqueInput'
+ update:
+ oneOf:
+ - $ref: '#/components/schemas/ProfileUpdateWithoutUserInput'
+ - $ref: '#/components/schemas/ProfileUncheckedUpdateWithoutUserInput'
+ UserCreateNestedOneWithoutProfileInput:
+ type: object
+ properties:
+ create:
+ oneOf:
+ - $ref: '#/components/schemas/UserCreateWithoutProfileInput'
+ - $ref: '#/components/schemas/UserUncheckedCreateWithoutProfileInput'
+ connectOrCreate:
+ $ref: '#/components/schemas/UserCreateOrConnectWithoutProfileInput'
+ connect:
+ $ref: '#/components/schemas/UserWhereUniqueInput'
+ NullableStringFieldUpdateOperationsInput:
+ type: object
+ properties:
+ set:
+ type: string
+ nullable: true
+ UserUpdateOneRequiredWithoutProfileNestedInput:
+ type: object
+ properties:
+ create:
+ oneOf:
+ - $ref: '#/components/schemas/UserCreateWithoutProfileInput'
+ - $ref: '#/components/schemas/UserUncheckedCreateWithoutProfileInput'
+ connectOrCreate:
+ $ref: '#/components/schemas/UserCreateOrConnectWithoutProfileInput'
+ upsert:
+ $ref: '#/components/schemas/UserUpsertWithoutProfileInput'
+ connect:
+ $ref: '#/components/schemas/UserWhereUniqueInput'
+ update:
+ oneOf:
+ - $ref: '#/components/schemas/UserUpdateWithoutProfileInput'
+ - $ref: '#/components/schemas/UserUncheckedUpdateWithoutProfileInput'
+ UserCreateNestedOneWithoutPostsInput:
+ type: object
+ properties:
+ create:
+ oneOf:
+ - $ref: '#/components/schemas/UserCreateWithoutPostsInput'
+ - $ref: '#/components/schemas/UserUncheckedCreateWithoutPostsInput'
+ connectOrCreate:
+ $ref: '#/components/schemas/UserCreateOrConnectWithoutPostsInput'
+ connect:
+ $ref: '#/components/schemas/UserWhereUniqueInput'
BoolFieldUpdateOperationsInput:
type: object
properties:
@@ -1344,18 +1779,21 @@ components:
properties:
equals:
type: string
+ nullable: true
in:
oneOf:
- type: array
items:
type: string
- type: string
+ nullable: true
notIn:
oneOf:
- type: array
items:
type: string
- type: string
+ nullable: true
lt:
type: string
lte:
@@ -1374,32 +1812,27 @@ components:
oneOf:
- type: string
- $ref: '#/components/schemas/NestedStringNullableFilter'
- NestedBoolFilter:
- type: object
- properties:
- equals:
- type: boolean
- not:
- oneOf:
- - type: boolean
- - $ref: '#/components/schemas/NestedBoolFilter'
+ nullable: true
NestedStringNullableWithAggregatesFilter:
type: object
properties:
equals:
type: string
+ nullable: true
in:
oneOf:
- type: array
items:
type: string
- type: string
+ nullable: true
notIn:
oneOf:
- type: array
items:
type: string
- type: string
+ nullable: true
lt:
type: string
lte:
@@ -1418,6 +1851,7 @@ components:
oneOf:
- type: string
- $ref: '#/components/schemas/NestedStringNullableWithAggregatesFilter'
+ nullable: true
_count:
$ref: '#/components/schemas/NestedIntNullableFilter'
_min:
@@ -1429,18 +1863,21 @@ components:
properties:
equals:
type: integer
+ nullable: true
in:
oneOf:
- type: array
items:
type: integer
- type: integer
+ nullable: true
notIn:
oneOf:
- type: array
items:
type: integer
- type: integer
+ nullable: true
lt:
type: integer
lte:
@@ -1453,6 +1890,16 @@ components:
oneOf:
- type: integer
- $ref: '#/components/schemas/NestedIntNullableFilter'
+ nullable: true
+ NestedBoolFilter:
+ type: object
+ properties:
+ equals:
+ type: boolean
+ not:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/NestedBoolFilter'
NestedBoolWithAggregatesFilter:
type: object
properties:
@@ -1553,6 +2000,9 @@ components:
type: boolean
viewCount:
type: integer
+ notes:
+ type: string
+ nullable: true
required:
- id
- title
@@ -1573,6 +2023,9 @@ components:
type: boolean
viewCount:
type: integer
+ notes:
+ type: string
+ nullable: true
required:
- id
- title
@@ -1601,6 +2054,34 @@ components:
type: boolean
required:
- data
+ ProfileCreateWithoutUserInput:
+ type: object
+ properties:
+ id:
+ type: string
+ image:
+ type: string
+ nullable: true
+ ProfileUncheckedCreateWithoutUserInput:
+ type: object
+ properties:
+ id:
+ type: string
+ image:
+ type: string
+ nullable: true
+ ProfileCreateOrConnectWithoutUserInput:
+ type: object
+ properties:
+ where:
+ $ref: '#/components/schemas/ProfileWhereUniqueInput'
+ create:
+ oneOf:
+ - $ref: '#/components/schemas/ProfileCreateWithoutUserInput'
+ - $ref: '#/components/schemas/ProfileUncheckedCreateWithoutUserInput'
+ required:
+ - where
+ - create
Post_ItemUpsertWithWhereUniqueWithoutAuthorInput:
type: object
properties:
@@ -1683,6 +2164,7 @@ components:
oneOf:
- $ref: '#/components/schemas/StringNullableFilter'
- type: string
+ nullable: true
published:
oneOf:
- $ref: '#/components/schemas/BoolFilter'
@@ -1691,7 +2173,50 @@ components:
oneOf:
- $ref: '#/components/schemas/IntFilter'
- type: integer
- UserCreateWithoutPostsInput:
+ notes:
+ oneOf:
+ - $ref: '#/components/schemas/StringNullableFilter'
+ - type: string
+ nullable: true
+ ProfileUpsertWithoutUserInput:
+ type: object
+ properties:
+ update:
+ oneOf:
+ - $ref: '#/components/schemas/ProfileUpdateWithoutUserInput'
+ - $ref: '#/components/schemas/ProfileUncheckedUpdateWithoutUserInput'
+ create:
+ oneOf:
+ - $ref: '#/components/schemas/ProfileCreateWithoutUserInput'
+ - $ref: '#/components/schemas/ProfileUncheckedCreateWithoutUserInput'
+ required:
+ - update
+ - create
+ ProfileUpdateWithoutUserInput:
+ type: object
+ properties:
+ id:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ image:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/NullableStringFieldUpdateOperationsInput'
+ nullable: true
+ ProfileUncheckedUpdateWithoutUserInput:
+ type: object
+ properties:
+ id:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ image:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/NullableStringFieldUpdateOperationsInput'
+ nullable: true
+ UserCreateWithoutProfileInput:
type: object
properties:
id:
@@ -1706,9 +2231,11 @@ components:
type: string
role:
$ref: '#/components/schemas/Role'
+ posts:
+ $ref: '#/components/schemas/Post_ItemCreateNestedManyWithoutAuthorInput'
required:
- email
- UserUncheckedCreateWithoutPostsInput:
+ UserUncheckedCreateWithoutProfileInput:
type: object
properties:
id:
@@ -1723,35 +2250,38 @@ components:
type: string
role:
$ref: '#/components/schemas/Role'
+ posts:
+ $ref: "#/components/schemas/Post_ItemUncheckedCreateNestedManyWithoutAuthorInpu\
+ t"
required:
- email
- UserCreateOrConnectWithoutPostsInput:
+ UserCreateOrConnectWithoutProfileInput:
type: object
properties:
where:
$ref: '#/components/schemas/UserWhereUniqueInput'
create:
oneOf:
- - $ref: '#/components/schemas/UserCreateWithoutPostsInput'
- - $ref: '#/components/schemas/UserUncheckedCreateWithoutPostsInput'
+ - $ref: '#/components/schemas/UserCreateWithoutProfileInput'
+ - $ref: '#/components/schemas/UserUncheckedCreateWithoutProfileInput'
required:
- where
- create
- UserUpsertWithoutPostsInput:
+ UserUpsertWithoutProfileInput:
type: object
properties:
update:
oneOf:
- - $ref: '#/components/schemas/UserUpdateWithoutPostsInput'
- - $ref: '#/components/schemas/UserUncheckedUpdateWithoutPostsInput'
+ - $ref: '#/components/schemas/UserUpdateWithoutProfileInput'
+ - $ref: '#/components/schemas/UserUncheckedUpdateWithoutProfileInput'
create:
oneOf:
- - $ref: '#/components/schemas/UserCreateWithoutPostsInput'
- - $ref: '#/components/schemas/UserUncheckedCreateWithoutPostsInput'
+ - $ref: '#/components/schemas/UserCreateWithoutProfileInput'
+ - $ref: '#/components/schemas/UserUncheckedCreateWithoutProfileInput'
required:
- update
- create
- UserUpdateWithoutPostsInput:
+ UserUpdateWithoutProfileInput:
type: object
properties:
id:
@@ -1776,7 +2306,9 @@ components:
oneOf:
- $ref: '#/components/schemas/Role'
- $ref: '#/components/schemas/EnumroleFieldUpdateOperationsInput'
- UserUncheckedUpdateWithoutPostsInput:
+ posts:
+ $ref: '#/components/schemas/Post_ItemUpdateManyWithoutAuthorNestedInput'
+ UserUncheckedUpdateWithoutProfileInput:
type: object
properties:
id:
@@ -1801,7 +2333,10 @@ components:
oneOf:
- $ref: '#/components/schemas/Role'
- $ref: '#/components/schemas/EnumroleFieldUpdateOperationsInput'
- Post_ItemCreateManyAuthorInput:
+ posts:
+ $ref: "#/components/schemas/Post_ItemUncheckedUpdateManyWithoutAuthorNestedInpu\
+ t"
+ UserCreateWithoutPostsInput:
type: object
properties:
id:
@@ -1812,51 +2347,177 @@ components:
updatedAt:
type: string
format: date-time
- title:
+ email:
type: string
- published:
- type: boolean
- viewCount:
- type: integer
+ role:
+ $ref: '#/components/schemas/Role'
+ profile:
+ $ref: '#/components/schemas/ProfileCreateNestedOneWithoutUserInput'
required:
- - id
- - title
- Post_ItemUpdateWithoutAuthorInput:
+ - email
+ UserUncheckedCreateWithoutPostsInput:
type: object
properties:
id:
- oneOf:
- - type: string
- - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ type: string
createdAt:
- oneOf:
- - type: string
- format: date-time
- - $ref: '#/components/schemas/DateTimeFieldUpdateOperationsInput'
+ type: string
+ format: date-time
updatedAt:
- oneOf:
- - type: string
- format: date-time
- - $ref: '#/components/schemas/DateTimeFieldUpdateOperationsInput'
- title:
- oneOf:
- - type: string
- - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
- published:
- oneOf:
- - type: boolean
- - $ref: '#/components/schemas/BoolFieldUpdateOperationsInput'
- viewCount:
- oneOf:
- - type: integer
- - $ref: '#/components/schemas/IntFieldUpdateOperationsInput'
- Post_ItemUncheckedUpdateWithoutAuthorInput:
+ type: string
+ format: date-time
+ email:
+ type: string
+ role:
+ $ref: '#/components/schemas/Role'
+ profile:
+ $ref: '#/components/schemas/ProfileUncheckedCreateNestedOneWithoutUserInput'
+ required:
+ - email
+ UserCreateOrConnectWithoutPostsInput:
type: object
properties:
- id:
+ where:
+ $ref: '#/components/schemas/UserWhereUniqueInput'
+ create:
oneOf:
- - type: string
- - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ - $ref: '#/components/schemas/UserCreateWithoutPostsInput'
+ - $ref: '#/components/schemas/UserUncheckedCreateWithoutPostsInput'
+ required:
+ - where
+ - create
+ UserUpsertWithoutPostsInput:
+ type: object
+ properties:
+ update:
+ oneOf:
+ - $ref: '#/components/schemas/UserUpdateWithoutPostsInput'
+ - $ref: '#/components/schemas/UserUncheckedUpdateWithoutPostsInput'
+ create:
+ oneOf:
+ - $ref: '#/components/schemas/UserCreateWithoutPostsInput'
+ - $ref: '#/components/schemas/UserUncheckedCreateWithoutPostsInput'
+ required:
+ - update
+ - create
+ UserUpdateWithoutPostsInput:
+ type: object
+ properties:
+ id:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ createdAt:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/DateTimeFieldUpdateOperationsInput'
+ updatedAt:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/DateTimeFieldUpdateOperationsInput'
+ email:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ role:
+ oneOf:
+ - $ref: '#/components/schemas/Role'
+ - $ref: '#/components/schemas/EnumroleFieldUpdateOperationsInput'
+ profile:
+ $ref: '#/components/schemas/ProfileUpdateOneWithoutUserNestedInput'
+ UserUncheckedUpdateWithoutPostsInput:
+ type: object
+ properties:
+ id:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ createdAt:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/DateTimeFieldUpdateOperationsInput'
+ updatedAt:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/DateTimeFieldUpdateOperationsInput'
+ email:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ role:
+ oneOf:
+ - $ref: '#/components/schemas/Role'
+ - $ref: '#/components/schemas/EnumroleFieldUpdateOperationsInput'
+ profile:
+ $ref: '#/components/schemas/ProfileUncheckedUpdateOneWithoutUserNestedInput'
+ Post_ItemCreateManyAuthorInput:
+ type: object
+ properties:
+ id:
+ type: string
+ createdAt:
+ type: string
+ format: date-time
+ updatedAt:
+ type: string
+ format: date-time
+ title:
+ type: string
+ published:
+ type: boolean
+ viewCount:
+ type: integer
+ notes:
+ type: string
+ nullable: true
+ required:
+ - id
+ - title
+ Post_ItemUpdateWithoutAuthorInput:
+ type: object
+ properties:
+ id:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ createdAt:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/DateTimeFieldUpdateOperationsInput'
+ updatedAt:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/DateTimeFieldUpdateOperationsInput'
+ title:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ published:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/BoolFieldUpdateOperationsInput'
+ viewCount:
+ oneOf:
+ - type: integer
+ - $ref: '#/components/schemas/IntFieldUpdateOperationsInput'
+ notes:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/NullableStringFieldUpdateOperationsInput'
+ nullable: true
+ Post_ItemUncheckedUpdateWithoutAuthorInput:
+ type: object
+ properties:
+ id:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
createdAt:
oneOf:
- type: string
@@ -1879,6 +2540,11 @@ components:
oneOf:
- type: integer
- $ref: '#/components/schemas/IntFieldUpdateOperationsInput'
+ notes:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/NullableStringFieldUpdateOperationsInput'
+ nullable: true
Post_ItemUncheckedUpdateManyWithoutPostsInput:
type: object
properties:
@@ -1908,6 +2574,11 @@ components:
oneOf:
- type: integer
- $ref: '#/components/schemas/IntFieldUpdateOperationsInput'
+ notes:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/NullableStringFieldUpdateOperationsInput'
+ nullable: true
UserArgs:
type: object
properties:
@@ -1915,6 +2586,13 @@ components:
$ref: '#/components/schemas/UserSelect'
include:
$ref: '#/components/schemas/UserInclude'
+ ProfileArgs:
+ type: object
+ properties:
+ select:
+ $ref: '#/components/schemas/ProfileSelect'
+ include:
+ $ref: '#/components/schemas/ProfileInclude'
UserInclude:
type: object
properties:
@@ -1922,10 +2600,21 @@ components:
oneOf:
- type: boolean
- $ref: '#/components/schemas/Post_ItemFindManyArgs'
+ profile:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/ProfileArgs'
_count:
oneOf:
- type: boolean
- $ref: '#/components/schemas/UserCountOutputTypeArgs'
+ ProfileInclude:
+ type: object
+ properties:
+ user:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/UserArgs'
Post_ItemInclude:
type: object
properties:
@@ -1960,10 +2649,27 @@ components:
oneOf:
- type: boolean
- $ref: '#/components/schemas/Post_ItemFindManyArgs'
+ profile:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/ProfileArgs'
_count:
oneOf:
- type: boolean
- $ref: '#/components/schemas/UserCountOutputTypeArgs'
+ ProfileSelect:
+ type: object
+ properties:
+ id:
+ type: boolean
+ image:
+ type: boolean
+ user:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/UserArgs'
+ userId:
+ type: boolean
Post_ItemSelect:
type: object
properties:
@@ -1985,6 +2691,8 @@ components:
type: boolean
viewCount:
type: boolean
+ notes:
+ type: boolean
UserCountAggregateInput:
type: object
properties:
@@ -2026,15 +2734,50 @@ components:
type: boolean
role:
type: boolean
+ ProfileCountAggregateInput:
+ type: object
+ properties:
+ id:
+ type: boolean
+ image:
+ type: boolean
+ userId:
+ type: boolean
+ _all:
+ type: boolean
+ ProfileMinAggregateInput:
+ type: object
+ properties:
+ id:
+ type: boolean
+ image:
+ type: boolean
+ userId:
+ type: boolean
+ ProfileMaxAggregateInput:
+ type: object
+ properties:
+ id:
+ type: boolean
+ image:
+ type: boolean
+ userId:
+ type: boolean
AggregateUser:
type: object
properties:
_count:
- $ref: '#/components/schemas/UserCountAggregateOutputType'
+ allOf:
+ - $ref: '#/components/schemas/UserCountAggregateOutputType'
+ nullable: true
_min:
- $ref: '#/components/schemas/UserMinAggregateOutputType'
+ allOf:
+ - $ref: '#/components/schemas/UserMinAggregateOutputType'
+ nullable: true
_max:
- $ref: '#/components/schemas/UserMaxAggregateOutputType'
+ allOf:
+ - $ref: '#/components/schemas/UserMaxAggregateOutputType'
+ nullable: true
UserGroupByOutputType:
type: object
properties:
@@ -2051,30 +2794,86 @@ components:
role:
$ref: '#/components/schemas/Role'
_count:
- $ref: '#/components/schemas/UserCountAggregateOutputType'
+ allOf:
+ - $ref: '#/components/schemas/UserCountAggregateOutputType'
+ nullable: true
_min:
- $ref: '#/components/schemas/UserMinAggregateOutputType'
+ allOf:
+ - $ref: '#/components/schemas/UserMinAggregateOutputType'
+ nullable: true
_max:
- $ref: '#/components/schemas/UserMaxAggregateOutputType'
+ allOf:
+ - $ref: '#/components/schemas/UserMaxAggregateOutputType'
+ nullable: true
required:
- id
- createdAt
- updatedAt
- email
- role
+ AggregateProfile:
+ type: object
+ properties:
+ _count:
+ allOf:
+ - $ref: '#/components/schemas/ProfileCountAggregateOutputType'
+ nullable: true
+ _min:
+ allOf:
+ - $ref: '#/components/schemas/ProfileMinAggregateOutputType'
+ nullable: true
+ _max:
+ allOf:
+ - $ref: '#/components/schemas/ProfileMaxAggregateOutputType'
+ nullable: true
+ ProfileGroupByOutputType:
+ type: object
+ properties:
+ id:
+ type: string
+ image:
+ type: string
+ nullable: true
+ userId:
+ type: string
+ _count:
+ allOf:
+ - $ref: '#/components/schemas/ProfileCountAggregateOutputType'
+ nullable: true
+ _min:
+ allOf:
+ - $ref: '#/components/schemas/ProfileMinAggregateOutputType'
+ nullable: true
+ _max:
+ allOf:
+ - $ref: '#/components/schemas/ProfileMaxAggregateOutputType'
+ nullable: true
+ required:
+ - id
+ - userId
AggregatePost_Item:
type: object
properties:
_count:
- $ref: '#/components/schemas/Post_ItemCountAggregateOutputType'
+ allOf:
+ - $ref: '#/components/schemas/Post_ItemCountAggregateOutputType'
+ nullable: true
_avg:
- $ref: '#/components/schemas/Post_ItemAvgAggregateOutputType'
+ allOf:
+ - $ref: '#/components/schemas/Post_ItemAvgAggregateOutputType'
+ nullable: true
_sum:
- $ref: '#/components/schemas/Post_ItemSumAggregateOutputType'
+ allOf:
+ - $ref: '#/components/schemas/Post_ItemSumAggregateOutputType'
+ nullable: true
_min:
- $ref: '#/components/schemas/Post_ItemMinAggregateOutputType'
+ allOf:
+ - $ref: '#/components/schemas/Post_ItemMinAggregateOutputType'
+ nullable: true
_max:
- $ref: '#/components/schemas/Post_ItemMaxAggregateOutputType'
+ allOf:
+ - $ref: '#/components/schemas/Post_ItemMaxAggregateOutputType'
+ nullable: true
Post_ItemGroupByOutputType:
type: object
properties:
@@ -2090,20 +2889,34 @@ components:
type: string
authorId:
type: string
+ nullable: true
published:
type: boolean
viewCount:
type: integer
+ notes:
+ type: string
+ nullable: true
_count:
- $ref: '#/components/schemas/Post_ItemCountAggregateOutputType'
+ allOf:
+ - $ref: '#/components/schemas/Post_ItemCountAggregateOutputType'
+ nullable: true
_avg:
- $ref: '#/components/schemas/Post_ItemAvgAggregateOutputType'
+ allOf:
+ - $ref: '#/components/schemas/Post_ItemAvgAggregateOutputType'
+ nullable: true
_sum:
- $ref: '#/components/schemas/Post_ItemSumAggregateOutputType'
+ allOf:
+ - $ref: '#/components/schemas/Post_ItemSumAggregateOutputType'
+ nullable: true
_min:
- $ref: '#/components/schemas/Post_ItemMinAggregateOutputType'
+ allOf:
+ - $ref: '#/components/schemas/Post_ItemMinAggregateOutputType'
+ nullable: true
_max:
- $ref: '#/components/schemas/Post_ItemMaxAggregateOutputType'
+ allOf:
+ - $ref: '#/components/schemas/Post_ItemMaxAggregateOutputType'
+ nullable: true
required:
- id
- createdAt
@@ -2138,31 +2951,83 @@ components:
properties:
id:
type: string
+ nullable: true
createdAt:
type: string
format: date-time
+ nullable: true
updatedAt:
type: string
format: date-time
+ nullable: true
email:
type: string
+ nullable: true
role:
- $ref: '#/components/schemas/Role'
+ allOf:
+ - $ref: '#/components/schemas/Role'
+ nullable: true
UserMaxAggregateOutputType:
type: object
properties:
id:
type: string
+ nullable: true
createdAt:
type: string
format: date-time
+ nullable: true
updatedAt:
type: string
format: date-time
+ nullable: true
email:
type: string
+ nullable: true
role:
- $ref: '#/components/schemas/Role'
+ allOf:
+ - $ref: '#/components/schemas/Role'
+ nullable: true
+ ProfileCountAggregateOutputType:
+ type: object
+ properties:
+ id:
+ type: integer
+ image:
+ type: integer
+ userId:
+ type: integer
+ _all:
+ type: integer
+ required:
+ - id
+ - image
+ - userId
+ - _all
+ ProfileMinAggregateOutputType:
+ type: object
+ properties:
+ id:
+ type: string
+ nullable: true
+ image:
+ type: string
+ nullable: true
+ userId:
+ type: string
+ nullable: true
+ ProfileMaxAggregateOutputType:
+ type: object
+ properties:
+ id:
+ type: string
+ nullable: true
+ image:
+ type: string
+ nullable: true
+ userId:
+ type: string
+ nullable: true
Post_ItemCountAggregateOutputType:
type: object
properties:
@@ -2180,6 +3045,8 @@ components:
type: integer
viewCount:
type: integer
+ notes:
+ type: integer
_all:
type: integer
required:
@@ -2190,55 +3057,78 @@ components:
- authorId
- published
- viewCount
+ - notes
- _all
Post_ItemAvgAggregateOutputType:
type: object
properties:
viewCount:
type: number
+ nullable: true
Post_ItemSumAggregateOutputType:
type: object
properties:
viewCount:
type: integer
+ nullable: true
Post_ItemMinAggregateOutputType:
type: object
properties:
id:
type: string
+ nullable: true
createdAt:
type: string
format: date-time
+ nullable: true
updatedAt:
type: string
format: date-time
+ nullable: true
title:
type: string
+ nullable: true
authorId:
type: string
+ nullable: true
published:
type: boolean
+ nullable: true
viewCount:
type: integer
+ nullable: true
+ notes:
+ type: string
+ nullable: true
Post_ItemMaxAggregateOutputType:
type: object
properties:
id:
type: string
+ nullable: true
createdAt:
type: string
format: date-time
+ nullable: true
updatedAt:
type: string
format: date-time
+ nullable: true
title:
type: string
+ nullable: true
authorId:
type: string
+ nullable: true
published:
type: boolean
+ nullable: true
viewCount:
type: integer
+ nullable: true
+ notes:
+ type: string
+ nullable: true
_Meta:
type: object
properties:
@@ -2465,91 +3355,91 @@ components:
$ref: '#/components/schemas/UserMaxAggregateInput'
meta:
$ref: '#/components/schemas/_Meta'
- Post_ItemCreateArgs:
+ ProfileCreateArgs:
type: object
required:
- data
properties:
select:
- $ref: '#/components/schemas/Post_ItemSelect'
+ $ref: '#/components/schemas/ProfileSelect'
include:
- $ref: '#/components/schemas/Post_ItemInclude'
+ $ref: '#/components/schemas/ProfileInclude'
data:
- $ref: '#/components/schemas/Post_ItemCreateInput'
+ $ref: '#/components/schemas/ProfileCreateInput'
meta:
$ref: '#/components/schemas/_Meta'
- Post_ItemCreateManyArgs:
+ ProfileCreateManyArgs:
type: object
required:
- data
properties:
data:
- $ref: '#/components/schemas/Post_ItemCreateManyInput'
+ $ref: '#/components/schemas/ProfileCreateManyInput'
meta:
$ref: '#/components/schemas/_Meta'
- Post_ItemFindUniqueArgs:
+ ProfileFindUniqueArgs:
type: object
required:
- where
properties:
select:
- $ref: '#/components/schemas/Post_ItemSelect'
+ $ref: '#/components/schemas/ProfileSelect'
include:
- $ref: '#/components/schemas/Post_ItemInclude'
+ $ref: '#/components/schemas/ProfileInclude'
where:
- $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ $ref: '#/components/schemas/ProfileWhereUniqueInput'
meta:
$ref: '#/components/schemas/_Meta'
- Post_ItemFindFirstArgs:
+ ProfileFindFirstArgs:
type: object
properties:
select:
- $ref: '#/components/schemas/Post_ItemSelect'
+ $ref: '#/components/schemas/ProfileSelect'
include:
- $ref: '#/components/schemas/Post_ItemInclude'
+ $ref: '#/components/schemas/ProfileInclude'
where:
- $ref: '#/components/schemas/Post_ItemWhereInput'
+ $ref: '#/components/schemas/ProfileWhereInput'
meta:
$ref: '#/components/schemas/_Meta'
- Post_ItemFindManyArgs:
+ ProfileFindManyArgs:
type: object
properties:
select:
- $ref: '#/components/schemas/Post_ItemSelect'
+ $ref: '#/components/schemas/ProfileSelect'
include:
- $ref: '#/components/schemas/Post_ItemInclude'
+ $ref: '#/components/schemas/ProfileInclude'
where:
- $ref: '#/components/schemas/Post_ItemWhereInput'
+ $ref: '#/components/schemas/ProfileWhereInput'
meta:
$ref: '#/components/schemas/_Meta'
- Post_ItemUpdateArgs:
+ ProfileUpdateArgs:
type: object
required:
- where
- data
properties:
select:
- $ref: '#/components/schemas/Post_ItemSelect'
+ $ref: '#/components/schemas/ProfileSelect'
include:
- $ref: '#/components/schemas/Post_ItemInclude'
+ $ref: '#/components/schemas/ProfileInclude'
where:
- $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ $ref: '#/components/schemas/ProfileWhereUniqueInput'
data:
- $ref: '#/components/schemas/Post_ItemUpdateInput'
+ $ref: '#/components/schemas/ProfileUpdateInput'
meta:
$ref: '#/components/schemas/_Meta'
- Post_ItemUpdateManyArgs:
+ ProfileUpdateManyArgs:
type: object
required:
- data
properties:
where:
- $ref: '#/components/schemas/Post_ItemWhereInput'
+ $ref: '#/components/schemas/ProfileWhereInput'
data:
- $ref: '#/components/schemas/Post_ItemUpdateManyMutationInput'
+ $ref: '#/components/schemas/ProfileUpdateManyMutationInput'
meta:
$ref: '#/components/schemas/_Meta'
- Post_ItemUpsertArgs:
+ ProfileUpsertArgs:
type: object
required:
- create
@@ -2557,24 +3447,204 @@ components:
- where
properties:
select:
- $ref: '#/components/schemas/Post_ItemSelect'
+ $ref: '#/components/schemas/ProfileSelect'
include:
- $ref: '#/components/schemas/Post_ItemInclude'
+ $ref: '#/components/schemas/ProfileInclude'
where:
- $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ $ref: '#/components/schemas/ProfileWhereUniqueInput'
create:
- $ref: '#/components/schemas/Post_ItemCreateInput'
+ $ref: '#/components/schemas/ProfileCreateInput'
update:
- $ref: '#/components/schemas/Post_ItemUpdateInput'
+ $ref: '#/components/schemas/ProfileUpdateInput'
meta:
$ref: '#/components/schemas/_Meta'
- Post_ItemDeleteUniqueArgs:
+ ProfileDeleteUniqueArgs:
type: object
required:
- where
properties:
select:
- $ref: '#/components/schemas/Post_ItemSelect'
+ $ref: '#/components/schemas/ProfileSelect'
+ include:
+ $ref: '#/components/schemas/ProfileInclude'
+ where:
+ $ref: '#/components/schemas/ProfileWhereUniqueInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ ProfileDeleteManyArgs:
+ type: object
+ properties:
+ where:
+ $ref: '#/components/schemas/ProfileWhereInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ ProfileCountArgs:
+ type: object
+ properties:
+ select:
+ $ref: '#/components/schemas/ProfileSelect'
+ where:
+ $ref: '#/components/schemas/ProfileWhereInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ ProfileAggregateArgs:
+ type: object
+ properties:
+ where:
+ $ref: '#/components/schemas/ProfileWhereInput'
+ orderBy:
+ $ref: '#/components/schemas/ProfileOrderByWithRelationInput'
+ cursor:
+ $ref: '#/components/schemas/ProfileWhereUniqueInput'
+ take:
+ type: integer
+ skip:
+ type: integer
+ _count:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/ProfileCountAggregateInput'
+ _min:
+ $ref: '#/components/schemas/ProfileMinAggregateInput'
+ _max:
+ $ref: '#/components/schemas/ProfileMaxAggregateInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ ProfileGroupByArgs:
+ type: object
+ properties:
+ where:
+ $ref: '#/components/schemas/ProfileWhereInput'
+ orderBy:
+ $ref: '#/components/schemas/ProfileOrderByWithRelationInput'
+ by:
+ $ref: '#/components/schemas/ProfileScalarFieldEnum'
+ having:
+ $ref: '#/components/schemas/ProfileScalarWhereWithAggregatesInput'
+ take:
+ type: integer
+ skip:
+ type: integer
+ _count:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/ProfileCountAggregateInput'
+ _min:
+ $ref: '#/components/schemas/ProfileMinAggregateInput'
+ _max:
+ $ref: '#/components/schemas/ProfileMaxAggregateInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ Post_ItemCreateArgs:
+ type: object
+ required:
+ - data
+ properties:
+ select:
+ $ref: '#/components/schemas/Post_ItemSelect'
+ include:
+ $ref: '#/components/schemas/Post_ItemInclude'
+ data:
+ $ref: '#/components/schemas/Post_ItemCreateInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ Post_ItemCreateManyArgs:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/Post_ItemCreateManyInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ Post_ItemFindUniqueArgs:
+ type: object
+ required:
+ - where
+ properties:
+ select:
+ $ref: '#/components/schemas/Post_ItemSelect'
+ include:
+ $ref: '#/components/schemas/Post_ItemInclude'
+ where:
+ $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ Post_ItemFindFirstArgs:
+ type: object
+ properties:
+ select:
+ $ref: '#/components/schemas/Post_ItemSelect'
+ include:
+ $ref: '#/components/schemas/Post_ItemInclude'
+ where:
+ $ref: '#/components/schemas/Post_ItemWhereInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ Post_ItemFindManyArgs:
+ type: object
+ properties:
+ select:
+ $ref: '#/components/schemas/Post_ItemSelect'
+ include:
+ $ref: '#/components/schemas/Post_ItemInclude'
+ where:
+ $ref: '#/components/schemas/Post_ItemWhereInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ Post_ItemUpdateArgs:
+ type: object
+ required:
+ - where
+ - data
+ properties:
+ select:
+ $ref: '#/components/schemas/Post_ItemSelect'
+ include:
+ $ref: '#/components/schemas/Post_ItemInclude'
+ where:
+ $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ data:
+ $ref: '#/components/schemas/Post_ItemUpdateInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ Post_ItemUpdateManyArgs:
+ type: object
+ required:
+ - data
+ properties:
+ where:
+ $ref: '#/components/schemas/Post_ItemWhereInput'
+ data:
+ $ref: '#/components/schemas/Post_ItemUpdateManyMutationInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ Post_ItemUpsertArgs:
+ type: object
+ required:
+ - create
+ - update
+ - where
+ properties:
+ select:
+ $ref: '#/components/schemas/Post_ItemSelect'
+ include:
+ $ref: '#/components/schemas/Post_ItemInclude'
+ where:
+ $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ create:
+ $ref: '#/components/schemas/Post_ItemCreateInput'
+ update:
+ $ref: '#/components/schemas/Post_ItemUpdateInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ Post_ItemDeleteUniqueArgs:
+ type: object
+ required:
+ - where
+ properties:
+ select:
+ $ref: '#/components/schemas/Post_ItemSelect'
include:
$ref: '#/components/schemas/Post_ItemInclude'
where:
@@ -3216,6 +4286,599 @@ paths:
content:
application/json:
schema: {}
+ /profile/create:
+ post:
+ operationId: createProfile
+ description: Create a new Profile
+ tags:
+ - profile
+ responses:
+ '201':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/Profile'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ProfileCreateArgs'
+ /profile/createMany:
+ post:
+ operationId: createManyProfile
+ description: Create several Profile
+ tags:
+ - profile
+ responses:
+ '201':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/BatchPayload'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ProfileCreateManyArgs'
+ /profile/findUnique:
+ get:
+ operationId: findUniqueProfile
+ description: Find one unique Profile
+ tags:
+ - profile
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/Profile'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ProfileFindUniqueArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
+ /profile/findFirst:
+ get:
+ operationId: findFirstProfile
+ description: Find the first Profile matching the given condition
+ tags:
+ - profile
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/Profile'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ProfileFindFirstArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
+ /profile/findMany:
+ get:
+ operationId: findManyProfile
+ description: Find a list of Profile
+ tags:
+ - profile
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ type: array
+ items:
+ $ref: '#/components/schemas/Profile'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ProfileFindManyArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
+ /profile/update:
+ patch:
+ operationId: updateProfile
+ description: Update a Profile
+ tags:
+ - profile
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/Profile'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ProfileUpdateArgs'
+ /profile/updateMany:
+ patch:
+ operationId: updateManyProfile
+ description: Update Profiles matching the given condition
+ tags:
+ - profile
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/BatchPayload'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ProfileUpdateManyArgs'
+ /profile/upsert:
+ post:
+ operationId: upsertProfile
+ description: Upsert a Profile
+ tags:
+ - profile
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/Profile'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ProfileUpsertArgs'
+ /profile/delete:
+ delete:
+ operationId: deleteProfile
+ description: Delete one unique Profile
+ tags:
+ - profile
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/Profile'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ProfileDeleteUniqueArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
+ /profile/deleteMany:
+ delete:
+ operationId: deleteManyProfile
+ description: Delete Profiles matching the given condition
+ tags:
+ - profile
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/BatchPayload'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ProfileDeleteManyArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
+ /profile/count:
+ get:
+ operationId: countProfile
+ description: Find a list of Profile
+ tags:
+ - profile
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ oneOf:
+ - type: integer
+ - $ref: '#/components/schemas/ProfileCountAggregateOutputType'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ProfileCountArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
+ /profile/aggregate:
+ get:
+ operationId: aggregateProfile
+ description: Aggregate Profiles
+ tags:
+ - profile
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/AggregateProfile'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ProfileAggregateArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
+ /profile/groupBy:
+ get:
+ operationId: groupByProfile
+ description: Group Profiles by fields
+ tags:
+ - profile
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ type: array
+ items:
+ $ref: '#/components/schemas/ProfileGroupByOutputType'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ProfileGroupByArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
/post_Item/create:
post:
operationId: createPost_Item
diff --git a/packages/plugins/openapi/tests/baseline/rpc-3.1.0.baseline.yaml b/packages/plugins/openapi/tests/baseline/rpc-3.1.0.baseline.yaml
new file mode 100644
index 000000000..d842234ab
--- /dev/null
+++ b/packages/plugins/openapi/tests/baseline/rpc-3.1.0.baseline.yaml
@@ -0,0 +1,5477 @@
+openapi: 3.1.0
+info:
+ title: ZenStack Generated API
+ version: 1.0.0
+tags:
+ - name: user
+ description: User operations
+ - name: profile
+ description: Profile operations
+ - name: post_Item
+ description: Post-related operations
+components:
+ schemas:
+ Role:
+ type: string
+ enum:
+ - USER
+ - ADMIN
+ UserScalarFieldEnum:
+ type: string
+ enum:
+ - id
+ - createdAt
+ - updatedAt
+ - email
+ - role
+ ProfileScalarFieldEnum:
+ type: string
+ enum:
+ - id
+ - image
+ - userId
+ Post_ItemScalarFieldEnum:
+ type: string
+ enum:
+ - id
+ - createdAt
+ - updatedAt
+ - title
+ - authorId
+ - published
+ - viewCount
+ - notes
+ SortOrder:
+ type: string
+ enum:
+ - asc
+ - desc
+ QueryMode:
+ type: string
+ enum:
+ - default
+ - insensitive
+ NullsOrder:
+ type: string
+ enum:
+ - first
+ - last
+ User:
+ type: object
+ properties:
+ id:
+ type: string
+ createdAt:
+ type: string
+ format: date-time
+ updatedAt:
+ type: string
+ format: date-time
+ email:
+ type: string
+ role:
+ $ref: '#/components/schemas/Role'
+ posts:
+ type: array
+ items:
+ $ref: '#/components/schemas/Post_Item'
+ profile:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/Profile'
+ required:
+ - id
+ - createdAt
+ - updatedAt
+ - email
+ - role
+ Profile:
+ type: object
+ properties:
+ id:
+ type: string
+ image:
+ oneOf:
+ - type: 'null'
+ - type: string
+ user:
+ $ref: '#/components/schemas/User'
+ userId:
+ type: string
+ required:
+ - id
+ - user
+ - userId
+ Post_Item:
+ type: object
+ properties:
+ id:
+ type: string
+ createdAt:
+ type: string
+ format: date-time
+ updatedAt:
+ type: string
+ format: date-time
+ title:
+ type: string
+ author:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/User'
+ authorId:
+ oneOf:
+ - type: 'null'
+ - type: string
+ published:
+ type: boolean
+ viewCount:
+ type: integer
+ notes:
+ oneOf:
+ - type: 'null'
+ - type: string
+ required:
+ - id
+ - createdAt
+ - updatedAt
+ - title
+ - published
+ - viewCount
+ UserWhereInput:
+ type: object
+ properties:
+ AND:
+ oneOf:
+ - $ref: '#/components/schemas/UserWhereInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/UserWhereInput'
+ OR:
+ type: array
+ items:
+ $ref: '#/components/schemas/UserWhereInput'
+ NOT:
+ oneOf:
+ - $ref: '#/components/schemas/UserWhereInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/UserWhereInput'
+ id:
+ oneOf:
+ - $ref: '#/components/schemas/StringFilter'
+ - type: string
+ createdAt:
+ oneOf:
+ - $ref: '#/components/schemas/DateTimeFilter'
+ - type: string
+ format: date-time
+ updatedAt:
+ oneOf:
+ - $ref: '#/components/schemas/DateTimeFilter'
+ - type: string
+ format: date-time
+ email:
+ oneOf:
+ - $ref: '#/components/schemas/StringFilter'
+ - type: string
+ role:
+ oneOf:
+ - $ref: '#/components/schemas/EnumroleFilter'
+ - $ref: '#/components/schemas/Role'
+ posts:
+ $ref: '#/components/schemas/Post_ItemListRelationFilter'
+ profile:
+ oneOf:
+ - $ref: '#/components/schemas/ProfileRelationFilter'
+ - $ref: '#/components/schemas/ProfileWhereInput'
+ - type: 'null'
+ UserOrderByWithRelationInput:
+ type: object
+ properties:
+ id:
+ $ref: '#/components/schemas/SortOrder'
+ createdAt:
+ $ref: '#/components/schemas/SortOrder'
+ updatedAt:
+ $ref: '#/components/schemas/SortOrder'
+ email:
+ $ref: '#/components/schemas/SortOrder'
+ role:
+ $ref: '#/components/schemas/SortOrder'
+ posts:
+ $ref: '#/components/schemas/Post_ItemOrderByRelationAggregateInput'
+ profile:
+ $ref: '#/components/schemas/ProfileOrderByWithRelationInput'
+ UserWhereUniqueInput:
+ type: object
+ properties:
+ id:
+ type: string
+ email:
+ type: string
+ UserScalarWhereWithAggregatesInput:
+ type: object
+ properties:
+ AND:
+ oneOf:
+ - $ref: '#/components/schemas/UserScalarWhereWithAggregatesInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/UserScalarWhereWithAggregatesInput'
+ OR:
+ type: array
+ items:
+ $ref: '#/components/schemas/UserScalarWhereWithAggregatesInput'
+ NOT:
+ oneOf:
+ - $ref: '#/components/schemas/UserScalarWhereWithAggregatesInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/UserScalarWhereWithAggregatesInput'
+ id:
+ oneOf:
+ - $ref: '#/components/schemas/StringWithAggregatesFilter'
+ - type: string
+ createdAt:
+ oneOf:
+ - $ref: '#/components/schemas/DateTimeWithAggregatesFilter'
+ - type: string
+ format: date-time
+ updatedAt:
+ oneOf:
+ - $ref: '#/components/schemas/DateTimeWithAggregatesFilter'
+ - type: string
+ format: date-time
+ email:
+ oneOf:
+ - $ref: '#/components/schemas/StringWithAggregatesFilter'
+ - type: string
+ role:
+ oneOf:
+ - $ref: '#/components/schemas/EnumroleWithAggregatesFilter'
+ - $ref: '#/components/schemas/Role'
+ ProfileWhereInput:
+ type: object
+ properties:
+ AND:
+ oneOf:
+ - $ref: '#/components/schemas/ProfileWhereInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/ProfileWhereInput'
+ OR:
+ type: array
+ items:
+ $ref: '#/components/schemas/ProfileWhereInput'
+ NOT:
+ oneOf:
+ - $ref: '#/components/schemas/ProfileWhereInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/ProfileWhereInput'
+ id:
+ oneOf:
+ - $ref: '#/components/schemas/StringFilter'
+ - type: string
+ image:
+ oneOf:
+ - $ref: '#/components/schemas/StringNullableFilter'
+ - type: string
+ - type: 'null'
+ userId:
+ oneOf:
+ - $ref: '#/components/schemas/StringFilter'
+ - type: string
+ user:
+ oneOf:
+ - $ref: '#/components/schemas/UserRelationFilter'
+ - $ref: '#/components/schemas/UserWhereInput'
+ ProfileOrderByWithRelationInput:
+ type: object
+ properties:
+ id:
+ $ref: '#/components/schemas/SortOrder'
+ image:
+ oneOf:
+ - $ref: '#/components/schemas/SortOrder'
+ - $ref: '#/components/schemas/SortOrderInput'
+ userId:
+ $ref: '#/components/schemas/SortOrder'
+ user:
+ $ref: '#/components/schemas/UserOrderByWithRelationInput'
+ ProfileWhereUniqueInput:
+ type: object
+ properties:
+ id:
+ type: string
+ userId:
+ type: string
+ ProfileScalarWhereWithAggregatesInput:
+ type: object
+ properties:
+ AND:
+ oneOf:
+ - $ref: '#/components/schemas/ProfileScalarWhereWithAggregatesInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/ProfileScalarWhereWithAggregatesInput'
+ OR:
+ type: array
+ items:
+ $ref: '#/components/schemas/ProfileScalarWhereWithAggregatesInput'
+ NOT:
+ oneOf:
+ - $ref: '#/components/schemas/ProfileScalarWhereWithAggregatesInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/ProfileScalarWhereWithAggregatesInput'
+ id:
+ oneOf:
+ - $ref: '#/components/schemas/StringWithAggregatesFilter'
+ - type: string
+ image:
+ oneOf:
+ - $ref: '#/components/schemas/StringNullableWithAggregatesFilter'
+ - type: string
+ - type: 'null'
+ userId:
+ oneOf:
+ - $ref: '#/components/schemas/StringWithAggregatesFilter'
+ - type: string
+ Post_ItemWhereInput:
+ type: object
+ properties:
+ AND:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemWhereInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemWhereInput'
+ OR:
+ type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemWhereInput'
+ NOT:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemWhereInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemWhereInput'
+ id:
+ oneOf:
+ - $ref: '#/components/schemas/StringFilter'
+ - type: string
+ createdAt:
+ oneOf:
+ - $ref: '#/components/schemas/DateTimeFilter'
+ - type: string
+ format: date-time
+ updatedAt:
+ oneOf:
+ - $ref: '#/components/schemas/DateTimeFilter'
+ - type: string
+ format: date-time
+ title:
+ oneOf:
+ - $ref: '#/components/schemas/StringFilter'
+ - type: string
+ authorId:
+ oneOf:
+ - $ref: '#/components/schemas/StringNullableFilter'
+ - type: string
+ - type: 'null'
+ published:
+ oneOf:
+ - $ref: '#/components/schemas/BoolFilter'
+ - type: boolean
+ viewCount:
+ oneOf:
+ - $ref: '#/components/schemas/IntFilter'
+ - type: integer
+ notes:
+ oneOf:
+ - $ref: '#/components/schemas/StringNullableFilter'
+ - type: string
+ - type: 'null'
+ author:
+ oneOf:
+ - $ref: '#/components/schemas/UserRelationFilter'
+ - $ref: '#/components/schemas/UserWhereInput'
+ - type: 'null'
+ Post_ItemOrderByWithRelationInput:
+ type: object
+ properties:
+ id:
+ $ref: '#/components/schemas/SortOrder'
+ createdAt:
+ $ref: '#/components/schemas/SortOrder'
+ updatedAt:
+ $ref: '#/components/schemas/SortOrder'
+ title:
+ $ref: '#/components/schemas/SortOrder'
+ authorId:
+ oneOf:
+ - $ref: '#/components/schemas/SortOrder'
+ - $ref: '#/components/schemas/SortOrderInput'
+ published:
+ $ref: '#/components/schemas/SortOrder'
+ viewCount:
+ $ref: '#/components/schemas/SortOrder'
+ notes:
+ oneOf:
+ - $ref: '#/components/schemas/SortOrder'
+ - $ref: '#/components/schemas/SortOrderInput'
+ author:
+ $ref: '#/components/schemas/UserOrderByWithRelationInput'
+ Post_ItemWhereUniqueInput:
+ type: object
+ properties:
+ id:
+ type: string
+ Post_ItemScalarWhereWithAggregatesInput:
+ type: object
+ properties:
+ AND:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemScalarWhereWithAggregatesInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemScalarWhereWithAggregatesInput'
+ OR:
+ type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemScalarWhereWithAggregatesInput'
+ NOT:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemScalarWhereWithAggregatesInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemScalarWhereWithAggregatesInput'
+ id:
+ oneOf:
+ - $ref: '#/components/schemas/StringWithAggregatesFilter'
+ - type: string
+ createdAt:
+ oneOf:
+ - $ref: '#/components/schemas/DateTimeWithAggregatesFilter'
+ - type: string
+ format: date-time
+ updatedAt:
+ oneOf:
+ - $ref: '#/components/schemas/DateTimeWithAggregatesFilter'
+ - type: string
+ format: date-time
+ title:
+ oneOf:
+ - $ref: '#/components/schemas/StringWithAggregatesFilter'
+ - type: string
+ authorId:
+ oneOf:
+ - $ref: '#/components/schemas/StringNullableWithAggregatesFilter'
+ - type: string
+ - type: 'null'
+ published:
+ oneOf:
+ - $ref: '#/components/schemas/BoolWithAggregatesFilter'
+ - type: boolean
+ viewCount:
+ oneOf:
+ - $ref: '#/components/schemas/IntWithAggregatesFilter'
+ - type: integer
+ notes:
+ oneOf:
+ - $ref: '#/components/schemas/StringNullableWithAggregatesFilter'
+ - type: string
+ - type: 'null'
+ UserCreateInput:
+ type: object
+ properties:
+ id:
+ type: string
+ createdAt:
+ type: string
+ format: date-time
+ updatedAt:
+ type: string
+ format: date-time
+ email:
+ type: string
+ role:
+ $ref: '#/components/schemas/Role'
+ posts:
+ $ref: '#/components/schemas/Post_ItemCreateNestedManyWithoutAuthorInput'
+ profile:
+ $ref: '#/components/schemas/ProfileCreateNestedOneWithoutUserInput'
+ required:
+ - email
+ UserUpdateInput:
+ type: object
+ properties:
+ id:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ createdAt:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/DateTimeFieldUpdateOperationsInput'
+ updatedAt:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/DateTimeFieldUpdateOperationsInput'
+ email:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ role:
+ oneOf:
+ - $ref: '#/components/schemas/Role'
+ - $ref: '#/components/schemas/EnumroleFieldUpdateOperationsInput'
+ posts:
+ $ref: '#/components/schemas/Post_ItemUpdateManyWithoutAuthorNestedInput'
+ profile:
+ $ref: '#/components/schemas/ProfileUpdateOneWithoutUserNestedInput'
+ UserCreateManyInput:
+ type: object
+ properties:
+ id:
+ type: string
+ createdAt:
+ type: string
+ format: date-time
+ updatedAt:
+ type: string
+ format: date-time
+ email:
+ type: string
+ role:
+ $ref: '#/components/schemas/Role'
+ required:
+ - email
+ UserUpdateManyMutationInput:
+ type: object
+ properties:
+ id:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ createdAt:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/DateTimeFieldUpdateOperationsInput'
+ updatedAt:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/DateTimeFieldUpdateOperationsInput'
+ email:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ role:
+ oneOf:
+ - $ref: '#/components/schemas/Role'
+ - $ref: '#/components/schemas/EnumroleFieldUpdateOperationsInput'
+ ProfileCreateInput:
+ type: object
+ properties:
+ id:
+ type: string
+ image:
+ oneOf:
+ - type: 'null'
+ - type: string
+ user:
+ $ref: '#/components/schemas/UserCreateNestedOneWithoutProfileInput'
+ required:
+ - user
+ ProfileUpdateInput:
+ type: object
+ properties:
+ id:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ image:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/NullableStringFieldUpdateOperationsInput'
+ - type: 'null'
+ user:
+ $ref: '#/components/schemas/UserUpdateOneRequiredWithoutProfileNestedInput'
+ ProfileCreateManyInput:
+ type: object
+ properties:
+ id:
+ type: string
+ image:
+ oneOf:
+ - type: 'null'
+ - type: string
+ userId:
+ type: string
+ required:
+ - userId
+ ProfileUpdateManyMutationInput:
+ type: object
+ properties:
+ id:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ image:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/NullableStringFieldUpdateOperationsInput'
+ - type: 'null'
+ Post_ItemCreateInput:
+ type: object
+ properties:
+ id:
+ type: string
+ createdAt:
+ type: string
+ format: date-time
+ updatedAt:
+ type: string
+ format: date-time
+ title:
+ type: string
+ published:
+ type: boolean
+ viewCount:
+ type: integer
+ notes:
+ oneOf:
+ - type: 'null'
+ - type: string
+ author:
+ $ref: '#/components/schemas/UserCreateNestedOneWithoutPostsInput'
+ required:
+ - id
+ - title
+ Post_ItemUpdateInput:
+ type: object
+ properties:
+ id:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ createdAt:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/DateTimeFieldUpdateOperationsInput'
+ updatedAt:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/DateTimeFieldUpdateOperationsInput'
+ title:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ published:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/BoolFieldUpdateOperationsInput'
+ viewCount:
+ oneOf:
+ - type: integer
+ - $ref: '#/components/schemas/IntFieldUpdateOperationsInput'
+ notes:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/NullableStringFieldUpdateOperationsInput'
+ - type: 'null'
+ author:
+ $ref: '#/components/schemas/UserUpdateOneWithoutPostsNestedInput'
+ Post_ItemCreateManyInput:
+ type: object
+ properties:
+ id:
+ type: string
+ createdAt:
+ type: string
+ format: date-time
+ updatedAt:
+ type: string
+ format: date-time
+ title:
+ type: string
+ authorId:
+ oneOf:
+ - type: 'null'
+ - type: string
+ published:
+ type: boolean
+ viewCount:
+ type: integer
+ notes:
+ oneOf:
+ - type: 'null'
+ - type: string
+ required:
+ - id
+ - title
+ Post_ItemUpdateManyMutationInput:
+ type: object
+ properties:
+ id:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ createdAt:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/DateTimeFieldUpdateOperationsInput'
+ updatedAt:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/DateTimeFieldUpdateOperationsInput'
+ title:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ published:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/BoolFieldUpdateOperationsInput'
+ viewCount:
+ oneOf:
+ - type: integer
+ - $ref: '#/components/schemas/IntFieldUpdateOperationsInput'
+ notes:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/NullableStringFieldUpdateOperationsInput'
+ - type: 'null'
+ StringFilter:
+ type: object
+ properties:
+ equals:
+ type: string
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ - type: string
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ - type: string
+ lt:
+ type: string
+ lte:
+ type: string
+ gt:
+ type: string
+ gte:
+ type: string
+ contains:
+ type: string
+ startsWith:
+ type: string
+ endsWith:
+ type: string
+ mode:
+ $ref: '#/components/schemas/QueryMode'
+ not:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/NestedStringFilter'
+ DateTimeFilter:
+ type: object
+ properties:
+ equals:
+ type: string
+ format: date-time
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ format: date-time
+ - type: string
+ format: date-time
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ format: date-time
+ - type: string
+ format: date-time
+ lt:
+ type: string
+ format: date-time
+ lte:
+ type: string
+ format: date-time
+ gt:
+ type: string
+ format: date-time
+ gte:
+ type: string
+ format: date-time
+ not:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/NestedDateTimeFilter'
+ EnumroleFilter:
+ type: object
+ properties:
+ equals:
+ $ref: '#/components/schemas/Role'
+ in:
+ oneOf:
+ - type: array
+ items:
+ $ref: '#/components/schemas/Role'
+ - $ref: '#/components/schemas/Role'
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ $ref: '#/components/schemas/Role'
+ - $ref: '#/components/schemas/Role'
+ not:
+ oneOf:
+ - $ref: '#/components/schemas/Role'
+ - $ref: '#/components/schemas/NestedEnumroleFilter'
+ Post_ItemListRelationFilter:
+ type: object
+ properties:
+ every:
+ $ref: '#/components/schemas/Post_ItemWhereInput'
+ some:
+ $ref: '#/components/schemas/Post_ItemWhereInput'
+ none:
+ $ref: '#/components/schemas/Post_ItemWhereInput'
+ ProfileRelationFilter:
+ type: object
+ properties:
+ is:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/ProfileWhereInput'
+ isNot:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/ProfileWhereInput'
+ Post_ItemOrderByRelationAggregateInput:
+ type: object
+ properties:
+ _count:
+ $ref: '#/components/schemas/SortOrder'
+ StringWithAggregatesFilter:
+ type: object
+ properties:
+ equals:
+ type: string
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ - type: string
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ - type: string
+ lt:
+ type: string
+ lte:
+ type: string
+ gt:
+ type: string
+ gte:
+ type: string
+ contains:
+ type: string
+ startsWith:
+ type: string
+ endsWith:
+ type: string
+ mode:
+ $ref: '#/components/schemas/QueryMode'
+ not:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/NestedStringWithAggregatesFilter'
+ _count:
+ $ref: '#/components/schemas/NestedIntFilter'
+ _min:
+ $ref: '#/components/schemas/NestedStringFilter'
+ _max:
+ $ref: '#/components/schemas/NestedStringFilter'
+ DateTimeWithAggregatesFilter:
+ type: object
+ properties:
+ equals:
+ type: string
+ format: date-time
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ format: date-time
+ - type: string
+ format: date-time
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ format: date-time
+ - type: string
+ format: date-time
+ lt:
+ type: string
+ format: date-time
+ lte:
+ type: string
+ format: date-time
+ gt:
+ type: string
+ format: date-time
+ gte:
+ type: string
+ format: date-time
+ not:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/NestedDateTimeWithAggregatesFilter'
+ _count:
+ $ref: '#/components/schemas/NestedIntFilter'
+ _min:
+ $ref: '#/components/schemas/NestedDateTimeFilter'
+ _max:
+ $ref: '#/components/schemas/NestedDateTimeFilter'
+ EnumroleWithAggregatesFilter:
+ type: object
+ properties:
+ equals:
+ $ref: '#/components/schemas/Role'
+ in:
+ oneOf:
+ - type: array
+ items:
+ $ref: '#/components/schemas/Role'
+ - $ref: '#/components/schemas/Role'
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ $ref: '#/components/schemas/Role'
+ - $ref: '#/components/schemas/Role'
+ not:
+ oneOf:
+ - $ref: '#/components/schemas/Role'
+ - $ref: '#/components/schemas/NestedEnumroleWithAggregatesFilter'
+ _count:
+ $ref: '#/components/schemas/NestedIntFilter'
+ _min:
+ $ref: '#/components/schemas/NestedEnumroleFilter'
+ _max:
+ $ref: '#/components/schemas/NestedEnumroleFilter'
+ StringNullableFilter:
+ type: object
+ properties:
+ equals:
+ oneOf:
+ - type: 'null'
+ - type: string
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ - type: string
+ - type: 'null'
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ - type: string
+ - type: 'null'
+ lt:
+ type: string
+ lte:
+ type: string
+ gt:
+ type: string
+ gte:
+ type: string
+ contains:
+ type: string
+ startsWith:
+ type: string
+ endsWith:
+ type: string
+ mode:
+ $ref: '#/components/schemas/QueryMode'
+ not:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/NestedStringNullableFilter'
+ - type: 'null'
+ UserRelationFilter:
+ type: object
+ properties:
+ is:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/UserWhereInput'
+ isNot:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/UserWhereInput'
+ SortOrderInput:
+ type: object
+ properties:
+ sort:
+ $ref: '#/components/schemas/SortOrder'
+ nulls:
+ $ref: '#/components/schemas/NullsOrder'
+ required:
+ - sort
+ StringNullableWithAggregatesFilter:
+ type: object
+ properties:
+ equals:
+ oneOf:
+ - type: 'null'
+ - type: string
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ - type: string
+ - type: 'null'
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ - type: string
+ - type: 'null'
+ lt:
+ type: string
+ lte:
+ type: string
+ gt:
+ type: string
+ gte:
+ type: string
+ contains:
+ type: string
+ startsWith:
+ type: string
+ endsWith:
+ type: string
+ mode:
+ $ref: '#/components/schemas/QueryMode'
+ not:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/NestedStringNullableWithAggregatesFilter'
+ - type: 'null'
+ _count:
+ $ref: '#/components/schemas/NestedIntNullableFilter'
+ _min:
+ $ref: '#/components/schemas/NestedStringNullableFilter'
+ _max:
+ $ref: '#/components/schemas/NestedStringNullableFilter'
+ BoolFilter:
+ type: object
+ properties:
+ equals:
+ type: boolean
+ not:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/NestedBoolFilter'
+ IntFilter:
+ type: object
+ properties:
+ equals:
+ type: integer
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: integer
+ - type: integer
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: integer
+ - type: integer
+ lt:
+ type: integer
+ lte:
+ type: integer
+ gt:
+ type: integer
+ gte:
+ type: integer
+ not:
+ oneOf:
+ - type: integer
+ - $ref: '#/components/schemas/NestedIntFilter'
+ BoolWithAggregatesFilter:
+ type: object
+ properties:
+ equals:
+ type: boolean
+ not:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/NestedBoolWithAggregatesFilter'
+ _count:
+ $ref: '#/components/schemas/NestedIntFilter'
+ _min:
+ $ref: '#/components/schemas/NestedBoolFilter'
+ _max:
+ $ref: '#/components/schemas/NestedBoolFilter'
+ IntWithAggregatesFilter:
+ type: object
+ properties:
+ equals:
+ type: integer
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: integer
+ - type: integer
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: integer
+ - type: integer
+ lt:
+ type: integer
+ lte:
+ type: integer
+ gt:
+ type: integer
+ gte:
+ type: integer
+ not:
+ oneOf:
+ - type: integer
+ - $ref: '#/components/schemas/NestedIntWithAggregatesFilter'
+ _count:
+ $ref: '#/components/schemas/NestedIntFilter'
+ _avg:
+ $ref: '#/components/schemas/NestedFloatFilter'
+ _sum:
+ $ref: '#/components/schemas/NestedIntFilter'
+ _min:
+ $ref: '#/components/schemas/NestedIntFilter'
+ _max:
+ $ref: '#/components/schemas/NestedIntFilter'
+ Post_ItemCreateNestedManyWithoutAuthorInput:
+ type: object
+ properties:
+ create:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemCreateWithoutAuthorInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemCreateWithoutAuthorInput'
+ - $ref: '#/components/schemas/Post_ItemUncheckedCreateWithoutAuthorInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemUncheckedCreateWithoutAuthorInput'
+ connectOrCreate:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemCreateOrConnectWithoutAuthorInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemCreateOrConnectWithoutAuthorInput'
+ createMany:
+ $ref: '#/components/schemas/Post_ItemCreateManyAuthorInputEnvelope'
+ connect:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ ProfileCreateNestedOneWithoutUserInput:
+ type: object
+ properties:
+ create:
+ oneOf:
+ - $ref: '#/components/schemas/ProfileCreateWithoutUserInput'
+ - $ref: '#/components/schemas/ProfileUncheckedCreateWithoutUserInput'
+ connectOrCreate:
+ $ref: '#/components/schemas/ProfileCreateOrConnectWithoutUserInput'
+ connect:
+ $ref: '#/components/schemas/ProfileWhereUniqueInput'
+ Post_ItemUncheckedCreateNestedManyWithoutAuthorInput:
+ type: object
+ properties:
+ create:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemCreateWithoutAuthorInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemCreateWithoutAuthorInput'
+ - $ref: '#/components/schemas/Post_ItemUncheckedCreateWithoutAuthorInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemUncheckedCreateWithoutAuthorInput'
+ connectOrCreate:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemCreateOrConnectWithoutAuthorInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemCreateOrConnectWithoutAuthorInput'
+ createMany:
+ $ref: '#/components/schemas/Post_ItemCreateManyAuthorInputEnvelope'
+ connect:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ ProfileUncheckedCreateNestedOneWithoutUserInput:
+ type: object
+ properties:
+ create:
+ oneOf:
+ - $ref: '#/components/schemas/ProfileCreateWithoutUserInput'
+ - $ref: '#/components/schemas/ProfileUncheckedCreateWithoutUserInput'
+ connectOrCreate:
+ $ref: '#/components/schemas/ProfileCreateOrConnectWithoutUserInput'
+ connect:
+ $ref: '#/components/schemas/ProfileWhereUniqueInput'
+ StringFieldUpdateOperationsInput:
+ type: object
+ properties:
+ set:
+ type: string
+ DateTimeFieldUpdateOperationsInput:
+ type: object
+ properties:
+ set:
+ type: string
+ format: date-time
+ EnumroleFieldUpdateOperationsInput:
+ type: object
+ properties:
+ set:
+ $ref: '#/components/schemas/Role'
+ Post_ItemUpdateManyWithoutAuthorNestedInput:
+ type: object
+ properties:
+ create:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemCreateWithoutAuthorInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemCreateWithoutAuthorInput'
+ - $ref: '#/components/schemas/Post_ItemUncheckedCreateWithoutAuthorInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemUncheckedCreateWithoutAuthorInput'
+ connectOrCreate:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemCreateOrConnectWithoutAuthorInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemCreateOrConnectWithoutAuthorInput'
+ upsert:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemUpsertWithWhereUniqueWithoutAuthorInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemUpsertWithWhereUniqueWithoutAuthorInput'
+ createMany:
+ $ref: '#/components/schemas/Post_ItemCreateManyAuthorInputEnvelope'
+ set:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ disconnect:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ delete:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ connect:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ update:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemUpdateWithWhereUniqueWithoutAuthorInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemUpdateWithWhereUniqueWithoutAuthorInput'
+ updateMany:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemUpdateManyWithWhereWithoutAuthorInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemUpdateManyWithWhereWithoutAuthorInput'
+ deleteMany:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemScalarWhereInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemScalarWhereInput'
+ ProfileUpdateOneWithoutUserNestedInput:
+ type: object
+ properties:
+ create:
+ oneOf:
+ - $ref: '#/components/schemas/ProfileCreateWithoutUserInput'
+ - $ref: '#/components/schemas/ProfileUncheckedCreateWithoutUserInput'
+ connectOrCreate:
+ $ref: '#/components/schemas/ProfileCreateOrConnectWithoutUserInput'
+ upsert:
+ $ref: '#/components/schemas/ProfileUpsertWithoutUserInput'
+ disconnect:
+ type: boolean
+ delete:
+ type: boolean
+ connect:
+ $ref: '#/components/schemas/ProfileWhereUniqueInput'
+ update:
+ oneOf:
+ - $ref: '#/components/schemas/ProfileUpdateWithoutUserInput'
+ - $ref: '#/components/schemas/ProfileUncheckedUpdateWithoutUserInput'
+ Post_ItemUncheckedUpdateManyWithoutAuthorNestedInput:
+ type: object
+ properties:
+ create:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemCreateWithoutAuthorInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemCreateWithoutAuthorInput'
+ - $ref: '#/components/schemas/Post_ItemUncheckedCreateWithoutAuthorInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemUncheckedCreateWithoutAuthorInput'
+ connectOrCreate:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemCreateOrConnectWithoutAuthorInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemCreateOrConnectWithoutAuthorInput'
+ upsert:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemUpsertWithWhereUniqueWithoutAuthorInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemUpsertWithWhereUniqueWithoutAuthorInput'
+ createMany:
+ $ref: '#/components/schemas/Post_ItemCreateManyAuthorInputEnvelope'
+ set:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ disconnect:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ delete:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ connect:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ update:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemUpdateWithWhereUniqueWithoutAuthorInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemUpdateWithWhereUniqueWithoutAuthorInput'
+ updateMany:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemUpdateManyWithWhereWithoutAuthorInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemUpdateManyWithWhereWithoutAuthorInput'
+ deleteMany:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemScalarWhereInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemScalarWhereInput'
+ ProfileUncheckedUpdateOneWithoutUserNestedInput:
+ type: object
+ properties:
+ create:
+ oneOf:
+ - $ref: '#/components/schemas/ProfileCreateWithoutUserInput'
+ - $ref: '#/components/schemas/ProfileUncheckedCreateWithoutUserInput'
+ connectOrCreate:
+ $ref: '#/components/schemas/ProfileCreateOrConnectWithoutUserInput'
+ upsert:
+ $ref: '#/components/schemas/ProfileUpsertWithoutUserInput'
+ disconnect:
+ type: boolean
+ delete:
+ type: boolean
+ connect:
+ $ref: '#/components/schemas/ProfileWhereUniqueInput'
+ update:
+ oneOf:
+ - $ref: '#/components/schemas/ProfileUpdateWithoutUserInput'
+ - $ref: '#/components/schemas/ProfileUncheckedUpdateWithoutUserInput'
+ UserCreateNestedOneWithoutProfileInput:
+ type: object
+ properties:
+ create:
+ oneOf:
+ - $ref: '#/components/schemas/UserCreateWithoutProfileInput'
+ - $ref: '#/components/schemas/UserUncheckedCreateWithoutProfileInput'
+ connectOrCreate:
+ $ref: '#/components/schemas/UserCreateOrConnectWithoutProfileInput'
+ connect:
+ $ref: '#/components/schemas/UserWhereUniqueInput'
+ NullableStringFieldUpdateOperationsInput:
+ type: object
+ properties:
+ set:
+ oneOf:
+ - type: 'null'
+ - type: string
+ UserUpdateOneRequiredWithoutProfileNestedInput:
+ type: object
+ properties:
+ create:
+ oneOf:
+ - $ref: '#/components/schemas/UserCreateWithoutProfileInput'
+ - $ref: '#/components/schemas/UserUncheckedCreateWithoutProfileInput'
+ connectOrCreate:
+ $ref: '#/components/schemas/UserCreateOrConnectWithoutProfileInput'
+ upsert:
+ $ref: '#/components/schemas/UserUpsertWithoutProfileInput'
+ connect:
+ $ref: '#/components/schemas/UserWhereUniqueInput'
+ update:
+ oneOf:
+ - $ref: '#/components/schemas/UserUpdateWithoutProfileInput'
+ - $ref: '#/components/schemas/UserUncheckedUpdateWithoutProfileInput'
+ UserCreateNestedOneWithoutPostsInput:
+ type: object
+ properties:
+ create:
+ oneOf:
+ - $ref: '#/components/schemas/UserCreateWithoutPostsInput'
+ - $ref: '#/components/schemas/UserUncheckedCreateWithoutPostsInput'
+ connectOrCreate:
+ $ref: '#/components/schemas/UserCreateOrConnectWithoutPostsInput'
+ connect:
+ $ref: '#/components/schemas/UserWhereUniqueInput'
+ BoolFieldUpdateOperationsInput:
+ type: object
+ properties:
+ set:
+ type: boolean
+ IntFieldUpdateOperationsInput:
+ type: object
+ properties:
+ set:
+ type: integer
+ increment:
+ type: integer
+ decrement:
+ type: integer
+ multiply:
+ type: integer
+ divide:
+ type: integer
+ UserUpdateOneWithoutPostsNestedInput:
+ type: object
+ properties:
+ create:
+ oneOf:
+ - $ref: '#/components/schemas/UserCreateWithoutPostsInput'
+ - $ref: '#/components/schemas/UserUncheckedCreateWithoutPostsInput'
+ connectOrCreate:
+ $ref: '#/components/schemas/UserCreateOrConnectWithoutPostsInput'
+ upsert:
+ $ref: '#/components/schemas/UserUpsertWithoutPostsInput'
+ disconnect:
+ type: boolean
+ delete:
+ type: boolean
+ connect:
+ $ref: '#/components/schemas/UserWhereUniqueInput'
+ update:
+ oneOf:
+ - $ref: '#/components/schemas/UserUpdateWithoutPostsInput'
+ - $ref: '#/components/schemas/UserUncheckedUpdateWithoutPostsInput'
+ NestedStringFilter:
+ type: object
+ properties:
+ equals:
+ type: string
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ - type: string
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ - type: string
+ lt:
+ type: string
+ lte:
+ type: string
+ gt:
+ type: string
+ gte:
+ type: string
+ contains:
+ type: string
+ startsWith:
+ type: string
+ endsWith:
+ type: string
+ not:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/NestedStringFilter'
+ NestedDateTimeFilter:
+ type: object
+ properties:
+ equals:
+ type: string
+ format: date-time
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ format: date-time
+ - type: string
+ format: date-time
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ format: date-time
+ - type: string
+ format: date-time
+ lt:
+ type: string
+ format: date-time
+ lte:
+ type: string
+ format: date-time
+ gt:
+ type: string
+ format: date-time
+ gte:
+ type: string
+ format: date-time
+ not:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/NestedDateTimeFilter'
+ NestedEnumroleFilter:
+ type: object
+ properties:
+ equals:
+ $ref: '#/components/schemas/Role'
+ in:
+ oneOf:
+ - type: array
+ items:
+ $ref: '#/components/schemas/Role'
+ - $ref: '#/components/schemas/Role'
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ $ref: '#/components/schemas/Role'
+ - $ref: '#/components/schemas/Role'
+ not:
+ oneOf:
+ - $ref: '#/components/schemas/Role'
+ - $ref: '#/components/schemas/NestedEnumroleFilter'
+ NestedStringWithAggregatesFilter:
+ type: object
+ properties:
+ equals:
+ type: string
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ - type: string
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ - type: string
+ lt:
+ type: string
+ lte:
+ type: string
+ gt:
+ type: string
+ gte:
+ type: string
+ contains:
+ type: string
+ startsWith:
+ type: string
+ endsWith:
+ type: string
+ not:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/NestedStringWithAggregatesFilter'
+ _count:
+ $ref: '#/components/schemas/NestedIntFilter'
+ _min:
+ $ref: '#/components/schemas/NestedStringFilter'
+ _max:
+ $ref: '#/components/schemas/NestedStringFilter'
+ NestedIntFilter:
+ type: object
+ properties:
+ equals:
+ type: integer
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: integer
+ - type: integer
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: integer
+ - type: integer
+ lt:
+ type: integer
+ lte:
+ type: integer
+ gt:
+ type: integer
+ gte:
+ type: integer
+ not:
+ oneOf:
+ - type: integer
+ - $ref: '#/components/schemas/NestedIntFilter'
+ NestedDateTimeWithAggregatesFilter:
+ type: object
+ properties:
+ equals:
+ type: string
+ format: date-time
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ format: date-time
+ - type: string
+ format: date-time
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ format: date-time
+ - type: string
+ format: date-time
+ lt:
+ type: string
+ format: date-time
+ lte:
+ type: string
+ format: date-time
+ gt:
+ type: string
+ format: date-time
+ gte:
+ type: string
+ format: date-time
+ not:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/NestedDateTimeWithAggregatesFilter'
+ _count:
+ $ref: '#/components/schemas/NestedIntFilter'
+ _min:
+ $ref: '#/components/schemas/NestedDateTimeFilter'
+ _max:
+ $ref: '#/components/schemas/NestedDateTimeFilter'
+ NestedEnumroleWithAggregatesFilter:
+ type: object
+ properties:
+ equals:
+ $ref: '#/components/schemas/Role'
+ in:
+ oneOf:
+ - type: array
+ items:
+ $ref: '#/components/schemas/Role'
+ - $ref: '#/components/schemas/Role'
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ $ref: '#/components/schemas/Role'
+ - $ref: '#/components/schemas/Role'
+ not:
+ oneOf:
+ - $ref: '#/components/schemas/Role'
+ - $ref: '#/components/schemas/NestedEnumroleWithAggregatesFilter'
+ _count:
+ $ref: '#/components/schemas/NestedIntFilter'
+ _min:
+ $ref: '#/components/schemas/NestedEnumroleFilter'
+ _max:
+ $ref: '#/components/schemas/NestedEnumroleFilter'
+ NestedStringNullableFilter:
+ type: object
+ properties:
+ equals:
+ oneOf:
+ - type: 'null'
+ - type: string
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ - type: string
+ - type: 'null'
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ - type: string
+ - type: 'null'
+ lt:
+ type: string
+ lte:
+ type: string
+ gt:
+ type: string
+ gte:
+ type: string
+ contains:
+ type: string
+ startsWith:
+ type: string
+ endsWith:
+ type: string
+ not:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/NestedStringNullableFilter'
+ - type: 'null'
+ NestedStringNullableWithAggregatesFilter:
+ type: object
+ properties:
+ equals:
+ oneOf:
+ - type: 'null'
+ - type: string
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ - type: string
+ - type: 'null'
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ - type: string
+ - type: 'null'
+ lt:
+ type: string
+ lte:
+ type: string
+ gt:
+ type: string
+ gte:
+ type: string
+ contains:
+ type: string
+ startsWith:
+ type: string
+ endsWith:
+ type: string
+ not:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/NestedStringNullableWithAggregatesFilter'
+ - type: 'null'
+ _count:
+ $ref: '#/components/schemas/NestedIntNullableFilter'
+ _min:
+ $ref: '#/components/schemas/NestedStringNullableFilter'
+ _max:
+ $ref: '#/components/schemas/NestedStringNullableFilter'
+ NestedIntNullableFilter:
+ type: object
+ properties:
+ equals:
+ oneOf:
+ - type: 'null'
+ - type: integer
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: integer
+ - type: integer
+ - type: 'null'
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: integer
+ - type: integer
+ - type: 'null'
+ lt:
+ type: integer
+ lte:
+ type: integer
+ gt:
+ type: integer
+ gte:
+ type: integer
+ not:
+ oneOf:
+ - type: integer
+ - $ref: '#/components/schemas/NestedIntNullableFilter'
+ - type: 'null'
+ NestedBoolFilter:
+ type: object
+ properties:
+ equals:
+ type: boolean
+ not:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/NestedBoolFilter'
+ NestedBoolWithAggregatesFilter:
+ type: object
+ properties:
+ equals:
+ type: boolean
+ not:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/NestedBoolWithAggregatesFilter'
+ _count:
+ $ref: '#/components/schemas/NestedIntFilter'
+ _min:
+ $ref: '#/components/schemas/NestedBoolFilter'
+ _max:
+ $ref: '#/components/schemas/NestedBoolFilter'
+ NestedIntWithAggregatesFilter:
+ type: object
+ properties:
+ equals:
+ type: integer
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: integer
+ - type: integer
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: integer
+ - type: integer
+ lt:
+ type: integer
+ lte:
+ type: integer
+ gt:
+ type: integer
+ gte:
+ type: integer
+ not:
+ oneOf:
+ - type: integer
+ - $ref: '#/components/schemas/NestedIntWithAggregatesFilter'
+ _count:
+ $ref: '#/components/schemas/NestedIntFilter'
+ _avg:
+ $ref: '#/components/schemas/NestedFloatFilter'
+ _sum:
+ $ref: '#/components/schemas/NestedIntFilter'
+ _min:
+ $ref: '#/components/schemas/NestedIntFilter'
+ _max:
+ $ref: '#/components/schemas/NestedIntFilter'
+ NestedFloatFilter:
+ type: object
+ properties:
+ equals:
+ type: number
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: number
+ - type: number
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: number
+ - type: number
+ lt:
+ type: number
+ lte:
+ type: number
+ gt:
+ type: number
+ gte:
+ type: number
+ not:
+ oneOf:
+ - type: number
+ - $ref: '#/components/schemas/NestedFloatFilter'
+ Post_ItemCreateWithoutAuthorInput:
+ type: object
+ properties:
+ id:
+ type: string
+ createdAt:
+ type: string
+ format: date-time
+ updatedAt:
+ type: string
+ format: date-time
+ title:
+ type: string
+ published:
+ type: boolean
+ viewCount:
+ type: integer
+ notes:
+ oneOf:
+ - type: 'null'
+ - type: string
+ required:
+ - id
+ - title
+ Post_ItemUncheckedCreateWithoutAuthorInput:
+ type: object
+ properties:
+ id:
+ type: string
+ createdAt:
+ type: string
+ format: date-time
+ updatedAt:
+ type: string
+ format: date-time
+ title:
+ type: string
+ published:
+ type: boolean
+ viewCount:
+ type: integer
+ notes:
+ oneOf:
+ - type: 'null'
+ - type: string
+ required:
+ - id
+ - title
+ Post_ItemCreateOrConnectWithoutAuthorInput:
+ type: object
+ properties:
+ where:
+ $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ create:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemCreateWithoutAuthorInput'
+ - $ref: '#/components/schemas/Post_ItemUncheckedCreateWithoutAuthorInput'
+ required:
+ - where
+ - create
+ Post_ItemCreateManyAuthorInputEnvelope:
+ type: object
+ properties:
+ data:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemCreateManyAuthorInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemCreateManyAuthorInput'
+ skipDuplicates:
+ type: boolean
+ required:
+ - data
+ ProfileCreateWithoutUserInput:
+ type: object
+ properties:
+ id:
+ type: string
+ image:
+ oneOf:
+ - type: 'null'
+ - type: string
+ ProfileUncheckedCreateWithoutUserInput:
+ type: object
+ properties:
+ id:
+ type: string
+ image:
+ oneOf:
+ - type: 'null'
+ - type: string
+ ProfileCreateOrConnectWithoutUserInput:
+ type: object
+ properties:
+ where:
+ $ref: '#/components/schemas/ProfileWhereUniqueInput'
+ create:
+ oneOf:
+ - $ref: '#/components/schemas/ProfileCreateWithoutUserInput'
+ - $ref: '#/components/schemas/ProfileUncheckedCreateWithoutUserInput'
+ required:
+ - where
+ - create
+ Post_ItemUpsertWithWhereUniqueWithoutAuthorInput:
+ type: object
+ properties:
+ where:
+ $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ update:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemUpdateWithoutAuthorInput'
+ - $ref: '#/components/schemas/Post_ItemUncheckedUpdateWithoutAuthorInput'
+ create:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemCreateWithoutAuthorInput'
+ - $ref: '#/components/schemas/Post_ItemUncheckedCreateWithoutAuthorInput'
+ required:
+ - where
+ - update
+ - create
+ Post_ItemUpdateWithWhereUniqueWithoutAuthorInput:
+ type: object
+ properties:
+ where:
+ $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ data:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemUpdateWithoutAuthorInput'
+ - $ref: '#/components/schemas/Post_ItemUncheckedUpdateWithoutAuthorInput'
+ required:
+ - where
+ - data
+ Post_ItemUpdateManyWithWhereWithoutAuthorInput:
+ type: object
+ properties:
+ where:
+ $ref: '#/components/schemas/Post_ItemScalarWhereInput'
+ data:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemUpdateManyMutationInput'
+ - $ref: '#/components/schemas/Post_ItemUncheckedUpdateManyWithoutPostsInput'
+ required:
+ - where
+ - data
+ Post_ItemScalarWhereInput:
+ type: object
+ properties:
+ AND:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemScalarWhereInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemScalarWhereInput'
+ OR:
+ type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemScalarWhereInput'
+ NOT:
+ oneOf:
+ - $ref: '#/components/schemas/Post_ItemScalarWhereInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemScalarWhereInput'
+ id:
+ oneOf:
+ - $ref: '#/components/schemas/StringFilter'
+ - type: string
+ createdAt:
+ oneOf:
+ - $ref: '#/components/schemas/DateTimeFilter'
+ - type: string
+ format: date-time
+ updatedAt:
+ oneOf:
+ - $ref: '#/components/schemas/DateTimeFilter'
+ - type: string
+ format: date-time
+ title:
+ oneOf:
+ - $ref: '#/components/schemas/StringFilter'
+ - type: string
+ authorId:
+ oneOf:
+ - $ref: '#/components/schemas/StringNullableFilter'
+ - type: string
+ - type: 'null'
+ published:
+ oneOf:
+ - $ref: '#/components/schemas/BoolFilter'
+ - type: boolean
+ viewCount:
+ oneOf:
+ - $ref: '#/components/schemas/IntFilter'
+ - type: integer
+ notes:
+ oneOf:
+ - $ref: '#/components/schemas/StringNullableFilter'
+ - type: string
+ - type: 'null'
+ ProfileUpsertWithoutUserInput:
+ type: object
+ properties:
+ update:
+ oneOf:
+ - $ref: '#/components/schemas/ProfileUpdateWithoutUserInput'
+ - $ref: '#/components/schemas/ProfileUncheckedUpdateWithoutUserInput'
+ create:
+ oneOf:
+ - $ref: '#/components/schemas/ProfileCreateWithoutUserInput'
+ - $ref: '#/components/schemas/ProfileUncheckedCreateWithoutUserInput'
+ required:
+ - update
+ - create
+ ProfileUpdateWithoutUserInput:
+ type: object
+ properties:
+ id:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ image:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/NullableStringFieldUpdateOperationsInput'
+ - type: 'null'
+ ProfileUncheckedUpdateWithoutUserInput:
+ type: object
+ properties:
+ id:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ image:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/NullableStringFieldUpdateOperationsInput'
+ - type: 'null'
+ UserCreateWithoutProfileInput:
+ type: object
+ properties:
+ id:
+ type: string
+ createdAt:
+ type: string
+ format: date-time
+ updatedAt:
+ type: string
+ format: date-time
+ email:
+ type: string
+ role:
+ $ref: '#/components/schemas/Role'
+ posts:
+ $ref: '#/components/schemas/Post_ItemCreateNestedManyWithoutAuthorInput'
+ required:
+ - email
+ UserUncheckedCreateWithoutProfileInput:
+ type: object
+ properties:
+ id:
+ type: string
+ createdAt:
+ type: string
+ format: date-time
+ updatedAt:
+ type: string
+ format: date-time
+ email:
+ type: string
+ role:
+ $ref: '#/components/schemas/Role'
+ posts:
+ $ref: "#/components/schemas/Post_ItemUncheckedCreateNestedManyWithoutAuthorInpu\
+ t"
+ required:
+ - email
+ UserCreateOrConnectWithoutProfileInput:
+ type: object
+ properties:
+ where:
+ $ref: '#/components/schemas/UserWhereUniqueInput'
+ create:
+ oneOf:
+ - $ref: '#/components/schemas/UserCreateWithoutProfileInput'
+ - $ref: '#/components/schemas/UserUncheckedCreateWithoutProfileInput'
+ required:
+ - where
+ - create
+ UserUpsertWithoutProfileInput:
+ type: object
+ properties:
+ update:
+ oneOf:
+ - $ref: '#/components/schemas/UserUpdateWithoutProfileInput'
+ - $ref: '#/components/schemas/UserUncheckedUpdateWithoutProfileInput'
+ create:
+ oneOf:
+ - $ref: '#/components/schemas/UserCreateWithoutProfileInput'
+ - $ref: '#/components/schemas/UserUncheckedCreateWithoutProfileInput'
+ required:
+ - update
+ - create
+ UserUpdateWithoutProfileInput:
+ type: object
+ properties:
+ id:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ createdAt:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/DateTimeFieldUpdateOperationsInput'
+ updatedAt:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/DateTimeFieldUpdateOperationsInput'
+ email:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ role:
+ oneOf:
+ - $ref: '#/components/schemas/Role'
+ - $ref: '#/components/schemas/EnumroleFieldUpdateOperationsInput'
+ posts:
+ $ref: '#/components/schemas/Post_ItemUpdateManyWithoutAuthorNestedInput'
+ UserUncheckedUpdateWithoutProfileInput:
+ type: object
+ properties:
+ id:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ createdAt:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/DateTimeFieldUpdateOperationsInput'
+ updatedAt:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/DateTimeFieldUpdateOperationsInput'
+ email:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ role:
+ oneOf:
+ - $ref: '#/components/schemas/Role'
+ - $ref: '#/components/schemas/EnumroleFieldUpdateOperationsInput'
+ posts:
+ $ref: "#/components/schemas/Post_ItemUncheckedUpdateManyWithoutAuthorNestedInpu\
+ t"
+ UserCreateWithoutPostsInput:
+ type: object
+ properties:
+ id:
+ type: string
+ createdAt:
+ type: string
+ format: date-time
+ updatedAt:
+ type: string
+ format: date-time
+ email:
+ type: string
+ role:
+ $ref: '#/components/schemas/Role'
+ profile:
+ $ref: '#/components/schemas/ProfileCreateNestedOneWithoutUserInput'
+ required:
+ - email
+ UserUncheckedCreateWithoutPostsInput:
+ type: object
+ properties:
+ id:
+ type: string
+ createdAt:
+ type: string
+ format: date-time
+ updatedAt:
+ type: string
+ format: date-time
+ email:
+ type: string
+ role:
+ $ref: '#/components/schemas/Role'
+ profile:
+ $ref: '#/components/schemas/ProfileUncheckedCreateNestedOneWithoutUserInput'
+ required:
+ - email
+ UserCreateOrConnectWithoutPostsInput:
+ type: object
+ properties:
+ where:
+ $ref: '#/components/schemas/UserWhereUniqueInput'
+ create:
+ oneOf:
+ - $ref: '#/components/schemas/UserCreateWithoutPostsInput'
+ - $ref: '#/components/schemas/UserUncheckedCreateWithoutPostsInput'
+ required:
+ - where
+ - create
+ UserUpsertWithoutPostsInput:
+ type: object
+ properties:
+ update:
+ oneOf:
+ - $ref: '#/components/schemas/UserUpdateWithoutPostsInput'
+ - $ref: '#/components/schemas/UserUncheckedUpdateWithoutPostsInput'
+ create:
+ oneOf:
+ - $ref: '#/components/schemas/UserCreateWithoutPostsInput'
+ - $ref: '#/components/schemas/UserUncheckedCreateWithoutPostsInput'
+ required:
+ - update
+ - create
+ UserUpdateWithoutPostsInput:
+ type: object
+ properties:
+ id:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ createdAt:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/DateTimeFieldUpdateOperationsInput'
+ updatedAt:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/DateTimeFieldUpdateOperationsInput'
+ email:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ role:
+ oneOf:
+ - $ref: '#/components/schemas/Role'
+ - $ref: '#/components/schemas/EnumroleFieldUpdateOperationsInput'
+ profile:
+ $ref: '#/components/schemas/ProfileUpdateOneWithoutUserNestedInput'
+ UserUncheckedUpdateWithoutPostsInput:
+ type: object
+ properties:
+ id:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ createdAt:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/DateTimeFieldUpdateOperationsInput'
+ updatedAt:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/DateTimeFieldUpdateOperationsInput'
+ email:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ role:
+ oneOf:
+ - $ref: '#/components/schemas/Role'
+ - $ref: '#/components/schemas/EnumroleFieldUpdateOperationsInput'
+ profile:
+ $ref: '#/components/schemas/ProfileUncheckedUpdateOneWithoutUserNestedInput'
+ Post_ItemCreateManyAuthorInput:
+ type: object
+ properties:
+ id:
+ type: string
+ createdAt:
+ type: string
+ format: date-time
+ updatedAt:
+ type: string
+ format: date-time
+ title:
+ type: string
+ published:
+ type: boolean
+ viewCount:
+ type: integer
+ notes:
+ oneOf:
+ - type: 'null'
+ - type: string
+ required:
+ - id
+ - title
+ Post_ItemUpdateWithoutAuthorInput:
+ type: object
+ properties:
+ id:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ createdAt:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/DateTimeFieldUpdateOperationsInput'
+ updatedAt:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/DateTimeFieldUpdateOperationsInput'
+ title:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ published:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/BoolFieldUpdateOperationsInput'
+ viewCount:
+ oneOf:
+ - type: integer
+ - $ref: '#/components/schemas/IntFieldUpdateOperationsInput'
+ notes:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/NullableStringFieldUpdateOperationsInput'
+ - type: 'null'
+ Post_ItemUncheckedUpdateWithoutAuthorInput:
+ type: object
+ properties:
+ id:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ createdAt:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/DateTimeFieldUpdateOperationsInput'
+ updatedAt:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/DateTimeFieldUpdateOperationsInput'
+ title:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ published:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/BoolFieldUpdateOperationsInput'
+ viewCount:
+ oneOf:
+ - type: integer
+ - $ref: '#/components/schemas/IntFieldUpdateOperationsInput'
+ notes:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/NullableStringFieldUpdateOperationsInput'
+ - type: 'null'
+ Post_ItemUncheckedUpdateManyWithoutPostsInput:
+ type: object
+ properties:
+ id:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ createdAt:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/DateTimeFieldUpdateOperationsInput'
+ updatedAt:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/DateTimeFieldUpdateOperationsInput'
+ title:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ published:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/BoolFieldUpdateOperationsInput'
+ viewCount:
+ oneOf:
+ - type: integer
+ - $ref: '#/components/schemas/IntFieldUpdateOperationsInput'
+ notes:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/NullableStringFieldUpdateOperationsInput'
+ - type: 'null'
+ UserArgs:
+ type: object
+ properties:
+ select:
+ $ref: '#/components/schemas/UserSelect'
+ include:
+ $ref: '#/components/schemas/UserInclude'
+ ProfileArgs:
+ type: object
+ properties:
+ select:
+ $ref: '#/components/schemas/ProfileSelect'
+ include:
+ $ref: '#/components/schemas/ProfileInclude'
+ UserInclude:
+ type: object
+ properties:
+ posts:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/Post_ItemFindManyArgs'
+ profile:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/ProfileArgs'
+ _count:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/UserCountOutputTypeArgs'
+ ProfileInclude:
+ type: object
+ properties:
+ user:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/UserArgs'
+ Post_ItemInclude:
+ type: object
+ properties:
+ author:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/UserArgs'
+ UserCountOutputTypeSelect:
+ type: object
+ properties:
+ posts:
+ type: boolean
+ UserCountOutputTypeArgs:
+ type: object
+ properties:
+ select:
+ $ref: '#/components/schemas/UserCountOutputTypeSelect'
+ UserSelect:
+ type: object
+ properties:
+ id:
+ type: boolean
+ createdAt:
+ type: boolean
+ updatedAt:
+ type: boolean
+ email:
+ type: boolean
+ role:
+ type: boolean
+ posts:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/Post_ItemFindManyArgs'
+ profile:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/ProfileArgs'
+ _count:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/UserCountOutputTypeArgs'
+ ProfileSelect:
+ type: object
+ properties:
+ id:
+ type: boolean
+ image:
+ type: boolean
+ user:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/UserArgs'
+ userId:
+ type: boolean
+ Post_ItemSelect:
+ type: object
+ properties:
+ id:
+ type: boolean
+ createdAt:
+ type: boolean
+ updatedAt:
+ type: boolean
+ title:
+ type: boolean
+ author:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/UserArgs'
+ authorId:
+ type: boolean
+ published:
+ type: boolean
+ viewCount:
+ type: boolean
+ notes:
+ type: boolean
+ UserCountAggregateInput:
+ type: object
+ properties:
+ id:
+ type: boolean
+ createdAt:
+ type: boolean
+ updatedAt:
+ type: boolean
+ email:
+ type: boolean
+ role:
+ type: boolean
+ _all:
+ type: boolean
+ UserMinAggregateInput:
+ type: object
+ properties:
+ id:
+ type: boolean
+ createdAt:
+ type: boolean
+ updatedAt:
+ type: boolean
+ email:
+ type: boolean
+ role:
+ type: boolean
+ UserMaxAggregateInput:
+ type: object
+ properties:
+ id:
+ type: boolean
+ createdAt:
+ type: boolean
+ updatedAt:
+ type: boolean
+ email:
+ type: boolean
+ role:
+ type: boolean
+ ProfileCountAggregateInput:
+ type: object
+ properties:
+ id:
+ type: boolean
+ image:
+ type: boolean
+ userId:
+ type: boolean
+ _all:
+ type: boolean
+ ProfileMinAggregateInput:
+ type: object
+ properties:
+ id:
+ type: boolean
+ image:
+ type: boolean
+ userId:
+ type: boolean
+ ProfileMaxAggregateInput:
+ type: object
+ properties:
+ id:
+ type: boolean
+ image:
+ type: boolean
+ userId:
+ type: boolean
+ AggregateUser:
+ type: object
+ properties:
+ _count:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/UserCountAggregateOutputType'
+ _min:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/UserMinAggregateOutputType'
+ _max:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/UserMaxAggregateOutputType'
+ UserGroupByOutputType:
+ type: object
+ properties:
+ id:
+ type: string
+ createdAt:
+ type: string
+ format: date-time
+ updatedAt:
+ type: string
+ format: date-time
+ email:
+ type: string
+ role:
+ $ref: '#/components/schemas/Role'
+ _count:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/UserCountAggregateOutputType'
+ _min:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/UserMinAggregateOutputType'
+ _max:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/UserMaxAggregateOutputType'
+ required:
+ - id
+ - createdAt
+ - updatedAt
+ - email
+ - role
+ AggregateProfile:
+ type: object
+ properties:
+ _count:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/ProfileCountAggregateOutputType'
+ _min:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/ProfileMinAggregateOutputType'
+ _max:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/ProfileMaxAggregateOutputType'
+ ProfileGroupByOutputType:
+ type: object
+ properties:
+ id:
+ type: string
+ image:
+ oneOf:
+ - type: 'null'
+ - type: string
+ userId:
+ type: string
+ _count:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/ProfileCountAggregateOutputType'
+ _min:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/ProfileMinAggregateOutputType'
+ _max:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/ProfileMaxAggregateOutputType'
+ required:
+ - id
+ - userId
+ AggregatePost_Item:
+ type: object
+ properties:
+ _count:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/Post_ItemCountAggregateOutputType'
+ _avg:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/Post_ItemAvgAggregateOutputType'
+ _sum:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/Post_ItemSumAggregateOutputType'
+ _min:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/Post_ItemMinAggregateOutputType'
+ _max:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/Post_ItemMaxAggregateOutputType'
+ Post_ItemGroupByOutputType:
+ type: object
+ properties:
+ id:
+ type: string
+ createdAt:
+ type: string
+ format: date-time
+ updatedAt:
+ type: string
+ format: date-time
+ title:
+ type: string
+ authorId:
+ oneOf:
+ - type: 'null'
+ - type: string
+ published:
+ type: boolean
+ viewCount:
+ type: integer
+ notes:
+ oneOf:
+ - type: 'null'
+ - type: string
+ _count:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/Post_ItemCountAggregateOutputType'
+ _avg:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/Post_ItemAvgAggregateOutputType'
+ _sum:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/Post_ItemSumAggregateOutputType'
+ _min:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/Post_ItemMinAggregateOutputType'
+ _max:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/Post_ItemMaxAggregateOutputType'
+ required:
+ - id
+ - createdAt
+ - updatedAt
+ - title
+ - published
+ - viewCount
+ UserCountAggregateOutputType:
+ type: object
+ properties:
+ id:
+ type: integer
+ createdAt:
+ type: integer
+ updatedAt:
+ type: integer
+ email:
+ type: integer
+ role:
+ type: integer
+ _all:
+ type: integer
+ required:
+ - id
+ - createdAt
+ - updatedAt
+ - email
+ - role
+ - _all
+ UserMinAggregateOutputType:
+ type: object
+ properties:
+ id:
+ oneOf:
+ - type: 'null'
+ - type: string
+ createdAt:
+ oneOf:
+ - type: 'null'
+ - type: string
+ format: date-time
+ updatedAt:
+ oneOf:
+ - type: 'null'
+ - type: string
+ format: date-time
+ email:
+ oneOf:
+ - type: 'null'
+ - type: string
+ role:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/Role'
+ UserMaxAggregateOutputType:
+ type: object
+ properties:
+ id:
+ oneOf:
+ - type: 'null'
+ - type: string
+ createdAt:
+ oneOf:
+ - type: 'null'
+ - type: string
+ format: date-time
+ updatedAt:
+ oneOf:
+ - type: 'null'
+ - type: string
+ format: date-time
+ email:
+ oneOf:
+ - type: 'null'
+ - type: string
+ role:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/Role'
+ ProfileCountAggregateOutputType:
+ type: object
+ properties:
+ id:
+ type: integer
+ image:
+ type: integer
+ userId:
+ type: integer
+ _all:
+ type: integer
+ required:
+ - id
+ - image
+ - userId
+ - _all
+ ProfileMinAggregateOutputType:
+ type: object
+ properties:
+ id:
+ oneOf:
+ - type: 'null'
+ - type: string
+ image:
+ oneOf:
+ - type: 'null'
+ - type: string
+ userId:
+ oneOf:
+ - type: 'null'
+ - type: string
+ ProfileMaxAggregateOutputType:
+ type: object
+ properties:
+ id:
+ oneOf:
+ - type: 'null'
+ - type: string
+ image:
+ oneOf:
+ - type: 'null'
+ - type: string
+ userId:
+ oneOf:
+ - type: 'null'
+ - type: string
+ Post_ItemCountAggregateOutputType:
+ type: object
+ properties:
+ id:
+ type: integer
+ createdAt:
+ type: integer
+ updatedAt:
+ type: integer
+ title:
+ type: integer
+ authorId:
+ type: integer
+ published:
+ type: integer
+ viewCount:
+ type: integer
+ notes:
+ type: integer
+ _all:
+ type: integer
+ required:
+ - id
+ - createdAt
+ - updatedAt
+ - title
+ - authorId
+ - published
+ - viewCount
+ - notes
+ - _all
+ Post_ItemAvgAggregateOutputType:
+ type: object
+ properties:
+ viewCount:
+ oneOf:
+ - type: 'null'
+ - type: number
+ Post_ItemSumAggregateOutputType:
+ type: object
+ properties:
+ viewCount:
+ oneOf:
+ - type: 'null'
+ - type: integer
+ Post_ItemMinAggregateOutputType:
+ type: object
+ properties:
+ id:
+ oneOf:
+ - type: 'null'
+ - type: string
+ createdAt:
+ oneOf:
+ - type: 'null'
+ - type: string
+ format: date-time
+ updatedAt:
+ oneOf:
+ - type: 'null'
+ - type: string
+ format: date-time
+ title:
+ oneOf:
+ - type: 'null'
+ - type: string
+ authorId:
+ oneOf:
+ - type: 'null'
+ - type: string
+ published:
+ oneOf:
+ - type: 'null'
+ - type: boolean
+ viewCount:
+ oneOf:
+ - type: 'null'
+ - type: integer
+ notes:
+ oneOf:
+ - type: 'null'
+ - type: string
+ Post_ItemMaxAggregateOutputType:
+ type: object
+ properties:
+ id:
+ oneOf:
+ - type: 'null'
+ - type: string
+ createdAt:
+ oneOf:
+ - type: 'null'
+ - type: string
+ format: date-time
+ updatedAt:
+ oneOf:
+ - type: 'null'
+ - type: string
+ format: date-time
+ title:
+ oneOf:
+ - type: 'null'
+ - type: string
+ authorId:
+ oneOf:
+ - type: 'null'
+ - type: string
+ published:
+ oneOf:
+ - type: 'null'
+ - type: boolean
+ viewCount:
+ oneOf:
+ - type: 'null'
+ - type: integer
+ notes:
+ oneOf:
+ - type: 'null'
+ - type: string
+ _Meta:
+ type: object
+ properties:
+ meta:
+ type: object
+ description: Meta information about the request or response
+ properties:
+ serialization:
+ description: Serialization metadata
+ additionalProperties: true
+ _Error:
+ type: object
+ required:
+ - error
+ properties:
+ error:
+ type: object
+ required:
+ - message
+ properties:
+ prisma:
+ type: boolean
+ description: Indicates if the error occurred during a Prisma call
+ rejectedByPolicy:
+ type: boolean
+ description: Indicates if the error was due to rejection by a policy
+ code:
+ type: string
+ description: Prisma error code. Only available when "prisma" field is true.
+ message:
+ type: string
+ description: Error message
+ reason:
+ type: string
+ description: Detailed error reason
+ zodErrors:
+ type: object
+ additionalProperties: true
+ description: Zod validation errors if the error is due to data validation
+ failure
+ additionalProperties: true
+ BatchPayload:
+ type: object
+ properties:
+ count:
+ type: integer
+ UserCreateArgs:
+ type: object
+ required:
+ - data
+ properties:
+ select:
+ $ref: '#/components/schemas/UserSelect'
+ include:
+ $ref: '#/components/schemas/UserInclude'
+ data:
+ $ref: '#/components/schemas/UserCreateInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ UserCreateManyArgs:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/UserCreateManyInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ UserFindUniqueArgs:
+ type: object
+ required:
+ - where
+ properties:
+ select:
+ $ref: '#/components/schemas/UserSelect'
+ include:
+ $ref: '#/components/schemas/UserInclude'
+ where:
+ $ref: '#/components/schemas/UserWhereUniqueInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ UserFindFirstArgs:
+ type: object
+ properties:
+ select:
+ $ref: '#/components/schemas/UserSelect'
+ include:
+ $ref: '#/components/schemas/UserInclude'
+ where:
+ $ref: '#/components/schemas/UserWhereInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ UserFindManyArgs:
+ type: object
+ properties:
+ select:
+ $ref: '#/components/schemas/UserSelect'
+ include:
+ $ref: '#/components/schemas/UserInclude'
+ where:
+ $ref: '#/components/schemas/UserWhereInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ UserUpdateArgs:
+ type: object
+ required:
+ - where
+ - data
+ properties:
+ select:
+ $ref: '#/components/schemas/UserSelect'
+ include:
+ $ref: '#/components/schemas/UserInclude'
+ where:
+ $ref: '#/components/schemas/UserWhereUniqueInput'
+ data:
+ $ref: '#/components/schemas/UserUpdateInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ UserUpdateManyArgs:
+ type: object
+ required:
+ - data
+ properties:
+ where:
+ $ref: '#/components/schemas/UserWhereInput'
+ data:
+ $ref: '#/components/schemas/UserUpdateManyMutationInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ UserUpsertArgs:
+ type: object
+ required:
+ - create
+ - update
+ - where
+ properties:
+ select:
+ $ref: '#/components/schemas/UserSelect'
+ include:
+ $ref: '#/components/schemas/UserInclude'
+ where:
+ $ref: '#/components/schemas/UserWhereUniqueInput'
+ create:
+ $ref: '#/components/schemas/UserCreateInput'
+ update:
+ $ref: '#/components/schemas/UserUpdateInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ UserDeleteUniqueArgs:
+ type: object
+ required:
+ - where
+ properties:
+ select:
+ $ref: '#/components/schemas/UserSelect'
+ include:
+ $ref: '#/components/schemas/UserInclude'
+ where:
+ $ref: '#/components/schemas/UserWhereUniqueInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ UserDeleteManyArgs:
+ type: object
+ properties:
+ where:
+ $ref: '#/components/schemas/UserWhereInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ UserCountArgs:
+ type: object
+ properties:
+ select:
+ $ref: '#/components/schemas/UserSelect'
+ where:
+ $ref: '#/components/schemas/UserWhereInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ UserAggregateArgs:
+ type: object
+ properties:
+ where:
+ $ref: '#/components/schemas/UserWhereInput'
+ orderBy:
+ $ref: '#/components/schemas/UserOrderByWithRelationInput'
+ cursor:
+ $ref: '#/components/schemas/UserWhereUniqueInput'
+ take:
+ type: integer
+ skip:
+ type: integer
+ _count:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/UserCountAggregateInput'
+ _min:
+ $ref: '#/components/schemas/UserMinAggregateInput'
+ _max:
+ $ref: '#/components/schemas/UserMaxAggregateInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ UserGroupByArgs:
+ type: object
+ properties:
+ where:
+ $ref: '#/components/schemas/UserWhereInput'
+ orderBy:
+ $ref: '#/components/schemas/UserOrderByWithRelationInput'
+ by:
+ $ref: '#/components/schemas/UserScalarFieldEnum'
+ having:
+ $ref: '#/components/schemas/UserScalarWhereWithAggregatesInput'
+ take:
+ type: integer
+ skip:
+ type: integer
+ _count:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/UserCountAggregateInput'
+ _min:
+ $ref: '#/components/schemas/UserMinAggregateInput'
+ _max:
+ $ref: '#/components/schemas/UserMaxAggregateInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ ProfileCreateArgs:
+ type: object
+ required:
+ - data
+ properties:
+ select:
+ $ref: '#/components/schemas/ProfileSelect'
+ include:
+ $ref: '#/components/schemas/ProfileInclude'
+ data:
+ $ref: '#/components/schemas/ProfileCreateInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ ProfileCreateManyArgs:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/ProfileCreateManyInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ ProfileFindUniqueArgs:
+ type: object
+ required:
+ - where
+ properties:
+ select:
+ $ref: '#/components/schemas/ProfileSelect'
+ include:
+ $ref: '#/components/schemas/ProfileInclude'
+ where:
+ $ref: '#/components/schemas/ProfileWhereUniqueInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ ProfileFindFirstArgs:
+ type: object
+ properties:
+ select:
+ $ref: '#/components/schemas/ProfileSelect'
+ include:
+ $ref: '#/components/schemas/ProfileInclude'
+ where:
+ $ref: '#/components/schemas/ProfileWhereInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ ProfileFindManyArgs:
+ type: object
+ properties:
+ select:
+ $ref: '#/components/schemas/ProfileSelect'
+ include:
+ $ref: '#/components/schemas/ProfileInclude'
+ where:
+ $ref: '#/components/schemas/ProfileWhereInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ ProfileUpdateArgs:
+ type: object
+ required:
+ - where
+ - data
+ properties:
+ select:
+ $ref: '#/components/schemas/ProfileSelect'
+ include:
+ $ref: '#/components/schemas/ProfileInclude'
+ where:
+ $ref: '#/components/schemas/ProfileWhereUniqueInput'
+ data:
+ $ref: '#/components/schemas/ProfileUpdateInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ ProfileUpdateManyArgs:
+ type: object
+ required:
+ - data
+ properties:
+ where:
+ $ref: '#/components/schemas/ProfileWhereInput'
+ data:
+ $ref: '#/components/schemas/ProfileUpdateManyMutationInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ ProfileUpsertArgs:
+ type: object
+ required:
+ - create
+ - update
+ - where
+ properties:
+ select:
+ $ref: '#/components/schemas/ProfileSelect'
+ include:
+ $ref: '#/components/schemas/ProfileInclude'
+ where:
+ $ref: '#/components/schemas/ProfileWhereUniqueInput'
+ create:
+ $ref: '#/components/schemas/ProfileCreateInput'
+ update:
+ $ref: '#/components/schemas/ProfileUpdateInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ ProfileDeleteUniqueArgs:
+ type: object
+ required:
+ - where
+ properties:
+ select:
+ $ref: '#/components/schemas/ProfileSelect'
+ include:
+ $ref: '#/components/schemas/ProfileInclude'
+ where:
+ $ref: '#/components/schemas/ProfileWhereUniqueInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ ProfileDeleteManyArgs:
+ type: object
+ properties:
+ where:
+ $ref: '#/components/schemas/ProfileWhereInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ ProfileCountArgs:
+ type: object
+ properties:
+ select:
+ $ref: '#/components/schemas/ProfileSelect'
+ where:
+ $ref: '#/components/schemas/ProfileWhereInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ ProfileAggregateArgs:
+ type: object
+ properties:
+ where:
+ $ref: '#/components/schemas/ProfileWhereInput'
+ orderBy:
+ $ref: '#/components/schemas/ProfileOrderByWithRelationInput'
+ cursor:
+ $ref: '#/components/schemas/ProfileWhereUniqueInput'
+ take:
+ type: integer
+ skip:
+ type: integer
+ _count:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/ProfileCountAggregateInput'
+ _min:
+ $ref: '#/components/schemas/ProfileMinAggregateInput'
+ _max:
+ $ref: '#/components/schemas/ProfileMaxAggregateInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ ProfileGroupByArgs:
+ type: object
+ properties:
+ where:
+ $ref: '#/components/schemas/ProfileWhereInput'
+ orderBy:
+ $ref: '#/components/schemas/ProfileOrderByWithRelationInput'
+ by:
+ $ref: '#/components/schemas/ProfileScalarFieldEnum'
+ having:
+ $ref: '#/components/schemas/ProfileScalarWhereWithAggregatesInput'
+ take:
+ type: integer
+ skip:
+ type: integer
+ _count:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/ProfileCountAggregateInput'
+ _min:
+ $ref: '#/components/schemas/ProfileMinAggregateInput'
+ _max:
+ $ref: '#/components/schemas/ProfileMaxAggregateInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ Post_ItemCreateArgs:
+ type: object
+ required:
+ - data
+ properties:
+ select:
+ $ref: '#/components/schemas/Post_ItemSelect'
+ include:
+ $ref: '#/components/schemas/Post_ItemInclude'
+ data:
+ $ref: '#/components/schemas/Post_ItemCreateInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ Post_ItemCreateManyArgs:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/Post_ItemCreateManyInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ Post_ItemFindUniqueArgs:
+ type: object
+ required:
+ - where
+ properties:
+ select:
+ $ref: '#/components/schemas/Post_ItemSelect'
+ include:
+ $ref: '#/components/schemas/Post_ItemInclude'
+ where:
+ $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ Post_ItemFindFirstArgs:
+ type: object
+ properties:
+ select:
+ $ref: '#/components/schemas/Post_ItemSelect'
+ include:
+ $ref: '#/components/schemas/Post_ItemInclude'
+ where:
+ $ref: '#/components/schemas/Post_ItemWhereInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ Post_ItemFindManyArgs:
+ type: object
+ properties:
+ select:
+ $ref: '#/components/schemas/Post_ItemSelect'
+ include:
+ $ref: '#/components/schemas/Post_ItemInclude'
+ where:
+ $ref: '#/components/schemas/Post_ItemWhereInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ Post_ItemUpdateArgs:
+ type: object
+ required:
+ - where
+ - data
+ properties:
+ select:
+ $ref: '#/components/schemas/Post_ItemSelect'
+ include:
+ $ref: '#/components/schemas/Post_ItemInclude'
+ where:
+ $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ data:
+ $ref: '#/components/schemas/Post_ItemUpdateInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ Post_ItemUpdateManyArgs:
+ type: object
+ required:
+ - data
+ properties:
+ where:
+ $ref: '#/components/schemas/Post_ItemWhereInput'
+ data:
+ $ref: '#/components/schemas/Post_ItemUpdateManyMutationInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ Post_ItemUpsertArgs:
+ type: object
+ required:
+ - create
+ - update
+ - where
+ properties:
+ select:
+ $ref: '#/components/schemas/Post_ItemSelect'
+ include:
+ $ref: '#/components/schemas/Post_ItemInclude'
+ where:
+ $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ create:
+ $ref: '#/components/schemas/Post_ItemCreateInput'
+ update:
+ $ref: '#/components/schemas/Post_ItemUpdateInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ Post_ItemDeleteUniqueArgs:
+ type: object
+ required:
+ - where
+ properties:
+ select:
+ $ref: '#/components/schemas/Post_ItemSelect'
+ include:
+ $ref: '#/components/schemas/Post_ItemInclude'
+ where:
+ $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ Post_ItemDeleteManyArgs:
+ type: object
+ properties:
+ where:
+ $ref: '#/components/schemas/Post_ItemWhereInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ Post_ItemCountArgs:
+ type: object
+ properties:
+ select:
+ $ref: '#/components/schemas/Post_ItemSelect'
+ where:
+ $ref: '#/components/schemas/Post_ItemWhereInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ Post_ItemAggregateArgs:
+ type: object
+ properties:
+ where:
+ $ref: '#/components/schemas/Post_ItemWhereInput'
+ orderBy:
+ $ref: '#/components/schemas/Post_ItemOrderByWithRelationInput'
+ cursor:
+ $ref: '#/components/schemas/Post_ItemWhereUniqueInput'
+ take:
+ type: integer
+ skip:
+ type: integer
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ Post_ItemGroupByArgs:
+ type: object
+ properties:
+ where:
+ $ref: '#/components/schemas/Post_ItemWhereInput'
+ orderBy:
+ $ref: '#/components/schemas/Post_ItemOrderByWithRelationInput'
+ by:
+ $ref: '#/components/schemas/Post_ItemScalarFieldEnum'
+ having:
+ $ref: '#/components/schemas/Post_ItemScalarWhereWithAggregatesInput'
+ take:
+ type: integer
+ skip:
+ type: integer
+ meta:
+ $ref: '#/components/schemas/_Meta'
+paths:
+ /user/create:
+ post:
+ operationId: createUser
+ description: Create a new User
+ tags:
+ - user
+ responses:
+ '201':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/User'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/UserCreateArgs'
+ /user/createMany:
+ post:
+ operationId: createManyUser
+ description: Create several User
+ tags:
+ - user
+ responses:
+ '201':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/BatchPayload'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/UserCreateManyArgs'
+ /user/findUnique:
+ get:
+ operationId: findUniqueUser
+ description: Find one unique User
+ tags:
+ - user
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/User'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/UserFindUniqueArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
+ /user/findFirst:
+ get:
+ operationId: findFirstUser
+ description: Find the first User matching the given condition
+ tags:
+ - user
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/User'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/UserFindFirstArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
+ /user/findMany:
+ get:
+ operationId: findManyUser
+ description: Find users matching the given conditions
+ tags:
+ - user
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ type: array
+ items:
+ $ref: '#/components/schemas/User'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/UserFindManyArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
+ /user/update:
+ patch:
+ operationId: updateUser
+ description: Update a User
+ tags:
+ - user
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/User'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/UserUpdateArgs'
+ /user/updateMany:
+ patch:
+ operationId: updateManyUser
+ description: Update Users matching the given condition
+ tags:
+ - user
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/BatchPayload'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/UserUpdateManyArgs'
+ /user/upsert:
+ post:
+ operationId: upsertUser
+ description: Upsert a User
+ tags:
+ - user
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/User'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/UserUpsertArgs'
+ /user/dodelete:
+ put:
+ operationId: deleteUser
+ description: Delete a unique user
+ tags:
+ - delete
+ - user
+ summary: Delete a user yeah yeah
+ deprecated: true
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/User'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/UserDeleteUniqueArgs'
+ /user/deleteMany:
+ delete:
+ operationId: deleteManyUser
+ description: Delete Users matching the given condition
+ tags:
+ - user
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/BatchPayload'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/UserDeleteManyArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
+ /user/count:
+ get:
+ operationId: countUser
+ description: Find a list of User
+ tags:
+ - user
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ oneOf:
+ - type: integer
+ - $ref: '#/components/schemas/UserCountAggregateOutputType'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/UserCountArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
+ /user/aggregate:
+ get:
+ operationId: aggregateUser
+ description: Aggregate Users
+ tags:
+ - user
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/AggregateUser'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/UserAggregateArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
+ /user/groupBy:
+ get:
+ operationId: groupByUser
+ description: Group Users by fields
+ tags:
+ - user
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ type: array
+ items:
+ $ref: '#/components/schemas/UserGroupByOutputType'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/UserGroupByArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
+ /profile/create:
+ post:
+ operationId: createProfile
+ description: Create a new Profile
+ tags:
+ - profile
+ responses:
+ '201':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/Profile'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ProfileCreateArgs'
+ /profile/createMany:
+ post:
+ operationId: createManyProfile
+ description: Create several Profile
+ tags:
+ - profile
+ responses:
+ '201':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/BatchPayload'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ProfileCreateManyArgs'
+ /profile/findUnique:
+ get:
+ operationId: findUniqueProfile
+ description: Find one unique Profile
+ tags:
+ - profile
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/Profile'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ProfileFindUniqueArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
+ /profile/findFirst:
+ get:
+ operationId: findFirstProfile
+ description: Find the first Profile matching the given condition
+ tags:
+ - profile
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/Profile'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ProfileFindFirstArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
+ /profile/findMany:
+ get:
+ operationId: findManyProfile
+ description: Find a list of Profile
+ tags:
+ - profile
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ type: array
+ items:
+ $ref: '#/components/schemas/Profile'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ProfileFindManyArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
+ /profile/update:
+ patch:
+ operationId: updateProfile
+ description: Update a Profile
+ tags:
+ - profile
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/Profile'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ProfileUpdateArgs'
+ /profile/updateMany:
+ patch:
+ operationId: updateManyProfile
+ description: Update Profiles matching the given condition
+ tags:
+ - profile
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/BatchPayload'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ProfileUpdateManyArgs'
+ /profile/upsert:
+ post:
+ operationId: upsertProfile
+ description: Upsert a Profile
+ tags:
+ - profile
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/Profile'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ProfileUpsertArgs'
+ /profile/delete:
+ delete:
+ operationId: deleteProfile
+ description: Delete one unique Profile
+ tags:
+ - profile
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/Profile'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ProfileDeleteUniqueArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
+ /profile/deleteMany:
+ delete:
+ operationId: deleteManyProfile
+ description: Delete Profiles matching the given condition
+ tags:
+ - profile
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/BatchPayload'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ProfileDeleteManyArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
+ /profile/count:
+ get:
+ operationId: countProfile
+ description: Find a list of Profile
+ tags:
+ - profile
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ oneOf:
+ - type: integer
+ - $ref: '#/components/schemas/ProfileCountAggregateOutputType'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ProfileCountArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
+ /profile/aggregate:
+ get:
+ operationId: aggregateProfile
+ description: Aggregate Profiles
+ tags:
+ - profile
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/AggregateProfile'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ProfileAggregateArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
+ /profile/groupBy:
+ get:
+ operationId: groupByProfile
+ description: Group Profiles by fields
+ tags:
+ - profile
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ type: array
+ items:
+ $ref: '#/components/schemas/ProfileGroupByOutputType'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ProfileGroupByArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
+ /post_Item/create:
+ post:
+ operationId: createPost_Item
+ description: Create a new Post_Item
+ tags:
+ - post_Item
+ responses:
+ '201':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/Post_Item'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Post_ItemCreateArgs'
+ /post_Item/createMany:
+ post:
+ operationId: createManyPost_Item
+ description: Create several Post_Item
+ tags:
+ - post_Item
+ responses:
+ '201':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/BatchPayload'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Post_ItemCreateManyArgs'
+ /post_Item/findUnique:
+ get:
+ operationId: findUniquePost_Item
+ description: Find one unique Post_Item
+ tags:
+ - post_Item
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/Post_Item'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Post_ItemFindUniqueArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
+ /post_Item/findFirst:
+ get:
+ operationId: findFirstPost_Item
+ description: Find the first Post_Item matching the given condition
+ tags:
+ - post_Item
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/Post_Item'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Post_ItemFindFirstArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
+ /post_Item/update:
+ patch:
+ operationId: updatePost_Item
+ description: Update a Post_Item
+ tags:
+ - post_Item
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/Post_Item'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Post_ItemUpdateArgs'
+ /post_Item/updateMany:
+ patch:
+ operationId: updateManyPost_Item
+ description: Update Post_Items matching the given condition
+ tags:
+ - post_Item
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/BatchPayload'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Post_ItemUpdateManyArgs'
+ /post_Item/upsert:
+ post:
+ operationId: upsertPost_Item
+ description: Upsert a Post_Item
+ tags:
+ - post_Item
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/Post_Item'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Post_ItemUpsertArgs'
+ /post_Item/delete:
+ delete:
+ operationId: deletePost_Item
+ description: Delete one unique Post_Item
+ tags:
+ - post_Item
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/Post_Item'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Post_ItemDeleteUniqueArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
+ /post_Item/deleteMany:
+ delete:
+ operationId: deleteManyPost_Item
+ description: Delete Post_Items matching the given condition
+ tags:
+ - post_Item
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/BatchPayload'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Post_ItemDeleteManyArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
+ /post_Item/count:
+ get:
+ operationId: countPost_Item
+ description: Find a list of Post_Item
+ tags:
+ - post_Item
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ oneOf:
+ - type: integer
+ - $ref: '#/components/schemas/Post_ItemCountAggregateOutputType'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Post_ItemCountArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
+ /post_Item/aggregate:
+ get:
+ operationId: aggregatePost_Item
+ description: Aggregate Post_Items
+ tags:
+ - post_Item
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/AggregatePost_Item'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Post_ItemAggregateArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
+ /post_Item/groupBy:
+ get:
+ operationId: groupByPost_Item
+ description: Group Post_Items by fields
+ tags:
+ - post_Item
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ type: array
+ items:
+ $ref: '#/components/schemas/Post_ItemGroupByOutputType'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Post_ItemGroupByArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
diff --git a/packages/plugins/openapi/tests/baseline/rpc-type-coverage.baseline.yaml b/packages/plugins/openapi/tests/baseline/rpc-type-coverage-3.0.0.baseline.yaml
similarity index 94%
rename from packages/plugins/openapi/tests/baseline/rpc-type-coverage.baseline.yaml
rename to packages/plugins/openapi/tests/baseline/rpc-type-coverage-3.0.0.baseline.yaml
index cbe6476f8..6e219e6e3 100644
--- a/packages/plugins/openapi/tests/baseline/rpc-type-coverage.baseline.yaml
+++ b/packages/plugins/openapi/tests/baseline/rpc-type-coverage-3.0.0.baseline.yaml
@@ -1,4 +1,4 @@
-openapi: 3.1.0
+openapi: 3.0.0
info:
title: ZenStack Generated API
version: 1.0.0
@@ -29,6 +29,11 @@ components:
enum:
- default
- insensitive
+ NullsOrder:
+ type: string
+ enum:
+ - first
+ - last
Foo:
type: object
properties:
@@ -54,6 +59,7 @@ components:
bytes:
type: string
format: byte
+ nullable: true
required:
- id
- string
@@ -63,7 +69,6 @@ components:
- float
- decimal
- boolean
- - bytes
FooWhereInput:
type: object
properties:
@@ -120,9 +125,10 @@ components:
- type: boolean
bytes:
oneOf:
- - $ref: '#/components/schemas/BytesFilter'
+ - $ref: '#/components/schemas/BytesNullableFilter'
- type: string
format: byte
+ nullable: true
FooOrderByWithRelationInput:
type: object
properties:
@@ -143,7 +149,9 @@ components:
boolean:
$ref: '#/components/schemas/SortOrder'
bytes:
- $ref: '#/components/schemas/SortOrder'
+ oneOf:
+ - $ref: '#/components/schemas/SortOrder'
+ - $ref: '#/components/schemas/SortOrderInput'
FooWhereUniqueInput:
type: object
properties:
@@ -205,9 +213,10 @@ components:
- type: boolean
bytes:
oneOf:
- - $ref: '#/components/schemas/BytesWithAggregatesFilter'
+ - $ref: '#/components/schemas/BytesNullableWithAggregatesFilter'
- type: string
format: byte
+ nullable: true
FooCreateInput:
type: object
properties:
@@ -233,6 +242,7 @@ components:
bytes:
type: string
format: byte
+ nullable: true
required:
- string
- int
@@ -241,7 +251,6 @@ components:
- float
- decimal
- boolean
- - bytes
FooUpdateInput:
type: object
properties:
@@ -284,7 +293,8 @@ components:
oneOf:
- type: string
format: byte
- - $ref: '#/components/schemas/BytesFieldUpdateOperationsInput'
+ - $ref: '#/components/schemas/NullableBytesFieldUpdateOperationsInput'
+ nullable: true
FooCreateManyInput:
type: object
properties:
@@ -310,6 +320,7 @@ components:
bytes:
type: string
format: byte
+ nullable: true
required:
- string
- int
@@ -318,7 +329,6 @@ components:
- float
- decimal
- boolean
- - bytes
FooUpdateManyMutationInput:
type: object
properties:
@@ -361,7 +371,8 @@ components:
oneOf:
- type: string
format: byte
- - $ref: '#/components/schemas/BytesFieldUpdateOperationsInput'
+ - $ref: '#/components/schemas/NullableBytesFieldUpdateOperationsInput'
+ nullable: true
StringFilter:
type: object
properties:
@@ -583,12 +594,13 @@ components:
oneOf:
- type: boolean
- $ref: '#/components/schemas/NestedBoolFilter'
- BytesFilter:
+ BytesNullableFilter:
type: object
properties:
equals:
type: string
format: byte
+ nullable: true
in:
oneOf:
- type: array
@@ -597,6 +609,7 @@ components:
format: byte
- type: string
format: byte
+ nullable: true
notIn:
oneOf:
- type: array
@@ -605,11 +618,22 @@ components:
format: byte
- type: string
format: byte
+ nullable: true
not:
oneOf:
- type: string
format: byte
- - $ref: '#/components/schemas/NestedBytesFilter'
+ - $ref: '#/components/schemas/NestedBytesNullableFilter'
+ nullable: true
+ SortOrderInput:
+ type: object
+ properties:
+ sort:
+ $ref: '#/components/schemas/SortOrder'
+ nulls:
+ $ref: '#/components/schemas/NullsOrder'
+ required:
+ - sort
StringWithAggregatesFilter:
type: object
properties:
@@ -889,12 +913,13 @@ components:
$ref: '#/components/schemas/NestedBoolFilter'
_max:
$ref: '#/components/schemas/NestedBoolFilter'
- BytesWithAggregatesFilter:
+ BytesNullableWithAggregatesFilter:
type: object
properties:
equals:
type: string
format: byte
+ nullable: true
in:
oneOf:
- type: array
@@ -903,6 +928,7 @@ components:
format: byte
- type: string
format: byte
+ nullable: true
notIn:
oneOf:
- type: array
@@ -911,17 +937,19 @@ components:
format: byte
- type: string
format: byte
+ nullable: true
not:
oneOf:
- type: string
format: byte
- - $ref: '#/components/schemas/NestedBytesWithAggregatesFilter'
+ - $ref: '#/components/schemas/NestedBytesNullableWithAggregatesFilter'
+ nullable: true
_count:
- $ref: '#/components/schemas/NestedIntFilter'
+ $ref: '#/components/schemas/NestedIntNullableFilter'
_min:
- $ref: '#/components/schemas/NestedBytesFilter'
+ $ref: '#/components/schemas/NestedBytesNullableFilter'
_max:
- $ref: '#/components/schemas/NestedBytesFilter'
+ $ref: '#/components/schemas/NestedBytesNullableFilter'
StringFieldUpdateOperationsInput:
type: object
properties:
@@ -1000,12 +1028,13 @@ components:
properties:
set:
type: boolean
- BytesFieldUpdateOperationsInput:
+ NullableBytesFieldUpdateOperationsInput:
type: object
properties:
set:
type: string
format: byte
+ nullable: true
NestedStringFilter:
type: object
properties:
@@ -1225,12 +1254,13 @@ components:
oneOf:
- type: boolean
- $ref: '#/components/schemas/NestedBoolFilter'
- NestedBytesFilter:
+ NestedBytesNullableFilter:
type: object
properties:
equals:
type: string
format: byte
+ nullable: true
in:
oneOf:
- type: array
@@ -1239,6 +1269,7 @@ components:
format: byte
- type: string
format: byte
+ nullable: true
notIn:
oneOf:
- type: array
@@ -1247,11 +1278,13 @@ components:
format: byte
- type: string
format: byte
+ nullable: true
not:
oneOf:
- type: string
format: byte
- - $ref: '#/components/schemas/NestedBytesFilter'
+ - $ref: '#/components/schemas/NestedBytesNullableFilter'
+ nullable: true
NestedStringWithAggregatesFilter:
type: object
properties:
@@ -1529,12 +1562,13 @@ components:
$ref: '#/components/schemas/NestedBoolFilter'
_max:
$ref: '#/components/schemas/NestedBoolFilter'
- NestedBytesWithAggregatesFilter:
+ NestedBytesNullableWithAggregatesFilter:
type: object
properties:
equals:
type: string
format: byte
+ nullable: true
in:
oneOf:
- type: array
@@ -1543,6 +1577,7 @@ components:
format: byte
- type: string
format: byte
+ nullable: true
notIn:
oneOf:
- type: array
@@ -1551,17 +1586,52 @@ components:
format: byte
- type: string
format: byte
+ nullable: true
not:
oneOf:
- type: string
format: byte
- - $ref: '#/components/schemas/NestedBytesWithAggregatesFilter'
+ - $ref: '#/components/schemas/NestedBytesNullableWithAggregatesFilter'
+ nullable: true
_count:
- $ref: '#/components/schemas/NestedIntFilter'
+ $ref: '#/components/schemas/NestedIntNullableFilter'
_min:
- $ref: '#/components/schemas/NestedBytesFilter'
+ $ref: '#/components/schemas/NestedBytesNullableFilter'
_max:
- $ref: '#/components/schemas/NestedBytesFilter'
+ $ref: '#/components/schemas/NestedBytesNullableFilter'
+ NestedIntNullableFilter:
+ type: object
+ properties:
+ equals:
+ type: integer
+ nullable: true
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: integer
+ - type: integer
+ nullable: true
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: integer
+ - type: integer
+ nullable: true
+ lt:
+ type: integer
+ lte:
+ type: integer
+ gt:
+ type: integer
+ gte:
+ type: integer
+ not:
+ oneOf:
+ - type: integer
+ - $ref: '#/components/schemas/NestedIntNullableFilter'
+ nullable: true
FooSelect:
type: object
properties:
@@ -1674,15 +1744,25 @@ components:
type: object
properties:
_count:
- $ref: '#/components/schemas/FooCountAggregateOutputType'
+ allOf:
+ - $ref: '#/components/schemas/FooCountAggregateOutputType'
+ nullable: true
_avg:
- $ref: '#/components/schemas/FooAvgAggregateOutputType'
+ allOf:
+ - $ref: '#/components/schemas/FooAvgAggregateOutputType'
+ nullable: true
_sum:
- $ref: '#/components/schemas/FooSumAggregateOutputType'
+ allOf:
+ - $ref: '#/components/schemas/FooSumAggregateOutputType'
+ nullable: true
_min:
- $ref: '#/components/schemas/FooMinAggregateOutputType'
+ allOf:
+ - $ref: '#/components/schemas/FooMinAggregateOutputType'
+ nullable: true
_max:
- $ref: '#/components/schemas/FooMaxAggregateOutputType'
+ allOf:
+ - $ref: '#/components/schemas/FooMaxAggregateOutputType'
+ nullable: true
FooGroupByOutputType:
type: object
properties:
@@ -1708,16 +1788,27 @@ components:
bytes:
type: string
format: byte
+ nullable: true
_count:
- $ref: '#/components/schemas/FooCountAggregateOutputType'
+ allOf:
+ - $ref: '#/components/schemas/FooCountAggregateOutputType'
+ nullable: true
_avg:
- $ref: '#/components/schemas/FooAvgAggregateOutputType'
+ allOf:
+ - $ref: '#/components/schemas/FooAvgAggregateOutputType'
+ nullable: true
_sum:
- $ref: '#/components/schemas/FooSumAggregateOutputType'
+ allOf:
+ - $ref: '#/components/schemas/FooSumAggregateOutputType'
+ nullable: true
_min:
- $ref: '#/components/schemas/FooMinAggregateOutputType'
+ allOf:
+ - $ref: '#/components/schemas/FooMinAggregateOutputType'
+ nullable: true
_max:
- $ref: '#/components/schemas/FooMaxAggregateOutputType'
+ allOf:
+ - $ref: '#/components/schemas/FooMaxAggregateOutputType'
+ nullable: true
required:
- id
- string
@@ -1727,7 +1818,6 @@ components:
- float
- decimal
- boolean
- - bytes
FooCountAggregateOutputType:
type: object
properties:
@@ -1767,77 +1857,103 @@ components:
properties:
int:
type: number
+ nullable: true
bigInt:
type: number
+ nullable: true
float:
type: number
+ nullable: true
decimal:
oneOf:
- type: string
- type: number
+ nullable: true
FooSumAggregateOutputType:
type: object
properties:
int:
type: integer
+ nullable: true
bigInt:
type: integer
+ nullable: true
float:
type: number
+ nullable: true
decimal:
oneOf:
- type: string
- type: number
+ nullable: true
FooMinAggregateOutputType:
type: object
properties:
id:
type: string
+ nullable: true
string:
type: string
+ nullable: true
int:
type: integer
+ nullable: true
bigInt:
type: integer
+ nullable: true
date:
type: string
format: date-time
+ nullable: true
float:
type: number
+ nullable: true
decimal:
oneOf:
- type: string
- type: number
+ nullable: true
boolean:
type: boolean
+ nullable: true
bytes:
type: string
format: byte
+ nullable: true
FooMaxAggregateOutputType:
type: object
properties:
id:
type: string
+ nullable: true
string:
type: string
+ nullable: true
int:
type: integer
+ nullable: true
bigInt:
type: integer
+ nullable: true
date:
type: string
format: date-time
+ nullable: true
float:
type: number
+ nullable: true
decimal:
oneOf:
- type: string
- type: number
+ nullable: true
boolean:
type: boolean
+ nullable: true
bytes:
type: string
format: byte
+ nullable: true
_Meta:
type: object
properties:
diff --git a/packages/plugins/openapi/tests/baseline/rpc-type-coverage-3.1.0.baseline.yaml b/packages/plugins/openapi/tests/baseline/rpc-type-coverage-3.1.0.baseline.yaml
new file mode 100644
index 000000000..e777f7580
--- /dev/null
+++ b/packages/plugins/openapi/tests/baseline/rpc-type-coverage-3.1.0.baseline.yaml
@@ -0,0 +1,2815 @@
+openapi: 3.1.0
+info:
+ title: ZenStack Generated API
+ version: 1.0.0
+tags:
+ - name: foo
+ description: Foo operations
+components:
+ schemas:
+ FooScalarFieldEnum:
+ type: string
+ enum:
+ - id
+ - string
+ - int
+ - bigInt
+ - date
+ - float
+ - decimal
+ - boolean
+ - bytes
+ SortOrder:
+ type: string
+ enum:
+ - asc
+ - desc
+ QueryMode:
+ type: string
+ enum:
+ - default
+ - insensitive
+ NullsOrder:
+ type: string
+ enum:
+ - first
+ - last
+ Foo:
+ type: object
+ properties:
+ id:
+ type: string
+ string:
+ type: string
+ int:
+ type: integer
+ bigInt:
+ type: integer
+ date:
+ type: string
+ format: date-time
+ float:
+ type: number
+ decimal:
+ oneOf:
+ - type: string
+ - type: number
+ boolean:
+ type: boolean
+ bytes:
+ oneOf:
+ - type: 'null'
+ - type: string
+ format: byte
+ required:
+ - id
+ - string
+ - int
+ - bigInt
+ - date
+ - float
+ - decimal
+ - boolean
+ FooWhereInput:
+ type: object
+ properties:
+ AND:
+ oneOf:
+ - $ref: '#/components/schemas/FooWhereInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/FooWhereInput'
+ OR:
+ type: array
+ items:
+ $ref: '#/components/schemas/FooWhereInput'
+ NOT:
+ oneOf:
+ - $ref: '#/components/schemas/FooWhereInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/FooWhereInput'
+ id:
+ oneOf:
+ - $ref: '#/components/schemas/StringFilter'
+ - type: string
+ string:
+ oneOf:
+ - $ref: '#/components/schemas/StringFilter'
+ - type: string
+ int:
+ oneOf:
+ - $ref: '#/components/schemas/IntFilter'
+ - type: integer
+ bigInt:
+ oneOf:
+ - $ref: '#/components/schemas/BigIntFilter'
+ - type: integer
+ date:
+ oneOf:
+ - $ref: '#/components/schemas/DateTimeFilter'
+ - type: string
+ format: date-time
+ float:
+ oneOf:
+ - $ref: '#/components/schemas/FloatFilter'
+ - type: number
+ decimal:
+ oneOf:
+ - $ref: '#/components/schemas/DecimalFilter'
+ - oneOf:
+ - type: string
+ - type: number
+ boolean:
+ oneOf:
+ - $ref: '#/components/schemas/BoolFilter'
+ - type: boolean
+ bytes:
+ oneOf:
+ - $ref: '#/components/schemas/BytesNullableFilter'
+ - type: string
+ format: byte
+ - type: 'null'
+ FooOrderByWithRelationInput:
+ type: object
+ properties:
+ id:
+ $ref: '#/components/schemas/SortOrder'
+ string:
+ $ref: '#/components/schemas/SortOrder'
+ int:
+ $ref: '#/components/schemas/SortOrder'
+ bigInt:
+ $ref: '#/components/schemas/SortOrder'
+ date:
+ $ref: '#/components/schemas/SortOrder'
+ float:
+ $ref: '#/components/schemas/SortOrder'
+ decimal:
+ $ref: '#/components/schemas/SortOrder'
+ boolean:
+ $ref: '#/components/schemas/SortOrder'
+ bytes:
+ oneOf:
+ - $ref: '#/components/schemas/SortOrder'
+ - $ref: '#/components/schemas/SortOrderInput'
+ FooWhereUniqueInput:
+ type: object
+ properties:
+ id:
+ type: string
+ FooScalarWhereWithAggregatesInput:
+ type: object
+ properties:
+ AND:
+ oneOf:
+ - $ref: '#/components/schemas/FooScalarWhereWithAggregatesInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/FooScalarWhereWithAggregatesInput'
+ OR:
+ type: array
+ items:
+ $ref: '#/components/schemas/FooScalarWhereWithAggregatesInput'
+ NOT:
+ oneOf:
+ - $ref: '#/components/schemas/FooScalarWhereWithAggregatesInput'
+ - type: array
+ items:
+ $ref: '#/components/schemas/FooScalarWhereWithAggregatesInput'
+ id:
+ oneOf:
+ - $ref: '#/components/schemas/StringWithAggregatesFilter'
+ - type: string
+ string:
+ oneOf:
+ - $ref: '#/components/schemas/StringWithAggregatesFilter'
+ - type: string
+ int:
+ oneOf:
+ - $ref: '#/components/schemas/IntWithAggregatesFilter'
+ - type: integer
+ bigInt:
+ oneOf:
+ - $ref: '#/components/schemas/BigIntWithAggregatesFilter'
+ - type: integer
+ date:
+ oneOf:
+ - $ref: '#/components/schemas/DateTimeWithAggregatesFilter'
+ - type: string
+ format: date-time
+ float:
+ oneOf:
+ - $ref: '#/components/schemas/FloatWithAggregatesFilter'
+ - type: number
+ decimal:
+ oneOf:
+ - $ref: '#/components/schemas/DecimalWithAggregatesFilter'
+ - oneOf:
+ - type: string
+ - type: number
+ boolean:
+ oneOf:
+ - $ref: '#/components/schemas/BoolWithAggregatesFilter'
+ - type: boolean
+ bytes:
+ oneOf:
+ - $ref: '#/components/schemas/BytesNullableWithAggregatesFilter'
+ - type: string
+ format: byte
+ - type: 'null'
+ FooCreateInput:
+ type: object
+ properties:
+ id:
+ type: string
+ string:
+ type: string
+ int:
+ type: integer
+ bigInt:
+ type: integer
+ date:
+ type: string
+ format: date-time
+ float:
+ type: number
+ decimal:
+ oneOf:
+ - type: string
+ - type: number
+ boolean:
+ type: boolean
+ bytes:
+ oneOf:
+ - type: 'null'
+ - type: string
+ format: byte
+ required:
+ - string
+ - int
+ - bigInt
+ - date
+ - float
+ - decimal
+ - boolean
+ FooUpdateInput:
+ type: object
+ properties:
+ id:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ string:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ int:
+ oneOf:
+ - type: integer
+ - $ref: '#/components/schemas/IntFieldUpdateOperationsInput'
+ bigInt:
+ oneOf:
+ - type: integer
+ - $ref: '#/components/schemas/BigIntFieldUpdateOperationsInput'
+ date:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/DateTimeFieldUpdateOperationsInput'
+ float:
+ oneOf:
+ - type: number
+ - $ref: '#/components/schemas/FloatFieldUpdateOperationsInput'
+ decimal:
+ oneOf:
+ - oneOf:
+ - type: string
+ - type: number
+ - $ref: '#/components/schemas/DecimalFieldUpdateOperationsInput'
+ boolean:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/BoolFieldUpdateOperationsInput'
+ bytes:
+ oneOf:
+ - type: string
+ format: byte
+ - $ref: '#/components/schemas/NullableBytesFieldUpdateOperationsInput'
+ - type: 'null'
+ FooCreateManyInput:
+ type: object
+ properties:
+ id:
+ type: string
+ string:
+ type: string
+ int:
+ type: integer
+ bigInt:
+ type: integer
+ date:
+ type: string
+ format: date-time
+ float:
+ type: number
+ decimal:
+ oneOf:
+ - type: string
+ - type: number
+ boolean:
+ type: boolean
+ bytes:
+ oneOf:
+ - type: 'null'
+ - type: string
+ format: byte
+ required:
+ - string
+ - int
+ - bigInt
+ - date
+ - float
+ - decimal
+ - boolean
+ FooUpdateManyMutationInput:
+ type: object
+ properties:
+ id:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ string:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/StringFieldUpdateOperationsInput'
+ int:
+ oneOf:
+ - type: integer
+ - $ref: '#/components/schemas/IntFieldUpdateOperationsInput'
+ bigInt:
+ oneOf:
+ - type: integer
+ - $ref: '#/components/schemas/BigIntFieldUpdateOperationsInput'
+ date:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/DateTimeFieldUpdateOperationsInput'
+ float:
+ oneOf:
+ - type: number
+ - $ref: '#/components/schemas/FloatFieldUpdateOperationsInput'
+ decimal:
+ oneOf:
+ - oneOf:
+ - type: string
+ - type: number
+ - $ref: '#/components/schemas/DecimalFieldUpdateOperationsInput'
+ boolean:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/BoolFieldUpdateOperationsInput'
+ bytes:
+ oneOf:
+ - type: string
+ format: byte
+ - $ref: '#/components/schemas/NullableBytesFieldUpdateOperationsInput'
+ - type: 'null'
+ StringFilter:
+ type: object
+ properties:
+ equals:
+ type: string
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ - type: string
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ - type: string
+ lt:
+ type: string
+ lte:
+ type: string
+ gt:
+ type: string
+ gte:
+ type: string
+ contains:
+ type: string
+ startsWith:
+ type: string
+ endsWith:
+ type: string
+ mode:
+ $ref: '#/components/schemas/QueryMode'
+ not:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/NestedStringFilter'
+ IntFilter:
+ type: object
+ properties:
+ equals:
+ type: integer
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: integer
+ - type: integer
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: integer
+ - type: integer
+ lt:
+ type: integer
+ lte:
+ type: integer
+ gt:
+ type: integer
+ gte:
+ type: integer
+ not:
+ oneOf:
+ - type: integer
+ - $ref: '#/components/schemas/NestedIntFilter'
+ BigIntFilter:
+ type: object
+ properties:
+ equals:
+ type: integer
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: integer
+ - type: integer
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: integer
+ - type: integer
+ lt:
+ type: integer
+ lte:
+ type: integer
+ gt:
+ type: integer
+ gte:
+ type: integer
+ not:
+ oneOf:
+ - type: integer
+ - $ref: '#/components/schemas/NestedBigIntFilter'
+ DateTimeFilter:
+ type: object
+ properties:
+ equals:
+ type: string
+ format: date-time
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ format: date-time
+ - type: string
+ format: date-time
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ format: date-time
+ - type: string
+ format: date-time
+ lt:
+ type: string
+ format: date-time
+ lte:
+ type: string
+ format: date-time
+ gt:
+ type: string
+ format: date-time
+ gte:
+ type: string
+ format: date-time
+ not:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/NestedDateTimeFilter'
+ FloatFilter:
+ type: object
+ properties:
+ equals:
+ type: number
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: number
+ - type: number
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: number
+ - type: number
+ lt:
+ type: number
+ lte:
+ type: number
+ gt:
+ type: number
+ gte:
+ type: number
+ not:
+ oneOf:
+ - type: number
+ - $ref: '#/components/schemas/NestedFloatFilter'
+ DecimalFilter:
+ type: object
+ properties:
+ equals:
+ oneOf:
+ - type: string
+ - type: number
+ in:
+ oneOf:
+ - type: array
+ items:
+ oneOf:
+ - type: string
+ - type: number
+ - oneOf:
+ - type: string
+ - type: number
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ oneOf:
+ - type: string
+ - type: number
+ - oneOf:
+ - type: string
+ - type: number
+ lt:
+ oneOf:
+ - type: string
+ - type: number
+ lte:
+ oneOf:
+ - type: string
+ - type: number
+ gt:
+ oneOf:
+ - type: string
+ - type: number
+ gte:
+ oneOf:
+ - type: string
+ - type: number
+ not:
+ oneOf:
+ - oneOf:
+ - type: string
+ - type: number
+ - $ref: '#/components/schemas/NestedDecimalFilter'
+ BoolFilter:
+ type: object
+ properties:
+ equals:
+ type: boolean
+ not:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/NestedBoolFilter'
+ BytesNullableFilter:
+ type: object
+ properties:
+ equals:
+ oneOf:
+ - type: 'null'
+ - type: string
+ format: byte
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ format: byte
+ - type: string
+ format: byte
+ - type: 'null'
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ format: byte
+ - type: string
+ format: byte
+ - type: 'null'
+ not:
+ oneOf:
+ - type: string
+ format: byte
+ - $ref: '#/components/schemas/NestedBytesNullableFilter'
+ - type: 'null'
+ SortOrderInput:
+ type: object
+ properties:
+ sort:
+ $ref: '#/components/schemas/SortOrder'
+ nulls:
+ $ref: '#/components/schemas/NullsOrder'
+ required:
+ - sort
+ StringWithAggregatesFilter:
+ type: object
+ properties:
+ equals:
+ type: string
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ - type: string
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ - type: string
+ lt:
+ type: string
+ lte:
+ type: string
+ gt:
+ type: string
+ gte:
+ type: string
+ contains:
+ type: string
+ startsWith:
+ type: string
+ endsWith:
+ type: string
+ mode:
+ $ref: '#/components/schemas/QueryMode'
+ not:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/NestedStringWithAggregatesFilter'
+ _count:
+ $ref: '#/components/schemas/NestedIntFilter'
+ _min:
+ $ref: '#/components/schemas/NestedStringFilter'
+ _max:
+ $ref: '#/components/schemas/NestedStringFilter'
+ IntWithAggregatesFilter:
+ type: object
+ properties:
+ equals:
+ type: integer
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: integer
+ - type: integer
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: integer
+ - type: integer
+ lt:
+ type: integer
+ lte:
+ type: integer
+ gt:
+ type: integer
+ gte:
+ type: integer
+ not:
+ oneOf:
+ - type: integer
+ - $ref: '#/components/schemas/NestedIntWithAggregatesFilter'
+ _count:
+ $ref: '#/components/schemas/NestedIntFilter'
+ _avg:
+ $ref: '#/components/schemas/NestedFloatFilter'
+ _sum:
+ $ref: '#/components/schemas/NestedIntFilter'
+ _min:
+ $ref: '#/components/schemas/NestedIntFilter'
+ _max:
+ $ref: '#/components/schemas/NestedIntFilter'
+ BigIntWithAggregatesFilter:
+ type: object
+ properties:
+ equals:
+ type: integer
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: integer
+ - type: integer
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: integer
+ - type: integer
+ lt:
+ type: integer
+ lte:
+ type: integer
+ gt:
+ type: integer
+ gte:
+ type: integer
+ not:
+ oneOf:
+ - type: integer
+ - $ref: '#/components/schemas/NestedBigIntWithAggregatesFilter'
+ _count:
+ $ref: '#/components/schemas/NestedIntFilter'
+ _avg:
+ $ref: '#/components/schemas/NestedFloatFilter'
+ _sum:
+ $ref: '#/components/schemas/NestedBigIntFilter'
+ _min:
+ $ref: '#/components/schemas/NestedBigIntFilter'
+ _max:
+ $ref: '#/components/schemas/NestedBigIntFilter'
+ DateTimeWithAggregatesFilter:
+ type: object
+ properties:
+ equals:
+ type: string
+ format: date-time
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ format: date-time
+ - type: string
+ format: date-time
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ format: date-time
+ - type: string
+ format: date-time
+ lt:
+ type: string
+ format: date-time
+ lte:
+ type: string
+ format: date-time
+ gt:
+ type: string
+ format: date-time
+ gte:
+ type: string
+ format: date-time
+ not:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/NestedDateTimeWithAggregatesFilter'
+ _count:
+ $ref: '#/components/schemas/NestedIntFilter'
+ _min:
+ $ref: '#/components/schemas/NestedDateTimeFilter'
+ _max:
+ $ref: '#/components/schemas/NestedDateTimeFilter'
+ FloatWithAggregatesFilter:
+ type: object
+ properties:
+ equals:
+ type: number
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: number
+ - type: number
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: number
+ - type: number
+ lt:
+ type: number
+ lte:
+ type: number
+ gt:
+ type: number
+ gte:
+ type: number
+ not:
+ oneOf:
+ - type: number
+ - $ref: '#/components/schemas/NestedFloatWithAggregatesFilter'
+ _count:
+ $ref: '#/components/schemas/NestedIntFilter'
+ _avg:
+ $ref: '#/components/schemas/NestedFloatFilter'
+ _sum:
+ $ref: '#/components/schemas/NestedFloatFilter'
+ _min:
+ $ref: '#/components/schemas/NestedFloatFilter'
+ _max:
+ $ref: '#/components/schemas/NestedFloatFilter'
+ DecimalWithAggregatesFilter:
+ type: object
+ properties:
+ equals:
+ oneOf:
+ - type: string
+ - type: number
+ in:
+ oneOf:
+ - type: array
+ items:
+ oneOf:
+ - type: string
+ - type: number
+ - oneOf:
+ - type: string
+ - type: number
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ oneOf:
+ - type: string
+ - type: number
+ - oneOf:
+ - type: string
+ - type: number
+ lt:
+ oneOf:
+ - type: string
+ - type: number
+ lte:
+ oneOf:
+ - type: string
+ - type: number
+ gt:
+ oneOf:
+ - type: string
+ - type: number
+ gte:
+ oneOf:
+ - type: string
+ - type: number
+ not:
+ oneOf:
+ - oneOf:
+ - type: string
+ - type: number
+ - $ref: '#/components/schemas/NestedDecimalWithAggregatesFilter'
+ _count:
+ $ref: '#/components/schemas/NestedIntFilter'
+ _avg:
+ $ref: '#/components/schemas/NestedDecimalFilter'
+ _sum:
+ $ref: '#/components/schemas/NestedDecimalFilter'
+ _min:
+ $ref: '#/components/schemas/NestedDecimalFilter'
+ _max:
+ $ref: '#/components/schemas/NestedDecimalFilter'
+ BoolWithAggregatesFilter:
+ type: object
+ properties:
+ equals:
+ type: boolean
+ not:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/NestedBoolWithAggregatesFilter'
+ _count:
+ $ref: '#/components/schemas/NestedIntFilter'
+ _min:
+ $ref: '#/components/schemas/NestedBoolFilter'
+ _max:
+ $ref: '#/components/schemas/NestedBoolFilter'
+ BytesNullableWithAggregatesFilter:
+ type: object
+ properties:
+ equals:
+ oneOf:
+ - type: 'null'
+ - type: string
+ format: byte
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ format: byte
+ - type: string
+ format: byte
+ - type: 'null'
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ format: byte
+ - type: string
+ format: byte
+ - type: 'null'
+ not:
+ oneOf:
+ - type: string
+ format: byte
+ - $ref: '#/components/schemas/NestedBytesNullableWithAggregatesFilter'
+ - type: 'null'
+ _count:
+ $ref: '#/components/schemas/NestedIntNullableFilter'
+ _min:
+ $ref: '#/components/schemas/NestedBytesNullableFilter'
+ _max:
+ $ref: '#/components/schemas/NestedBytesNullableFilter'
+ StringFieldUpdateOperationsInput:
+ type: object
+ properties:
+ set:
+ type: string
+ IntFieldUpdateOperationsInput:
+ type: object
+ properties:
+ set:
+ type: integer
+ increment:
+ type: integer
+ decrement:
+ type: integer
+ multiply:
+ type: integer
+ divide:
+ type: integer
+ BigIntFieldUpdateOperationsInput:
+ type: object
+ properties:
+ set:
+ type: integer
+ increment:
+ type: integer
+ decrement:
+ type: integer
+ multiply:
+ type: integer
+ divide:
+ type: integer
+ DateTimeFieldUpdateOperationsInput:
+ type: object
+ properties:
+ set:
+ type: string
+ format: date-time
+ FloatFieldUpdateOperationsInput:
+ type: object
+ properties:
+ set:
+ type: number
+ increment:
+ type: number
+ decrement:
+ type: number
+ multiply:
+ type: number
+ divide:
+ type: number
+ DecimalFieldUpdateOperationsInput:
+ type: object
+ properties:
+ set:
+ oneOf:
+ - type: string
+ - type: number
+ increment:
+ oneOf:
+ - type: string
+ - type: number
+ decrement:
+ oneOf:
+ - type: string
+ - type: number
+ multiply:
+ oneOf:
+ - type: string
+ - type: number
+ divide:
+ oneOf:
+ - type: string
+ - type: number
+ BoolFieldUpdateOperationsInput:
+ type: object
+ properties:
+ set:
+ type: boolean
+ NullableBytesFieldUpdateOperationsInput:
+ type: object
+ properties:
+ set:
+ oneOf:
+ - type: 'null'
+ - type: string
+ format: byte
+ NestedStringFilter:
+ type: object
+ properties:
+ equals:
+ type: string
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ - type: string
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ - type: string
+ lt:
+ type: string
+ lte:
+ type: string
+ gt:
+ type: string
+ gte:
+ type: string
+ contains:
+ type: string
+ startsWith:
+ type: string
+ endsWith:
+ type: string
+ not:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/NestedStringFilter'
+ NestedIntFilter:
+ type: object
+ properties:
+ equals:
+ type: integer
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: integer
+ - type: integer
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: integer
+ - type: integer
+ lt:
+ type: integer
+ lte:
+ type: integer
+ gt:
+ type: integer
+ gte:
+ type: integer
+ not:
+ oneOf:
+ - type: integer
+ - $ref: '#/components/schemas/NestedIntFilter'
+ NestedBigIntFilter:
+ type: object
+ properties:
+ equals:
+ type: integer
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: integer
+ - type: integer
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: integer
+ - type: integer
+ lt:
+ type: integer
+ lte:
+ type: integer
+ gt:
+ type: integer
+ gte:
+ type: integer
+ not:
+ oneOf:
+ - type: integer
+ - $ref: '#/components/schemas/NestedBigIntFilter'
+ NestedDateTimeFilter:
+ type: object
+ properties:
+ equals:
+ type: string
+ format: date-time
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ format: date-time
+ - type: string
+ format: date-time
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ format: date-time
+ - type: string
+ format: date-time
+ lt:
+ type: string
+ format: date-time
+ lte:
+ type: string
+ format: date-time
+ gt:
+ type: string
+ format: date-time
+ gte:
+ type: string
+ format: date-time
+ not:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/NestedDateTimeFilter'
+ NestedFloatFilter:
+ type: object
+ properties:
+ equals:
+ type: number
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: number
+ - type: number
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: number
+ - type: number
+ lt:
+ type: number
+ lte:
+ type: number
+ gt:
+ type: number
+ gte:
+ type: number
+ not:
+ oneOf:
+ - type: number
+ - $ref: '#/components/schemas/NestedFloatFilter'
+ NestedDecimalFilter:
+ type: object
+ properties:
+ equals:
+ oneOf:
+ - type: string
+ - type: number
+ in:
+ oneOf:
+ - type: array
+ items:
+ oneOf:
+ - type: string
+ - type: number
+ - oneOf:
+ - type: string
+ - type: number
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ oneOf:
+ - type: string
+ - type: number
+ - oneOf:
+ - type: string
+ - type: number
+ lt:
+ oneOf:
+ - type: string
+ - type: number
+ lte:
+ oneOf:
+ - type: string
+ - type: number
+ gt:
+ oneOf:
+ - type: string
+ - type: number
+ gte:
+ oneOf:
+ - type: string
+ - type: number
+ not:
+ oneOf:
+ - oneOf:
+ - type: string
+ - type: number
+ - $ref: '#/components/schemas/NestedDecimalFilter'
+ NestedBoolFilter:
+ type: object
+ properties:
+ equals:
+ type: boolean
+ not:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/NestedBoolFilter'
+ NestedBytesNullableFilter:
+ type: object
+ properties:
+ equals:
+ oneOf:
+ - type: 'null'
+ - type: string
+ format: byte
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ format: byte
+ - type: string
+ format: byte
+ - type: 'null'
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ format: byte
+ - type: string
+ format: byte
+ - type: 'null'
+ not:
+ oneOf:
+ - type: string
+ format: byte
+ - $ref: '#/components/schemas/NestedBytesNullableFilter'
+ - type: 'null'
+ NestedStringWithAggregatesFilter:
+ type: object
+ properties:
+ equals:
+ type: string
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ - type: string
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ - type: string
+ lt:
+ type: string
+ lte:
+ type: string
+ gt:
+ type: string
+ gte:
+ type: string
+ contains:
+ type: string
+ startsWith:
+ type: string
+ endsWith:
+ type: string
+ not:
+ oneOf:
+ - type: string
+ - $ref: '#/components/schemas/NestedStringWithAggregatesFilter'
+ _count:
+ $ref: '#/components/schemas/NestedIntFilter'
+ _min:
+ $ref: '#/components/schemas/NestedStringFilter'
+ _max:
+ $ref: '#/components/schemas/NestedStringFilter'
+ NestedIntWithAggregatesFilter:
+ type: object
+ properties:
+ equals:
+ type: integer
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: integer
+ - type: integer
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: integer
+ - type: integer
+ lt:
+ type: integer
+ lte:
+ type: integer
+ gt:
+ type: integer
+ gte:
+ type: integer
+ not:
+ oneOf:
+ - type: integer
+ - $ref: '#/components/schemas/NestedIntWithAggregatesFilter'
+ _count:
+ $ref: '#/components/schemas/NestedIntFilter'
+ _avg:
+ $ref: '#/components/schemas/NestedFloatFilter'
+ _sum:
+ $ref: '#/components/schemas/NestedIntFilter'
+ _min:
+ $ref: '#/components/schemas/NestedIntFilter'
+ _max:
+ $ref: '#/components/schemas/NestedIntFilter'
+ NestedBigIntWithAggregatesFilter:
+ type: object
+ properties:
+ equals:
+ type: integer
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: integer
+ - type: integer
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: integer
+ - type: integer
+ lt:
+ type: integer
+ lte:
+ type: integer
+ gt:
+ type: integer
+ gte:
+ type: integer
+ not:
+ oneOf:
+ - type: integer
+ - $ref: '#/components/schemas/NestedBigIntWithAggregatesFilter'
+ _count:
+ $ref: '#/components/schemas/NestedIntFilter'
+ _avg:
+ $ref: '#/components/schemas/NestedFloatFilter'
+ _sum:
+ $ref: '#/components/schemas/NestedBigIntFilter'
+ _min:
+ $ref: '#/components/schemas/NestedBigIntFilter'
+ _max:
+ $ref: '#/components/schemas/NestedBigIntFilter'
+ NestedDateTimeWithAggregatesFilter:
+ type: object
+ properties:
+ equals:
+ type: string
+ format: date-time
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ format: date-time
+ - type: string
+ format: date-time
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ format: date-time
+ - type: string
+ format: date-time
+ lt:
+ type: string
+ format: date-time
+ lte:
+ type: string
+ format: date-time
+ gt:
+ type: string
+ format: date-time
+ gte:
+ type: string
+ format: date-time
+ not:
+ oneOf:
+ - type: string
+ format: date-time
+ - $ref: '#/components/schemas/NestedDateTimeWithAggregatesFilter'
+ _count:
+ $ref: '#/components/schemas/NestedIntFilter'
+ _min:
+ $ref: '#/components/schemas/NestedDateTimeFilter'
+ _max:
+ $ref: '#/components/schemas/NestedDateTimeFilter'
+ NestedFloatWithAggregatesFilter:
+ type: object
+ properties:
+ equals:
+ type: number
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: number
+ - type: number
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: number
+ - type: number
+ lt:
+ type: number
+ lte:
+ type: number
+ gt:
+ type: number
+ gte:
+ type: number
+ not:
+ oneOf:
+ - type: number
+ - $ref: '#/components/schemas/NestedFloatWithAggregatesFilter'
+ _count:
+ $ref: '#/components/schemas/NestedIntFilter'
+ _avg:
+ $ref: '#/components/schemas/NestedFloatFilter'
+ _sum:
+ $ref: '#/components/schemas/NestedFloatFilter'
+ _min:
+ $ref: '#/components/schemas/NestedFloatFilter'
+ _max:
+ $ref: '#/components/schemas/NestedFloatFilter'
+ NestedDecimalWithAggregatesFilter:
+ type: object
+ properties:
+ equals:
+ oneOf:
+ - type: string
+ - type: number
+ in:
+ oneOf:
+ - type: array
+ items:
+ oneOf:
+ - type: string
+ - type: number
+ - oneOf:
+ - type: string
+ - type: number
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ oneOf:
+ - type: string
+ - type: number
+ - oneOf:
+ - type: string
+ - type: number
+ lt:
+ oneOf:
+ - type: string
+ - type: number
+ lte:
+ oneOf:
+ - type: string
+ - type: number
+ gt:
+ oneOf:
+ - type: string
+ - type: number
+ gte:
+ oneOf:
+ - type: string
+ - type: number
+ not:
+ oneOf:
+ - oneOf:
+ - type: string
+ - type: number
+ - $ref: '#/components/schemas/NestedDecimalWithAggregatesFilter'
+ _count:
+ $ref: '#/components/schemas/NestedIntFilter'
+ _avg:
+ $ref: '#/components/schemas/NestedDecimalFilter'
+ _sum:
+ $ref: '#/components/schemas/NestedDecimalFilter'
+ _min:
+ $ref: '#/components/schemas/NestedDecimalFilter'
+ _max:
+ $ref: '#/components/schemas/NestedDecimalFilter'
+ NestedBoolWithAggregatesFilter:
+ type: object
+ properties:
+ equals:
+ type: boolean
+ not:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/NestedBoolWithAggregatesFilter'
+ _count:
+ $ref: '#/components/schemas/NestedIntFilter'
+ _min:
+ $ref: '#/components/schemas/NestedBoolFilter'
+ _max:
+ $ref: '#/components/schemas/NestedBoolFilter'
+ NestedBytesNullableWithAggregatesFilter:
+ type: object
+ properties:
+ equals:
+ oneOf:
+ - type: 'null'
+ - type: string
+ format: byte
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ format: byte
+ - type: string
+ format: byte
+ - type: 'null'
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: string
+ format: byte
+ - type: string
+ format: byte
+ - type: 'null'
+ not:
+ oneOf:
+ - type: string
+ format: byte
+ - $ref: '#/components/schemas/NestedBytesNullableWithAggregatesFilter'
+ - type: 'null'
+ _count:
+ $ref: '#/components/schemas/NestedIntNullableFilter'
+ _min:
+ $ref: '#/components/schemas/NestedBytesNullableFilter'
+ _max:
+ $ref: '#/components/schemas/NestedBytesNullableFilter'
+ NestedIntNullableFilter:
+ type: object
+ properties:
+ equals:
+ oneOf:
+ - type: 'null'
+ - type: integer
+ in:
+ oneOf:
+ - type: array
+ items:
+ type: integer
+ - type: integer
+ - type: 'null'
+ notIn:
+ oneOf:
+ - type: array
+ items:
+ type: integer
+ - type: integer
+ - type: 'null'
+ lt:
+ type: integer
+ lte:
+ type: integer
+ gt:
+ type: integer
+ gte:
+ type: integer
+ not:
+ oneOf:
+ - type: integer
+ - $ref: '#/components/schemas/NestedIntNullableFilter'
+ - type: 'null'
+ FooSelect:
+ type: object
+ properties:
+ id:
+ type: boolean
+ string:
+ type: boolean
+ int:
+ type: boolean
+ bigInt:
+ type: boolean
+ date:
+ type: boolean
+ float:
+ type: boolean
+ decimal:
+ type: boolean
+ boolean:
+ type: boolean
+ bytes:
+ type: boolean
+ FooCountAggregateInput:
+ type: object
+ properties:
+ id:
+ type: boolean
+ string:
+ type: boolean
+ int:
+ type: boolean
+ bigInt:
+ type: boolean
+ date:
+ type: boolean
+ float:
+ type: boolean
+ decimal:
+ type: boolean
+ boolean:
+ type: boolean
+ bytes:
+ type: boolean
+ _all:
+ type: boolean
+ FooAvgAggregateInput:
+ type: object
+ properties:
+ int:
+ type: boolean
+ bigInt:
+ type: boolean
+ float:
+ type: boolean
+ decimal:
+ type: boolean
+ FooSumAggregateInput:
+ type: object
+ properties:
+ int:
+ type: boolean
+ bigInt:
+ type: boolean
+ float:
+ type: boolean
+ decimal:
+ type: boolean
+ FooMinAggregateInput:
+ type: object
+ properties:
+ id:
+ type: boolean
+ string:
+ type: boolean
+ int:
+ type: boolean
+ bigInt:
+ type: boolean
+ date:
+ type: boolean
+ float:
+ type: boolean
+ decimal:
+ type: boolean
+ boolean:
+ type: boolean
+ bytes:
+ type: boolean
+ FooMaxAggregateInput:
+ type: object
+ properties:
+ id:
+ type: boolean
+ string:
+ type: boolean
+ int:
+ type: boolean
+ bigInt:
+ type: boolean
+ date:
+ type: boolean
+ float:
+ type: boolean
+ decimal:
+ type: boolean
+ boolean:
+ type: boolean
+ bytes:
+ type: boolean
+ AggregateFoo:
+ type: object
+ properties:
+ _count:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/FooCountAggregateOutputType'
+ _avg:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/FooAvgAggregateOutputType'
+ _sum:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/FooSumAggregateOutputType'
+ _min:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/FooMinAggregateOutputType'
+ _max:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/FooMaxAggregateOutputType'
+ FooGroupByOutputType:
+ type: object
+ properties:
+ id:
+ type: string
+ string:
+ type: string
+ int:
+ type: integer
+ bigInt:
+ type: integer
+ date:
+ type: string
+ format: date-time
+ float:
+ type: number
+ decimal:
+ oneOf:
+ - type: string
+ - type: number
+ boolean:
+ type: boolean
+ bytes:
+ oneOf:
+ - type: 'null'
+ - type: string
+ format: byte
+ _count:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/FooCountAggregateOutputType'
+ _avg:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/FooAvgAggregateOutputType'
+ _sum:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/FooSumAggregateOutputType'
+ _min:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/FooMinAggregateOutputType'
+ _max:
+ oneOf:
+ - type: 'null'
+ - $ref: '#/components/schemas/FooMaxAggregateOutputType'
+ required:
+ - id
+ - string
+ - int
+ - bigInt
+ - date
+ - float
+ - decimal
+ - boolean
+ FooCountAggregateOutputType:
+ type: object
+ properties:
+ id:
+ type: integer
+ string:
+ type: integer
+ int:
+ type: integer
+ bigInt:
+ type: integer
+ date:
+ type: integer
+ float:
+ type: integer
+ decimal:
+ type: integer
+ boolean:
+ type: integer
+ bytes:
+ type: integer
+ _all:
+ type: integer
+ required:
+ - id
+ - string
+ - int
+ - bigInt
+ - date
+ - float
+ - decimal
+ - boolean
+ - bytes
+ - _all
+ FooAvgAggregateOutputType:
+ type: object
+ properties:
+ int:
+ oneOf:
+ - type: 'null'
+ - type: number
+ bigInt:
+ oneOf:
+ - type: 'null'
+ - type: number
+ float:
+ oneOf:
+ - type: 'null'
+ - type: number
+ decimal:
+ oneOf:
+ - type: string
+ - type: number
+ - type: 'null'
+ FooSumAggregateOutputType:
+ type: object
+ properties:
+ int:
+ oneOf:
+ - type: 'null'
+ - type: integer
+ bigInt:
+ oneOf:
+ - type: 'null'
+ - type: integer
+ float:
+ oneOf:
+ - type: 'null'
+ - type: number
+ decimal:
+ oneOf:
+ - type: string
+ - type: number
+ - type: 'null'
+ FooMinAggregateOutputType:
+ type: object
+ properties:
+ id:
+ oneOf:
+ - type: 'null'
+ - type: string
+ string:
+ oneOf:
+ - type: 'null'
+ - type: string
+ int:
+ oneOf:
+ - type: 'null'
+ - type: integer
+ bigInt:
+ oneOf:
+ - type: 'null'
+ - type: integer
+ date:
+ oneOf:
+ - type: 'null'
+ - type: string
+ format: date-time
+ float:
+ oneOf:
+ - type: 'null'
+ - type: number
+ decimal:
+ oneOf:
+ - type: string
+ - type: number
+ - type: 'null'
+ boolean:
+ oneOf:
+ - type: 'null'
+ - type: boolean
+ bytes:
+ oneOf:
+ - type: 'null'
+ - type: string
+ format: byte
+ FooMaxAggregateOutputType:
+ type: object
+ properties:
+ id:
+ oneOf:
+ - type: 'null'
+ - type: string
+ string:
+ oneOf:
+ - type: 'null'
+ - type: string
+ int:
+ oneOf:
+ - type: 'null'
+ - type: integer
+ bigInt:
+ oneOf:
+ - type: 'null'
+ - type: integer
+ date:
+ oneOf:
+ - type: 'null'
+ - type: string
+ format: date-time
+ float:
+ oneOf:
+ - type: 'null'
+ - type: number
+ decimal:
+ oneOf:
+ - type: string
+ - type: number
+ - type: 'null'
+ boolean:
+ oneOf:
+ - type: 'null'
+ - type: boolean
+ bytes:
+ oneOf:
+ - type: 'null'
+ - type: string
+ format: byte
+ _Meta:
+ type: object
+ properties:
+ meta:
+ type: object
+ description: Meta information about the request or response
+ properties:
+ serialization:
+ description: Serialization metadata
+ additionalProperties: true
+ _Error:
+ type: object
+ required:
+ - error
+ properties:
+ error:
+ type: object
+ required:
+ - message
+ properties:
+ prisma:
+ type: boolean
+ description: Indicates if the error occurred during a Prisma call
+ rejectedByPolicy:
+ type: boolean
+ description: Indicates if the error was due to rejection by a policy
+ code:
+ type: string
+ description: Prisma error code. Only available when "prisma" field is true.
+ message:
+ type: string
+ description: Error message
+ reason:
+ type: string
+ description: Detailed error reason
+ zodErrors:
+ type: object
+ additionalProperties: true
+ description: Zod validation errors if the error is due to data validation
+ failure
+ additionalProperties: true
+ BatchPayload:
+ type: object
+ properties:
+ count:
+ type: integer
+ FooCreateArgs:
+ type: object
+ required:
+ - data
+ properties:
+ select:
+ $ref: '#/components/schemas/FooSelect'
+ data:
+ $ref: '#/components/schemas/FooCreateInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ FooCreateManyArgs:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/FooCreateManyInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ FooFindUniqueArgs:
+ type: object
+ required:
+ - where
+ properties:
+ select:
+ $ref: '#/components/schemas/FooSelect'
+ where:
+ $ref: '#/components/schemas/FooWhereUniqueInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ FooFindFirstArgs:
+ type: object
+ properties:
+ select:
+ $ref: '#/components/schemas/FooSelect'
+ where:
+ $ref: '#/components/schemas/FooWhereInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ FooFindManyArgs:
+ type: object
+ properties:
+ select:
+ $ref: '#/components/schemas/FooSelect'
+ where:
+ $ref: '#/components/schemas/FooWhereInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ FooUpdateArgs:
+ type: object
+ required:
+ - where
+ - data
+ properties:
+ select:
+ $ref: '#/components/schemas/FooSelect'
+ where:
+ $ref: '#/components/schemas/FooWhereUniqueInput'
+ data:
+ $ref: '#/components/schemas/FooUpdateInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ FooUpdateManyArgs:
+ type: object
+ required:
+ - data
+ properties:
+ where:
+ $ref: '#/components/schemas/FooWhereInput'
+ data:
+ $ref: '#/components/schemas/FooUpdateManyMutationInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ FooUpsertArgs:
+ type: object
+ required:
+ - create
+ - update
+ - where
+ properties:
+ select:
+ $ref: '#/components/schemas/FooSelect'
+ where:
+ $ref: '#/components/schemas/FooWhereUniqueInput'
+ create:
+ $ref: '#/components/schemas/FooCreateInput'
+ update:
+ $ref: '#/components/schemas/FooUpdateInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ FooDeleteUniqueArgs:
+ type: object
+ required:
+ - where
+ properties:
+ select:
+ $ref: '#/components/schemas/FooSelect'
+ where:
+ $ref: '#/components/schemas/FooWhereUniqueInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ FooDeleteManyArgs:
+ type: object
+ properties:
+ where:
+ $ref: '#/components/schemas/FooWhereInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ FooCountArgs:
+ type: object
+ properties:
+ select:
+ $ref: '#/components/schemas/FooSelect'
+ where:
+ $ref: '#/components/schemas/FooWhereInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ FooAggregateArgs:
+ type: object
+ properties:
+ where:
+ $ref: '#/components/schemas/FooWhereInput'
+ orderBy:
+ $ref: '#/components/schemas/FooOrderByWithRelationInput'
+ cursor:
+ $ref: '#/components/schemas/FooWhereUniqueInput'
+ take:
+ type: integer
+ skip:
+ type: integer
+ _count:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/FooCountAggregateInput'
+ _min:
+ $ref: '#/components/schemas/FooMinAggregateInput'
+ _max:
+ $ref: '#/components/schemas/FooMaxAggregateInput'
+ _sum:
+ $ref: '#/components/schemas/FooSumAggregateInput'
+ _avg:
+ $ref: '#/components/schemas/FooAvgAggregateInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ FooGroupByArgs:
+ type: object
+ properties:
+ where:
+ $ref: '#/components/schemas/FooWhereInput'
+ orderBy:
+ $ref: '#/components/schemas/FooOrderByWithRelationInput'
+ by:
+ $ref: '#/components/schemas/FooScalarFieldEnum'
+ having:
+ $ref: '#/components/schemas/FooScalarWhereWithAggregatesInput'
+ take:
+ type: integer
+ skip:
+ type: integer
+ _count:
+ oneOf:
+ - type: boolean
+ - $ref: '#/components/schemas/FooCountAggregateInput'
+ _min:
+ $ref: '#/components/schemas/FooMinAggregateInput'
+ _max:
+ $ref: '#/components/schemas/FooMaxAggregateInput'
+ _sum:
+ $ref: '#/components/schemas/FooSumAggregateInput'
+ _avg:
+ $ref: '#/components/schemas/FooAvgAggregateInput'
+ meta:
+ $ref: '#/components/schemas/_Meta'
+paths:
+ /foo/create:
+ post:
+ operationId: createFoo
+ description: Create a new Foo
+ tags:
+ - foo
+ security: []
+ responses:
+ '201':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/Foo'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/FooCreateArgs'
+ /foo/createMany:
+ post:
+ operationId: createManyFoo
+ description: Create several Foo
+ tags:
+ - foo
+ security: []
+ responses:
+ '201':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/BatchPayload'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/FooCreateManyArgs'
+ /foo/findUnique:
+ get:
+ operationId: findUniqueFoo
+ description: Find one unique Foo
+ tags:
+ - foo
+ security: []
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/Foo'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/FooFindUniqueArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
+ /foo/findFirst:
+ get:
+ operationId: findFirstFoo
+ description: Find the first Foo matching the given condition
+ tags:
+ - foo
+ security: []
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/Foo'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/FooFindFirstArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
+ /foo/findMany:
+ get:
+ operationId: findManyFoo
+ description: Find a list of Foo
+ tags:
+ - foo
+ security: []
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ type: array
+ items:
+ $ref: '#/components/schemas/Foo'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/FooFindManyArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
+ /foo/update:
+ patch:
+ operationId: updateFoo
+ description: Update a Foo
+ tags:
+ - foo
+ security: []
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/Foo'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/FooUpdateArgs'
+ /foo/updateMany:
+ patch:
+ operationId: updateManyFoo
+ description: Update Foos matching the given condition
+ tags:
+ - foo
+ security: []
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/BatchPayload'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/FooUpdateManyArgs'
+ /foo/upsert:
+ post:
+ operationId: upsertFoo
+ description: Upsert a Foo
+ tags:
+ - foo
+ security: []
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/Foo'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/FooUpsertArgs'
+ /foo/delete:
+ delete:
+ operationId: deleteFoo
+ description: Delete one unique Foo
+ tags:
+ - foo
+ security: []
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/Foo'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/FooDeleteUniqueArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
+ /foo/deleteMany:
+ delete:
+ operationId: deleteManyFoo
+ description: Delete Foos matching the given condition
+ tags:
+ - foo
+ security: []
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/BatchPayload'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/FooDeleteManyArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
+ /foo/count:
+ get:
+ operationId: countFoo
+ description: Find a list of Foo
+ tags:
+ - foo
+ security: []
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ oneOf:
+ - type: integer
+ - $ref: '#/components/schemas/FooCountAggregateOutputType'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/FooCountArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
+ /foo/aggregate:
+ get:
+ operationId: aggregateFoo
+ description: Aggregate Foos
+ tags:
+ - foo
+ security: []
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ $ref: '#/components/schemas/AggregateFoo'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/FooAggregateArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
+ /foo/groupBy:
+ get:
+ operationId: groupByFoo
+ description: Group Foos by fields
+ tags:
+ - foo
+ security: []
+ responses:
+ '200':
+ description: Successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - data
+ properties:
+ data:
+ type: array
+ items:
+ $ref: '#/components/schemas/FooGroupByOutputType'
+ description: The Prisma response data serialized with superjson
+ meta:
+ $ref: '#/components/schemas/_Meta'
+ description: The superjson serialization metadata for the "data" field
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Invalid request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/_Error'
+ description: Request is forbidden
+ parameters:
+ - name: q
+ in: query
+ required: true
+ description: Superjson-serialized Prisma query object
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/FooGroupByArgs'
+ - name: meta
+ in: query
+ description: Superjson serialization metadata for parameter "q"
+ content:
+ application/json:
+ schema: {}
diff --git a/packages/plugins/openapi/tests/openapi-restful.test.ts b/packages/plugins/openapi/tests/openapi-restful.test.ts
index 77d13885a..fb01e390e 100644
--- a/packages/plugins/openapi/tests/openapi-restful.test.ts
+++ b/packages/plugins/openapi/tests/openapi-restful.test.ts
@@ -3,18 +3,21 @@
import OpenAPIParser from '@readme/openapi-parser';
import { getLiteral, getObjectLiteral } from '@zenstackhq/sdk';
-import { isPlugin, Model, Plugin } from '@zenstackhq/sdk/ast';
+import { Model, Plugin, isPlugin } from '@zenstackhq/sdk/ast';
import { loadZModelAndDmmf } from '@zenstackhq/testtools';
-import * as fs from 'fs';
+import fs from 'fs';
+import path from 'path';
import * as tmp from 'tmp';
import YAML from 'yaml';
import generate from '../src';
-describe('Open API Plugin Tests', () => {
+describe('Open API Plugin RESTful Tests', () => {
it('run plugin', async () => {
- const { model, dmmf, modelFile } = await loadZModelAndDmmf(`
+ for (const specVersion of ['3.0.0', '3.1.0']) {
+ const { model, dmmf, modelFile } = await loadZModelAndDmmf(`
plugin openapi {
- provider = '${process.cwd()}/dist'
+ provider = '${path.resolve(__dirname, '../dist')}'
+ specVersion = '${specVersion}'
}
enum role {
@@ -29,6 +32,15 @@ model User {
email String @unique
role role @default(USER)
posts post_Item[]
+ profile Profile?
+}
+
+model Profile {
+ id String @id @default(cuid())
+ image String?
+
+ user User @relation(fields: [userId], references: [id])
+ userId String @unique
}
model post_Item {
@@ -40,6 +52,7 @@ model post_Item {
authorId String?
published Boolean @default(false)
viewCount Int @default(0)
+ notes String?
@@openapi.meta({
tagDescription: 'Post-related operations'
@@ -57,48 +70,51 @@ model Bar {
}
`);
- const { name: output } = tmp.fileSync({ postfix: '.yaml' });
-
- const options = buildOptions(model, modelFile, output, '3.1.0');
- await generate(model, options, dmmf);
-
- console.log('OpenAPI specification generated:', output);
-
- const api = await OpenAPIParser.validate(output);
-
- expect(api.tags).toEqual(
- expect.arrayContaining([
- expect.objectContaining({ name: 'user', description: 'User operations' }),
- expect.objectContaining({ name: 'post_Item', description: 'Post-related operations' }),
- ])
- );
-
- expect(api.paths?.['/user']?.['get']).toBeTruthy();
- expect(api.paths?.['/user']?.['post']).toBeTruthy();
- expect(api.paths?.['/user']?.['put']).toBeFalsy();
- expect(api.paths?.['/user/{id}']?.['get']).toBeTruthy();
- expect(api.paths?.['/user/{id}']?.['patch']).toBeTruthy();
- expect(api.paths?.['/user/{id}']?.['delete']).toBeTruthy();
- expect(api.paths?.['/user/{id}/posts']?.['get']).toBeTruthy();
- expect(api.paths?.['/user/{id}/relationships/posts']?.['get']).toBeTruthy();
- expect(api.paths?.['/user/{id}/relationships/posts']?.['post']).toBeTruthy();
- expect(api.paths?.['/user/{id}/relationships/posts']?.['patch']).toBeTruthy();
- expect(api.paths?.['/post_Item/{id}/relationships/author']?.['get']).toBeTruthy();
- expect(api.paths?.['/post_Item/{id}/relationships/author']?.['post']).toBeUndefined();
- expect(api.paths?.['/post_Item/{id}/relationships/author']?.['patch']).toBeTruthy();
- expect(api.paths?.['/foo']).toBeUndefined();
- expect(api.paths?.['/bar']).toBeUndefined();
-
- const parsed = YAML.parse(fs.readFileSync(output, 'utf-8'));
- expect(parsed.openapi).toBe('3.1.0');
- const baseline = YAML.parse(fs.readFileSync(`${__dirname}/baseline/rest.baseline.yaml`, 'utf-8'));
- expect(parsed).toMatchObject(baseline);
+ const { name: output } = tmp.fileSync({ postfix: '.yaml' });
+
+ const options = buildOptions(model, modelFile, output, '3.1.0');
+ await generate(model, options, dmmf);
+
+ console.log(`OpenAPI specification generated for ${specVersion}: ${output}`);
+
+ const api = await OpenAPIParser.validate(output);
+
+ expect(api.tags).toEqual(
+ expect.arrayContaining([
+ expect.objectContaining({ name: 'user', description: 'User operations' }),
+ expect.objectContaining({ name: 'post_Item', description: 'Post-related operations' }),
+ ])
+ );
+
+ expect(api.paths?.['/user']?.['get']).toBeTruthy();
+ expect(api.paths?.['/user']?.['post']).toBeTruthy();
+ expect(api.paths?.['/user']?.['put']).toBeFalsy();
+ expect(api.paths?.['/user/{id}']?.['get']).toBeTruthy();
+ expect(api.paths?.['/user/{id}']?.['patch']).toBeTruthy();
+ expect(api.paths?.['/user/{id}']?.['delete']).toBeTruthy();
+ expect(api.paths?.['/user/{id}/posts']?.['get']).toBeTruthy();
+ expect(api.paths?.['/user/{id}/relationships/posts']?.['get']).toBeTruthy();
+ expect(api.paths?.['/user/{id}/relationships/posts']?.['post']).toBeTruthy();
+ expect(api.paths?.['/user/{id}/relationships/posts']?.['patch']).toBeTruthy();
+ expect(api.paths?.['/post_Item/{id}/relationships/author']?.['get']).toBeTruthy();
+ expect(api.paths?.['/post_Item/{id}/relationships/author']?.['post']).toBeUndefined();
+ expect(api.paths?.['/post_Item/{id}/relationships/author']?.['patch']).toBeTruthy();
+ expect(api.paths?.['/foo']).toBeUndefined();
+ expect(api.paths?.['/bar']).toBeUndefined();
+
+ const parsed = YAML.parse(fs.readFileSync(output, 'utf-8'));
+ expect(parsed.openapi).toBe(specVersion);
+ const baseline = YAML.parse(
+ fs.readFileSync(`${__dirname}/baseline/rest-${specVersion}.baseline.yaml`, 'utf-8')
+ );
+ expect(parsed).toMatchObject(baseline);
+ }
});
it('options', async () => {
const { model, dmmf, modelFile } = await loadZModelAndDmmf(`
plugin openapi {
- provider = '${process.cwd()}/dist'
+ provider = '${path.resolve(__dirname, '../dist')}'
specVersion = '3.0.0'
title = 'My Awesome API'
version = '1.0.0'
@@ -135,7 +151,7 @@ model User {
it('security schemes valid', async () => {
const { model, dmmf, modelFile } = await loadZModelAndDmmf(`
plugin openapi {
- provider = '${process.cwd()}/dist'
+ provider = '${path.resolve(__dirname, '../dist')}'
securitySchemes = {
myBasic: { type: 'http', scheme: 'basic' },
myBearer: { type: 'http', scheme: 'bearer', bearerFormat: 'JWT' },
@@ -182,7 +198,7 @@ model Post {
it('security model level override', async () => {
const { model, dmmf, modelFile } = await loadZModelAndDmmf(`
plugin openapi {
- provider = '${process.cwd()}/dist'
+ provider = '${path.resolve(__dirname, '../dist')}'
securitySchemes = {
myBasic: { type: 'http', scheme: 'basic' }
}
@@ -214,7 +230,7 @@ model User {
it('security schemes invalid', async () => {
const { model, dmmf, modelFile } = await loadZModelAndDmmf(`
plugin openapi {
- provider = '${process.cwd()}/dist'
+ provider = '${path.resolve(__dirname, '../dist')}'
securitySchemes = {
myBasic: { type: 'invalid', scheme: 'basic' }
}
@@ -235,7 +251,7 @@ model User {
it('ignored model used as relation', async () => {
const { model, dmmf, modelFile } = await loadZModelAndDmmf(`
plugin openapi {
- provider = '${process.cwd()}/dist'
+ provider = '${path.resolve(__dirname, '../dist')}'
}
model User {
@@ -265,9 +281,11 @@ model Post {
});
it('field type coverage', async () => {
- const { model, dmmf, modelFile } = await loadZModelAndDmmf(`
+ for (const specVersion of ['3.0.0', '3.1.0']) {
+ const { model, dmmf, modelFile } = await loadZModelAndDmmf(`
plugin openapi {
- provider = '${process.cwd()}/dist'
+ provider = '${path.resolve(__dirname, '../dist')}'
+ specVersion = '${specVersion}'
}
model Foo {
@@ -286,19 +304,22 @@ model Foo {
}
`);
- const { name: output } = tmp.fileSync({ postfix: '.yaml' });
+ const { name: output } = tmp.fileSync({ postfix: '.yaml' });
- const options = buildOptions(model, modelFile, output, '3.1.0');
- await generate(model, options, dmmf);
+ const options = buildOptions(model, modelFile, output, '3.1.0');
+ await generate(model, options, dmmf);
- console.log('OpenAPI specification generated:', output);
+ console.log(`OpenAPI specification generated for ${specVersion}: ${output}`);
- await OpenAPIParser.validate(output);
+ await OpenAPIParser.validate(output);
- const parsed = YAML.parse(fs.readFileSync(output, 'utf-8'));
- expect(parsed.openapi).toBe('3.1.0');
- const baseline = YAML.parse(fs.readFileSync(`${__dirname}/baseline/rest-type-coverage.baseline.yaml`, 'utf-8'));
- expect(parsed).toMatchObject(baseline);
+ const parsed = YAML.parse(fs.readFileSync(output, 'utf-8'));
+ expect(parsed.openapi).toBe(specVersion);
+ const baseline = YAML.parse(
+ fs.readFileSync(`${__dirname}/baseline/rest-type-coverage-${specVersion}.baseline.yaml`, 'utf-8')
+ );
+ expect(parsed).toMatchObject(baseline);
+ }
});
});
diff --git a/packages/plugins/openapi/tests/openapi-rpc.test.ts b/packages/plugins/openapi/tests/openapi-rpc.test.ts
index 90d63e59e..c0cb74ab6 100644
--- a/packages/plugins/openapi/tests/openapi-rpc.test.ts
+++ b/packages/plugins/openapi/tests/openapi-rpc.test.ts
@@ -3,18 +3,21 @@
import OpenAPIParser from '@readme/openapi-parser';
import { getLiteral, getObjectLiteral } from '@zenstackhq/sdk';
-import { isPlugin, Model, Plugin } from '@zenstackhq/sdk/ast';
+import { Model, Plugin, isPlugin } from '@zenstackhq/sdk/ast';
import { loadZModelAndDmmf } from '@zenstackhq/testtools';
-import * as fs from 'fs';
+import fs from 'fs';
+import path from 'path';
import * as tmp from 'tmp';
import YAML from 'yaml';
import generate from '../src';
-describe('Open API Plugin Tests', () => {
+describe('Open API Plugin RPC Tests', () => {
it('run plugin', async () => {
- const { model, dmmf, modelFile } = await loadZModelAndDmmf(`
+ for (const specVersion of ['3.0.0', '3.1.0']) {
+ const { model, dmmf, modelFile } = await loadZModelAndDmmf(`
plugin openapi {
- provider = '${process.cwd()}/dist'
+ provider = '${path.resolve(__dirname, '../dist')}'
+ specVersion = '${specVersion}'
}
enum role {
@@ -29,6 +32,7 @@ model User {
email String @unique
role role @default(USER)
posts post_Item[]
+ profile Profile?
@@openapi.meta({
findMany: {
@@ -45,6 +49,14 @@ model User {
})
}
+model Profile {
+ id String @id @default(cuid())
+ image String?
+
+ user User @relation(fields: [userId], references: [id])
+ userId String @unique
+}
+
model post_Item {
id String @id
createdAt DateTime @default(now())
@@ -54,6 +66,7 @@ model post_Item {
authorId String?
published Boolean @default(false)
viewCount Int @default(0)
+ notes String?
@@openapi.meta({
tagDescription: 'Post-related operations',
@@ -74,42 +87,47 @@ model Bar {
}
`);
- const { name: output } = tmp.fileSync({ postfix: '.yaml' });
-
- const options = buildOptions(model, modelFile, output);
- await generate(model, options, dmmf);
-
- console.log('OpenAPI specification generated:', output);
-
- const parsed = YAML.parse(fs.readFileSync(output, 'utf-8'));
- expect(parsed.openapi).toBe('3.1.0');
- const baseline = YAML.parse(fs.readFileSync(`${__dirname}/baseline/rpc.baseline.yaml`, 'utf-8'));
- expect(parsed).toMatchObject(baseline);
-
- const api = await OpenAPIParser.validate(output);
-
- expect(api.tags).toEqual(
- expect.arrayContaining([
- expect.objectContaining({ name: 'user', description: 'User operations' }),
- expect.objectContaining({ name: 'post_Item', description: 'Post-related operations' }),
- ])
- );
-
- expect(api.paths?.['/user/findMany']?.['get']?.description).toBe('Find users matching the given conditions');
- const del = api.paths?.['/user/dodelete']?.['put'];
- expect(del?.description).toBe('Delete a unique user');
- expect(del?.summary).toBe('Delete a user yeah yeah');
- expect(del?.tags).toEqual(expect.arrayContaining(['delete', 'user']));
- expect(del?.deprecated).toBe(true);
- expect(api.paths?.['/post/findMany']).toBeUndefined();
- expect(api.paths?.['/foo/findMany']).toBeUndefined();
- expect(api.paths?.['/bar/findMany']).toBeUndefined();
+ const { name: output } = tmp.fileSync({ postfix: '.yaml' });
+
+ const options = buildOptions(model, modelFile, output);
+ await generate(model, options, dmmf);
+
+ console.log(`OpenAPI specification generated for ${specVersion}: ${output}`);
+
+ const parsed = YAML.parse(fs.readFileSync(output, 'utf-8'));
+ expect(parsed.openapi).toBe(specVersion);
+ const baseline = YAML.parse(
+ fs.readFileSync(`${__dirname}/baseline/rpc-${specVersion}.baseline.yaml`, 'utf-8')
+ );
+ expect(parsed).toMatchObject(baseline);
+
+ const api = await OpenAPIParser.validate(output);
+
+ expect(api.tags).toEqual(
+ expect.arrayContaining([
+ expect.objectContaining({ name: 'user', description: 'User operations' }),
+ expect.objectContaining({ name: 'post_Item', description: 'Post-related operations' }),
+ ])
+ );
+
+ expect(api.paths?.['/user/findMany']?.['get']?.description).toBe(
+ 'Find users matching the given conditions'
+ );
+ const del = api.paths?.['/user/dodelete']?.['put'];
+ expect(del?.description).toBe('Delete a unique user');
+ expect(del?.summary).toBe('Delete a user yeah yeah');
+ expect(del?.tags).toEqual(expect.arrayContaining(['delete', 'user']));
+ expect(del?.deprecated).toBe(true);
+ expect(api.paths?.['/post/findMany']).toBeUndefined();
+ expect(api.paths?.['/foo/findMany']).toBeUndefined();
+ expect(api.paths?.['/bar/findMany']).toBeUndefined();
+ }
});
it('options', async () => {
const { model, dmmf, modelFile } = await loadZModelAndDmmf(`
plugin openapi {
- provider = '${process.cwd()}/dist'
+ provider = '${path.resolve(__dirname, '../dist')}'
specVersion = '3.0.0'
title = 'My Awesome API'
version = '1.0.0'
@@ -146,7 +164,7 @@ model User {
it('security schemes valid', async () => {
const { model, dmmf, modelFile } = await loadZModelAndDmmf(`
plugin openapi {
- provider = '${process.cwd()}/dist'
+ provider = '${path.resolve(__dirname, '../dist')}'
securitySchemes = {
myBasic: { type: 'http', scheme: 'basic' },
myBearer: { type: 'http', scheme: 'bearer', bearerFormat: 'JWT' },
@@ -180,7 +198,7 @@ model User {
it('security schemes invalid', async () => {
const { model, dmmf, modelFile } = await loadZModelAndDmmf(`
plugin openapi {
- provider = '${process.cwd()}/dist'
+ provider = '${path.resolve(__dirname, '../dist')}'
securitySchemes = {
myBasic: { type: 'invalid', scheme: 'basic' }
}
@@ -201,7 +219,7 @@ model User {
it('security model level override', async () => {
const { model, dmmf, modelFile } = await loadZModelAndDmmf(`
plugin openapi {
- provider = '${process.cwd()}/dist'
+ provider = '${path.resolve(__dirname, '../dist')}'
securitySchemes = {
myBasic: { type: 'http', scheme: 'basic' }
}
@@ -229,7 +247,7 @@ model User {
it('security operation level override', async () => {
const { model, dmmf, modelFile } = await loadZModelAndDmmf(`
plugin openapi {
- provider = '${process.cwd()}/dist'
+ provider = '${path.resolve(__dirname, '../dist')}'
securitySchemes = {
myBasic: { type: 'http', scheme: 'basic' }
}
@@ -262,7 +280,7 @@ model User {
it('security inferred', async () => {
const { model, dmmf, modelFile } = await loadZModelAndDmmf(`
plugin openapi {
- provider = '${process.cwd()}/dist'
+ provider = '${path.resolve(__dirname, '../dist')}'
securitySchemes = {
myBasic: { type: 'http', scheme: 'basic' }
}
@@ -288,7 +306,7 @@ model User {
it('v3.1.0 fields', async () => {
const { model, dmmf, modelFile } = await loadZModelAndDmmf(`
plugin openapi {
- provider = '${process.cwd()}/dist'
+ provider = '${path.resolve(__dirname, '../dist')}'
summary = 'awesome api'
}
@@ -312,7 +330,7 @@ model User {
it('ignored model used as relation', async () => {
const { model, dmmf, modelFile } = await loadZModelAndDmmf(`
plugin openapi {
- provider = '${process.cwd()}/dist'
+ provider = '${path.resolve(__dirname, '../dist')}'
}
model User {
@@ -341,9 +359,11 @@ model Post {
});
it('field type coverage', async () => {
- const { model, dmmf, modelFile } = await loadZModelAndDmmf(`
+ for (const specVersion of ['3.0.0', '3.1.0']) {
+ const { model, dmmf, modelFile } = await loadZModelAndDmmf(`
plugin openapi {
- provider = '${process.cwd()}/dist'
+ provider = '${path.resolve(__dirname, '../dist')}'
+ specVersion = '${specVersion}'
}
model Foo {
@@ -356,25 +376,28 @@ model Foo {
float Float
decimal Decimal
boolean Boolean
- bytes Bytes
+ bytes Bytes?
@@allow('all', true)
}
`);
- const { name: output } = tmp.fileSync({ postfix: '.yaml' });
+ const { name: output } = tmp.fileSync({ postfix: '.yaml' });
- const options = buildOptions(model, modelFile, output);
- await generate(model, options, dmmf);
+ const options = buildOptions(model, modelFile, output);
+ await generate(model, options, dmmf);
- console.log('OpenAPI specification generated:', output);
+ console.log(`OpenAPI specification generated for ${specVersion}: ${output}`);
- await OpenAPIParser.validate(output);
+ await OpenAPIParser.validate(output);
- const parsed = YAML.parse(fs.readFileSync(output, 'utf-8'));
- expect(parsed.openapi).toBe('3.1.0');
- const baseline = YAML.parse(fs.readFileSync(`${__dirname}/baseline/rpc-type-coverage.baseline.yaml`, 'utf-8'));
- expect(parsed).toMatchObject(baseline);
+ const parsed = YAML.parse(fs.readFileSync(output, 'utf-8'));
+ expect(parsed.openapi).toBe(specVersion);
+ const baseline = YAML.parse(
+ fs.readFileSync(`${__dirname}/baseline/rpc-type-coverage-${specVersion}.baseline.yaml`, 'utf-8')
+ );
+ expect(parsed).toMatchObject(baseline);
+ }
});
it('full-text search', async () => {
@@ -385,7 +408,7 @@ generator js {
}
plugin openapi {
- provider = '${process.cwd()}/dist'
+ provider = '${path.resolve(__dirname, '../dist')}'
}
enum role {
diff --git a/packages/plugins/swr/package.json b/packages/plugins/swr/package.json
index d38a7dcd7..ec41734bd 100644
--- a/packages/plugins/swr/package.json
+++ b/packages/plugins/swr/package.json
@@ -1,7 +1,7 @@
{
"name": "@zenstackhq/swr",
"displayName": "ZenStack plugin for generating SWR hooks",
- "version": "1.5.0",
+ "version": "1.6.0",
"description": "ZenStack plugin for generating SWR hooks",
"main": "index.js",
"repository": {
diff --git a/packages/plugins/swr/tests/swr.test.ts b/packages/plugins/swr/tests/swr.test.ts
index fca774d64..76db29b49 100644
--- a/packages/plugins/swr/tests/swr.test.ts
+++ b/packages/plugins/swr/tests/swr.test.ts
@@ -1,6 +1,7 @@
///
import { loadSchema } from '@zenstackhq/testtools';
+import path from 'path';
describe('SWR Plugin Tests', () => {
let origDir: string;
@@ -49,7 +50,7 @@ model Foo {
await loadSchema(
`
plugin swr {
- provider = '${process.cwd()}/dist'
+ provider = '${path.resolve(__dirname, '../dist')}'
output = '$projectRoot/hooks'
}
diff --git a/packages/plugins/tanstack-query/package.json b/packages/plugins/tanstack-query/package.json
index d50a39ee5..9ea0be9e9 100644
--- a/packages/plugins/tanstack-query/package.json
+++ b/packages/plugins/tanstack-query/package.json
@@ -1,7 +1,7 @@
{
"name": "@zenstackhq/tanstack-query",
"displayName": "ZenStack plugin for generating tanstack-query hooks",
- "version": "1.5.0",
+ "version": "1.6.0",
"description": "ZenStack plugin for generating tanstack-query hooks",
"main": "index.js",
"exports": {
diff --git a/packages/plugins/tanstack-query/tests/plugin.test.ts b/packages/plugins/tanstack-query/tests/plugin.test.ts
index 252a4c04f..49a99df94 100644
--- a/packages/plugins/tanstack-query/tests/plugin.test.ts
+++ b/packages/plugins/tanstack-query/tests/plugin.test.ts
@@ -1,6 +1,7 @@
///
import { loadSchema } from '@zenstackhq/testtools';
+import path from 'path';
describe('Tanstack Query Plugin Tests', () => {
let origDir: string;
@@ -49,7 +50,7 @@ model Foo {
await loadSchema(
`
plugin tanstack {
- provider = '${process.cwd()}/dist'
+ provider = '${path.resolve(__dirname, '../dist')}'
output = '$projectRoot/hooks'
target = 'react'
}
@@ -70,7 +71,7 @@ ${sharedModel}
await loadSchema(
`
plugin tanstack {
- provider = '${process.cwd()}/dist'
+ provider = '${path.resolve(__dirname, '../dist')}'
output = '$projectRoot/hooks'
target = 'react'
version = 'v5'
@@ -92,7 +93,7 @@ ${sharedModel}
await loadSchema(
`
plugin tanstack {
- provider = '${process.cwd()}/dist'
+ provider = '${path.resolve(__dirname, '../dist')}'
output = '$projectRoot/hooks'
target = 'vue'
}
@@ -113,7 +114,7 @@ ${sharedModel}
await loadSchema(
`
plugin tanstack {
- provider = '${process.cwd()}/dist'
+ provider = '${path.resolve(__dirname, '../dist')}'
output = '$projectRoot/hooks'
target = 'vue'
version = 'v5'
@@ -135,7 +136,7 @@ ${sharedModel}
await loadSchema(
`
plugin tanstack {
- provider = '${process.cwd()}/dist'
+ provider = '${path.resolve(__dirname, '../dist')}'
output = '$projectRoot/hooks'
target = 'svelte'
}
@@ -156,7 +157,7 @@ ${sharedModel}
await loadSchema(
`
plugin tanstack {
- provider = '${process.cwd()}/dist'
+ provider = '${path.resolve(__dirname, '../dist')}'
output = '$projectRoot/hooks'
target = 'svelte'
version = 'v5'
diff --git a/packages/plugins/trpc/package.json b/packages/plugins/trpc/package.json
index 846febecd..5c4bb8be6 100644
--- a/packages/plugins/trpc/package.json
+++ b/packages/plugins/trpc/package.json
@@ -1,7 +1,7 @@
{
"name": "@zenstackhq/trpc",
"displayName": "ZenStack plugin for tRPC",
- "version": "1.5.0",
+ "version": "1.6.0",
"description": "ZenStack plugin for tRPC",
"main": "index.js",
"repository": {
diff --git a/packages/plugins/trpc/tests/trpc.test.ts b/packages/plugins/trpc/tests/trpc.test.ts
index 251ac3d14..cf43c9a49 100644
--- a/packages/plugins/trpc/tests/trpc.test.ts
+++ b/packages/plugins/trpc/tests/trpc.test.ts
@@ -19,7 +19,7 @@ describe('tRPC Plugin Tests', () => {
await loadSchema(
`
plugin trpc {
- provider = '${process.cwd()}/dist'
+ provider = '${path.resolve(__dirname, '../dist')}'
output = '$projectRoot/trpc'
}
@@ -67,7 +67,7 @@ model Foo {
const { projectDir } = await loadSchema(
`
plugin trpc {
- provider = '${process.cwd()}/dist'
+ provider = '${path.resolve(__dirname, '../dist')}'
output = './trpc'
}
@@ -110,7 +110,7 @@ model Foo {
const { projectDir } = await loadSchema(
`
plugin trpc {
- provider = '${process.cwd()}/dist'
+ provider = '${path.resolve(__dirname, '../dist')}'
output = './trpc'
}
@@ -141,7 +141,7 @@ model Post {
const { projectDir } = await loadSchema(
`
plugin trpc {
- provider = '${process.cwd()}/dist'
+ provider = '${path.resolve(__dirname, '../dist')}'
output = './trpc'
generateModelActions = 'findMany,findUnique,update'
}
@@ -171,7 +171,7 @@ model Post {
const { projectDir } = await loadSchema(
`
plugin trpc {
- provider = '${process.cwd()}/dist'
+ provider = '${path.resolve(__dirname, '../dist')}'
output = './trpc'
generateModelActions = ['findMany', 'findUnique', 'update']
}
@@ -220,7 +220,7 @@ model Post {
await loadSchema(
`
plugin trpc {
- provider = '${process.cwd()}/dist'
+ provider = '${path.resolve(__dirname, '../dist')}'
output = '$projectRoot/trpc'
generateClientHelpers = 'react'
}
@@ -240,7 +240,7 @@ model Post {
await loadSchema(
`
plugin trpc {
- provider = '${process.cwd()}/dist'
+ provider = '${path.resolve(__dirname, '../dist')}'
output = '$projectRoot/trpc'
generateClientHelpers = 'next'
}
@@ -260,7 +260,7 @@ model Post {
await loadSchema(
`
plugin trpc {
- provider = '${process.cwd()}/dist'
+ provider = '${path.resolve(__dirname, '../dist')}'
output = '$projectRoot/trpc'
}
@@ -299,7 +299,7 @@ generator js {
}
plugin trpc {
- provider = '${process.cwd()}/dist'
+ provider = '${path.resolve(__dirname, '../dist')}'
output = '$projectRoot/trpc'
generateModels = ['Post']
generateModelActions = ['findMany', 'update']
@@ -370,7 +370,7 @@ plugin zod {
}
plugin trpc {
- provider = '${process.cwd()}/dist'
+ provider = '${path.resolve(__dirname, '../dist')}'
output = '$projectRoot/trpc'
generateModels = ['Post']
generateModelActions = ['findMany', 'update']
diff --git a/packages/runtime/package.json b/packages/runtime/package.json
index a56f6b115..754357790 100644
--- a/packages/runtime/package.json
+++ b/packages/runtime/package.json
@@ -1,7 +1,7 @@
{
"name": "@zenstackhq/runtime",
"displayName": "ZenStack Runtime Library",
- "version": "1.5.0",
+ "version": "1.6.0",
"description": "Runtime of ZenStack for both client-side and server-side environments.",
"repository": {
"type": "git",
diff --git a/packages/runtime/src/enhancements/policy/index.ts b/packages/runtime/src/enhancements/policy/index.ts
index 22c4cf580..678f777ef 100644
--- a/packages/runtime/src/enhancements/policy/index.ts
+++ b/packages/runtime/src/enhancements/policy/index.ts
@@ -7,7 +7,7 @@ import { getIdFields, type ModelMeta } from '../../cross';
import { getDefaultModelMeta, getDefaultPolicy, getDefaultZodSchemas } from '../../loader';
import { AuthUser, DbClientContract } from '../../types';
import { hasAllFields } from '../../validation';
-import { makeProxy } from '../proxy';
+import { ErrorTransformer, makeProxy } from '../proxy';
import type { CommonEnhancementOptions, PolicyDef, ZodSchemas } from '../types';
import { PolicyProxyHandler } from './handler';
@@ -41,6 +41,11 @@ export interface WithPolicyOptions extends CommonEnhancementOptions {
* Whether to log Prisma query
*/
logPrismaQuery?: boolean;
+
+ /**
+ * Hook for transforming errors before they are thrown to the caller.
+ */
+ errorTransformer?: ErrorTransformer;
}
/**
@@ -110,6 +115,7 @@ export function withPolicy(
context?.user,
options?.logPrismaQuery
),
- 'policy'
+ 'policy',
+ options?.errorTransformer
);
}
diff --git a/packages/runtime/src/enhancements/proxy.ts b/packages/runtime/src/enhancements/proxy.ts
index 8c4d85ceb..358bff153 100644
--- a/packages/runtime/src/enhancements/proxy.ts
+++ b/packages/runtime/src/enhancements/proxy.ts
@@ -10,6 +10,11 @@ import { createDeferredPromise } from './policy/promise';
*/
export type BatchResult = { count: number };
+/**
+ * Function for transforming errors.
+ */
+export type ErrorTransformer = (error: unknown) => unknown;
+
/**
* Interface for proxy that intercepts Prisma operations.
*/
@@ -174,7 +179,8 @@ export function makeProxy(
prisma: any,
modelMeta: ModelMeta,
makeHandler: (prisma: object, model: string) => T,
- name = 'unnamed_enhancer'
+ name = 'unnamed_enhancer',
+ errorTransformer?: ErrorTransformer
) {
const models = Object.keys(modelMeta.fields).map((k) => k.toLowerCase());
const proxy = new Proxy(prisma, {
@@ -227,7 +233,7 @@ export function makeProxy(
return propVal;
}
- return createHandlerProxy(makeHandler(target, prop), propVal);
+ return createHandlerProxy(makeHandler(target, prop), propVal, errorTransformer);
},
});
@@ -235,7 +241,11 @@ export function makeProxy(
}
// A proxy for capturing errors and processing stack trace
-function createHandlerProxy(handler: T, origTarget: any): T {
+function createHandlerProxy(
+ handler: T,
+ origTarget: any,
+ errorTransformer?: ErrorTransformer
+): T {
return new Proxy(handler, {
get(target, propKey) {
const prop = target[propKey as keyof T];
@@ -266,6 +276,10 @@ function createHandlerProxy(handler: T, origTarget
(err as any).internalStack = err.stack;
err.stack = cleanCallStack(capture.stack, propKey.toString(), err.message);
}
+
+ if (errorTransformer) {
+ err = errorTransformer ? errorTransformer(err) : err;
+ }
reject(err);
}
);
diff --git a/packages/schema/.vscodeignore b/packages/schema/.vscodeignore
index ed687f91e..9551337ea 100644
--- a/packages/schema/.vscodeignore
+++ b/packages/schema/.vscodeignore
@@ -1,3 +1,4 @@
+.env
.vscode/**
.vscode-test/**
.gitignore
@@ -8,3 +9,5 @@ bin
build
jest.config.ts
tsconfig.json
+dist
+README-global.md
diff --git a/packages/schema/build/bundle.js b/packages/schema/build/bundle.js
index 9adab015b..537588c3e 100644
--- a/packages/schema/build/bundle.js
+++ b/packages/schema/build/bundle.js
@@ -23,19 +23,7 @@ require('esbuild')
})
.then(() => {
fs.cpSync('./src/res', 'bundle/res', { force: true, recursive: true });
- fs.cpSync('./asset', 'bundle/asset', {
- force: true,
- recursive: true,
- });
- fs.cpSync('./README.md', 'bundle/README.md', {
- force: true,
- });
- fs.cpSync('../../LICENSE', 'bundle/LICENSE', {
- force: true,
- });
- fs.cpSync('./package.json', 'bundle/package.json', {
- force: true,
- });
+ fs.cpSync('../language/syntaxes', 'bundle/syntaxes', { force: true, recursive: true });
})
.then(() => console.log(success))
.catch((err) => {
diff --git a/packages/schema/build/env-plugin.js b/packages/schema/build/env-plugin.js
deleted file mode 100644
index 99e212616..000000000
--- a/packages/schema/build/env-plugin.js
+++ /dev/null
@@ -1,60 +0,0 @@
-// from: https://github.com/rw3iss/esbuild-envfile-plugin
-
-const path = require('path');
-const fs = require('fs');
-
-const ENV = process.env.NODE_ENV || 'development';
-
-module.exports = {
- name: 'env',
-
- setup(build) {
- function _findEnvFile(dir) {
- if (!fs.existsSync(dir)) return undefined;
-
- const candidates = [`${dir}/.env.${ENV}.local`, `${dir}/.env.${ENV}`, `${dir}/.env.local`, `${dir}/.env`];
-
- for (const candidate of candidates) {
- if (fs.existsSync(candidate)) {
- console.log('Using env from:', candidate);
- return candidate;
- }
- }
-
- const next = path.resolve(dir, '../');
- if (next === dir) {
- // at root now, exit
- return undefined;
- } else {
- return _findEnvFile(next);
- }
- }
-
- build.onResolve({ filter: /^env$/ }, async (args) => {
- const envPath = _findEnvFile(args.resolveDir);
- return {
- path: args.path,
- namespace: 'env-ns',
- pluginData: {
- ...args.pluginData,
- envPath,
- },
- };
- });
-
- build.onLoad({ filter: /.*/, namespace: 'env-ns' }, async (args) => {
- // read in .env file contents and combine with regular .env:
- let config = {};
- if (args.pluginData && args.pluginData.envPath) {
- let data = await fs.promises.readFile(args.pluginData.envPath, 'utf8');
- const buf = Buffer.from(data);
- config = require('dotenv').parse(buf);
- }
-
- return {
- contents: JSON.stringify({ ...config, ...process.env }),
- loader: 'json',
- };
- });
- },
-};
diff --git a/packages/schema/package.json b/packages/schema/package.json
index a27e44032..bc60658dd 100644
--- a/packages/schema/package.json
+++ b/packages/schema/package.json
@@ -3,7 +3,7 @@
"publisher": "zenstack",
"displayName": "ZenStack Language Tools",
"description": "Build scalable web apps with minimum code by defining authorization and validation rules inside the data schema that closer to the database",
- "version": "1.5.0",
+ "version": "1.6.0",
"author": {
"name": "ZenStack Team"
},
@@ -53,7 +53,7 @@
{
"language": "zmodel",
"scopeName": "source.zmodel",
- "path": "./syntaxes/zmodel.tmLanguage.json"
+ "path": "./bundle/syntaxes/zmodel.tmLanguage.json"
}
]
},
@@ -67,10 +67,10 @@
"scripts": {
"vscode:publish": "vsce publish --no-dependencies",
"vscode:prepublish": "pnpm bundle",
- "vscode:package": "vsce package --no-dependencies",
- "clean": "rimraf bundle dist",
+ "vscode:package": "pnpm bundle && vsce package --no-dependencies",
+ "clean": "rimraf dist",
"build": "pnpm clean && pnpm lint --max-warnings=0 && tsc && copyfiles -F \"bin/*\" dist && copyfiles ./README-global.md ./LICENSE ./package.json dist && renamer --replace \"README.md\" dist/README-global.md && copyfiles -u 1 \"src/res/*\" dist && node build/post-build.js && pnpm pack dist --pack-destination '../../../.build'",
- "bundle": "pnpm clean && pnpm lint --max-warnings=0 && node build/bundle.js --minify",
+ "bundle": "rimraf bundle && pnpm lint --max-warnings=0 && node build/bundle.js --minify",
"watch": "tsc --watch",
"lint": "eslint src tests --ext ts",
"test": "ZENSTACK_TEST=1 jest",
diff --git a/packages/schema/src/cli/cli-util.ts b/packages/schema/src/cli/cli-util.ts
index bb9aa525b..000e92ca7 100644
--- a/packages/schema/src/cli/cli-util.ts
+++ b/packages/schema/src/cli/cli-util.ts
@@ -15,6 +15,7 @@ import { getVersion } from '../utils/version-utils';
import { CliError } from './cli-error';
import { ZModelFormatter } from '../language-server/zmodel-formatter';
import { TextDocument } from 'vscode-languageserver-textdocument';
+import { getPackageJson } from '../utils/pkg-utils';
// required minimal version of Prisma
export const requiredPrismaVersion = '4.8.0';
@@ -280,17 +281,10 @@ export async function formatDocument(fileName: string) {
export function getDefaultSchemaLocation() {
let location = path.resolve('schema.zmodel');
- if (fs.existsSync('./package.json')) {
- try {
- // eslint-disable-next-line @typescript-eslint/no-var-requires
- const pkgJson = require(path.resolve('./package.json'));
- if (typeof pkgJson.zenstack?.schema === 'string') {
- location = path.resolve(pkgJson.zenstack.schema);
- }
- } catch (e) {
- console.error(e);
- // noop
- }
+ // handle override from package.json
+ const pkgJson = getPackageJson();
+ if (typeof pkgJson?.zenstack?.schema === 'string') {
+ location = path.resolve(pkgJson.zenstack.schema);
}
return location;
diff --git a/packages/schema/src/cli/plugin-runner.ts b/packages/schema/src/cli/plugin-runner.ts
index d76d43522..0609fd4fb 100644
--- a/packages/schema/src/cli/plugin-runner.ts
+++ b/packages/schema/src/cli/plugin-runner.ts
@@ -18,6 +18,7 @@ import fs from 'fs';
import ora from 'ora';
import path from 'path';
import { ensureDefaultOutputFolder } from '../plugins/plugin-utils';
+import { getDefaultPrismaOutputFile } from '../plugins/prisma/schema-generator';
import telemetry from '../telemetry';
import { getVersion } from '../utils/version-utils';
@@ -54,7 +55,7 @@ export class PluginRunner {
const plugins: PluginInfo[] = [];
const pluginDecls = options.schema.declarations.filter((d): d is Plugin => isPlugin(d));
- let prismaOutput = resolvePath('./prisma/schema.prisma', { schemaPath: options.schemaPath });
+ let prismaOutput = getDefaultPrismaOutputFile(options.schemaPath);
for (const pluginDecl of pluginDecls) {
const pluginProvider = this.getPluginProvider(pluginDecl);
diff --git a/packages/schema/src/language-server/validator/datamodel-validator.ts b/packages/schema/src/language-server/validator/datamodel-validator.ts
index 8d7bb7740..ce1886f5e 100644
--- a/packages/schema/src/language-server/validator/datamodel-validator.ts
+++ b/packages/schema/src/language-server/validator/datamodel-validator.ts
@@ -235,22 +235,13 @@ export default class DataModelValidator implements AstValidator {
const node = field.$isInherited ? field.$container : field;
const info: DiagnosticInfo = { node, code: IssueCodes.MissingOppositeRelation };
- let relationFieldDocUri: string;
- let relationDataModelName: string;
-
- if (field.$isInherited) {
- info.property = 'name';
- const container = field.$container as DataModel;
- const abstractContainer = container.superTypes.find((x) =>
- x.ref?.fields.find((f) => f.name === field.name)
- )?.ref as DataModel;
-
- relationFieldDocUri = getDocument(abstractContainer).textDocument.uri;
- relationDataModelName = abstractContainer.name;
- } else {
- relationFieldDocUri = getDocument(field).textDocument.uri;
- relationDataModelName = field.$container.name;
- }
+ info.property = 'name';
+ // use cstNode because the field might be inherited from parent model
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ const container = field.$cstNode!.element.$container as DataModel;
+
+ const relationFieldDocUri = getDocument(container).textDocument.uri;
+ const relationDataModelName = container.name;
const data: MissingOppositeRelationData = {
relationFieldName: field.name,
diff --git a/packages/schema/src/language-server/validator/expression-validator.ts b/packages/schema/src/language-server/validator/expression-validator.ts
index 474f918b9..7644521b8 100644
--- a/packages/schema/src/language-server/validator/expression-validator.ts
+++ b/packages/schema/src/language-server/validator/expression-validator.ts
@@ -4,12 +4,15 @@ import {
ExpressionType,
isDataModel,
isEnum,
+ isMemberAccessExpr,
isNullExpr,
isThisExpr,
+ isDataModelField,
+ isLiteralExpr,
} from '@zenstackhq/language/ast';
-import { isDataModelFieldReference } from '@zenstackhq/sdk';
+import { isDataModelFieldReference, isEnumFieldReference } from '@zenstackhq/sdk';
import { ValidationAcceptor } from 'langium';
-import { isAuthInvocation, isCollectionPredicate } from '../../utils/ast-utils';
+import { getContainingDataModel, isAuthInvocation, isCollectionPredicate } from '../../utils/ast-utils';
import { AstValidator } from '../types';
import { typeAssignable } from './utils';
@@ -124,6 +127,24 @@ export default class ExpressionValidator implements AstValidator {
accept('error', 'incompatible operand types', { node: expr });
break;
}
+ // not supported:
+ // - foo.a == bar
+ // - foo.user.id == userId
+ // except:
+ // - future().userId == userId
+ if(isMemberAccessExpr(expr.left) && isDataModelField(expr.left.member.ref) && expr.left.member.ref.$container != getContainingDataModel(expr)
+ || isMemberAccessExpr(expr.right) && isDataModelField(expr.right.member.ref) && expr.right.member.ref.$container != getContainingDataModel(expr))
+ {
+ // foo.user.id == auth().id
+ // foo.user.id == "123"
+ // foo.user.id == null
+ // foo.user.id == EnumValue
+ if(!(this.isNotModelFieldExpr(expr.left) || this.isNotModelFieldExpr(expr.right)))
+ {
+ accept('error', 'comparison between fields of different models are not supported', { node: expr });
+ break;
+ }
+ }
if (
(expr.left.$resolvedType?.nullable && isNullExpr(expr.right)) ||
@@ -183,4 +204,15 @@ export default class ExpressionValidator implements AstValidator {
}
}
}
+
+
+ private isNotModelFieldExpr(expr: Expression) {
+ return isLiteralExpr(expr) || isEnumFieldReference(expr) || isNullExpr(expr) || this.isAuthOrAuthMemberAccess(expr)
+ }
+
+ private isAuthOrAuthMemberAccess(expr: Expression) {
+ return isAuthInvocation(expr) || (isMemberAccessExpr(expr) && isAuthInvocation(expr.operand));
+ }
+
}
+
diff --git a/packages/schema/src/language-server/zmodel-code-action.ts b/packages/schema/src/language-server/zmodel-code-action.ts
index e9e7862ec..aace4d0fe 100644
--- a/packages/schema/src/language-server/zmodel-code-action.ts
+++ b/packages/schema/src/language-server/zmodel-code-action.ts
@@ -75,8 +75,6 @@ export class ZModelCodeActionProvider implements CodeActionProvider {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const oppositeModel = fieldAstNode.type.reference!.ref! as DataModel;
- const lastField = oppositeModel.fields[oppositeModel.fields.length - 1];
-
const currentModel = document.parseResult.value as Model;
const container = currentModel.declarations.find(
@@ -121,17 +119,22 @@ export class ZModelCodeActionProvider implements CodeActionProvider {
'\n' +
indent +
`${fieldName} ${typeName} @relation(fields: [${referenceIdFieldName}], references: [${idFieldName}])` +
- referenceField;
+ referenceField +
+ '\n';
} else {
// user User @relation(fields: [userAbc], references: [id])
const typeName = container.name;
const fieldName = this.lowerCaseFirstLetter(typeName);
- newText = '\n' + indent + `${fieldName} ${typeName}[]`;
+ newText = '\n' + indent + `${fieldName} ${typeName}[]` + '\n';
}
// the opposite model might be in the imported file
const targetDocument = getDocument(oppositeModel);
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ const endOffset = oppositeModel.$cstNode!.end - 1;
+ const position = document.textDocument.positionAt(endOffset);
+
return {
title: `Add opposite relation fields on ${oppositeModel.name}`,
kind: CodeActionKind.QuickFix,
@@ -142,10 +145,8 @@ export class ZModelCodeActionProvider implements CodeActionProvider {
[targetDocument.textDocument.uri]: [
{
range: {
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- start: lastField.$cstNode!.range.end,
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- end: lastField.$cstNode!.range.end,
+ start: position,
+ end: position,
},
newText,
},
diff --git a/packages/schema/src/language-server/zmodel-linker.ts b/packages/schema/src/language-server/zmodel-linker.ts
index 23ada3d73..9951cbb68 100644
--- a/packages/schema/src/language-server/zmodel-linker.ts
+++ b/packages/schema/src/language-server/zmodel-linker.ts
@@ -9,7 +9,6 @@ import {
DataModelFieldType,
Enum,
EnumField,
- Expression,
ExpressionType,
FunctionDecl,
FunctionParam,
@@ -53,7 +52,7 @@ import {
} from 'langium';
import { match } from 'ts-pattern';
import { CancellationToken } from 'vscode-jsonrpc';
-import { getAllDeclarationsFromImports, isAuthInvocation } from '../utils/ast-utils';
+import { getAllDeclarationsFromImports, isAuthInvocation, getContainingDataModel } from '../utils/ast-utils';
import { mapBuiltinTypeToExpressionType } from './validator/utils';
interface DefaultReference extends Reference {
@@ -292,24 +291,13 @@ export class ZModelLinker extends DefaultLinker {
}
} else if (funcDecl.name === 'future' && isFromStdlib(funcDecl)) {
// future() function is resolved to current model
- node.$resolvedType = { decl: this.getContainingDataModel(node) };
+ node.$resolvedType = { decl: getContainingDataModel(node) };
} else {
this.resolveToDeclaredType(node, funcDecl.returnType);
}
}
}
- private getContainingDataModel(node: Expression): DataModel | undefined {
- let curr: AstNode | undefined = node.$container;
- while (curr) {
- if (isDataModel(curr)) {
- return curr;
- }
- curr = curr.$container;
- }
- return undefined;
- }
-
private resolveLiteral(node: LiteralExpr) {
const type = match(node)
.when(isStringLiteral, () => 'String')
diff --git a/packages/schema/src/plugins/prisma/schema-generator.ts b/packages/schema/src/plugins/prisma/schema-generator.ts
index 0605f468b..45a025d27 100644
--- a/packages/schema/src/plugins/prisma/schema-generator.ts
+++ b/packages/schema/src/plugins/prisma/schema-generator.ts
@@ -63,6 +63,7 @@ import {
SimpleField,
} from './prisma-builder';
import { ZModelCodeGenerator } from '@zenstackhq/sdk';
+import { getPackageJson } from '../../utils/pkg-utils';
const MODEL_PASSTHROUGH_ATTR = '@@prisma.passthrough';
const FIELD_PASSTHROUGH_ATTR = '@prisma.passthrough';
@@ -112,8 +113,9 @@ export default class PrismaSchemaGenerator {
}
}
- let outFile = (options.output as string) ?? './prisma/schema.prisma';
- outFile = resolvePath(outFile, options);
+ const outFile = options.output
+ ? resolvePath(options.output as string, options)
+ : getDefaultPrismaOutputFile(options.schemaPath);
if (!fs.existsSync(path.dirname(outFile))) {
fs.mkdirSync(path.dirname(outFile), { recursive: true });
@@ -430,3 +432,17 @@ export default class PrismaSchemaGenerator {
_enum.addField(field.name, attributes, documentations);
}
}
+
+export function getDefaultPrismaOutputFile(schemaPath: string) {
+ let result: string | undefined;
+
+ // handle override from package.json
+ const pkgJson = getPackageJson();
+ if (typeof pkgJson.zenstack?.prisma === 'string') {
+ result = path.resolve(pkgJson.zenstack.prisma);
+ } else {
+ result = './prisma/schema.prisma';
+ }
+
+ return resolvePath(result, { schemaPath });
+}
diff --git a/packages/schema/src/plugins/zod/generator.ts b/packages/schema/src/plugins/zod/generator.ts
index ad857fbda..2727a781f 100644
--- a/packages/schema/src/plugins/zod/generator.ts
+++ b/packages/schema/src/plugins/zod/generator.ts
@@ -26,7 +26,7 @@ import { name } from '.';
import { getDefaultOutputFolder } from '../plugin-utils';
import Transformer from './transformer';
import removeDir from './utils/removeDir';
-import { makeFieldSchema, makeValidationRefinements } from './utils/schema-gen';
+import { makeFieldSchema, makeValidationRefinements, getFieldSchemaDefault } from './utils/schema-gen';
export async function generate(
model: Model,
@@ -309,7 +309,7 @@ async function generateModelSchema(model: DataModel, project: Project, output: s
writer.write(`const baseSchema = z.object(`);
writer.inlineBlock(() => {
scalarFields.forEach((field) => {
- writer.writeLine(`${field.name}: ${makeFieldSchema(field)},`);
+ writer.writeLine(`${field.name}: ${makeFieldSchema(field, true)},`);
});
});
writer.writeLine(');');
@@ -356,7 +356,12 @@ async function generateModelSchema(model: DataModel, project: Project, output: s
////////////////////////////////////////////////
// 1. Model schema
////////////////////////////////////////////////
- let modelSchema = makePartial('baseSchema');
+ const fieldsWithoutDefault = scalarFields.filter((f) => !getFieldSchemaDefault(f));
+ // mark fields without default value as optional
+ let modelSchema = makePartial(
+ 'baseSchema',
+ fieldsWithoutDefault.length < scalarFields.length ? fieldsWithoutDefault.map((f) => f.name) : undefined
+ );
// omit fields
const fieldsToOmit = scalarFields.filter((field) => hasAttribute(field, '@omit'));
@@ -475,9 +480,13 @@ async function generateModelSchema(model: DataModel, project: Project, output: s
function makePartial(schema: string, fields?: string[]) {
if (fields) {
- return `${schema}.partial({
- ${fields.map((f) => `${f}: true`).join(', ')},
+ if (fields.length === 0) {
+ return schema;
+ } else {
+ return `${schema}.partial({
+ ${fields.map((f) => `${f}: true`).join(', ')}
})`;
+ }
} else {
return `${schema}.partial()`;
}
diff --git a/packages/schema/src/plugins/zod/utils/schema-gen.ts b/packages/schema/src/plugins/zod/utils/schema-gen.ts
index f84b25a2d..802127c58 100644
--- a/packages/schema/src/plugins/zod/utils/schema-gen.ts
+++ b/packages/schema/src/plugins/zod/utils/schema-gen.ts
@@ -1,5 +1,21 @@
-import { ExpressionContext, PluginError, getAttributeArg, getAttributeArgLiteral, getLiteral } from '@zenstackhq/sdk';
-import { DataModel, DataModelField, DataModelFieldAttribute, isDataModel, isEnum } from '@zenstackhq/sdk/ast';
+import {
+ ExpressionContext,
+ PluginError,
+ getAttributeArg,
+ getAttributeArgLiteral,
+ getLiteral,
+ isFromStdlib,
+} from '@zenstackhq/sdk';
+import {
+ DataModel,
+ DataModelField,
+ DataModelFieldAttribute,
+ isDataModel,
+ isEnum,
+ isInvocationExpr,
+ isNumberLiteral,
+ isStringLiteral,
+} from '@zenstackhq/sdk/ast';
import { upperCaseFirst } from 'upper-case-first';
import { name } from '..';
import {
@@ -7,7 +23,7 @@ import {
TypeScriptExpressionTransformerError,
} from '../../../utils/typescript-expression-transformer';
-export function makeFieldSchema(field: DataModelField) {
+export function makeFieldSchema(field: DataModelField, respectDefault = false) {
if (isDataModel(field.type.reference?.ref)) {
if (field.type.array) {
// array field is always optional
@@ -108,6 +124,13 @@ export function makeFieldSchema(field: DataModelField) {
}
}
+ if (respectDefault) {
+ const schemaDefault = getFieldSchemaDefault(field);
+ if (schemaDefault) {
+ schema += `.default(${schemaDefault})`;
+ }
+ }
+
if (field.type.optional) {
schema += '.nullish()';
}
@@ -202,3 +225,26 @@ function refineDecimal(op: 'gt' | 'gte' | 'lt' | 'lte', value: number, messageAr
}
}${messageArg})`;
}
+
+export function getFieldSchemaDefault(field: DataModelField) {
+ const attr = field.attributes.find((attr) => attr.decl.ref?.name === '@default');
+ if (!attr) {
+ return undefined;
+ }
+ const arg = attr.args.find((arg) => arg.$resolvedParam?.name === 'value');
+ if (arg) {
+ if (isStringLiteral(arg.value)) {
+ return JSON.stringify(arg.value.value);
+ } else if (isNumberLiteral(arg.value)) {
+ return arg.value.value;
+ } else if (
+ isInvocationExpr(arg.value) &&
+ isFromStdlib(arg.value.function.ref!) &&
+ arg.value.function.$refText === 'now'
+ ) {
+ return `() => new Date()`;
+ }
+ }
+
+ return undefined;
+}
diff --git a/packages/schema/src/res/prism-zmodel.js b/packages/schema/src/res/prism-zmodel.js
deleted file mode 100644
index 2d9082332..000000000
--- a/packages/schema/src/res/prism-zmodel.js
+++ /dev/null
@@ -1,20 +0,0 @@
-// based on: https://github.com/prisma/docs/blob/c72eb087fcf57f3c00d153f86c549ef28b3d0f44/src/components/customMdx/prism/prism-prisma.js
-
-(function (Prism) {
- Prism.languages.zmodel = Prism.languages.extend('clike', {
- keyword: /\b(?:datasource|enum|generator|model|attribute|function|null|this)\b/,
- 'type-class-name': /(\b()\s+)[\w.\\]+/,
- });
-
- Prism.languages.javascript['class-name'][0].pattern = /(\b(?:model|datasource|enum|generator)\s+)[\w.\\]+/;
-
- Prism.languages.insertBefore('zmodel', 'function', {
- annotation: {
- pattern: /(^|[^.])@+\w+/,
- lookbehind: true,
- alias: 'punctuation',
- },
- });
-
- Prism.languages.json5 = Prism.languages.js;
-})(Prism);
diff --git a/packages/schema/src/utils/ast-utils.ts b/packages/schema/src/utils/ast-utils.ts
index 138947be8..661f14b26 100644
--- a/packages/schema/src/utils/ast-utils.ts
+++ b/packages/schema/src/utils/ast-utils.ts
@@ -156,3 +156,15 @@ export function getAllDeclarationsFromImports(documents: LangiumDocuments, model
export function isCollectionPredicate(node: AstNode): node is BinaryExpr {
return isBinaryExpr(node) && ['?', '!', '^'].includes(node.operator);
}
+
+
+export function getContainingDataModel(node: Expression): DataModel | undefined {
+ let curr: AstNode | undefined = node.$container;
+ while (curr) {
+ if (isDataModel(curr)) {
+ return curr;
+ }
+ curr = curr.$container;
+ }
+ return undefined;
+}
\ No newline at end of file
diff --git a/packages/schema/src/utils/pkg-utils.ts b/packages/schema/src/utils/pkg-utils.ts
index 0d3633cd7..ffb9b0aea 100644
--- a/packages/schema/src/utils/pkg-utils.ts
+++ b/packages/schema/src/utils/pkg-utils.ts
@@ -84,3 +84,12 @@ export function ensurePackage(
installPackage(pkg, dev, pkgManager, tag, resolvePath, exactVersion);
}
}
+
+export function getPackageJson() {
+ const pkgJsonPath = path.join(process.cwd(), 'package.json');
+ if (fs.existsSync(pkgJsonPath)) {
+ return JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));
+ } else {
+ return undefined;
+ }
+}
diff --git a/packages/schema/syntaxes/zmodel.json b/packages/schema/syntaxes/zmodel.json
deleted file mode 100644
index 6d84ad7b6..000000000
--- a/packages/schema/syntaxes/zmodel.json
+++ /dev/null
@@ -1,55 +0,0 @@
-{
- "name": "zmodel",
- "scopeName": "source.zmodel",
- "fileTypes": [".zmodel"],
- "patterns": [
- {
- "include": "#comments"
- },
- {
- "name": "keyword.control.zmodel",
- "match": "\\b(Boolean|datasource|enum|model|String)\\b"
- },
- {
- "name": "string.quoted.double.zmodel",
- "begin": "\"",
- "end": "\""
- },
- {
- "name": "string.quoted.single.zmodel",
- "begin": "'",
- "end": "'"
- }
- ],
- "repository": {
- "comments": {
- "patterns": [
- {
- "name": "comment.block.zmodel",
- "begin": "/\\*",
- "beginCaptures": {
- "0": {
- "name": "punctuation.definition.comment.zmodel"
- }
- },
- "end": "\\*/",
- "endCaptures": {
- "0": {
- "name": "punctuation.definition.comment.zmodel"
- }
- }
- },
- {
- "begin": "//",
- "beginCaptures": {
- "1": {
- "name": "punctuation.whitespace.comment.leading.zmodel"
- }
- },
- "end": "(?=$)",
- "name": "comment.line.zmodel"
- }
- ]
- }
- }
-}
diff --git a/packages/schema/syntaxes/zmodel.tmLanguage.json b/packages/schema/syntaxes/zmodel.tmLanguage.json
deleted file mode 100644
index fb5bf9c7e..000000000
--- a/packages/schema/syntaxes/zmodel.tmLanguage.json
+++ /dev/null
@@ -1,69 +0,0 @@
-{
- "name": "zmodel",
- "scopeName": "source.zmodel",
- "fileTypes": [".zmodel"],
- "patterns": [
- {
- "include": "#comments"
- },
- {
- "name": "keyword.storage.zmodel",
- "match": "\\b(Any|Asc|BigInt|Boolean|Bytes|ContextType|DateTime|Decimal|Desc|FieldReference|Float|Int|Json|Null|Object|String|TransitiveFieldReference|Unsupported|abstract|attribute|datasource|enum|extends|false|function|generator|import|in|model|plugin|sort|true|view)\\b"
- },
- {
- "name": "string.quoted.double.zmodel",
- "begin": "\"",
- "end": "\"",
- "patterns": [
- {
- "include": "#string-character-escape"
- }
- ]
- },
- {
- "name": "string.quoted.single.zmodel",
- "begin": "'",
- "end": "'",
- "patterns": [
- {
- "include": "#string-character-escape"
- }
- ]
- }
- ],
- "repository": {
- "comments": {
- "patterns": [
- {
- "name": "comment.block.zmodel",
- "begin": "/\\*",
- "beginCaptures": {
- "0": {
- "name": "punctuation.definition.comment.zmodel"
- }
- },
- "end": "\\*/",
- "endCaptures": {
- "0": {
- "name": "punctuation.definition.comment.zmodel"
- }
- }
- },
- {
- "begin": "//",
- "beginCaptures": {
- "1": {
- "name": "punctuation.whitespace.comment.leading.zmodel"
- }
- },
- "end": "(?=$)",
- "name": "comment.line.zmodel"
- }
- ]
- },
- "string-character-escape": {
- "name": "constant.character.escape.zmodel",
- "match": "\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|u\\{[0-9A-Fa-f]+\\}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)"
- }
- }
-}
diff --git a/packages/schema/tests/schema/validation/attribute-validation.test.ts b/packages/schema/tests/schema/validation/attribute-validation.test.ts
index 6a99799fa..e5dac56db 100644
--- a/packages/schema/tests/schema/validation/attribute-validation.test.ts
+++ b/packages/schema/tests/schema/validation/attribute-validation.test.ts
@@ -642,6 +642,35 @@ describe('Attribute tests', () => {
`)
).toContain('comparison between model-typed fields are not supported');
+ expect(
+ await loadModelWithError(`
+ ${prelude}
+ model User {
+ id Int @id
+ lists List[]
+ todos Todo[]
+ }
+
+ model List {
+ id Int @id
+ user User @relation(fields: [userId], references: [id])
+ userId Int
+ todos Todo[]
+ }
+
+ model Todo {
+ id Int @id
+ user User @relation(fields: [userId], references: [id])
+ userId Int
+ list List @relation(fields: [listId], references: [id])
+ listId Int
+
+ @@allow('read', list.user.id == userId)
+ }
+
+ `)
+ ).toContain('comparison between fields of different models are not supported');
+
expect(
await loadModelWithError(`
${prelude}
diff --git a/packages/schema/tests/schema/validation/datamodel-validation.test.ts b/packages/schema/tests/schema/validation/datamodel-validation.test.ts
index a2d68f2c0..e1f06d268 100644
--- a/packages/schema/tests/schema/validation/datamodel-validation.test.ts
+++ b/packages/schema/tests/schema/validation/datamodel-validation.test.ts
@@ -633,5 +633,29 @@ describe('Data Model Validation Tests', () => {
expect(errors.length).toBe(1);
expect(errors[0]).toEqual(`Model A cannot be extended because it's not abstract`);
+
+ // relation incomplete from multiple level inheritance
+ expect(
+ await loadModelWithError(`
+ ${prelude}
+ model User {
+ id Int @id @default(autoincrement())
+ }
+
+ abstract model Base {
+ id Int @id @default(autoincrement())
+ user User @relation(fields: [userId], references: [id])
+ userId Int
+ }
+
+ abstract model Base1 extends Base {
+ isPublic Boolean @default(false)
+ }
+
+ model A extends Base1 {
+ a String
+ }
+ `)
+ ).toContain(`The relation field "user" on model "A" is missing an opposite relation field on model "User"`);
});
});
diff --git a/packages/sdk/package.json b/packages/sdk/package.json
index 5c0fcd83e..844c60889 100644
--- a/packages/sdk/package.json
+++ b/packages/sdk/package.json
@@ -1,6 +1,6 @@
{
"name": "@zenstackhq/sdk",
- "version": "1.5.0",
+ "version": "1.6.0",
"description": "ZenStack plugin development SDK",
"main": "index.js",
"scripts": {
diff --git a/packages/server/package.json b/packages/server/package.json
index 2d02ee7e5..de0f6cc44 100644
--- a/packages/server/package.json
+++ b/packages/server/package.json
@@ -1,6 +1,6 @@
{
"name": "@zenstackhq/server",
- "version": "1.5.0",
+ "version": "1.6.0",
"displayName": "ZenStack Server-side Adapters",
"description": "ZenStack server-side adapters",
"homepage": "https://zenstack.dev",
@@ -23,7 +23,7 @@
"sveltekit",
"nuxtjs"
],
- "author": "",
+ "author": "ZenStack Team",
"license": "MIT",
"dependencies": {
"@zenstackhq/runtime": "workspace:*",
diff --git a/packages/testtools/package.json b/packages/testtools/package.json
index 3919fe14e..52f6309b4 100644
--- a/packages/testtools/package.json
+++ b/packages/testtools/package.json
@@ -1,6 +1,6 @@
{
"name": "@zenstackhq/testtools",
- "version": "1.5.0",
+ "version": "1.6.0",
"description": "ZenStack Test Tools",
"main": "index.js",
"private": true,
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f209cbdac..253f1f6d4 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -57,6 +57,15 @@ importers:
specifier: ^5.3.2
version: 5.3.2
+ packages/ide/jetbrains:
+ devDependencies:
+ '@zenstackhq/language':
+ specifier: workspace:*
+ version: link:../../language/dist
+ zenstack:
+ specifier: workspace:*
+ version: link:../../schema/dist
+
packages/language:
dependencies:
langium:
@@ -66,8 +75,48 @@ importers:
langium-cli:
specifier: 1.2.0
version: 1.2.0
+ plist2:
+ specifier: ^1.1.3
+ version: 1.1.3
publishDirectory: dist
+ packages/misc/redwood:
+ dependencies:
+ '@redwoodjs/cli-helpers':
+ specifier: ^6.6.0
+ version: 6.6.0
+ '@zenstackhq/runtime':
+ specifier: workspace:*
+ version: link:../../runtime/dist
+ colors:
+ specifier: 1.4.0
+ version: 1.4.0
+ execa:
+ specifier: ^5.0.0
+ version: 5.1.1
+ listr2:
+ specifier: ^6.0.0
+ version: 6.6.1
+ terminal-link:
+ specifier: ^2.0.0
+ version: 2.1.1
+ ts-morph:
+ specifier: ^16.0.0
+ version: 16.0.0
+ yargs:
+ specifier: ^17.7.2
+ version: 17.7.2
+ devDependencies:
+ '@redwoodjs/graphql-server':
+ specifier: ^6.6.0
+ version: 6.6.0
+ '@types/yargs':
+ specifier: ^17.0.32
+ version: 17.0.32
+ graphql-yoga:
+ specifier: ^5.0.2
+ version: 5.0.2(graphql@16.8.1)
+
packages/plugins/openapi:
dependencies:
'@prisma/generator-helper':
@@ -88,9 +137,15 @@ importers:
openapi-types:
specifier: ^12.1.0
version: 12.1.0
+ semver:
+ specifier: ^7.3.8
+ version: 7.5.4
tiny-invariant:
specifier: ^1.3.1
version: 1.3.1
+ ts-pattern:
+ specifier: ^4.3.0
+ version: 4.3.0
upper-case-first:
specifier: ^2.0.2
version: 2.0.2
@@ -110,6 +165,9 @@ importers:
'@types/pluralize':
specifier: ^0.0.29
version: 0.0.29
+ '@types/semver':
+ specifier: ^7.3.13
+ version: 7.5.0
'@types/tmp':
specifier: ^0.2.3
version: 0.2.3
@@ -796,7 +854,6 @@ packages:
dependencies:
'@jridgewell/gen-mapping': 0.3.3
'@jridgewell/trace-mapping': 0.3.18
- dev: true
/@antfu/ni@0.21.4:
resolution: {integrity: sha512-O0Uv9LbLDSoEg26fnMDdDRiPwFJnQSoD4WnrflDwKCJm8Cx/0mV4cGxwBLXan5mGIrpK4Dd7vizf4rQm0QCEAA==}
@@ -829,7 +886,6 @@ packages:
/@babel/compat-data@7.22.9:
resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==}
engines: {node: '>=6.9.0'}
- dev: true
/@babel/core@7.23.2:
resolution: {integrity: sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==}
@@ -852,7 +908,6 @@ packages:
semver: 6.3.1
transitivePeerDependencies:
- supports-color
- dev: true
/@babel/generator@7.23.0:
resolution: {integrity: sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==}
@@ -862,7 +917,6 @@ packages:
'@jridgewell/gen-mapping': 0.3.3
'@jridgewell/trace-mapping': 0.3.18
jsesc: 2.5.2
- dev: true
/@babel/helper-annotate-as-pure@7.22.5:
resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==}
@@ -880,7 +934,6 @@ packages:
browserslist: 4.22.1
lru-cache: 5.1.1
semver: 6.3.1
- dev: true
/@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.23.2):
resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==}
@@ -903,7 +956,6 @@ packages:
/@babel/helper-environment-visitor@7.22.20:
resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==}
engines: {node: '>=6.9.0'}
- dev: true
/@babel/helper-environment-visitor@7.22.5:
resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==}
@@ -924,14 +976,12 @@ packages:
dependencies:
'@babel/template': 7.22.15
'@babel/types': 7.23.0
- dev: true
/@babel/helper-hoist-variables@7.22.5:
resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.23.0
- dev: true
/@babel/helper-member-expression-to-functions@7.23.0:
resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==}
@@ -945,7 +995,6 @@ packages:
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.23.0
- dev: true
/@babel/helper-module-imports@7.22.5:
resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==}
@@ -966,7 +1015,6 @@ packages:
'@babel/helper-simple-access': 7.22.5
'@babel/helper-split-export-declaration': 7.22.6
'@babel/helper-validator-identifier': 7.22.20
- dev: true
/@babel/helper-optimise-call-expression@7.22.5:
resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==}
@@ -997,7 +1045,6 @@ packages:
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.23.0
- dev: true
/@babel/helper-skip-transparent-expression-wrappers@7.22.5:
resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==}
@@ -1011,12 +1058,10 @@ packages:
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.23.0
- dev: true
/@babel/helper-string-parser@7.22.5:
resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==}
engines: {node: '>=6.9.0'}
- dev: true
/@babel/helper-validator-identifier@7.22.20:
resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==}
@@ -1025,7 +1070,6 @@ packages:
/@babel/helper-validator-option@7.22.15:
resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==}
engines: {node: '>=6.9.0'}
- dev: true
/@babel/helpers@7.23.2:
resolution: {integrity: sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==}
@@ -1036,7 +1080,6 @@ packages:
'@babel/types': 7.23.0
transitivePeerDependencies:
- supports-color
- dev: true
/@babel/highlight@7.22.20:
resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==}
@@ -1061,7 +1104,6 @@ packages:
hasBin: true
dependencies:
'@babel/types': 7.23.0
- dev: true
/@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.2):
resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
@@ -1205,6 +1247,13 @@ packages:
'@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.23.2)
dev: true
+ /@babel/runtime-corejs3@7.23.6:
+ resolution: {integrity: sha512-Djs/ZTAnpyj0nyg7p1J6oiE/tZ9G2stqAFlLGZynrW+F3k2w2jGK2mLOBxzYIOcZYA89+c3d3wXKpYLcpwcU6w==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ core-js-pure: 3.35.0
+ regenerator-runtime: 0.14.1
+
/@babel/runtime@7.22.5:
resolution: {integrity: sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==}
engines: {node: '>=6.9.0'}
@@ -1224,34 +1273,6 @@ packages:
'@babel/code-frame': 7.22.13
'@babel/parser': 7.23.0
'@babel/types': 7.23.0
- dev: true
-
- /@babel/template@7.22.5:
- resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/code-frame': 7.22.13
- '@babel/parser': 7.23.0
- '@babel/types': 7.23.0
- dev: true
-
- /@babel/traverse@7.22.8:
- resolution: {integrity: sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/code-frame': 7.22.13
- '@babel/generator': 7.23.0
- '@babel/helper-environment-visitor': 7.22.5
- '@babel/helper-function-name': 7.22.5
- '@babel/helper-hoist-variables': 7.22.5
- '@babel/helper-split-export-declaration': 7.22.6
- '@babel/parser': 7.23.0
- '@babel/types': 7.23.0
- debug: 4.3.4
- globals: 11.12.0
- transitivePeerDependencies:
- - supports-color
- dev: true
/@babel/traverse@7.23.2:
resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==}
@@ -1269,7 +1290,6 @@ packages:
globals: 11.12.0
transitivePeerDependencies:
- supports-color
- dev: true
/@babel/types@7.23.0:
resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==}
@@ -1278,7 +1298,6 @@ packages:
'@babel/helper-string-parser': 7.22.5
'@babel/helper-validator-identifier': 7.22.20
to-fast-properties: 2.0.0
- dev: true
/@bcoe/v8-coverage@0.2.3:
resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
@@ -1500,6 +1519,84 @@ packages:
'@jridgewell/trace-mapping': 0.3.9
dev: true
+ /@envelop/core@4.0.3:
+ resolution: {integrity: sha512-O0Vz8E0TObT6ijAob8jYFVJavcGywKThM3UAsxUIBBVPYZTMiqI9lo2gmAnbMUnrDcAYkUTZEW9FDYPRdF5l6g==}
+ engines: {node: '>=16.0.0'}
+ dependencies:
+ '@envelop/types': 4.0.1
+ tslib: 2.6.0
+ dev: true
+
+ /@envelop/core@5.0.0:
+ resolution: {integrity: sha512-aJdnH/ptv+cvwfvciCBe7TSvccBwo9g0S5f6u35TBVzRVqIGkK03lFlIL+x1cnfZgN9EfR2b1PH2galrT1CdCQ==}
+ engines: {node: '>=18.0.0'}
+ dependencies:
+ '@envelop/types': 5.0.0
+ tslib: 2.6.0
+ dev: true
+
+ /@envelop/depth-limit@3.0.3(@envelop/core@4.0.3)(graphql@16.8.1):
+ resolution: {integrity: sha512-fDyLQDVlSG3DPJmzwb6pdnpK67rNy9KLkN8LTthZOmEXGz0WuVP1EOOnjYY7PE566BySbNXl5z1lTeOPHR1KUw==}
+ engines: {node: '>=16.0.0'}
+ peerDependencies:
+ '@envelop/core': ^4.0.3
+ graphql: ^14.0.0 || ^15.0.0 || ^16.0.0
+ dependencies:
+ '@envelop/core': 4.0.3
+ graphql: 16.8.1
+ graphql-depth-limit: 1.1.0(graphql@16.8.1)
+ tslib: 2.6.0
+ dev: true
+
+ /@envelop/disable-introspection@5.0.3(@envelop/core@4.0.3)(graphql@16.8.1):
+ resolution: {integrity: sha512-PoKbaeCVGdgkgQUGl46L33SBB/bYKVOe1QHEW8++n9lnTTTLJTyo8EbtJb++UcuQCaaKn277fkUyc9sR9fOh5w==}
+ engines: {node: '>=16.0.0'}
+ peerDependencies:
+ '@envelop/core': ^4.0.3
+ graphql: ^14.0.0 || ^15.0.0 || ^16.0.0
+ dependencies:
+ '@envelop/core': 4.0.3
+ graphql: 16.8.1
+ tslib: 2.6.0
+ dev: true
+
+ /@envelop/filter-operation-type@5.0.3(@envelop/core@4.0.3)(graphql@16.8.1):
+ resolution: {integrity: sha512-z6gYb+y4O6lsOH+KMwrfYzN7b0ybGAZWSk/++z913nOSxtPm42sYdCQ56upw+tN/WHNxwKejCO54TjhrSdUX9Q==}
+ engines: {node: '>=16.0.0'}
+ peerDependencies:
+ '@envelop/core': ^4.0.3
+ graphql: ^14.0.0 || ^15.0.0 || ^16.0.0
+ dependencies:
+ '@envelop/core': 4.0.3
+ graphql: 16.8.1
+ tslib: 2.6.0
+ dev: true
+
+ /@envelop/on-resolve@3.0.3(@envelop/core@4.0.3)(graphql@16.8.1):
+ resolution: {integrity: sha512-Mo2w3CHmyLCScFuIO2VS2Co44vlPSc4zwujz0x+/zyaJ+eCwBQMRuE9u+9ORjvKImNxrbXI9FQVNlbF0iDk4iQ==}
+ engines: {node: '>=16.0.0'}
+ peerDependencies:
+ '@envelop/core': ^4.0.3
+ graphql: ^14.0.0 || ^15.0.0 || ^16.0.0
+ dependencies:
+ '@envelop/core': 4.0.3
+ graphql: 16.8.1
+ dev: true
+
+ /@envelop/types@4.0.1:
+ resolution: {integrity: sha512-ULo27/doEsP7uUhm2iTnElx13qTO6I5FKvmLoX41cpfuw8x6e0NUFknoqhEsLzAbgz8xVS5mjwcxGCXh4lDYzg==}
+ engines: {node: '>=16.0.0'}
+ dependencies:
+ tslib: 2.6.0
+ dev: true
+
+ /@envelop/types@5.0.0:
+ resolution: {integrity: sha512-IPjmgSc4KpQRlO4qbEDnBEixvtb06WDmjKfi/7fkZaryh5HuOmTtixe1EupQI5XfXO8joc3d27uUZ0QdC++euA==}
+ engines: {node: '>=18.0.0'}
+ dependencies:
+ tslib: 2.6.0
+ dev: true
+
/@esbuild/android-arm64@0.17.19:
resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==}
engines: {node: '>=12'}
@@ -2112,6 +2209,98 @@ packages:
dev: true
optional: true
+ /@escape.tech/graphql-armor-block-field-suggestions@2.1.0:
+ resolution: {integrity: sha512-Sna+jK02oUDJMWSfA7ica69HdtBroP3VakeMUK0+QgWlAEBEphT+SzKGDX5vn6sS7sAsEoY50gUAIgtTG+2qVw==}
+ engines: {node: '>=16.0.0'}
+ dependencies:
+ graphql: 16.8.1
+ optionalDependencies:
+ '@envelop/core': 4.0.3
+ dev: true
+
+ /@escape.tech/graphql-armor-cost-limit@2.1.0:
+ resolution: {integrity: sha512-zejjLm3vn4MQDpXRaPGXclo1Tq1lc93Ltoh3UoqUDiFV29ZUAnSnuuEw/AdbkK+YFrSIfZYMAGDV8AZ2Xz76RQ==}
+ engines: {node: '>=16.0.0'}
+ dependencies:
+ graphql: 16.8.1
+ optionalDependencies:
+ '@envelop/core': 4.0.3
+ '@escape.tech/graphql-armor-types': 0.5.0
+ dev: true
+
+ /@escape.tech/graphql-armor-max-aliases@2.1.0:
+ resolution: {integrity: sha512-jaqB8YWIpfDSNrbiGEt301MQqSH7cLu+ZYZjEQ/irL5rqbSN1c9zE+nqEP1cXxB8jB6D+vp8jU30rrZWS9goAQ==}
+ engines: {node: '>=16.0.0'}
+ dependencies:
+ graphql: 16.8.1
+ optionalDependencies:
+ '@envelop/core': 4.0.3
+ '@escape.tech/graphql-armor-types': 0.5.0
+ dev: true
+
+ /@escape.tech/graphql-armor-max-depth@2.2.0:
+ resolution: {integrity: sha512-v0z2yelQL614mYFpYL/iRkieq/7H2XKbvJ6RvbGMFFSqo3eSIz8fyX0f6pyswR7myQxki4ur0MFxSn8S5jjfqw==}
+ engines: {node: '>=16.0.0'}
+ dependencies:
+ graphql: 16.8.1
+ optionalDependencies:
+ '@envelop/core': 4.0.3
+ '@escape.tech/graphql-armor-types': 0.5.0
+ dev: true
+
+ /@escape.tech/graphql-armor-max-directives@2.1.0:
+ resolution: {integrity: sha512-0OuvWBbOVdphyLPafqTknM4EIrFsGHjv9DcSw8mM7Ol0kKLwYG7tGuBmEzwopRntkqW3utID5tMtf/B6px/Eyw==}
+ engines: {node: '>=16.0.0'}
+ dependencies:
+ graphql: 16.8.1
+ optionalDependencies:
+ '@envelop/core': 4.0.3
+ '@escape.tech/graphql-armor-types': 0.5.0
+ dev: true
+
+ /@escape.tech/graphql-armor-max-tokens@2.2.0:
+ resolution: {integrity: sha512-s6IBS8R4fxQ9cVX1USf4dUOWEDbVVrlcGmVOuTCyW1LnpFJQ5vWCs0n93Lsw2ge/MlRIkZEtGuiXdr0YmLU4Pg==}
+ engines: {node: '>=16.0.0'}
+ dependencies:
+ graphql: 16.8.1
+ optionalDependencies:
+ '@envelop/core': 4.0.3
+ '@escape.tech/graphql-armor-types': 0.5.0
+ dev: true
+
+ /@escape.tech/graphql-armor-types@0.5.0:
+ resolution: {integrity: sha512-a7KMhb1qVHFFWw4bvGYQI637YaIZRozbfc+Fj1Vv/pwnTCJOzOgnvKO8+WBXJsFFGJ2Kj+fRORmSpz7J+lJF1w==}
+ requiresBuild: true
+ dependencies:
+ graphql: 16.8.1
+ dev: true
+ optional: true
+
+ /@escape.tech/graphql-armor@2.3.1(@envelop/core@4.0.3):
+ resolution: {integrity: sha512-2HV6ApCeb52eVTeXjgpo00VLDZkiQfxeMi9KTPHsK8/1f3X60gx51szHwTRYhPUeimUquRcxqlO36Iq3rbhywQ==}
+ engines: {node: '>=16.0.0'}
+ peerDependencies:
+ '@apollo/server': ^4.0.0
+ '@envelop/core': ^4.0.0
+ '@escape.tech/graphql-armor-types': 0.5.0
+ peerDependenciesMeta:
+ '@apollo/server':
+ optional: true
+ '@envelop/core':
+ optional: true
+ '@escape.tech/graphql-armor-types':
+ optional: true
+ dependencies:
+ '@envelop/core': 4.0.3
+ '@escape.tech/graphql-armor-block-field-suggestions': 2.1.0
+ '@escape.tech/graphql-armor-cost-limit': 2.1.0
+ '@escape.tech/graphql-armor-max-aliases': 2.1.0
+ '@escape.tech/graphql-armor-max-depth': 2.2.0
+ '@escape.tech/graphql-armor-max-directives': 2.1.0
+ '@escape.tech/graphql-armor-max-tokens': 2.2.0
+ graphql: 16.8.1
+ dev: true
+
/@eslint-community/eslint-utils@4.4.0(eslint@8.55.0):
resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -2176,6 +2365,115 @@ packages:
fast-json-stringify: 5.7.0
dev: true
+ /@graphql-tools/executor@1.2.0(graphql@16.8.1):
+ resolution: {integrity: sha512-SKlIcMA71Dha5JnEWlw4XxcaJ+YupuXg0QCZgl2TOLFz4SkGCwU/geAsJvUJFwK2RbVLpQv/UMq67lOaBuwDtg==}
+ engines: {node: '>=16.0.0'}
+ peerDependencies:
+ graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
+ dependencies:
+ '@graphql-tools/utils': 10.0.11(graphql@16.8.1)
+ '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1)
+ '@repeaterjs/repeater': 3.0.5
+ graphql: 16.8.1
+ tslib: 2.6.0
+ value-or-promise: 1.0.12
+ dev: true
+
+ /@graphql-tools/merge@9.0.1(graphql@16.8.1):
+ resolution: {integrity: sha512-hIEExWO9fjA6vzsVjJ3s0cCQ+Q/BEeMVJZtMXd7nbaVefVy0YDyYlEkeoYYNV3NVVvu1G9lr6DM1Qd0DGo9Caw==}
+ engines: {node: '>=16.0.0'}
+ peerDependencies:
+ graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
+ dependencies:
+ '@graphql-tools/utils': 10.0.11(graphql@16.8.1)
+ graphql: 16.8.1
+ tslib: 2.6.0
+ dev: true
+
+ /@graphql-tools/schema@10.0.2(graphql@16.8.1):
+ resolution: {integrity: sha512-TbPsIZnWyDCLhgPGnDjt4hosiNU2mF/rNtSk5BVaXWnZqvKJ6gzJV4fcHcvhRIwtscDMW2/YTnK6dLVnk8pc4w==}
+ engines: {node: '>=16.0.0'}
+ peerDependencies:
+ graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
+ dependencies:
+ '@graphql-tools/merge': 9.0.1(graphql@16.8.1)
+ '@graphql-tools/utils': 10.0.11(graphql@16.8.1)
+ graphql: 16.8.1
+ tslib: 2.6.0
+ value-or-promise: 1.0.12
+ dev: true
+
+ /@graphql-tools/utils@10.0.11(graphql@16.8.1):
+ resolution: {integrity: sha512-vVjXgKn6zjXIlYBd7yJxCVMYGb5j18gE3hx3Qw3mNsSEsYQXbJbPdlwb7Fc9FogsJei5AaqiQerqH4kAosp1nQ==}
+ engines: {node: '>=16.0.0'}
+ peerDependencies:
+ graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
+ dependencies:
+ '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1)
+ cross-inspect: 1.0.0
+ dset: 3.1.3
+ graphql: 16.8.1
+ tslib: 2.6.0
+ dev: true
+
+ /@graphql-typed-document-node/core@3.2.0(graphql@16.8.1):
+ resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==}
+ peerDependencies:
+ graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
+ dependencies:
+ graphql: 16.8.1
+ dev: true
+
+ /@graphql-yoga/logger@1.0.0:
+ resolution: {integrity: sha512-JYoxwnPggH2BfO+dWlWZkDeFhyFZqaTRGLvFhy+Pjp2UxitEW6nDrw+pEDw/K9tJwMjIFMmTT9VfTqrnESmBHg==}
+ engines: {node: '>=16.0.0'}
+ dependencies:
+ tslib: 2.6.0
+ dev: true
+
+ /@graphql-yoga/logger@2.0.0:
+ resolution: {integrity: sha512-Mg8psdkAp+YTG1OGmvU+xa6xpsAmSir0hhr3yFYPyLNwzUj95DdIwsMpKadDj9xDpYgJcH3Hp/4JMal9DhQimA==}
+ engines: {node: '>=18.0.0'}
+ dependencies:
+ tslib: 2.6.0
+ dev: true
+
+ /@graphql-yoga/subscription@4.0.0:
+ resolution: {integrity: sha512-0qsN/BPPZNMoC2CZ8i+P6PgiJyHh1H35aKDt37qARBDaIOKDQuvEOq7+4txUKElcmXi7DYFo109FkhSQoEajrg==}
+ engines: {node: '>=16.0.0'}
+ dependencies:
+ '@graphql-yoga/typed-event-target': 2.0.0
+ '@repeaterjs/repeater': 3.0.5
+ '@whatwg-node/events': 0.1.1
+ tslib: 2.6.0
+ dev: true
+
+ /@graphql-yoga/subscription@5.0.0:
+ resolution: {integrity: sha512-Ri7sK8hmxd/kwaEa0YT8uqQUb2wOLsmBMxI90QDyf96lzOMJRgBuNYoEkU1pSgsgmW2glceZ96sRYfaXqwVxUw==}
+ engines: {node: '>=18.0.0'}
+ dependencies:
+ '@graphql-yoga/typed-event-target': 3.0.0
+ '@repeaterjs/repeater': 3.0.5
+ '@whatwg-node/events': 0.1.1
+ tslib: 2.6.0
+ dev: true
+
+ /@graphql-yoga/typed-event-target@2.0.0:
+ resolution: {integrity: sha512-oA/VGxGmaSDym1glOHrltw43qZsFwLLjBwvh57B79UKX/vo3+UQcRgOyE44c5RP7DCYjkrC2tuArZmb6jCzysw==}
+ engines: {node: '>=16.0.0'}
+ dependencies:
+ '@repeaterjs/repeater': 3.0.5
+ tslib: 2.6.0
+ dev: true
+
+ /@graphql-yoga/typed-event-target@3.0.0:
+ resolution: {integrity: sha512-w+liuBySifrstuHbFrHoHAEyVnDFVib+073q8AeAJ/qqJfvFvAwUPLLtNohR/WDVRgSasfXtl3dcNuVJWN+rjg==}
+ engines: {node: '>=18.0.0'}
+ dependencies:
+ '@repeaterjs/repeater': 3.0.5
+ tslib: 2.6.0
+ dev: true
+
/@humanwhocodes/config-array@0.11.13:
resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==}
engines: {node: '>=10.10.0'}
@@ -2201,6 +2499,10 @@ packages:
resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==}
dev: true
+ /@iarna/toml@2.2.5:
+ resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==}
+ dev: false
+
/@ioredis/commands@1.2.0:
resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==}
dev: true
@@ -2442,12 +2744,10 @@ packages:
'@jridgewell/set-array': 1.1.2
'@jridgewell/sourcemap-codec': 1.4.15
'@jridgewell/trace-mapping': 0.3.18
- dev: true
/@jridgewell/resolve-uri@3.1.0:
resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
engines: {node: '>=6.0.0'}
- dev: true
/@jridgewell/resolve-uri@3.1.1:
resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==}
@@ -2457,7 +2757,6 @@ packages:
/@jridgewell/set-array@1.1.2:
resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
engines: {node: '>=6.0.0'}
- dev: true
/@jridgewell/source-map@0.3.5:
resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==}
@@ -2468,18 +2767,15 @@ packages:
/@jridgewell/sourcemap-codec@1.4.14:
resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
- dev: true
/@jridgewell/sourcemap-codec@1.4.15:
resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
- dev: true
/@jridgewell/trace-mapping@0.3.18:
resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==}
dependencies:
'@jridgewell/resolve-uri': 3.1.0
'@jridgewell/sourcemap-codec': 1.4.14
- dev: true
/@jridgewell/trace-mapping@0.3.9:
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
@@ -2492,6 +2788,9 @@ packages:
resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==}
dev: true
+ /@kamilkisiela/fast-url-parser@1.1.4:
+ resolution: {integrity: sha512-gbkePEBupNydxCelHCESvFSFM8XPh1Zs/OAVRW/rKpEqPAl5PbOM90Si8mv9bvnR53uPD2s/FiRxdvSejpRJew==}
+
/@manypkg/find-root@1.1.0:
resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==}
dependencies:
@@ -3013,6 +3312,10 @@ packages:
engines: {node: '>=8.0.0'}
dev: false
+ /@opentelemetry/api@1.7.0:
+ resolution: {integrity: sha512-AdY5wvN0P2vXBi3b29hxZgSFvdhdxPB9+f0B6s//P9Q8nibRWeA3cHm8UmLpio9ABigkVHJ5NMPk+Mz8VCCyrw==}
+ engines: {node: '>=8.0.0'}
+
/@paralleldrive/cuid2@2.2.0:
resolution: {integrity: sha512-CVQDpPIUHrUGGLdrMGz1NmqZvqmsB2j2rCIQEu1EvxWjlFh4fhvEGmgR409cY20/67/WlJsggenq0no3p3kYsw==}
dependencies:
@@ -3200,6 +3503,17 @@ packages:
prisma: 4.16.2
dev: true
+ /@prisma/client@5.7.0:
+ resolution: {integrity: sha512-cZmglCrfNbYpzUtz7HscVHl38e9CrUs31nrVoGUK1nIPXGgt8hT4jj2s657UXcNdQ/jBUxDgGmHyu2Nyrq1txg==}
+ engines: {node: '>=16.13'}
+ requiresBuild: true
+ peerDependencies:
+ prisma: '*'
+ peerDependenciesMeta:
+ prisma:
+ optional: true
+ dev: true
+
/@prisma/debug@4.16.2:
resolution: {integrity: sha512-7L7WbG0qNNZYgLpsVB8rCHCXEyHFyIycRlRDNwkVfjQmACC2OW6AWCYCbfdjQhkF/t7+S3njj8wAWAocSs+Brw==}
dependencies:
@@ -3220,10 +3534,18 @@ packages:
- supports-color
dev: false
+ /@prisma/debug@5.7.0:
+ resolution: {integrity: sha512-tZ+MOjWlVvz1kOEhNYMa4QUGURY+kgOUBqLHYIV8jmCsMuvA1tWcn7qtIMLzYWCbDcQT4ZS8xDgK0R2gl6/0wA==}
+ dev: false
+
/@prisma/engines-version@4.16.1-1.4bc8b6e1b66cb932731fb1bdbbc550d1e010de81:
resolution: {integrity: sha512-q617EUWfRIDTriWADZ4YiWRZXCa/WuhNgLTVd+HqWLffjMSPzyM5uOWoauX91wvQClSKZU4pzI4JJLQ9Kl62Qg==}
dev: true
+ /@prisma/engines-version@5.7.0-41.79fb5193cf0a8fdbef536e4b4a159cad677ab1b9:
+ resolution: {integrity: sha512-V6tgRVi62jRwTm0Hglky3Scwjr/AKFBFtS+MdbsBr7UOuiu1TKLPc6xfPiyEN1+bYqjEtjxwGsHgahcJsd1rNg==}
+ dev: false
+
/@prisma/engines@4.16.2:
resolution: {integrity: sha512-vx1nxVvN4QeT/cepQce68deh/Turxy5Mr+4L4zClFuK1GlxN3+ivxfuv+ej/gvidWn1cE1uAhW7ALLNlYbRUAw==}
requiresBuild: true
@@ -3233,6 +3555,16 @@ packages:
requiresBuild: true
dev: false
+ /@prisma/engines@5.7.0:
+ resolution: {integrity: sha512-TkOMgMm60n5YgEKPn9erIvFX2/QuWnl3GBo6yTRyZKk5O5KQertXiNnrYgSLy0SpsKmhovEPQb+D4l0SzyE7XA==}
+ requiresBuild: true
+ dependencies:
+ '@prisma/debug': 5.7.0
+ '@prisma/engines-version': 5.7.0-41.79fb5193cf0a8fdbef536e4b4a159cad677ab1b9
+ '@prisma/fetch-engine': 5.7.0
+ '@prisma/get-platform': 5.7.0
+ dev: false
+
/@prisma/fetch-engine@4.16.2:
resolution: {integrity: sha512-lnCnHcOaNn0kw8qTJbVcNhyfIf5Lus2GFXbj3qpkdKEIB9xLgqkkuTP+35q1xFaqwQ0vy4HFpdRUpFP7njE15g==}
dependencies:
@@ -3283,6 +3615,14 @@ packages:
- supports-color
dev: false
+ /@prisma/fetch-engine@5.7.0:
+ resolution: {integrity: sha512-zIn/qmO+N/3FYe7/L9o+yZseIU8ivh4NdPKSkQRIHfg2QVTVMnbhGoTcecbxfVubeTp+DjcbjS0H9fCuM4W04w==}
+ dependencies:
+ '@prisma/debug': 5.7.0
+ '@prisma/engines-version': 5.7.0-41.79fb5193cf0a8fdbef536e4b4a159cad677ab1b9
+ '@prisma/get-platform': 5.7.0
+ dev: false
+
/@prisma/generator-helper@4.16.2:
resolution: {integrity: sha512-bMOH7y73Ui7gpQrioFeavMQA+Tf8ksaVf8Nhs9rQNzuSg8SSV6E9baczob0L5KGZTSgYoqnrRxuo03kVJYrnIg==}
dependencies:
@@ -3305,6 +3645,12 @@ packages:
- supports-color
dev: false
+ /@prisma/generator-helper@5.7.0:
+ resolution: {integrity: sha512-Fn4hJHKGJ49+E8sxpfslRauB3Goa3RAENJ/W25NMR754B9KxvmbCJyE3MT/lIZxML2nGgIdXYUtoDHZHnRaKDw==}
+ dependencies:
+ '@prisma/debug': 5.7.0
+ dev: false
+
/@prisma/get-platform@4.16.2:
resolution: {integrity: sha512-fnDey1/iSefHJRMB+w243BhWENf+paRouPMdCqIVqu8dYkR1NqhldblsSUC4Zr2sKS7Ta2sK4OLdt9IH+PZTfw==}
dependencies:
@@ -3339,6 +3685,12 @@ packages:
- supports-color
dev: false
+ /@prisma/get-platform@5.7.0:
+ resolution: {integrity: sha512-ZeV/Op4bZsWXuw5Tg05WwRI8BlKiRFhsixPcAM+5BKYSiUZiMKIi713tfT3drBq8+T0E1arNZgYSA9QYcglWNA==}
+ dependencies:
+ '@prisma/debug': 5.7.0
+ dev: false
+
/@prisma/internals@4.16.2:
resolution: {integrity: sha512-/3OiSADA3RRgsaeEE+MDsBgL6oAMwddSheXn6wtYGUnjERAV/BmF5bMMLnTykesQqwZ1s8HrISrJ0Vf6cjOxMg==}
dependencies:
@@ -3441,6 +3793,19 @@ packages:
- supports-color
dev: false
+ /@prisma/internals@5.7.0:
+ resolution: {integrity: sha512-O9x47W1DECAyvNjYUx6oZHmTX10emKuBgsFHZemUbkIcJdCsp3X8Cy2JMJ5z3hqkRX6a6omMamFsWjuTARoaSw==}
+ dependencies:
+ '@prisma/debug': 5.7.0
+ '@prisma/engines': 5.7.0
+ '@prisma/fetch-engine': 5.7.0
+ '@prisma/generator-helper': 5.7.0
+ '@prisma/get-platform': 5.7.0
+ '@prisma/prisma-schema-wasm': 5.7.0-41.79fb5193cf0a8fdbef536e4b4a159cad677ab1b9
+ arg: 5.0.2
+ prompts: 2.4.2
+ dev: false
+
/@prisma/prisma-fmt-wasm@4.16.1-1.4bc8b6e1b66cb932731fb1bdbbc550d1e010de81:
resolution: {integrity: sha512-g090+dEH7wrdCw359+8J9+TGH84qK28V/dxwINjhhNCtju9lej99z9w/AVsJP9UhhcCPS4psYz4iu8d53uxVpA==}
dev: false
@@ -3449,6 +3814,10 @@ packages:
resolution: {integrity: sha512-JFdsnSgBPN8reDTLOI9Vh/6ccCb2aD1LbY/LWQnkcIgNo6IdpzvuM+qRVbBuA6IZP2SdqQI8Lu6RL2P8EFBQUA==}
dev: false
+ /@prisma/prisma-schema-wasm@5.7.0-41.79fb5193cf0a8fdbef536e4b4a159cad677ab1b9:
+ resolution: {integrity: sha512-w+HdQtux0dJDEn6BG3fgNn+fXErXiekj9n//uHRAgrmZghockJkhnikOmG8aSXjTb1Tu5DrGasBX+rYX6rHT1w==}
+ dev: false
+
/@readme/better-ajv-errors@1.6.0(ajv@8.12.0):
resolution: {integrity: sha512-9gO9rld84Jgu13kcbKRU+WHseNhaVt76wYMeRDGsUGYxwJtI3RmEJ9LY9dZCYQGI8eUZLuxb5qDja0nqklpFjQ==}
engines: {node: '>=14'}
@@ -3491,6 +3860,141 @@ packages:
openapi-types: 12.1.0
dev: true
+ /@redwoodjs/api@6.6.0:
+ resolution: {integrity: sha512-QUlSI6YDurBDtE9t2FC/2JpGM+iVHxN6FoOfRqrfLsTPjrkH2pq7CPI38O5zOjWdsOkha0nxiV4te25cfgG5Lg==}
+ hasBin: true
+ peerDependencies:
+ memjs: 1.3.1
+ redis: 4.6.7
+ peerDependenciesMeta:
+ memjs:
+ optional: true
+ redis:
+ optional: true
+ dependencies:
+ '@babel/runtime-corejs3': 7.23.6
+ '@prisma/client': 5.7.0
+ '@whatwg-node/fetch': 0.9.14
+ core-js: 3.34.0
+ humanize-string: 2.1.0
+ jsonwebtoken: 9.0.2
+ pascalcase: 1.0.0
+ pino: 8.16.2
+ title-case: 3.0.3
+ transitivePeerDependencies:
+ - prisma
+ dev: true
+
+ /@redwoodjs/cli-helpers@6.6.0:
+ resolution: {integrity: sha512-mwBNnMMWe4EWrbMfcYTTmdUb+saGYBBtqKB1IAxzJQdHEX1jwxwZRM2adRZ1mPHFu+Qg9DZD7GlowaYD6cQaaw==}
+ dependencies:
+ '@babel/core': 7.23.2
+ '@babel/runtime-corejs3': 7.23.6
+ '@iarna/toml': 2.2.5
+ '@opentelemetry/api': 1.7.0
+ '@redwoodjs/project-config': 6.6.0
+ '@redwoodjs/telemetry': 6.6.0
+ chalk: 4.1.2
+ core-js: 3.34.0
+ dotenv: 16.3.1
+ execa: 5.1.1
+ listr2: 6.6.1
+ lodash: 4.17.21
+ pascalcase: 1.0.0
+ prettier: 2.8.8
+ prompts: 2.4.2
+ terminal-link: 2.1.1
+ transitivePeerDependencies:
+ - enquirer
+ - supports-color
+ dev: false
+
+ /@redwoodjs/graphql-server@6.6.0:
+ resolution: {integrity: sha512-LuSHmQyZm9E8STfJszSAoNyMHREI/nx2zlA1UzQOG4605YgpljI2wXUxYw7UWCH3rU66Gt0daKdv8GSo2nPlSg==}
+ dependencies:
+ '@babel/runtime-corejs3': 7.23.6
+ '@envelop/core': 4.0.3
+ '@envelop/depth-limit': 3.0.3(@envelop/core@4.0.3)(graphql@16.8.1)
+ '@envelop/disable-introspection': 5.0.3(@envelop/core@4.0.3)(graphql@16.8.1)
+ '@envelop/filter-operation-type': 5.0.3(@envelop/core@4.0.3)(graphql@16.8.1)
+ '@envelop/on-resolve': 3.0.3(@envelop/core@4.0.3)(graphql@16.8.1)
+ '@escape.tech/graphql-armor': 2.3.1(@envelop/core@4.0.3)
+ '@graphql-tools/merge': 9.0.1(graphql@16.8.1)
+ '@graphql-tools/schema': 10.0.2(graphql@16.8.1)
+ '@graphql-tools/utils': 10.0.11(graphql@16.8.1)
+ '@opentelemetry/api': 1.7.0
+ '@redwoodjs/api': 6.6.0
+ core-js: 3.34.0
+ graphql: 16.8.1
+ graphql-scalars: 1.22.4(graphql@16.8.1)
+ graphql-tag: 2.12.6(graphql@16.8.1)
+ graphql-yoga: 4.0.4(graphql@16.8.1)
+ lodash: 4.17.21
+ uuid: 9.0.1
+ transitivePeerDependencies:
+ - '@apollo/server'
+ - '@escape.tech/graphql-armor-types'
+ - memjs
+ - prisma
+ - redis
+ dev: true
+
+ /@redwoodjs/project-config@6.6.0:
+ resolution: {integrity: sha512-L0RZbzQfJrPTfR+w5OfY/FrZny2kXXXwY5ZUhb4k7yXCx3jXG9CrB71/Latek60H45DvS6eyfUd/d1T3lCb/eA==}
+ dependencies:
+ '@iarna/toml': 2.2.5
+ deepmerge: 4.3.1
+ fast-glob: 3.3.2
+ string-env-interpolation: 1.0.1
+ dev: false
+
+ /@redwoodjs/structure@6.6.0:
+ resolution: {integrity: sha512-8i4ujrhBklYNPQ7/uAf/W/rrRs9/2dIwVxTjvQz8N7NU4s3J0IrdHj5Q74vIyGOCBA8Lx3SbyXVGjIdg1sdx5g==}
+ dependencies:
+ '@babel/runtime-corejs3': 7.23.6
+ '@iarna/toml': 2.2.5
+ '@prisma/internals': 5.7.0
+ '@redwoodjs/project-config': 6.6.0
+ '@types/line-column': 1.0.0
+ camelcase: 6.3.0
+ core-js: 3.34.0
+ deepmerge: 4.3.1
+ dotenv-defaults: 5.0.2
+ enquirer: 2.4.1
+ fast-glob: 3.3.2
+ graphql: 16.8.1
+ lazy-get-decorator: 2.2.1
+ line-column: 1.0.2
+ lodash: 4.17.21
+ lodash-decorators: 6.0.1(lodash@4.17.21)
+ lru-cache: 7.18.3
+ proxyquire: 2.1.3
+ ts-morph: 15.1.0
+ vscode-languageserver: 6.1.1
+ vscode-languageserver-textdocument: 1.0.8
+ vscode-languageserver-types: 3.17.3
+ yargs-parser: 21.1.1
+ dev: false
+
+ /@redwoodjs/telemetry@6.6.0:
+ resolution: {integrity: sha512-9VEwngUBtbaPLaSdIQtthUiqrDHo4KFzDAmilvHUyV9Wgq49lCt/lpt7Dm3fO9C8l7n5WunXOKi7X2pp/IE1xw==}
+ dependencies:
+ '@babel/runtime-corejs3': 7.23.6
+ '@redwoodjs/project-config': 6.6.0
+ '@redwoodjs/structure': 6.6.0
+ '@whatwg-node/fetch': 0.9.14
+ ci-info: 4.0.0
+ core-js: 3.34.0
+ envinfo: 7.11.0
+ systeminformation: 5.21.20
+ uuid: 9.0.1
+ yargs: 17.7.2
+ dev: false
+
+ /@repeaterjs/repeater@3.0.5:
+ resolution: {integrity: sha512-l3YHBLAol6d/IKnB9LhpD0cEZWAoe3eFKUyTYWmFmCO2Q/WOckxLQAUyMZWwZV2M/m3+4vgRoaolFqaII82/TA==}
+ dev: true
+
/@rollup/plugin-alias@5.0.1(rollup@3.29.4):
resolution: {integrity: sha512-JObvbWdOHoMy9W7SU0lvGhDtWq9PllP5mjpAy+TUslZG/WzOId9u80Hsqq1vCUn9pFJ0cxpdcnAv+QzU2zFH3Q==}
engines: {node: '>=14.0.0'}
@@ -4017,10 +4521,19 @@ packages:
engines: {node: '>=10.13.0'}
dev: true
+ /@ts-morph/common@0.16.0:
+ resolution: {integrity: sha512-SgJpzkTgZKLKqQniCjLaE3c2L2sdL7UShvmTmPBejAKd2OKV/yfMpQ2IWpAuA+VY5wy7PkSUaEObIqEK6afFuw==}
+ dependencies:
+ fast-glob: 3.3.2
+ minimatch: 5.1.6
+ mkdirp: 1.0.4
+ path-browserify: 1.0.1
+ dev: false
+
/@ts-morph/common@0.17.0:
resolution: {integrity: sha512-RMSSvSfs9kb0VzkvQ2NWobwnj7TxCA9vI/IjR9bDHqgAyVbu2T0DN4wiKVqomyDWqO7dPr/tErSfq7urQ1Q37g==}
dependencies:
- fast-glob: 3.3.0
+ fast-glob: 3.3.1
minimatch: 5.1.6
mkdirp: 1.0.4
path-browserify: 1.0.1
@@ -4217,6 +4730,10 @@ packages:
'@types/node': 18.0.0
dev: true
+ /@types/line-column@1.0.0:
+ resolution: {integrity: sha512-wbw+IDRw/xY/RGy+BL6f4Eey4jsUgHQrMuA4Qj0CSG3x/7C2Oc57pmRoM2z3M4DkylWRz+G1pfX06sCXQm0J+w==}
+ dev: false
+
/@types/mime@1.3.2:
resolution: {integrity: sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==}
dev: true
@@ -4386,6 +4903,12 @@ packages:
'@types/yargs-parser': 21.0.0
dev: true
+ /@types/yargs@17.0.32:
+ resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==}
+ dependencies:
+ '@types/yargs-parser': 21.0.0
+ dev: true
+
/@typescript-eslint/eslint-plugin@6.13.1(@typescript-eslint/parser@6.13.1)(eslint@8.55.0)(typescript@5.3.2):
resolution: {integrity: sha512-5bQDGkXaxD46bPvQt08BUz9YSaO4S0fB1LB5JHQuXTfkGPI3+UUeS387C/e9jRie5GqT8u5kFTrMvAjtX4O5kA==}
engines: {node: ^16.0.0 || >=18.0.0}
@@ -4762,8 +5285,8 @@ packages:
'@babel/core': 7.23.2
'@babel/helper-module-imports': 7.22.5
'@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.23.2)
- '@babel/template': 7.22.5
- '@babel/traverse': 7.22.8
+ '@babel/template': 7.22.15
+ '@babel/traverse': 7.23.2
'@babel/types': 7.23.0
'@vue/babel-helper-vue-transform-on': 1.1.5
camelcase: 6.3.0
@@ -4860,6 +5383,35 @@ packages:
resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==}
dev: true
+ /@whatwg-node/events@0.1.1:
+ resolution: {integrity: sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w==}
+ engines: {node: '>=16.0.0'}
+
+ /@whatwg-node/fetch@0.9.14:
+ resolution: {integrity: sha512-wurZC82zzZwXRDSW0OS9l141DynaJQh7Yt0FD1xZ8niX7/Et/7RoiLiltbVU1fSF1RR9z6ndEaTUQBAmddTm1w==}
+ engines: {node: '>=16.0.0'}
+ dependencies:
+ '@whatwg-node/node-fetch': 0.5.2
+ urlpattern-polyfill: 9.0.0
+
+ /@whatwg-node/node-fetch@0.5.2:
+ resolution: {integrity: sha512-uVYCnmWoCiGbv5AtnSx5nZ1kQJ+U8f269/yHB62y7wXPdjYx6o4sBSefnfwUI8HNf4rf16VbvGR/AzuABhDD5g==}
+ engines: {node: '>=16.0.0'}
+ dependencies:
+ '@kamilkisiela/fast-url-parser': 1.1.4
+ '@whatwg-node/events': 0.1.1
+ busboy: 1.6.0
+ fast-querystring: 1.1.2
+ tslib: 2.6.0
+
+ /@whatwg-node/server@0.9.19:
+ resolution: {integrity: sha512-GViwZq7iE1qCV6fSL2JHAHPQb6Jn2Ke34pkC5Wv7nAZi0qIqqPcBrEUG7TbJc79hYjCSrzRTi7FEs2xyWnQn7Q==}
+ engines: {node: '>=16.0.0'}
+ dependencies:
+ '@whatwg-node/fetch': 0.9.14
+ tslib: 2.6.0
+ dev: true
+
/abab@2.0.6:
resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==}
dev: true
@@ -4986,7 +5538,6 @@ packages:
/ansi-colors@4.1.3:
resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
engines: {node: '>=6'}
- dev: true
/ansi-escapes@4.3.2:
resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
@@ -4994,6 +5545,13 @@ packages:
dependencies:
type-fest: 0.21.3
+ /ansi-escapes@5.0.0:
+ resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==}
+ engines: {node: '>=12'}
+ dependencies:
+ type-fest: 1.4.0
+ dev: false
+
/ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
@@ -5001,7 +5559,6 @@ packages:
/ansi-regex@6.0.1:
resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
engines: {node: '>=12'}
- dev: true
/ansi-styles@3.2.1:
resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
@@ -5023,7 +5580,6 @@ packages:
/ansi-styles@6.2.1:
resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
engines: {node: '>=12'}
- dev: true
/any-promise@1.3.0:
resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
@@ -5494,7 +6050,6 @@ packages:
electron-to-chromium: 1.4.551
node-releases: 2.0.13
update-browserslist-db: 1.0.13(browserslist@4.22.1)
- dev: true
/bs-logger@0.2.6:
resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==}
@@ -5512,6 +6067,10 @@ packages:
/buffer-crc32@0.2.13:
resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
+ /buffer-equal-constant-time@1.0.1:
+ resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==}
+ dev: true
+
/buffer-from@1.1.2:
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
dev: true
@@ -5553,7 +6112,6 @@ packages:
engines: {node: '>=10.16.0'}
dependencies:
streamsearch: 1.1.0
- dev: true
/bytes@3.1.2:
resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
@@ -5623,7 +6181,6 @@ packages:
/camelcase@6.3.0:
resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
engines: {node: '>=10'}
- dev: true
/caniuse-api@3.0.0:
resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==}
@@ -5640,7 +6197,6 @@ packages:
/caniuse-lite@1.0.30001547:
resolution: {integrity: sha512-W7CrtIModMAxobGhz8iXmDfuJiiKg1WADMO/9x7/CLNin5cpSbuBjooyoIUVB5eyCc36QuTVlkVa1iB2S5+/eA==}
- dev: true
/capital-case@1.0.4:
resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==}
@@ -5799,6 +6355,11 @@ packages:
resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==}
engines: {node: '>=8'}
+ /ci-info@4.0.0:
+ resolution: {integrity: sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==}
+ engines: {node: '>=8'}
+ dev: false
+
/citty@0.1.4:
resolution: {integrity: sha512-Q3bK1huLxzQrvj7hImJ7Z1vKYJRPQCDnd0EjXfHMidcjecGOMuLrmuQmtWmFkuKLcMThlGh1yCKG8IEc6VeNXQ==}
dependencies:
@@ -5825,6 +6386,13 @@ packages:
restore-cursor: 3.1.0
dev: false
+ /cli-cursor@4.0.0:
+ resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dependencies:
+ restore-cursor: 4.0.0
+ dev: false
+
/cli-spinners@2.9.0:
resolution: {integrity: sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==}
engines: {node: '>=6'}
@@ -5844,7 +6412,6 @@ packages:
dependencies:
slice-ansi: 5.0.0
string-width: 5.1.2
- dev: true
/client-only@0.0.1:
resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
@@ -5882,7 +6449,6 @@ packages:
string-width: 4.2.3
strip-ansi: 6.0.1
wrap-ansi: 7.0.0
- dev: true
/clone@1.0.4:
resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
@@ -5949,7 +6515,6 @@ packages:
/colorette@2.0.20:
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
- dev: true
/colors@1.4.0:
resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==}
@@ -6104,7 +6669,6 @@ packages:
/convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
- dev: true
/cookie-es@1.0.0:
resolution: {integrity: sha512-mWYvfOLrfEc996hlKcdABeIiPHUPC6DM2QYZdGGOvhOTbA3tjm2eBwqlJpoFdjC89NI4Qt6h0Pu06Mp+1Pj5OQ==}
@@ -6143,6 +6707,14 @@ packages:
yargs: 16.2.0
dev: true
+ /core-js-pure@3.35.0:
+ resolution: {integrity: sha512-f+eRYmkou59uh7BPcyJ8MC76DiGhspj1KMxVIcF24tzP8NA9HVa1uC7BTW2tgx7E1QVCzDzsgp7kArrzhlz8Ew==}
+ requiresBuild: true
+
+ /core-js@3.34.0:
+ resolution: {integrity: sha512-aDdvlDder8QmY91H88GzNi9EtQi2TjvQhpCX6B1v/dAZHU1AuLgHvRh54RiOerpEhEW46Tkf+vgAViB/CWC0ag==}
+ requiresBuild: true
+
/core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
@@ -6206,6 +6778,13 @@ packages:
- encoding
dev: false
+ /cross-inspect@1.0.0:
+ resolution: {integrity: sha512-4PFfn4b5ZN6FMNGSZlyb7wUhuN8wvj8t/VQHZdM4JsDcruGJ8L2kf9zao98QIrBPFCpdk27qst/AGTl7pL3ypQ==}
+ engines: {node: '>=16.0.0'}
+ dependencies:
+ tslib: 2.6.0
+ dev: true
+
/cross-spawn@5.1.0:
resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==}
dependencies:
@@ -6439,6 +7018,13 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
+ /decamelize@2.0.0:
+ resolution: {integrity: sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==}
+ engines: {node: '>=4'}
+ dependencies:
+ xregexp: 4.0.0
+ dev: true
+
/decimal.js@10.4.2:
resolution: {integrity: sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==}
@@ -6514,7 +7100,6 @@ packages:
/deepmerge@4.3.1:
resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
engines: {node: '>=0.10.0'}
- dev: true
/defaults@1.0.4:
resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
@@ -6698,6 +7283,17 @@ packages:
type-fest: 3.13.1
dev: true
+ /dotenv-defaults@5.0.2:
+ resolution: {integrity: sha512-y5z4NhblzwNk8XBIYVzjLcFkANK0rxbRDO6kGOfH9QrVYIGVEX52IqwSprKVsaLHM9pnNkCSxazZF/JPydDPvA==}
+ dependencies:
+ dotenv: 14.3.2
+ dev: false
+
+ /dotenv@14.3.2:
+ resolution: {integrity: sha512-vwEppIphpFdvaMCaHfCEv9IgwcxMljMw2TnAQBB4VWPvzXQLTb82jwmdOKzlEVUL3gNFT4l4TPKO+Bn+sqcrVQ==}
+ engines: {node: '>=12'}
+ dev: false
+
/dotenv@16.0.3:
resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==}
engines: {node: '>=12'}
@@ -6705,6 +7301,10 @@ packages:
/dotenv@16.3.1:
resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==}
engines: {node: '>=12'}
+
+ /dset@3.1.3:
+ resolution: {integrity: sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ==}
+ engines: {node: '>=4'}
dev: true
/duplexer@0.1.2:
@@ -6713,6 +7313,11 @@ packages:
/eastasianwidth@0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+
+ /ecdsa-sig-formatter@1.0.11:
+ resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==}
+ dependencies:
+ safe-buffer: 5.2.1
dev: true
/ee-first@1.1.1:
@@ -6725,7 +7330,6 @@ packages:
/electron-to-chromium@1.4.551:
resolution: {integrity: sha512-/Ng/W/kFv7wdEHYzxdK7Cv0BHEGSkSB3M0Ssl8Ndr1eMiYeas/+Mv4cNaDqamqWx6nd2uQZfPz6g25z25M/sdw==}
- dev: true
/emittery@0.13.1:
resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==}
@@ -6737,7 +7341,6 @@ packages:
/emoji-regex@9.2.2:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
- dev: true
/emphasize@4.2.0:
resolution: {integrity: sha512-yGKvcFUHlBsUPwlxTlzKLR8+zhpbitkFOMCUxN8fTJng9bdH3WNzUGkhdaGdjndSUgqmMPBN7umfwnUdLz5Axg==}
@@ -6782,6 +7385,14 @@ packages:
ansi-colors: 4.1.3
dev: true
+ /enquirer@2.4.1:
+ resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==}
+ engines: {node: '>=8.6'}
+ dependencies:
+ ansi-colors: 4.1.3
+ strip-ansi: 6.0.1
+ dev: false
+
/entities@2.1.0:
resolution: {integrity: sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==}
dev: true
@@ -6796,6 +7407,12 @@ packages:
engines: {node: '>=6'}
dev: false
+ /envinfo@7.11.0:
+ resolution: {integrity: sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==}
+ engines: {node: '>=4'}
+ hasBin: true
+ dev: false
+
/errno@0.1.8:
resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==}
hasBin: true
@@ -7189,7 +7806,6 @@ packages:
/escalade@3.1.1:
resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
engines: {node: '>=6'}
- dev: true
/escape-html@1.0.3:
resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
@@ -7383,6 +7999,10 @@ packages:
engines: {node: '>=6'}
dev: true
+ /eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+ dev: false
+
/events@3.3.0:
resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
engines: {node: '>=0.8.x'}
@@ -7507,7 +8127,6 @@ packages:
/fast-decode-uri-component@1.0.1:
resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==}
- dev: true
/fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
@@ -7521,8 +8140,8 @@ packages:
resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==}
dev: true
- /fast-glob@3.3.0:
- resolution: {integrity: sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==}
+ /fast-glob@3.3.1:
+ resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==}
engines: {node: '>=8.6.0'}
dependencies:
'@nodelib/fs.stat': 2.0.5
@@ -7530,10 +8149,9 @@ packages:
glob-parent: 5.1.2
merge2: 1.4.1
micromatch: 4.0.5
- dev: false
- /fast-glob@3.3.1:
- resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==}
+ /fast-glob@3.3.2:
+ resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
engines: {node: '>=8.6.0'}
dependencies:
'@nodelib/fs.stat': 2.0.5
@@ -7541,6 +8159,7 @@ packages:
glob-parent: 5.1.2
merge2: 1.4.1
micromatch: 4.0.5
+ dev: false
/fast-json-stable-stringify@2.1.0:
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
@@ -7565,7 +8184,6 @@ packages:
resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==}
dependencies:
fast-decode-uri-component: 1.0.1
- dev: true
/fast-redact@3.2.0:
resolution: {integrity: sha512-zaTadChr+NekyzallAMXATXLOR8MNx3zqpZ0MUF2aGf4EathnG0f32VLODNlY8IuGY3HoRO2L6/6fSzNsLaHIw==}
@@ -7604,7 +8222,7 @@ packages:
proxy-addr: 2.0.7
rfdc: 1.3.0
secure-json-parse: 2.7.0
- semver: 7.5.3
+ semver: 7.5.4
tiny-lru: 10.4.1
transitivePeerDependencies:
- supports-color
@@ -7652,6 +8270,14 @@ packages:
resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
dev: true
+ /fill-keys@1.0.2:
+ resolution: {integrity: sha512-tcgI872xXjwFF4xgQmLxi76GnwJG3g/3isB1l4/G5Z4zrbddGpBjqZCO9oEAcB5wX0Hj/5iQB3toxfO7in1hHA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-object: 1.0.2
+ merge-descriptors: 1.0.1
+ dev: false
+
/fill-range@7.0.1:
resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
engines: {node: '>=8'}
@@ -7900,12 +8526,10 @@ packages:
/gensync@1.0.0-beta.2:
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
engines: {node: '>=6.9.0'}
- dev: true
/get-caller-file@2.0.5:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
- dev: true
/get-func-name@2.0.0:
resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==}
@@ -7945,7 +8569,7 @@ packages:
get-it: 8.1.4
registry-auth-token: 5.0.2
registry-url: 5.1.0
- semver: 7.5.3
+ semver: 7.5.4
transitivePeerDependencies:
- supports-color
dev: false
@@ -8072,7 +8696,6 @@ packages:
/globals@11.12.0:
resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
engines: {node: '>=4'}
- dev: true
/globals@13.20.0:
resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==}
@@ -8131,6 +8754,80 @@ packages:
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
dev: true
+ /graphql-depth-limit@1.1.0(graphql@16.8.1):
+ resolution: {integrity: sha512-+3B2BaG8qQ8E18kzk9yiSdAa75i/hnnOwgSeAxVJctGQPvmeiLtqKOYF6HETCyRjiF7Xfsyal0HbLlxCQkgkrw==}
+ engines: {node: '>=6.0.0'}
+ peerDependencies:
+ graphql: '*'
+ dependencies:
+ arrify: 1.0.1
+ graphql: 16.8.1
+ dev: true
+
+ /graphql-scalars@1.22.4(graphql@16.8.1):
+ resolution: {integrity: sha512-ILnv7jq5VKHLUyoaTFX7lgYrjCd6vTee9i8/B+D4zJKJT5TguOl0KkpPEbXHjmeor8AZYrVsrYUHdqRBMX1pjA==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
+ dependencies:
+ graphql: 16.8.1
+ tslib: 2.6.0
+ dev: true
+
+ /graphql-tag@2.12.6(graphql@16.8.1):
+ resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
+ dependencies:
+ graphql: 16.8.1
+ tslib: 2.6.0
+ dev: true
+
+ /graphql-yoga@4.0.4(graphql@16.8.1):
+ resolution: {integrity: sha512-MvCLhFecYNIKuxAZisPjpIL9lxRYbpgPSNKENDO/8CV3oiFlsLJHZb5dp2sVAeLafXHeZ9TgkijLthUBc1+Jag==}
+ engines: {node: '>=16.0.0'}
+ peerDependencies:
+ graphql: ^15.2.0 || ^16.0.0
+ dependencies:
+ '@envelop/core': 4.0.3
+ '@graphql-tools/executor': 1.2.0(graphql@16.8.1)
+ '@graphql-tools/schema': 10.0.2(graphql@16.8.1)
+ '@graphql-tools/utils': 10.0.11(graphql@16.8.1)
+ '@graphql-yoga/logger': 1.0.0
+ '@graphql-yoga/subscription': 4.0.0
+ '@whatwg-node/fetch': 0.9.14
+ '@whatwg-node/server': 0.9.19
+ dset: 3.1.3
+ graphql: 16.8.1
+ lru-cache: 10.0.1
+ tslib: 2.6.0
+ dev: true
+
+ /graphql-yoga@5.0.2(graphql@16.8.1):
+ resolution: {integrity: sha512-+r0aZ5sBQaWTFEwmDdPR+XcsYaIIh40IA34F7rhnyY57KXgs18ZkCZ9NPvfi6XEuqkHEvc2PFox05c5NRSJ26g==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ graphql: ^15.2.0 || ^16.0.0
+ dependencies:
+ '@envelop/core': 5.0.0
+ '@graphql-tools/executor': 1.2.0(graphql@16.8.1)
+ '@graphql-tools/schema': 10.0.2(graphql@16.8.1)
+ '@graphql-tools/utils': 10.0.11(graphql@16.8.1)
+ '@graphql-yoga/logger': 2.0.0
+ '@graphql-yoga/subscription': 5.0.0
+ '@whatwg-node/fetch': 0.9.14
+ '@whatwg-node/server': 0.9.19
+ dset: 3.1.3
+ graphql: 16.8.1
+ lru-cache: 10.0.1
+ tslib: 2.6.0
+ dev: true
+
+ /graphql@16.8.1:
+ resolution: {integrity: sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==}
+ engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0}
+
/gzip-size@7.0.0:
resolution: {integrity: sha512-O1Ld7Dr+nqPnmGpdhzLmMTQ4vAsD+rHwMm1NLUmoUFFymBOMKxCCrtDxqdBRYXdeEPEi3SyoR4TizJLQrnKBNA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -8361,6 +9058,13 @@ packages:
engines: {node: '>=16.17.0'}
dev: true
+ /humanize-string@2.1.0:
+ resolution: {integrity: sha512-sQ+hqmxyXW8Cj7iqxcQxD7oSy3+AXnIZXdUF9lQMkzaG8dtbKAB8U7lCtViMnwQ+MpdCKsO2Kiij3G6UUXq/Xg==}
+ engines: {node: '>=6'}
+ dependencies:
+ decamelize: 2.0.0
+ dev: true
+
/iconv-lite@0.4.24:
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
engines: {node: '>=0.10.0'}
@@ -8567,7 +9271,6 @@ packages:
/is-fullwidth-code-point@4.0.0:
resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==}
engines: {node: '>=12'}
- dev: true
/is-generator-fn@2.1.0:
resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==}
@@ -8609,6 +9312,10 @@ packages:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
+ /is-object@1.0.2:
+ resolution: {integrity: sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==}
+ dev: false
+
/is-path-cwd@2.2.0:
resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==}
engines: {node: '>=6'}
@@ -8774,6 +9481,13 @@ packages:
/isexe@2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+ /isobject@2.1.0:
+ resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ isarray: 1.0.0
+ dev: false
+
/isomorphic-fetch@3.0.0:
resolution: {integrity: sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==}
dependencies:
@@ -9399,7 +10113,6 @@ packages:
resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
engines: {node: '>=4'}
hasBin: true
- dev: true
/json-parse-even-better-errors@2.3.1:
resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
@@ -9459,6 +10172,37 @@ packages:
resolution: {integrity: sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==}
dev: true
+ /jsonwebtoken@9.0.2:
+ resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==}
+ engines: {node: '>=12', npm: '>=6'}
+ dependencies:
+ jws: 3.2.2
+ lodash.includes: 4.3.0
+ lodash.isboolean: 3.0.3
+ lodash.isinteger: 4.0.4
+ lodash.isnumber: 3.0.3
+ lodash.isplainobject: 4.0.6
+ lodash.isstring: 4.0.1
+ lodash.once: 4.1.1
+ ms: 2.1.3
+ semver: 7.5.4
+ dev: true
+
+ /jwa@1.4.1:
+ resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==}
+ dependencies:
+ buffer-equal-constant-time: 1.0.1
+ ecdsa-sig-formatter: 1.0.11
+ safe-buffer: 5.2.1
+ dev: true
+
+ /jws@3.2.2:
+ resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==}
+ dependencies:
+ jwa: 1.4.1
+ safe-buffer: 5.2.1
+ dev: true
+
/keytar@7.9.0:
resolution: {integrity: sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==}
requiresBuild: true
@@ -9513,6 +10257,10 @@ packages:
vscode-languageserver-textdocument: 1.0.8
vscode-uri: 3.0.7
+ /lazy-get-decorator@2.2.1:
+ resolution: {integrity: sha512-Z5uxqhXT+h3s1az3JaEAi9eh8+p4pIUE3qJGgfkx9zIEiA3bIpg4ChxODLwCpFr9S+PDEJ/2Q1UaMqy8RdVCxg==}
+ dev: false
+
/lazystream@1.0.1:
resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==}
engines: {node: '>= 0.6.3'}
@@ -9545,6 +10293,13 @@ packages:
engines: {node: '>=10'}
dev: true
+ /line-column@1.0.2:
+ resolution: {integrity: sha512-Ktrjk5noGYlHsVnYWh62FLVs4hTb8A3e+vucNZMgPeAOITdshMSgv4cCZQeRDjm7+goqmo6+liZwTXo+U3sVww==}
+ dependencies:
+ isarray: 1.0.0
+ isobject: 2.1.0
+ dev: false
+
/lines-and-columns@1.2.4:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
@@ -9577,6 +10332,23 @@ packages:
uqr: 0.1.2
dev: true
+ /listr2@6.6.1:
+ resolution: {integrity: sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==}
+ engines: {node: '>=16.0.0'}
+ peerDependencies:
+ enquirer: '>= 2.3.0 < 3'
+ peerDependenciesMeta:
+ enquirer:
+ optional: true
+ dependencies:
+ cli-truncate: 3.1.0
+ colorette: 2.0.20
+ eventemitter3: 5.0.1
+ log-update: 5.0.1
+ rfdc: 1.3.0
+ wrap-ansi: 8.1.0
+ dev: false
+
/load-module@4.2.1:
resolution: {integrity: sha512-Sbfg6R4LjvyThJpqUoADHMjyoI2+cL4msbCQeZ9kkY/CqP/TT2938eftKm7x4I2gd4/A+DEe6nePkbfWYbXwSw==}
engines: {node: '>=12.17'}
@@ -9620,6 +10392,16 @@ packages:
dependencies:
p-locate: 5.0.0
+ /lodash-decorators@6.0.1(lodash@4.17.21):
+ resolution: {integrity: sha512-1M0YC8G3nFTkejZEk2ehyvryEdcqj6xATH+ybI8j53cLs/bKRsavaE//y7nz/A0vxEFhxYqev7vdWfsuTJ1AtQ==}
+ engines: {node: '>=0.12.0'}
+ peerDependencies:
+ lodash: 4.x
+ dependencies:
+ lodash: 4.17.21
+ tslib: 1.14.1
+ dev: false
+
/lodash.camelcase@4.3.0:
resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==}
dev: true
@@ -9639,13 +10421,32 @@ packages:
resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==}
dev: false
+ /lodash.includes@4.3.0:
+ resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==}
+ dev: true
+
/lodash.isarguments@3.1.0:
resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==}
dev: true
+ /lodash.isboolean@3.0.3:
+ resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==}
+ dev: true
+
+ /lodash.isinteger@4.0.4:
+ resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==}
+ dev: true
+
+ /lodash.isnumber@3.0.3:
+ resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==}
+ dev: true
+
/lodash.isplainobject@4.0.6:
resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
- dev: false
+
+ /lodash.isstring@4.0.1:
+ resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==}
+ dev: true
/lodash.memoize@4.1.2:
resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
@@ -9655,6 +10456,10 @@ packages:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
dev: true
+ /lodash.once@4.1.1:
+ resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==}
+ dev: true
+
/lodash.pick@4.4.0:
resolution: {integrity: sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==}
dev: true
@@ -9686,6 +10491,17 @@ packages:
is-unicode-supported: 0.1.0
dev: false
+ /log-update@5.0.1:
+ resolution: {integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dependencies:
+ ansi-escapes: 5.0.0
+ cli-cursor: 4.0.0
+ slice-ansi: 5.0.0
+ strip-ansi: 7.1.0
+ wrap-ansi: 8.1.0
+ dev: false
+
/loose-envify@1.4.0:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
@@ -9734,7 +10550,6 @@ packages:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
dependencies:
yallist: 3.1.1
- dev: true
/lru-cache@6.0.0:
resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
@@ -9742,6 +10557,11 @@ packages:
dependencies:
yallist: 4.0.0
+ /lru-cache@7.18.3:
+ resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==}
+ engines: {node: '>=12'}
+ dev: false
+
/lz-string@1.5.0:
resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==}
hasBin: true
@@ -9856,7 +10676,6 @@ packages:
/merge-descriptors@1.0.1:
resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==}
- dev: true
/merge-stream@2.0.0:
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
@@ -10022,6 +10841,10 @@ packages:
ufo: 1.3.1
dev: true
+ /module-not-found-error@1.0.1:
+ resolution: {integrity: sha512-pEk4ECWQXV6z2zjhRZUongnLJNUeGQJ3w6OQ5ctGwD+i5o93qjRQUk2Rt6VdNeu3sEP0AB4LcfvdebpxBRVr4g==}
+ dev: false
+
/mri@1.2.0:
resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
engines: {node: '>=4'}
@@ -10403,7 +11226,6 @@ packages:
/node-releases@2.0.13:
resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==}
- dev: true
/noms@0.0.0:
resolution: {integrity: sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow==}
@@ -10903,6 +11725,10 @@ packages:
tslib: 2.6.0
dev: false
+ /pascalcase@1.0.0:
+ resolution: {integrity: sha512-BSExi0rRnCHReJys6NocaK+cfTXNinAegfWBvr0JD3hiaEG7Nuc7r0CIdOJunXrs8gU/sbHQ9dxVAtiVQisjmg==}
+ engines: {node: '>=8'}
+
/path-browserify@1.0.1:
resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
dev: false
@@ -11048,7 +11874,6 @@ packages:
/picocolors@1.0.0:
resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
- dev: true
/picomatch@2.3.1:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
@@ -11071,6 +11896,13 @@ packages:
split2: 4.2.0
dev: true
+ /pino-abstract-transport@1.1.0:
+ resolution: {integrity: sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA==}
+ dependencies:
+ readable-stream: 4.4.0
+ split2: 4.2.0
+ dev: true
+
/pino-std-serializers@6.2.2:
resolution: {integrity: sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==}
dev: true
@@ -11092,6 +11924,23 @@ packages:
thread-stream: 2.3.0
dev: true
+ /pino@8.16.2:
+ resolution: {integrity: sha512-2advCDGVEvkKu9TTVSa/kWW7Z3htI/sBKEZpqiHk6ive0i/7f5b1rsU8jn0aimxqfnSz5bj/nOYkwhBUn5xxvg==}
+ hasBin: true
+ dependencies:
+ atomic-sleep: 1.0.0
+ fast-redact: 3.2.0
+ on-exit-leak-free: 2.1.0
+ pino-abstract-transport: 1.1.0
+ pino-std-serializers: 6.2.2
+ process-warning: 2.2.0
+ quick-format-unescaped: 4.0.4
+ real-require: 0.2.0
+ safe-stable-stringify: 2.4.3
+ sonic-boom: 3.7.0
+ thread-stream: 2.3.0
+ dev: true
+
/pirates@4.0.6:
resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
engines: {node: '>= 6'}
@@ -11117,6 +11966,13 @@ packages:
queue-lit: 1.5.0
dev: true
+ /plist2@1.1.3:
+ resolution: {integrity: sha512-AOpoCuUdedSJYeeU2Be6UAIMZqFWno0fD43NNT64is8k5Fi2HyEylK4UAOZBmafeImnCO1FYc+u8cwwEExVztA==}
+ hasBin: true
+ dependencies:
+ yaml: 1.10.2
+ dev: true
+
/pluralize@8.0.0:
resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==}
engines: {node: '>=4'}
@@ -11689,6 +12545,14 @@ packages:
ipaddr.js: 1.9.1
dev: true
+ /proxyquire@2.1.3:
+ resolution: {integrity: sha512-BQWfCqYM+QINd+yawJz23tbBM40VIGXOdDw3X344KcclI/gtBbdWF6SlQ4nK/bYhF9d27KYug9WzljHC6B9Ysg==}
+ dependencies:
+ fill-keys: 1.0.2
+ module-not-found-error: 1.0.1
+ resolve: 1.22.2
+ dev: false
+
/prr@1.0.1:
resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==}
dev: true
@@ -11987,6 +12851,9 @@ packages:
resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
dev: true
+ /regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
/regexp-to-ast@0.5.0:
resolution: {integrity: sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==}
@@ -12054,7 +12921,6 @@ packages:
/require-directory@2.1.1:
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
engines: {node: '>=0.10.0'}
- dev: true
/require-from-string@2.0.2:
resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
@@ -12107,6 +12973,14 @@ packages:
signal-exit: 3.0.7
dev: false
+ /restore-cursor@4.0.0:
+ resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dependencies:
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ dev: false
+
/ret@0.2.2:
resolution: {integrity: sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==}
engines: {node: '>=4'}
@@ -12123,7 +12997,6 @@ packages:
/rfdc@1.3.0:
resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==}
- dev: true
/rimraf@3.0.2:
resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
@@ -12278,6 +13151,7 @@ packages:
hasBin: true
dependencies:
lru-cache: 6.0.0
+ dev: false
/semver@7.5.4:
resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
@@ -12285,7 +13159,6 @@ packages:
hasBin: true
dependencies:
lru-cache: 6.0.0
- dev: true
/send@0.18.0:
resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==}
@@ -12454,7 +13327,6 @@ packages:
dependencies:
ansi-styles: 6.2.1
is-fullwidth-code-point: 4.0.0
- dev: true
/smartwrap@2.0.2:
resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==}
@@ -12486,6 +13358,12 @@ packages:
atomic-sleep: 1.0.0
dev: true
+ /sonic-boom@3.7.0:
+ resolution: {integrity: sha512-IudtNvSqA/ObjN97tfgNmOKyDOs4dNcg4cUUsHDebqsgb8wGBBwb31LIgShNO8fye0dFI52X1+tFoKKI6Rq1Gg==}
+ dependencies:
+ atomic-sleep: 1.0.0
+ dev: true
+
/source-map-js@1.0.2:
resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
engines: {node: '>=0.10.0'}
@@ -12612,7 +13490,6 @@ packages:
/streamsearch@1.1.0:
resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
engines: {node: '>=10.0.0'}
- dev: true
/streamx@2.15.1:
resolution: {integrity: sha512-fQMzy2O/Q47rgwErk/eGeLu/roaFWV0jVsogDmrszM9uIw8L5OA+t+V93MgYlufNptfjmYR1tOMWhei/Eh7TQA==}
@@ -12621,6 +13498,10 @@ packages:
queue-tick: 1.0.1
dev: true
+ /string-env-interpolation@1.0.1:
+ resolution: {integrity: sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg==}
+ dev: false
+
/string-length@4.0.2:
resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==}
engines: {node: '>=10'}
@@ -12644,7 +13525,6 @@ packages:
eastasianwidth: 0.2.0
emoji-regex: 9.2.2
strip-ansi: 7.1.0
- dev: true
/string.prototype.trim@1.2.7:
resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==}
@@ -12696,7 +13576,6 @@ packages:
engines: {node: '>=12'}
dependencies:
ansi-regex: 6.0.1
- dev: true
/strip-bom@3.0.0:
resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
@@ -12949,6 +13828,13 @@ packages:
resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
dev: true
+ /systeminformation@5.21.20:
+ resolution: {integrity: sha512-AyS1fNc+MDoAJtFknFbbo587H8h6yejJwM+H9rVusnOToIEkiMehMyD5JM7o3j55Cto20MawIZrcgNMgd4BfOQ==}
+ engines: {node: '>=8.0.0'}
+ os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android]
+ hasBin: true
+ dev: false
+
/table-layout@1.0.2:
resolution: {integrity: sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==}
engines: {node: '>=8.0.0'}
@@ -13127,6 +14013,12 @@ packages:
engines: {node: '>=14.0.0'}
dev: true
+ /title-case@3.0.3:
+ resolution: {integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==}
+ dependencies:
+ tslib: 2.6.0
+ dev: true
+
/tmp@0.0.33:
resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
engines: {node: '>=0.6.0'}
@@ -13147,7 +14039,6 @@ packages:
/to-fast-properties@2.0.0:
resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
engines: {node: '>=4'}
- dev: true
/to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
@@ -13254,6 +14145,13 @@ packages:
yargs-parser: 21.1.1
dev: true
+ /ts-morph@15.1.0:
+ resolution: {integrity: sha512-RBsGE2sDzUXFTnv8Ba22QfeuKbgvAGJFuTN7HfmIRUkgT/NaVLfDM/8OFm2NlFkGlWEXdpW5OaFIp1jvqdDuOg==}
+ dependencies:
+ '@ts-morph/common': 0.16.0
+ code-block-writer: 11.0.3
+ dev: false
+
/ts-morph@16.0.0:
resolution: {integrity: sha512-jGNF0GVpFj0orFw55LTsQxVYEUOCWBAbR5Ls7fTYE5pQsbW18ssTb/6UXx/GYAEjS+DQTp8VoTw0vqYMiaaQuw==}
dependencies:
@@ -13310,7 +14208,6 @@ packages:
/tslib@1.14.1:
resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
- dev: true
/tslib@2.4.1:
resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==}
@@ -13430,6 +14327,11 @@ packages:
resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==}
engines: {node: '>=8'}
+ /type-fest@1.4.0:
+ resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==}
+ engines: {node: '>=10'}
+ dev: false
+
/type-fest@3.13.1:
resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==}
engines: {node: '>=14.16'}
@@ -13737,7 +14639,6 @@ packages:
browserslist: 4.22.1
escalade: 3.1.1
picocolors: 1.0.0
- dev: true
/upper-case-first@2.0.2:
resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==}
@@ -13781,6 +14682,9 @@ packages:
resolution: {integrity: sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==}
dev: true
+ /urlpattern-polyfill@9.0.0:
+ resolution: {integrity: sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==}
+
/use-sync-external-store@1.2.0(react@18.2.0):
resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==}
peerDependencies:
@@ -13807,6 +14711,10 @@ packages:
resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==}
hasBin: true
+ /uuid@9.0.1:
+ resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==}
+ hasBin: true
+
/v8-compile-cache-lib@3.0.1:
resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
dev: true
@@ -13826,6 +14734,11 @@ packages:
spdx-correct: 3.2.0
spdx-expression-parse: 3.0.1
+ /value-or-promise@1.0.12:
+ resolution: {integrity: sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==}
+ engines: {node: '>=12'}
+ dev: true
+
/vary@1.1.2:
resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
engines: {node: '>= 0.8'}
@@ -14091,7 +15004,7 @@ packages:
engines: {vscode: ^1.67.0}
dependencies:
minimatch: 3.1.2
- semver: 7.5.3
+ semver: 7.5.4
vscode-languageserver-protocol: 3.17.2
dev: false
@@ -14122,6 +15035,17 @@ packages:
/vscode-languageserver-types@3.17.2:
resolution: {integrity: sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==}
+ /vscode-languageserver-types@3.17.3:
+ resolution: {integrity: sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==}
+ dev: false
+
+ /vscode-languageserver@6.1.1:
+ resolution: {integrity: sha512-DueEpkUAkD5XTR4MLYNr6bQIp/UFR0/IPApgXU3YfCBCB08u2sm9hRCs6DxYZELkk++STPjpcjksR2H8qI3cDQ==}
+ hasBin: true
+ dependencies:
+ vscode-languageserver-protocol: 3.17.2
+ dev: false
+
/vscode-languageserver@7.0.0:
resolution: {integrity: sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==}
hasBin: true
@@ -14371,7 +15295,15 @@ packages:
ansi-styles: 4.3.0
string-width: 4.2.3
strip-ansi: 6.0.1
- dev: true
+
+ /wrap-ansi@8.1.0:
+ resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ ansi-styles: 6.2.1
+ string-width: 5.1.2
+ strip-ansi: 7.1.0
+ dev: false
/wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
@@ -14419,6 +15351,10 @@ packages:
resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
dev: true
+ /xregexp@4.0.0:
+ resolution: {integrity: sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==}
+ dev: true
+
/xtend@4.0.2:
resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
engines: {node: '>=0.4'}
@@ -14436,7 +15372,6 @@ packages:
/y18n@5.0.8:
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
engines: {node: '>=10'}
- dev: true
/yallist@2.1.2:
resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==}
@@ -14444,11 +15379,15 @@ packages:
/yallist@3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
- dev: true
/yallist@4.0.0:
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+ /yaml@1.10.2:
+ resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
+ engines: {node: '>= 6'}
+ dev: true
+
/yaml@2.2.1:
resolution: {integrity: sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==}
engines: {node: '>= 14'}
@@ -14475,7 +15414,6 @@ packages:
/yargs-parser@21.1.1:
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
engines: {node: '>=12'}
- dev: true
/yargs@15.4.1:
resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==}
@@ -14518,7 +15456,6 @@ packages:
string-width: 4.2.3
y18n: 5.0.8
yargs-parser: 21.1.1
- dev: true
/yauzl@2.10.0:
resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==}
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index 928f8bfc9..531fc9ea4 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -1,4 +1,6 @@
packages:
- 'packages/*'
- 'packages/plugins/*'
+ - 'packages/misc/*'
+ - 'packages/ide/*'
- 'tests/*'
diff --git a/tests/integration/tests/regression/issue-864.test.ts b/tests/integration/tests/regression/issue-864.test.ts
index 02aab81d1..eb50bc95f 100644
--- a/tests/integration/tests/regression/issue-864.test.ts
+++ b/tests/integration/tests/regression/issue-864.test.ts
@@ -1,6 +1,6 @@
import { loadSchema } from '@zenstackhq/testtools';
-describe('Regression: issue nested create', () => {
+describe('Regression: issue 864', () => {
it('safe create', async () => {
const { prisma, enhance } = await loadSchema(
`
diff --git a/tests/integration/tests/regression/issue-886.test.ts b/tests/integration/tests/regression/issue-886.test.ts
new file mode 100644
index 000000000..a749db61e
--- /dev/null
+++ b/tests/integration/tests/regression/issue-886.test.ts
@@ -0,0 +1,22 @@
+import { loadSchema } from '@zenstackhq/testtools';
+
+describe('Regression: issue 886', () => {
+ it('regression', async () => {
+ const { zodSchemas } = await loadSchema(
+ `
+ model Model {
+ id Int @id @default(autoincrement())
+ a Int @default(100)
+ b String @default('')
+ c DateTime @default(now())
+ }
+ `
+ );
+
+ const r = zodSchemas.models.ModelSchema.parse({});
+ expect(r.a).toBe(100);
+ expect(r.b).toBe('');
+ expect(r.c).toBeInstanceOf(Date);
+ expect(r.id).toBeUndefined();
+ });
+});