@rawan-temo/prisma-zod-generator 3.3.1-config-coercion.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.editorconfig +9 -0
- package/.env.example +22 -0
- package/.github/CODEOWNERS +7 -0
- package/.github/DISCUSSION_TEMPLATE/general.yml +39 -0
- package/.github/FUNDING.yml +1 -0
- package/.github/ISSUE_TEMPLATE/bug_report.yml +90 -0
- package/.github/ISSUE_TEMPLATE/config.yml +8 -0
- package/.github/ISSUE_TEMPLATE/feature_request.yml +93 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +36 -0
- package/.github/workflows/README.md +97 -0
- package/.github/workflows/ci.yml +270 -0
- package/.github/workflows/docs.yml +98 -0
- package/.github/workflows/semantic-release.yml +209 -0
- package/.gitmodules +4 -0
- package/.husky/commit-msg +44 -0
- package/.husky/post-checkout +2 -0
- package/.husky/post-merge +2 -0
- package/.husky/pre-push +24 -0
- package/.nvmrc +1 -0
- package/.prettierignore +19 -0
- package/.prettierrc +10 -0
- package/.releaserc.json +106 -0
- package/AGENTS.md +119 -0
- package/CHANGELOG.md +1730 -0
- package/CLAUDE.md +121 -0
- package/CONTRIBUTING.md +279 -0
- package/DOCKER.md +84 -0
- package/LICENSE +21 -0
- package/LICENSE-PRO.md +246 -0
- package/README.md +244 -0
- package/SECURITY.md +34 -0
- package/app/generated/browser.ts +39 -0
- package/app/generated/client.ts +61 -0
- package/app/generated/commonInputTypes.ts +457 -0
- package/app/generated/enums.ts +29 -0
- package/app/generated/internal/class.ts +234 -0
- package/app/generated/internal/prismaNamespace.ts +1170 -0
- package/app/generated/internal/prismaNamespaceBrowser.ts +159 -0
- package/app/generated/models/Profile.ts +1395 -0
- package/app/generated/models/Project.ts +1488 -0
- package/app/generated/models/Task.ts +1643 -0
- package/app/generated/models/User.ts +2021 -0
- package/app/generated/models.ts +15 -0
- package/docker-compose.yml +93 -0
- package/docs/assets/diagrams/diagram-01-23b43096d1.svg +1 -0
- package/eslint.config.mjs +99 -0
- package/lib/cli/license-check.d.ts +6 -0
- package/lib/cli/license-check.js +60 -0
- package/lib/cli/license-check.js.map +1 -0
- package/lib/cli/pzg-pro-generator.d.ts +59 -0
- package/lib/cli/pzg-pro-generator.js +431 -0
- package/lib/cli/pzg-pro-generator.js.map +1 -0
- package/lib/cli/pzg-pro.d.ts +18 -0
- package/lib/cli/pzg-pro.js +111 -0
- package/lib/cli/pzg-pro.js.map +1 -0
- package/lib/config/defaults.d.ts +83 -0
- package/lib/config/defaults.js +406 -0
- package/lib/config/defaults.js.map +1 -0
- package/lib/config/generator-options.d.ts +104 -0
- package/lib/config/generator-options.js +353 -0
- package/lib/config/generator-options.js.map +1 -0
- package/lib/config/parser.d.ts +386 -0
- package/lib/config/parser.js +264 -0
- package/lib/config/parser.js.map +1 -0
- package/lib/config/schema.d.ts +94 -0
- package/lib/config/schema.js +963 -0
- package/lib/config/schema.js.map +1 -0
- package/lib/config/typed-json.d.ts +132 -0
- package/lib/config/typed-json.js +121 -0
- package/lib/config/typed-json.js.map +1 -0
- package/lib/config/validator.d.ts +79 -0
- package/lib/config/validator.js +370 -0
- package/lib/config/validator.js.map +1 -0
- package/lib/generator.d.ts +5 -0
- package/lib/generator.js +70 -0
- package/lib/generator.js.map +1 -0
- package/lib/generators/model.d.ts +572 -0
- package/lib/generators/model.js +2577 -0
- package/lib/generators/model.js.map +1 -0
- package/lib/generators/results.d.ts +328 -0
- package/lib/generators/results.js +814 -0
- package/lib/generators/results.js.map +1 -0
- package/lib/generators/typed-field-update-operations.d.ts +89 -0
- package/lib/generators/typed-field-update-operations.js +185 -0
- package/lib/generators/typed-field-update-operations.js.map +1 -0
- package/lib/generators/typed-json-namespace.d.ts +124 -0
- package/lib/generators/typed-json-namespace.js +294 -0
- package/lib/generators/typed-json-namespace.js.map +1 -0
- package/lib/helpers/aggregate-helpers.d.ts +11 -0
- package/lib/helpers/aggregate-helpers.js +82 -0
- package/lib/helpers/aggregate-helpers.js.map +1 -0
- package/lib/helpers/comments-helpers.d.ts +6 -0
- package/lib/helpers/comments-helpers.js +98 -0
- package/lib/helpers/comments-helpers.js.map +1 -0
- package/lib/helpers/decimal-helpers.d.ts +41 -0
- package/lib/helpers/decimal-helpers.js +115 -0
- package/lib/helpers/decimal-helpers.js.map +1 -0
- package/lib/helpers/helpers.d.ts +12 -0
- package/lib/helpers/helpers.js +85 -0
- package/lib/helpers/helpers.js.map +1 -0
- package/lib/helpers/include-helpers.d.ts +6 -0
- package/lib/helpers/include-helpers.js +110 -0
- package/lib/helpers/include-helpers.js.map +1 -0
- package/lib/helpers/index.d.ts +7 -0
- package/lib/helpers/index.js +24 -0
- package/lib/helpers/index.js.map +1 -0
- package/lib/helpers/json-helpers.d.ts +18 -0
- package/lib/helpers/json-helpers.js +50 -0
- package/lib/helpers/json-helpers.js.map +1 -0
- package/lib/helpers/model-helpers.d.ts +41 -0
- package/lib/helpers/model-helpers.js +155 -0
- package/lib/helpers/model-helpers.js.map +1 -0
- package/lib/helpers/modelArgs-helpers.d.ts +2 -0
- package/lib/helpers/modelArgs-helpers.js +63 -0
- package/lib/helpers/modelArgs-helpers.js.map +1 -0
- package/lib/helpers/mongodb-helpers.d.ts +7 -0
- package/lib/helpers/mongodb-helpers.js +91 -0
- package/lib/helpers/mongodb-helpers.js.map +1 -0
- package/lib/helpers/select-helpers.d.ts +2 -0
- package/lib/helpers/select-helpers.js +231 -0
- package/lib/helpers/select-helpers.js.map +1 -0
- package/lib/helpers/whereUniqueInput-helpers.d.ts +2 -0
- package/lib/helpers/whereUniqueInput-helpers.js +44 -0
- package/lib/helpers/whereUniqueInput-helpers.js.map +1 -0
- package/lib/helpers/zod-integration.d.ts +82 -0
- package/lib/helpers/zod-integration.js +262 -0
- package/lib/helpers/zod-integration.js.map +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +12 -0
- package/lib/index.js.map +1 -0
- package/lib/license.d.ts +56 -0
- package/lib/license.js +498 -0
- package/lib/license.js.map +1 -0
- package/lib/parsers/zod-comments.d.ts +230 -0
- package/lib/parsers/zod-comments.js +2723 -0
- package/lib/parsers/zod-comments.js.map +1 -0
- package/lib/prisma-generator.d.ts +20 -0
- package/lib/prisma-generator.js +2661 -0
- package/lib/prisma-generator.js.map +1 -0
- package/lib/transformer.d.ts +678 -0
- package/lib/transformer.js +4436 -0
- package/lib/transformer.js.map +1 -0
- package/lib/typed-json/annotation-parser.d.ts +60 -0
- package/lib/typed-json/annotation-parser.js +200 -0
- package/lib/typed-json/annotation-parser.js.map +1 -0
- package/lib/typed-json/emission.d.ts +115 -0
- package/lib/typed-json/emission.js +231 -0
- package/lib/typed-json/emission.js.map +1 -0
- package/lib/typed-json/index.d.ts +29 -0
- package/lib/typed-json/index.js +46 -0
- package/lib/typed-json/index.js.map +1 -0
- package/lib/typed-json/resolver.d.ts +112 -0
- package/lib/typed-json/resolver.js +238 -0
- package/lib/typed-json/resolver.js.map +1 -0
- package/lib/typed-json/ts-type-to-zod.d.ts +58 -0
- package/lib/typed-json/ts-type-to-zod.js +640 -0
- package/lib/typed-json/ts-type-to-zod.js.map +1 -0
- package/lib/types/safety.d.ts +85 -0
- package/lib/types/safety.js +6 -0
- package/lib/types/safety.js.map +1 -0
- package/lib/types/variants.d.ts +134 -0
- package/lib/types/variants.js +27 -0
- package/lib/types/variants.js.map +1 -0
- package/lib/types.d.ts +13 -0
- package/lib/types.js +3 -0
- package/lib/types.js.map +1 -0
- package/lib/utils/businessSecurity.d.ts +48 -0
- package/lib/utils/businessSecurity.js +129 -0
- package/lib/utils/businessSecurity.js.map +1 -0
- package/lib/utils/circular-dependency-detector.d.ts +42 -0
- package/lib/utils/circular-dependency-detector.js +175 -0
- package/lib/utils/circular-dependency-detector.js.map +1 -0
- package/lib/utils/coercion.d.ts +37 -0
- package/lib/utils/coercion.js +81 -0
- package/lib/utils/coercion.js.map +1 -0
- package/lib/utils/dosProtection.d.ts +24 -0
- package/lib/utils/dosProtection.js +32 -0
- package/lib/utils/dosProtection.js.map +1 -0
- package/lib/utils/errorHandling.d.ts +23 -0
- package/lib/utils/errorHandling.js +79 -0
- package/lib/utils/errorHandling.js.map +1 -0
- package/lib/utils/formatFile.d.ts +19 -0
- package/lib/utils/formatFile.js +80 -0
- package/lib/utils/formatFile.js.map +1 -0
- package/lib/utils/logger.d.ts +8 -0
- package/lib/utils/logger.js +39 -0
- package/lib/utils/logger.js.map +1 -0
- package/lib/utils/naming-resolver.d.ts +38 -0
- package/lib/utils/naming-resolver.js +216 -0
- package/lib/utils/naming-resolver.js.map +1 -0
- package/lib/utils/prismaImport.d.ts +1 -0
- package/lib/utils/prismaImport.js +13 -0
- package/lib/utils/prismaImport.js.map +1 -0
- package/lib/utils/safeOutputManagement.d.ts +20 -0
- package/lib/utils/safeOutputManagement.js +442 -0
- package/lib/utils/safeOutputManagement.js.map +1 -0
- package/lib/utils/safetyConfigResolver.d.ts +17 -0
- package/lib/utils/safetyConfigResolver.js +254 -0
- package/lib/utils/safetyConfigResolver.js.map +1 -0
- package/lib/utils/singleFileAggregator.d.ts +5 -0
- package/lib/utils/singleFileAggregator.js +403 -0
- package/lib/utils/singleFileAggregator.js.map +1 -0
- package/lib/utils/strict-mode-resolver.d.ts +78 -0
- package/lib/utils/strict-mode-resolver.js +230 -0
- package/lib/utils/strict-mode-resolver.js.map +1 -0
- package/lib/utils/writeFileSafely.d.ts +1 -0
- package/lib/utils/writeFileSafely.js +110 -0
- package/lib/utils/writeFileSafely.js.map +1 -0
- package/lib/utils/writeIndexFile.d.ts +2 -0
- package/lib/utils/writeIndexFile.js +113 -0
- package/lib/utils/writeIndexFile.js.map +1 -0
- package/llms.txt +12720 -0
- package/package/package.json +152 -0
- package/package.json +151 -0
- package/package.sh +98 -0
- package/prisma/schema.prisma +160 -0
- package/prisma/utils/multi-provider-test-runner.ts +791 -0
- package/prisma/utils/provider-config.ts +547 -0
- package/prisma/zod-generator.config.json +40 -0
- package/prisma.config.ts +15 -0
- package/recipes/.gitkeep +1 -0
- package/recipes/README.md +44 -0
- package/recipes/api-result-schemas/README.md +12 -0
- package/recipes/api-result-schemas/schema.prisma +6 -0
- package/recipes/api-result-schemas/zod-generator.config.json +10 -0
- package/recipes/circular-dependency-exclusion/README.md +71 -0
- package/recipes/circular-dependency-exclusion/schema.prisma +95 -0
- package/recipes/circular-dependency-exclusion/zod-generator.config.json +28 -0
- package/recipes/crud-only/README.md +24 -0
- package/recipes/crud-only/schema.prisma +31 -0
- package/recipes/crud-only/zod-generator.config.json +11 -0
- package/recipes/granular-per-model/README.md +12 -0
- package/recipes/granular-per-model/schema.prisma +6 -0
- package/recipes/granular-per-model/zod-generator.config.json +17 -0
- package/recipes/hide-fields/README.md +12 -0
- package/recipes/hide-fields/schema.prisma +6 -0
- package/recipes/hide-fields/zod-generator.config.json +19 -0
- package/recipes/input-variant-only/README.md +25 -0
- package/recipes/input-variant-only/schema.prisma +30 -0
- package/recipes/input-variant-only/zod-generator.config.json +16 -0
- package/recipes/json-friendly-datetime/README.md +56 -0
- package/recipes/json-friendly-datetime/schema.prisma +38 -0
- package/recipes/json-friendly-datetime/zod-generator.config.json +18 -0
- package/recipes/minimal-crud/README.md +12 -0
- package/recipes/minimal-crud/schema.prisma +7 -0
- package/recipes/minimal-crud/zod-generator.config.json +9 -0
- package/recipes/models-only/README.md +12 -0
- package/recipes/models-only/schema.prisma +6 -0
- package/recipes/models-only/zod-generator.config.json +11 -0
- package/recipes/optional-field-behavior/README.md +42 -0
- package/recipes/optional-field-behavior/nullable.config.json +7 -0
- package/recipes/optional-field-behavior/optional-strict.config.json +7 -0
- package/recipes/optional-field-behavior/schema.prisma +49 -0
- package/recipes/optional-field-behavior/zod-generator.config.json +7 -0
- package/recipes/pure-models-lean/README.md +84 -0
- package/recipes/pure-models-lean/schema.prisma +22 -0
- package/recipes/pure-models-lean/zod-generator.config.json +6 -0
- package/recipes/result-variant-only/README.md +25 -0
- package/recipes/result-variant-only/schema.prisma +29 -0
- package/recipes/result-variant-only/zod-generator.config.json +16 -0
- package/recipes/single-file/README.md +12 -0
- package/recipes/single-file/schema.prisma +8 -0
- package/recipes/single-file/zod-generator.config.json +12 -0
- package/recipes/trpc-optimized/schema.prisma +9 -0
- package/recipes/trpc-optimized/zod-generator.config.json +14 -0
- package/recipes/zod-imports/README.md +19 -0
- package/recipes/zod-imports/zod-generator.auto.json +3 -0
- package/recipes/zod-imports/zod-generator.v3.json +3 -0
- package/recipes/zod-imports/zod-generator.v4.json +3 -0
- package/scripts/agent-banner.js +37 -0
- package/scripts/clean-test-envs.js +102 -0
- package/scripts/generate-jsonschema.ts +14 -0
- package/scripts/generate-llms-txt.mjs +400 -0
- package/scripts/obfuscate-pro.js +171 -0
- package/scripts/postinstall.js +19 -0
- package/scripts/render-mermaid.ts +174 -0
- package/scripts/tree-shake.js +131 -0
- package/scripts/verify-checksums.js +169 -0
- package/scripts/verify-package-consumer.mjs +198 -0
- package/src/cli/license-check.ts +66 -0
- package/src/cli/pzg-pro-generator.ts +672 -0
- package/src/cli/pzg-pro.ts +119 -0
- package/src/config/defaults.ts +508 -0
- package/src/config/generator-options.ts +522 -0
- package/src/config/parser.ts +721 -0
- package/src/config/schema.ts +1046 -0
- package/src/config/typed-json.ts +219 -0
- package/src/config/validator.ts +469 -0
- package/src/generator.ts +43 -0
- package/src/generators/model.ts +3486 -0
- package/src/generators/results.ts +1045 -0
- package/src/generators/typed-field-update-operations.ts +250 -0
- package/src/generators/typed-json-namespace.ts +413 -0
- package/src/helpers/aggregate-helpers.ts +94 -0
- package/src/helpers/comments-helpers.ts +120 -0
- package/src/helpers/decimal-helpers.ts +136 -0
- package/src/helpers/helpers.ts +116 -0
- package/src/helpers/include-helpers.ts +140 -0
- package/src/helpers/index.ts +7 -0
- package/src/helpers/json-helpers.ts +46 -0
- package/src/helpers/model-helpers.ts +152 -0
- package/src/helpers/modelArgs-helpers.ts +79 -0
- package/src/helpers/mongodb-helpers.ts +108 -0
- package/src/helpers/select-helpers.ts +286 -0
- package/src/helpers/whereUniqueInput-helpers.ts +41 -0
- package/src/helpers/zod-integration.ts +375 -0
- package/src/index.ts +10 -0
- package/src/license.ts +634 -0
- package/src/parsers/zod-comments.ts +3181 -0
- package/src/prisma-generator.ts +3254 -0
- package/src/transformer.ts +5717 -0
- package/src/typed-json/annotation-parser.ts +252 -0
- package/src/typed-json/emission.ts +239 -0
- package/src/typed-json/index.ts +69 -0
- package/src/typed-json/resolver.ts +329 -0
- package/src/typed-json/ts-type-to-zod.ts +715 -0
- package/src/types/prisma-internals-augment.d.ts +17 -0
- package/src/types/safety.ts +102 -0
- package/src/types/variants.ts +193 -0
- package/src/types.ts +13 -0
- package/src/utils/businessSecurity.ts +163 -0
- package/src/utils/circular-dependency-detector.ts +218 -0
- package/src/utils/dosProtection.ts +29 -0
- package/src/utils/errorHandling.ts +85 -0
- package/src/utils/formatFile.ts +77 -0
- package/src/utils/logger.ts +35 -0
- package/src/utils/naming-resolver.ts +294 -0
- package/src/utils/prismaImport.ts +7 -0
- package/src/utils/safeOutputManagement.ts +538 -0
- package/src/utils/safetyConfigResolver.ts +296 -0
- package/src/utils/singleFileAggregator.ts +450 -0
- package/src/utils/strict-mode-resolver.ts +287 -0
- package/src/utils/writeFileSafely.ts +113 -0
- package/src/utils/writeIndexFile.ts +71 -0
- package/test-report.json +8536 -0
- package/tests/README.md +226 -0
- package/tests/__snapshots__/typed-json-corpus-conformance.test.ts.snap +34 -0
- package/tests/__snapshots__/typed-json-pjtg-corpus.test.ts.snap +56 -0
- package/tests/aggregate-groupby.test.ts +345 -0
- package/tests/aggregate-result-shape.test.ts +258 -0
- package/tests/array-fields.test.ts +718 -0
- package/tests/business-security-gate.test.ts +163 -0
- package/tests/circular-dependency-exclusion.test.ts +734 -0
- package/tests/cli-commands.test.ts +134 -0
- package/tests/compat/pjtg/UPSTREAM-LICENSE +21 -0
- package/tests/compat/pjtg/schemas/any.prisma +19 -0
- package/tests/compat/pjtg/schemas/array.prisma +19 -0
- package/tests/compat/pjtg/schemas/cockroach.prisma +35 -0
- package/tests/compat/pjtg/schemas/extensions.prisma +21 -0
- package/tests/compat/pjtg/schemas/literal.prisma +26 -0
- package/tests/compat/pjtg/schemas/mongo.prisma +49 -0
- package/tests/compat/pjtg/schemas/mssql.prisma +25 -0
- package/tests/compat/pjtg/schemas/multiple-clients.prisma +31 -0
- package/tests/compat/pjtg/schemas/mysql.prisma +35 -0
- package/tests/compat/pjtg/schemas/normal-prisma-client.prisma +40 -0
- package/tests/compat/pjtg/schemas/normal.prisma +36 -0
- package/tests/compat/pjtg/schemas/nullable.prisma +29 -0
- package/tests/compat/pjtg/schemas/number.prisma +26 -0
- package/tests/compat/pjtg/schemas/skip.prisma +27 -0
- package/tests/compat/pjtg/schemas/sqlite.prisma +25 -0
- package/tests/compat/pjtg/schemas/string.prisma +29 -0
- package/tests/compat/pjtg/schemas/unknown.prisma +22 -0
- package/tests/compat/pjtg/schemas/use-type.prisma +26 -0
- package/tests/compat/pjtg/types/any.test-d.ts +12 -0
- package/tests/compat/pjtg/types/array.test-d.ts +29 -0
- package/tests/compat/pjtg/types/cockroach.test-d.ts +73 -0
- package/tests/compat/pjtg/types/extensions.test-d.ts +47 -0
- package/tests/compat/pjtg/types/literal.test-d.ts +107 -0
- package/tests/compat/pjtg/types/mongo.test-d.ts +170 -0
- package/tests/compat/pjtg/types/mssql.test-d.ts +22 -0
- package/tests/compat/pjtg/types/multiple-clients.test-d.ts +148 -0
- package/tests/compat/pjtg/types/mysql.test-d.ts +73 -0
- package/tests/compat/pjtg/types/normal-prisma-client.test-d.ts +120 -0
- package/tests/compat/pjtg/types/normal.test-d.ts +295 -0
- package/tests/compat/pjtg/types/nullable.test-d.ts +60 -0
- package/tests/compat/pjtg/types/number.test-d.ts +227 -0
- package/tests/compat/pjtg/types/skip.test-d.ts +27 -0
- package/tests/compat/pjtg/types/sqlite.test-d.ts +22 -0
- package/tests/compat/pjtg/types/string.test-d.ts +143 -0
- package/tests/compat/pjtg/types/unknown.test-d.ts +25 -0
- package/tests/compat/pjtg/types/use-type.test-d.ts +117 -0
- package/tests/compound-unique-key-collision.test.ts +277 -0
- package/tests/comprehensive-schema-coverage.test.ts +403 -0
- package/tests/config-schema-completeness.test.ts +94 -0
- package/tests/config.test.ts +372 -0
- package/tests/count-output-type-select-where.test.ts +112 -0
- package/tests/custom-prisma-client-output.test.ts +170 -0
- package/tests/debug-issue-304.test.ts +44 -0
- package/tests/decimal-input-schemas.test.ts +498 -0
- package/tests/decimal-support.test.ts +582 -0
- package/tests/emit-controls.test.ts +240 -0
- package/tests/emitted-json-helpers.test.ts +132 -0
- package/tests/enum-array-zod-annotations.test.ts +66 -0
- package/tests/environment-cleanup.test.ts +40 -0
- package/tests/error-handling.test.ts +128 -0
- package/tests/field-exclusion.test.ts +1074 -0
- package/tests/filtering.test.ts +919 -0
- package/tests/generated-output-compiles.test.ts +177 -0
- package/tests/generated-schema-runtime.test.ts +185 -0
- package/tests/generated-schema.test.ts +59 -0
- package/tests/generator-options.test.ts +122 -0
- package/tests/groupby-count-literal.test.ts +38 -0
- package/tests/groupby-result-shape.test.ts +149 -0
- package/tests/helpers/global-setup.ts +117 -0
- package/tests/helpers/index.ts +94 -0
- package/tests/helpers/mock-generators.ts +896 -0
- package/tests/helpers/prisma-generate.ts +81 -0
- package/tests/helpers/test-utils.ts +580 -0
- package/tests/helpers/user-post-objects-fixture.ts +90 -0
- package/tests/integration-basic.test.ts +310 -0
- package/tests/integration.test.ts +1234 -0
- package/tests/invalid-zod-annotations.test.ts +78 -0
- package/tests/issue-118-output-directory.test.ts +188 -0
- package/tests/issue-119-regression.test.ts +193 -0
- package/tests/issue-193-enum-imports-custom-variants.test.ts +79 -0
- package/tests/issue-194-zod-custom-use-chained.test.ts +71 -0
- package/tests/issue-196-json-helper-import-path.test.ts +64 -0
- package/tests/issue-225-meta-describe.test.ts +114 -0
- package/tests/issue-227-single-file-imports.test.ts +325 -0
- package/tests/issue-227-zod-annotations.test.ts +366 -0
- package/tests/issue-233-zod-v4-string-formats.test.ts +600 -0
- package/tests/issue-304-custom-naming-imports.test.ts +163 -0
- package/tests/issue-335-single-file-custom-imports.test.ts +104 -0
- package/tests/issue-364-input-json-value-type.test.ts +73 -0
- package/tests/issue-367-decimal-client-safe.test.ts +148 -0
- package/tests/issue-368-variant-datetime-strategy.test.ts +143 -0
- package/tests/issue-370-custom-zod-import-path.test.ts +129 -0
- package/tests/issue-375-shadcn-form-compat.test.ts +104 -0
- package/tests/issue-376-result-relation-schemas.test.ts +308 -0
- package/tests/issue-377-zod-v4-runtime-recursion.test.ts +111 -0
- package/tests/issue-378-unused-prisma-imports.test.ts +199 -0
- package/tests/issue-382-raw-suffix-model.test.ts +121 -0
- package/tests/issue-386-typed-json-fields.test.ts +137 -0
- package/tests/issue-387-select-relation-args.test.ts +182 -0
- package/tests/issue-390-nodenext-import-extensions.test.ts +93 -0
- package/tests/issue-395-result-decimal-mode.test.ts +136 -0
- package/tests/issue-396-global-exclusions-array.test.ts +93 -0
- package/tests/json-config-output-precedence.test.ts +75 -0
- package/tests/json-schema-compatibility.test.ts +972 -0
- package/tests/license-validation.test.ts +110 -0
- package/tests/manifest-path-containment.test.ts +102 -0
- package/tests/minimal-mode.test.ts +812 -0
- package/tests/mongodb-composite-types.test.ts +108 -0
- package/tests/mongodb-schema-coverage.test.ts +403 -0
- package/tests/multi-provider/README.md +240 -0
- package/tests/multi-provider/multi-provider.test.ts +241 -0
- package/tests/multi-provider/provider-test-suite.ts +451 -0
- package/tests/multi-provider/schemas/mongodb/generated/.prisma-zod-generator-manifest.json +266 -0
- package/tests/multi-provider/schemas/mongodb/generated/helpers/json-helpers.ts +28 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/aggregateMongoPost.schema.ts +12 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/aggregateMongoProfile.schema.ts +12 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/aggregateMongoUser.schema.ts +12 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/countMongoPost.schema.ts +10 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/countMongoProfile.schema.ts +10 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/countMongoUser.schema.ts +10 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/createManyMongoPost.schema.ts +7 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/createManyMongoProfile.schema.ts +7 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/createManyMongoUser.schema.ts +7 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/createOneMongoPost.schema.ts +10 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/createOneMongoProfile.schema.ts +10 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/createOneMongoUser.schema.ts +10 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/deleteManyMongoPost.schema.ts +7 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/deleteManyMongoProfile.schema.ts +7 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/deleteManyMongoUser.schema.ts +7 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/deleteOneMongoPost.schema.ts +9 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/deleteOneMongoProfile.schema.ts +9 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/deleteOneMongoUser.schema.ts +9 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/enums/MongoPostScalarFieldEnum.schema.ts +5 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/enums/MongoProfileScalarFieldEnum.schema.ts +5 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/enums/MongoUserScalarFieldEnum.schema.ts +5 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/enums/QueryMode.schema.ts +5 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/enums/SortOrder.schema.ts +5 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/findFirstMongoPost.schema.ts +35 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/findFirstMongoProfile.schema.ts +29 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/findFirstMongoUser.schema.ts +35 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/findFirstOrThrowMongoPost.schema.ts +35 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/findFirstOrThrowMongoProfile.schema.ts +29 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/findFirstOrThrowMongoUser.schema.ts +35 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/findManyMongoPost.schema.ts +35 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/findManyMongoProfile.schema.ts +29 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/findManyMongoUser.schema.ts +35 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/findUniqueMongoPost.schema.ts +9 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/findUniqueMongoProfile.schema.ts +9 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/findUniqueMongoUser.schema.ts +9 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/findUniqueOrThrowMongoPost.schema.ts +9 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/findUniqueOrThrowMongoProfile.schema.ts +9 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/findUniqueOrThrowMongoUser.schema.ts +9 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/groupByMongoPost.schema.ts +13 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/groupByMongoProfile.schema.ts +13 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/groupByMongoUser.schema.ts +13 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/index.ts +104 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/BoolFieldUpdateOperationsInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/BoolFilter.schema.ts +10 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/BoolWithAggregatesFilter.schema.ts +15 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/DateTimeFieldUpdateOperationsInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/DateTimeFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/DateTimeWithAggregatesFilter.schema.ts +21 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostArgs.schema.ts +10 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostCountAggregateInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostCountOrderByAggregateInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostCreateInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostCreateManyAuthorInput.schema.ts +13 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostCreateManyAuthorInputEnvelope.schema.ts +9 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostCreateManyInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostCreateNestedManyWithoutAuthorInput.schema.ts +16 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostCreateOrConnectWithoutAuthorInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostCreateWithoutAuthorInput.schema.ts +13 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostInclude.schema.ts +9 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostListRelationFilter.schema.ts +11 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostMaxAggregateInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostMaxOrderByAggregateInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostMinAggregateInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostMinOrderByAggregateInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostOrderByRelationAggregateInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostOrderByWithAggregationInput.schema.ts +20 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostOrderByWithRelationInput.schema.ts +16 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostScalarWhereInput.schema.ts +20 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostScalarWhereWithAggregatesInput.schema.ts +20 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostSelect.schema.ts +15 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostUncheckedCreateInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostUncheckedCreateNestedManyWithoutAuthorInput.schema.ts +16 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostUncheckedCreateWithoutAuthorInput.schema.ts +13 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostUncheckedUpdateInput.schema.ts +16 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostUncheckedUpdateManyInput.schema.ts +16 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostUncheckedUpdateManyWithoutAuthorInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostUncheckedUpdateManyWithoutAuthorNestedInput.schema.ts +27 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostUncheckedUpdateWithoutAuthorInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostUpdateInput.schema.ts +17 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostUpdateManyMutationInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostUpdateManyWithWhereWithoutAuthorInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostUpdateManyWithoutAuthorNestedInput.schema.ts +27 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostUpdateWithWhereUniqueWithoutAuthorInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostUpdateWithoutAuthorInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostUpsertWithWhereUniqueWithoutAuthorInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostWhereInput.schema.ts +23 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoPostWhereUniqueInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoProfileArgs.schema.ts +10 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoProfileCountAggregateInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoProfileCountOrderByAggregateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoProfileCreateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoProfileCreateManyInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoProfileCreateNestedOneWithoutUserInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoProfileCreateOrConnectWithoutUserInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoProfileCreateWithoutUserInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoProfileInclude.schema.ts +9 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoProfileMaxAggregateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoProfileMaxOrderByAggregateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoProfileMinAggregateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoProfileMinOrderByAggregateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoProfileNullableScalarRelationFilter.schema.ts +10 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoProfileOrderByWithAggregationInput.schema.ts +17 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoProfileOrderByWithRelationInput.schema.ts +13 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoProfileScalarWhereWithAggregatesInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoProfileSelect.schema.ts +12 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoProfileUncheckedCreateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoProfileUncheckedCreateNestedOneWithoutUserInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoProfileUncheckedCreateWithoutUserInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoProfileUncheckedUpdateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoProfileUncheckedUpdateManyInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoProfileUncheckedUpdateOneWithoutUserNestedInput.schema.ts +23 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoProfileUncheckedUpdateWithoutUserInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoProfileUpdateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoProfileUpdateManyMutationInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoProfileUpdateOneWithoutUserNestedInput.schema.ts +23 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoProfileUpdateToOneWithWhereWithoutUserInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoProfileUpdateWithoutUserInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoProfileUpsertWithoutUserInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoProfileWhereInput.schema.ts +18 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoProfileWhereUniqueInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserArgs.schema.ts +10 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserCountAggregateInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserCountOrderByAggregateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserCountOutputTypeArgs.schema.ts +8 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserCountOutputTypeCountPostsArgs.schema.ts +8 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserCountOutputTypeSelect.schema.ts +9 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserCreateInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserCreateManyInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserCreateNestedOneWithoutPostsInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserCreateNestedOneWithoutProfileInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserCreateOrConnectWithoutPostsInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserCreateOrConnectWithoutProfileInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserCreateWithoutPostsInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserCreateWithoutProfileInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserInclude.schema.ts +13 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserMaxAggregateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserMaxOrderByAggregateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserMinAggregateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserMinOrderByAggregateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserOrderByWithAggregationInput.schema.ts +17 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserOrderByWithRelationInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserScalarRelationFilter.schema.ts +10 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserScalarWhereWithAggregatesInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserSelect.schema.ts +16 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserUncheckedCreateInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserUncheckedCreateWithoutPostsInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserUncheckedCreateWithoutProfileInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserUncheckedUpdateInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserUncheckedUpdateManyInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserUncheckedUpdateWithoutPostsInput.schema.ts +13 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserUncheckedUpdateWithoutProfileInput.schema.ts +13 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserUpdateInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserUpdateManyMutationInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserUpdateOneRequiredWithoutPostsNestedInput.schema.ts +20 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserUpdateOneRequiredWithoutProfileNestedInput.schema.ts +20 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserUpdateToOneWithWhereWithoutPostsInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserUpdateToOneWithWhereWithoutProfileInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserUpdateWithoutPostsInput.schema.ts +13 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserUpdateWithoutProfileInput.schema.ts +13 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserUpsertWithoutPostsInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserUpsertWithoutProfileInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserWhereInput.schema.ts +20 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/MongoUserWhereUniqueInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/NestedBoolFilter.schema.ts +10 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/NestedBoolWithAggregatesFilter.schema.ts +14 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/NestedDateTimeFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/NestedDateTimeWithAggregatesFilter.schema.ts +20 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/NestedIntFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/NestedIntNullableFilter.schema.ts +17 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/NestedStringFilter.schema.ts +19 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/NestedStringNullableFilter.schema.ts +20 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/NestedStringNullableWithAggregatesFilter.schema.ts +24 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/NestedStringWithAggregatesFilter.schema.ts +23 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/NullableStringFieldUpdateOperationsInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/StringFieldUpdateOperationsInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/StringFilter.schema.ts +21 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/StringNullableFilter.schema.ts +22 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/StringNullableWithAggregatesFilter.schema.ts +27 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/StringWithAggregatesFilter.schema.ts +26 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/aggregateMongoPostRaw.schema.ts +11 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/aggregateMongoProfileRaw.schema.ts +11 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/aggregateMongoUserRaw.schema.ts +11 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/findMongoPostRaw.schema.ts +11 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/findMongoProfileRaw.schema.ts +11 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/findMongoUserRaw.schema.ts +11 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/objects/index.ts +148 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoPostAggregateResult.schema.ts +26 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoPostCountResult.schema.ts +2 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoPostCreateManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoPostCreateResult.schema.ts +10 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoPostDeleteManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoPostDeleteResult.schema.ts +10 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoPostFindFirstResult.schema.ts +10 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoPostFindManyResult.schema.ts +20 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoPostFindUniqueResult.schema.ts +10 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoPostGroupByResult.schema.ts +34 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoPostUpdateManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoPostUpdateResult.schema.ts +10 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoPostUpsertResult.schema.ts +10 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoProfileAggregateResult.schema.ts +17 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoProfileCountResult.schema.ts +2 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoProfileCreateManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoProfileCreateResult.schema.ts +7 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoProfileDeleteManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoProfileDeleteResult.schema.ts +7 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoProfileFindFirstResult.schema.ts +7 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoProfileFindManyResult.schema.ts +17 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoProfileFindUniqueResult.schema.ts +7 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoProfileGroupByResult.schema.ts +22 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoProfileUpdateManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoProfileUpdateResult.schema.ts +7 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoProfileUpsertResult.schema.ts +7 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoUserAggregateResult.schema.ts +17 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoUserCountResult.schema.ts +2 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoUserCreateManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoUserCreateResult.schema.ts +8 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoUserDeleteManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoUserDeleteResult.schema.ts +8 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoUserFindFirstResult.schema.ts +8 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoUserFindManyResult.schema.ts +18 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoUserFindUniqueResult.schema.ts +8 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoUserGroupByResult.schema.ts +22 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoUserUpdateManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoUserUpdateResult.schema.ts +8 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/MongoUserUpsertResult.schema.ts +8 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/results/index.ts +39 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/updateManyMongoPost.schema.ts +8 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/updateManyMongoProfile.schema.ts +8 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/updateManyMongoUser.schema.ts +8 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/updateOneMongoPost.schema.ts +11 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/updateOneMongoProfile.schema.ts +11 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/updateOneMongoUser.schema.ts +11 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/upsertOneMongoPost.schema.ts +13 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/upsertOneMongoProfile.schema.ts +13 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/upsertOneMongoUser.schema.ts +13 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/variants/index.ts +8 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/variants/input/MongoPost.input.ts +13 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/variants/input/MongoProfile.input.ts +10 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/variants/input/MongoUser.input.ts +11 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/variants/input/index.ts +8 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/variants/pure/MongoPost.pure.ts +13 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/variants/pure/MongoProfile.pure.ts +10 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/variants/pure/MongoUser.pure.ts +11 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/variants/pure/index.ts +8 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/variants/result/MongoPost.result.ts +13 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/variants/result/MongoProfile.result.ts +10 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/variants/result/MongoUser.result.ts +11 -0
- package/tests/multi-provider/schemas/mongodb/generated/schemas/variants/result/index.ts +8 -0
- package/tests/multi-provider/schemas/mongodb/prisma.config.mjs +8 -0
- package/tests/multi-provider/schemas/mongodb/schema.prisma +38 -0
- package/tests/multi-provider/schemas/mysql/generated/.prisma-zod-generator-manifest.json +210 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/aggregateMySQLPost.schema.ts +14 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/aggregateMySQLUser.schema.ts +14 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/countMySQLPost.schema.ts +10 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/countMySQLUser.schema.ts +10 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/createManyMySQLPost.schema.ts +7 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/createManyMySQLUser.schema.ts +7 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/createOneMySQLPost.schema.ts +10 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/createOneMySQLUser.schema.ts +10 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/deleteManyMySQLPost.schema.ts +7 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/deleteManyMySQLUser.schema.ts +7 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/deleteOneMySQLPost.schema.ts +9 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/deleteOneMySQLUser.schema.ts +9 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/enums/MySQLPostOrderByRelevanceFieldEnum.schema.ts +5 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/enums/MySQLPostScalarFieldEnum.schema.ts +5 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/enums/MySQLUserOrderByRelevanceFieldEnum.schema.ts +5 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/enums/MySQLUserScalarFieldEnum.schema.ts +5 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/enums/NullsOrder.schema.ts +5 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/enums/SortOrder.schema.ts +5 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/enums/TransactionIsolationLevel.schema.ts +5 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/findFirstMySQLPost.schema.ts +35 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/findFirstMySQLUser.schema.ts +32 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/findFirstOrThrowMySQLPost.schema.ts +35 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/findFirstOrThrowMySQLUser.schema.ts +32 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/findManyMySQLPost.schema.ts +35 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/findManyMySQLUser.schema.ts +32 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/findUniqueMySQLPost.schema.ts +9 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/findUniqueMySQLUser.schema.ts +9 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/findUniqueOrThrowMySQLPost.schema.ts +9 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/findUniqueOrThrowMySQLUser.schema.ts +9 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/groupByMySQLPost.schema.ts +15 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/groupByMySQLUser.schema.ts +15 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/index.ts +75 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/BoolFieldUpdateOperationsInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/BoolFilter.schema.ts +10 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/BoolWithAggregatesFilter.schema.ts +15 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/DateTimeFieldUpdateOperationsInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/DateTimeFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/DateTimeWithAggregatesFilter.schema.ts +21 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/IntFieldUpdateOperationsInput.schema.ts +13 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/IntFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/IntNullableFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/IntNullableWithAggregatesFilter.schema.ts +23 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/IntWithAggregatesFilter.schema.ts +23 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostArgs.schema.ts +10 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostAvgAggregateInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostAvgOrderByAggregateInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostCountAggregateInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostCountOrderByAggregateInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostCreateInput.schema.ts +13 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostCreateManyAuthorInput.schema.ts +13 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostCreateManyAuthorInputEnvelope.schema.ts +10 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostCreateManyInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostCreateNestedManyWithoutAuthorInput.schema.ts +16 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostCreateOrConnectWithoutAuthorInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostCreateWithoutAuthorInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostInclude.schema.ts +9 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostListRelationFilter.schema.ts +11 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostMaxAggregateInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostMaxOrderByAggregateInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostMinAggregateInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostMinOrderByAggregateInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostOrderByRelationAggregateInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostOrderByRelevanceInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostOrderByWithAggregationInput.schema.ts +25 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostOrderByWithRelationInput.schema.ts +19 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostScalarWhereInput.schema.ts +22 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostScalarWhereWithAggregatesInput.schema.ts +22 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostSelect.schema.ts +15 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostSumAggregateInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostSumOrderByAggregateInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostUncheckedCreateInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostUncheckedCreateNestedManyWithoutAuthorInput.schema.ts +16 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostUncheckedCreateWithoutAuthorInput.schema.ts +13 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostUncheckedUpdateInput.schema.ts +19 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostUncheckedUpdateManyInput.schema.ts +19 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostUncheckedUpdateManyWithoutAuthorInput.schema.ts +17 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostUncheckedUpdateManyWithoutAuthorNestedInput.schema.ts +27 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostUncheckedUpdateWithoutAuthorInput.schema.ts +17 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostUpdateInput.schema.ts +17 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostUpdateManyMutationInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostUpdateManyWithWhereWithoutAuthorInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostUpdateManyWithoutAuthorNestedInput.schema.ts +27 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostUpdateWithWhereUniqueWithoutAuthorInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostUpdateWithoutAuthorInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostUpsertWithWhereUniqueWithoutAuthorInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostWhereInput.schema.ts +25 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLPostWhereUniqueInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserArgs.schema.ts +10 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserAvgAggregateInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserAvgOrderByAggregateInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserCountAggregateInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserCountOrderByAggregateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserCountOutputTypeArgs.schema.ts +8 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserCountOutputTypeCountPostsArgs.schema.ts +8 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserCountOutputTypeSelect.schema.ts +9 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserCreateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserCreateManyInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserCreateNestedOneWithoutPostsInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserCreateOrConnectWithoutPostsInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserCreateWithoutPostsInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserInclude.schema.ts +11 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserMaxAggregateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserMaxOrderByAggregateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserMinAggregateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserMinOrderByAggregateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserNullableScalarRelationFilter.schema.ts +10 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserOrderByRelevanceInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserOrderByWithAggregationInput.schema.ts +22 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserOrderByWithRelationInput.schema.ts +16 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserScalarWhereWithAggregatesInput.schema.ts +16 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserSelect.schema.ts +14 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserSumAggregateInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserSumOrderByAggregateInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserUncheckedCreateInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserUncheckedCreateWithoutPostsInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserUncheckedUpdateInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserUncheckedUpdateManyInput.schema.ts +13 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserUncheckedUpdateWithoutPostsInput.schema.ts +13 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserUpdateInput.schema.ts +13 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserUpdateManyMutationInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserUpdateOneWithoutPostsNestedInput.schema.ts +23 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserUpdateToOneWithWhereWithoutPostsInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserUpdateWithoutPostsInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserUpsertWithoutPostsInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserWhereInput.schema.ts +18 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/MySQLUserWhereUniqueInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/NestedBoolFilter.schema.ts +10 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/NestedBoolWithAggregatesFilter.schema.ts +14 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/NestedDateTimeFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/NestedDateTimeWithAggregatesFilter.schema.ts +20 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/NestedFloatFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/NestedFloatNullableFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/NestedIntFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/NestedIntNullableFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/NestedIntNullableWithAggregatesFilter.schema.ts +22 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/NestedIntWithAggregatesFilter.schema.ts +22 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/NestedStringFilter.schema.ts +20 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/NestedStringNullableFilter.schema.ts +20 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/NestedStringNullableWithAggregatesFilter.schema.ts +24 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/NestedStringWithAggregatesFilter.schema.ts +24 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/NullableIntFieldUpdateOperationsInput.schema.ts +13 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/NullableStringFieldUpdateOperationsInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/SortOrderInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/StringFieldUpdateOperationsInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/StringFilter.schema.ts +20 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/StringNullableFilter.schema.ts +20 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/StringNullableWithAggregatesFilter.schema.ts +25 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/StringWithAggregatesFilter.schema.ts +25 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/objects/index.ts +121 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/results/MySQLPostAggregateResult.schema.ts +34 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/results/MySQLPostCountResult.schema.ts +2 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/results/MySQLPostCreateManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/results/MySQLPostCreateResult.schema.ts +10 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/results/MySQLPostDeleteManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/results/MySQLPostDeleteResult.schema.ts +10 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/results/MySQLPostFindFirstResult.schema.ts +10 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/results/MySQLPostFindManyResult.schema.ts +20 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/results/MySQLPostFindUniqueResult.schema.ts +10 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/results/MySQLPostGroupByResult.schema.ts +42 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/results/MySQLPostUpdateManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/results/MySQLPostUpdateResult.schema.ts +10 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/results/MySQLPostUpsertResult.schema.ts +10 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/results/MySQLUserAggregateResult.schema.ts +23 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/results/MySQLUserCountResult.schema.ts +2 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/results/MySQLUserCreateManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/results/MySQLUserCreateResult.schema.ts +7 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/results/MySQLUserDeleteManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/results/MySQLUserDeleteResult.schema.ts +7 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/results/MySQLUserFindFirstResult.schema.ts +7 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/results/MySQLUserFindManyResult.schema.ts +17 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/results/MySQLUserFindUniqueResult.schema.ts +7 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/results/MySQLUserGroupByResult.schema.ts +28 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/results/MySQLUserUpdateManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/results/MySQLUserUpdateResult.schema.ts +7 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/results/MySQLUserUpsertResult.schema.ts +7 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/results/index.ts +26 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/updateManyMySQLPost.schema.ts +8 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/updateManyMySQLUser.schema.ts +8 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/updateOneMySQLPost.schema.ts +11 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/updateOneMySQLUser.schema.ts +11 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/upsertOneMySQLPost.schema.ts +13 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/upsertOneMySQLUser.schema.ts +13 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/variants/index.ts +8 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/variants/input/MySQLPost.input.ts +13 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/variants/input/MySQLUser.input.ts +10 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/variants/input/index.ts +7 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/variants/pure/MySQLPost.pure.ts +13 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/variants/pure/MySQLUser.pure.ts +10 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/variants/pure/index.ts +7 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/variants/result/MySQLPost.result.ts +13 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/variants/result/MySQLUser.result.ts +10 -0
- package/tests/multi-provider/schemas/mysql/generated/schemas/variants/result/index.ts +7 -0
- package/tests/multi-provider/schemas/mysql/prisma.config.mjs +8 -0
- package/tests/multi-provider/schemas/mysql/schema.prisma +30 -0
- package/tests/multi-provider/schemas/postgresql/generated/.prisma-zod-generator-manifest.json +319 -0
- package/tests/multi-provider/schemas/postgresql/generated/helpers/json-helpers.ts +28 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/aggregatePostgreSQLPost.schema.ts +14 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/aggregatePostgreSQLProfile.schema.ts +14 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/aggregatePostgreSQLUser.schema.ts +14 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/countPostgreSQLPost.schema.ts +10 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/countPostgreSQLProfile.schema.ts +10 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/countPostgreSQLUser.schema.ts +10 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/createManyAndReturnPostgreSQLPost.schema.ts +8 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/createManyAndReturnPostgreSQLProfile.schema.ts +8 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/createManyAndReturnPostgreSQLUser.schema.ts +8 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/createManyPostgreSQLPost.schema.ts +7 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/createManyPostgreSQLProfile.schema.ts +7 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/createManyPostgreSQLUser.schema.ts +7 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/createOnePostgreSQLPost.schema.ts +10 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/createOnePostgreSQLProfile.schema.ts +10 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/createOnePostgreSQLUser.schema.ts +10 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/deleteManyPostgreSQLPost.schema.ts +7 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/deleteManyPostgreSQLProfile.schema.ts +7 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/deleteManyPostgreSQLUser.schema.ts +7 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/deleteOnePostgreSQLPost.schema.ts +9 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/deleteOnePostgreSQLProfile.schema.ts +9 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/deleteOnePostgreSQLUser.schema.ts +9 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/enums/JsonNullValueFilter.schema.ts +5 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/enums/NullableJsonNullValueInput.schema.ts +5 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/enums/NullsOrder.schema.ts +5 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/enums/PostgreSQLPostScalarFieldEnum.schema.ts +5 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/enums/PostgreSQLProfileScalarFieldEnum.schema.ts +5 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/enums/PostgreSQLUserRole.schema.ts +5 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/enums/PostgreSQLUserScalarFieldEnum.schema.ts +5 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/enums/QueryMode.schema.ts +5 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/enums/SortOrder.schema.ts +5 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/enums/TransactionIsolationLevel.schema.ts +5 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/findFirstOrThrowPostgreSQLPost.schema.ts +43 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/findFirstOrThrowPostgreSQLProfile.schema.ts +29 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/findFirstOrThrowPostgreSQLUser.schema.ts +41 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/findFirstPostgreSQLPost.schema.ts +43 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/findFirstPostgreSQLProfile.schema.ts +29 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/findFirstPostgreSQLUser.schema.ts +41 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/findManyPostgreSQLPost.schema.ts +43 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/findManyPostgreSQLProfile.schema.ts +29 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/findManyPostgreSQLUser.schema.ts +41 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/findUniqueOrThrowPostgreSQLPost.schema.ts +9 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/findUniqueOrThrowPostgreSQLProfile.schema.ts +9 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/findUniqueOrThrowPostgreSQLUser.schema.ts +9 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/findUniquePostgreSQLPost.schema.ts +9 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/findUniquePostgreSQLProfile.schema.ts +9 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/findUniquePostgreSQLUser.schema.ts +9 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/groupByPostgreSQLPost.schema.ts +15 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/groupByPostgreSQLProfile.schema.ts +15 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/groupByPostgreSQLUser.schema.ts +15 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/index.ts +115 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/BigIntFieldUpdateOperationsInput.schema.ts +13 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/BigIntFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/BigIntWithAggregatesFilter.schema.ts +24 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/BoolFieldUpdateOperationsInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/BoolFilter.schema.ts +10 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/BoolWithAggregatesFilter.schema.ts +15 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/BytesNullableFilter.schema.ts +12 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/BytesNullableWithAggregatesFilter.schema.ts +17 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/DateTimeFieldUpdateOperationsInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/DateTimeFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/DateTimeWithAggregatesFilter.schema.ts +21 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/EnumPostgreSQLUserRoleNullableFilter.schema.ts +13 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/EnumPostgreSQLUserRoleNullableWithAggregatesFilter.schema.ts +18 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/IntFieldUpdateOperationsInput.schema.ts +13 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/IntFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/IntNullableFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/IntNullableListFilter.schema.ts +13 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/IntNullableWithAggregatesFilter.schema.ts +23 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/IntWithAggregatesFilter.schema.ts +23 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/JsonNullableFilter.schema.ts +24 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/JsonNullableWithAggregatesFilter.schema.ts +29 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/NestedBigIntFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/NestedBigIntWithAggregatesFilter.schema.ts +23 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/NestedBoolFilter.schema.ts +10 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/NestedBoolWithAggregatesFilter.schema.ts +14 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/NestedBytesNullableFilter.schema.ts +12 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/NestedBytesNullableWithAggregatesFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/NestedDateTimeFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/NestedDateTimeWithAggregatesFilter.schema.ts +20 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/NestedEnumPostgreSQLUserRoleNullableFilter.schema.ts +12 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/NestedEnumPostgreSQLUserRoleNullableWithAggregatesFilter.schema.ts +17 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/NestedFloatFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/NestedFloatNullableFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/NestedIntFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/NestedIntNullableFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/NestedIntNullableWithAggregatesFilter.schema.ts +22 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/NestedIntWithAggregatesFilter.schema.ts +22 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/NestedJsonNullableFilter.schema.ts +24 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/NestedStringFilter.schema.ts +19 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/NestedStringNullableFilter.schema.ts +19 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/NestedStringNullableWithAggregatesFilter.schema.ts +23 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/NestedStringWithAggregatesFilter.schema.ts +23 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/NullableBytesFieldUpdateOperationsInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/NullableEnumPostgreSQLUserRoleFieldUpdateOperationsInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/NullableIntFieldUpdateOperationsInput.schema.ts +13 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/NullableStringFieldUpdateOperationsInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostArgs.schema.ts +10 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostAvgAggregateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostAvgOrderByAggregateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostCountAggregateInput.schema.ts +19 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostCountOrderByAggregateInput.schema.ts +18 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostCreateInput.schema.ts +19 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostCreateManyAuthorInput.schema.ts +19 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostCreateManyAuthorInputEnvelope.schema.ts +10 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostCreateManyInput.schema.ts +20 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostCreateNestedManyWithoutAuthorInput.schema.ts +16 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostCreateOrConnectWithoutAuthorInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostCreateWithoutAuthorInput.schema.ts +18 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostInclude.schema.ts +9 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostListRelationFilter.schema.ts +11 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostMaxAggregateInput.schema.ts +17 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostMaxOrderByAggregateInput.schema.ts +17 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostMinAggregateInput.schema.ts +17 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostMinOrderByAggregateInput.schema.ts +17 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostOrderByRelationAggregateInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostOrderByWithAggregationInput.schema.ts +29 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostOrderByWithRelationInput.schema.ts +21 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostScalarWhereInput.schema.ts +29 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostScalarWhereWithAggregatesInput.schema.ts +29 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostSelect.schema.ts +19 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostSumAggregateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostSumOrderByAggregateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostUncheckedCreateInput.schema.ts +19 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostUncheckedCreateNestedManyWithoutAuthorInput.schema.ts +16 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostUncheckedCreateWithoutAuthorInput.schema.ts +19 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostUncheckedUpdateInput.schema.ts +28 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostUncheckedUpdateManyInput.schema.ts +28 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostUncheckedUpdateManyWithoutAuthorInput.schema.ts +26 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostUncheckedUpdateManyWithoutAuthorNestedInput.schema.ts +27 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostUncheckedUpdateWithoutAuthorInput.schema.ts +26 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostUpdateInput.schema.ts +26 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostUpdateManyMutationInput.schema.ts +24 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostUpdateManyWithWhereWithoutAuthorInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostUpdateManyWithoutAuthorNestedInput.schema.ts +27 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostUpdateWithWhereUniqueWithoutAuthorInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostUpdateWithoutAuthorInput.schema.ts +24 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostUpsertWithWhereUniqueWithoutAuthorInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostWhereInput.schema.ts +32 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLPostWhereUniqueInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileArgs.schema.ts +10 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileAvgAggregateInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileAvgOrderByAggregateInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileCountAggregateInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileCountOrderByAggregateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileCreateInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileCreateManyInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileCreateNestedOneWithoutUserInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileCreateOrConnectWithoutUserInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileCreateWithoutUserInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileInclude.schema.ts +9 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileMaxAggregateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileMaxOrderByAggregateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileMinAggregateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileMinOrderByAggregateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileNullableScalarRelationFilter.schema.ts +10 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileOrderByWithAggregationInput.schema.ts +22 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileOrderByWithRelationInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileScalarWhereWithAggregatesInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileSelect.schema.ts +12 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileSumAggregateInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileSumOrderByAggregateInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileUncheckedCreateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileUncheckedCreateNestedOneWithoutUserInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileUncheckedCreateWithoutUserInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileUncheckedUpdateInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileUncheckedUpdateManyInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileUncheckedUpdateOneWithoutUserNestedInput.schema.ts +23 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileUncheckedUpdateWithoutUserInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileUpdateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileUpdateManyMutationInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileUpdateOneWithoutUserNestedInput.schema.ts +23 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileUpdateToOneWithWhereWithoutUserInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileUpdateWithoutUserInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileUpsertWithoutUserInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileWhereInput.schema.ts +18 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLProfileWhereUniqueInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserArgs.schema.ts +10 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserAvgAggregateInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserAvgOrderByAggregateInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserCountAggregateInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserCountOrderByAggregateInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserCountOutputTypeArgs.schema.ts +8 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserCountOutputTypeCountPostsArgs.schema.ts +8 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserCountOutputTypeSelect.schema.ts +9 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserCreateInput.schema.ts +19 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserCreateManyInput.schema.ts +16 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserCreateNestedOneWithoutPostsInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserCreateNestedOneWithoutProfileInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserCreateOrConnectWithoutPostsInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserCreateOrConnectWithoutProfileInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserCreateWithoutPostsInput.schema.ts +17 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserCreateWithoutProfileInput.schema.ts +17 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserCreatescoresInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserCreatetagsInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserInclude.schema.ts +13 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserMaxAggregateInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserMaxOrderByAggregateInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserMinAggregateInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserMinOrderByAggregateInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserNullableScalarRelationFilter.schema.ts +10 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserOrderByWithAggregationInput.schema.ts +25 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserOrderByWithRelationInput.schema.ts +19 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserScalarRelationFilter.schema.ts +10 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserScalarWhereWithAggregatesInput.schema.ts +23 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserSelect.schema.ts +19 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserSumAggregateInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserSumOrderByAggregateInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserUncheckedCreateInput.schema.ts +20 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserUncheckedCreateWithoutPostsInput.schema.ts +18 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserUncheckedCreateWithoutProfileInput.schema.ts +18 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserUncheckedUpdateInput.schema.ts +24 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserUncheckedUpdateManyInput.schema.ts +20 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserUncheckedUpdateWithoutPostsInput.schema.ts +22 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserUncheckedUpdateWithoutProfileInput.schema.ts +22 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserUpdateInput.schema.ts +22 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserUpdateManyMutationInput.schema.ts +18 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserUpdateOneRequiredWithoutProfileNestedInput.schema.ts +20 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserUpdateOneWithoutPostsNestedInput.schema.ts +23 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserUpdateToOneWithWhereWithoutPostsInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserUpdateToOneWithWhereWithoutProfileInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserUpdateWithoutPostsInput.schema.ts +20 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserUpdateWithoutProfileInput.schema.ts +20 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserUpdatescoresInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserUpdatetagsInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserUpsertWithoutPostsInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserUpsertWithoutProfileInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserWhereInput.schema.ts +28 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/PostgreSQLUserWhereUniqueInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/SortOrderInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/StringFieldUpdateOperationsInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/StringFilter.schema.ts +21 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/StringNullableFilter.schema.ts +21 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/StringNullableListFilter.schema.ts +13 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/StringNullableWithAggregatesFilter.schema.ts +26 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/StringWithAggregatesFilter.schema.ts +26 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/objects/index.ts +190 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLPostAggregateResult.schema.ts +46 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLPostCountResult.schema.ts +2 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLPostCreateManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLPostCreateResult.schema.ts +14 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLPostDeleteManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLPostDeleteResult.schema.ts +14 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLPostFindFirstResult.schema.ts +14 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLPostFindManyResult.schema.ts +24 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLPostFindUniqueResult.schema.ts +14 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLPostGroupByResult.schema.ts +58 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLPostUpdateManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLPostUpdateResult.schema.ts +14 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLPostUpsertResult.schema.ts +14 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLProfileAggregateResult.schema.ts +25 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLProfileCountResult.schema.ts +2 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLProfileCreateManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLProfileCreateResult.schema.ts +7 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLProfileDeleteManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLProfileDeleteResult.schema.ts +7 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLProfileFindFirstResult.schema.ts +7 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLProfileFindManyResult.schema.ts +17 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLProfileFindUniqueResult.schema.ts +7 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLProfileGroupByResult.schema.ts +30 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLProfileUpdateManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLProfileUpdateResult.schema.ts +7 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLProfileUpsertResult.schema.ts +7 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLUserAggregateResult.schema.ts +30 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLUserCountResult.schema.ts +2 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLUserCreateManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLUserCreateResult.schema.ts +11 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLUserDeleteManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLUserDeleteResult.schema.ts +11 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLUserFindFirstResult.schema.ts +11 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLUserFindManyResult.schema.ts +21 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLUserFindUniqueResult.schema.ts +11 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLUserGroupByResult.schema.ts +38 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLUserUpdateManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLUserUpdateResult.schema.ts +11 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/PostgreSQLUserUpsertResult.schema.ts +11 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/results/index.ts +39 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/updateManyAndReturnPostgreSQLPost.schema.ts +9 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/updateManyAndReturnPostgreSQLProfile.schema.ts +9 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/updateManyAndReturnPostgreSQLUser.schema.ts +9 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/updateManyPostgreSQLPost.schema.ts +8 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/updateManyPostgreSQLProfile.schema.ts +8 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/updateManyPostgreSQLUser.schema.ts +8 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/updateOnePostgreSQLPost.schema.ts +11 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/updateOnePostgreSQLProfile.schema.ts +11 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/updateOnePostgreSQLUser.schema.ts +11 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/upsertOnePostgreSQLPost.schema.ts +13 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/upsertOnePostgreSQLProfile.schema.ts +13 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/upsertOnePostgreSQLUser.schema.ts +13 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/variants/index.ts +8 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/variants/input/PostgreSQLPost.input.ts +17 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/variants/input/PostgreSQLProfile.input.ts +10 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/variants/input/PostgreSQLUser.input.ts +15 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/variants/input/index.ts +8 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/variants/pure/PostgreSQLPost.pure.ts +17 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/variants/pure/PostgreSQLProfile.pure.ts +10 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/variants/pure/PostgreSQLUser.pure.ts +15 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/variants/pure/index.ts +8 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/variants/result/PostgreSQLPost.result.ts +17 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/variants/result/PostgreSQLProfile.result.ts +10 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/variants/result/PostgreSQLUser.result.ts +15 -0
- package/tests/multi-provider/schemas/postgresql/generated/schemas/variants/result/index.ts +8 -0
- package/tests/multi-provider/schemas/postgresql/prisma.config.mjs +8 -0
- package/tests/multi-provider/schemas/postgresql/schema.prisma +50 -0
- package/tests/multi-provider/schemas/sqlite/generated/.prisma-zod-generator-manifest.json +206 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/aggregateSQLitePost.schema.ts +14 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/aggregateSQLiteUser.schema.ts +14 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/countSQLitePost.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/countSQLiteUser.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/createManySQLitePost.schema.ts +7 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/createManySQLiteUser.schema.ts +7 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/createOneSQLitePost.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/createOneSQLiteUser.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/deleteManySQLitePost.schema.ts +7 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/deleteManySQLiteUser.schema.ts +7 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/deleteOneSQLitePost.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/deleteOneSQLiteUser.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/enums/NullsOrder.schema.ts +5 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/enums/SQLitePostScalarFieldEnum.schema.ts +5 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/enums/SQLiteUserScalarFieldEnum.schema.ts +5 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/enums/SortOrder.schema.ts +5 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/enums/TransactionIsolationLevel.schema.ts +5 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/findFirstOrThrowSQLitePost.schema.ts +35 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/findFirstOrThrowSQLiteUser.schema.ts +32 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/findFirstSQLitePost.schema.ts +35 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/findFirstSQLiteUser.schema.ts +32 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/findManySQLitePost.schema.ts +35 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/findManySQLiteUser.schema.ts +32 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/findUniqueOrThrowSQLitePost.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/findUniqueOrThrowSQLiteUser.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/findUniqueSQLitePost.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/findUniqueSQLiteUser.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/groupBySQLitePost.schema.ts +15 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/groupBySQLiteUser.schema.ts +15 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/index.ts +73 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/BoolFieldUpdateOperationsInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/BoolFilter.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/BoolWithAggregatesFilter.schema.ts +15 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/DateTimeFieldUpdateOperationsInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/DateTimeFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/DateTimeWithAggregatesFilter.schema.ts +21 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/IntFieldUpdateOperationsInput.schema.ts +13 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/IntFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/IntNullableFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/IntNullableWithAggregatesFilter.schema.ts +23 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/IntWithAggregatesFilter.schema.ts +23 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/NestedBoolFilter.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/NestedBoolWithAggregatesFilter.schema.ts +14 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/NestedDateTimeFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/NestedDateTimeWithAggregatesFilter.schema.ts +20 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/NestedFloatFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/NestedFloatNullableFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/NestedIntFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/NestedIntNullableFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/NestedIntNullableWithAggregatesFilter.schema.ts +22 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/NestedIntWithAggregatesFilter.schema.ts +22 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/NestedStringFilter.schema.ts +19 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/NestedStringNullableFilter.schema.ts +19 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/NestedStringNullableWithAggregatesFilter.schema.ts +23 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/NestedStringWithAggregatesFilter.schema.ts +23 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/NullableIntFieldUpdateOperationsInput.schema.ts +13 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/NullableStringFieldUpdateOperationsInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostArgs.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostAvgAggregateInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostAvgOrderByAggregateInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostCountAggregateInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostCountOrderByAggregateInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostCreateInput.schema.ts +13 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostCreateManyAuthorInput.schema.ts +13 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostCreateManyAuthorInputEnvelope.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostCreateManyInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostCreateNestedManyWithoutAuthorInput.schema.ts +16 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostCreateOrConnectWithoutAuthorInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostCreateWithoutAuthorInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostInclude.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostListRelationFilter.schema.ts +11 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostMaxAggregateInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostMaxOrderByAggregateInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostMinAggregateInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostMinOrderByAggregateInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostOrderByRelationAggregateInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostOrderByWithAggregationInput.schema.ts +25 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostOrderByWithRelationInput.schema.ts +17 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostScalarWhereInput.schema.ts +22 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostScalarWhereWithAggregatesInput.schema.ts +22 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostSelect.schema.ts +15 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostSumAggregateInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostSumOrderByAggregateInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostUncheckedCreateInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostUncheckedCreateNestedManyWithoutAuthorInput.schema.ts +16 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostUncheckedCreateWithoutAuthorInput.schema.ts +13 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostUncheckedUpdateInput.schema.ts +19 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostUncheckedUpdateManyInput.schema.ts +19 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostUncheckedUpdateManyWithoutAuthorInput.schema.ts +17 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostUncheckedUpdateManyWithoutAuthorNestedInput.schema.ts +27 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostUncheckedUpdateWithoutAuthorInput.schema.ts +17 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostUpdateInput.schema.ts +17 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostUpdateManyMutationInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostUpdateManyWithWhereWithoutAuthorInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostUpdateManyWithoutAuthorNestedInput.schema.ts +27 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostUpdateWithWhereUniqueWithoutAuthorInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostUpdateWithoutAuthorInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostUpsertWithWhereUniqueWithoutAuthorInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostWhereInput.schema.ts +25 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLitePostWhereUniqueInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserArgs.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserAvgAggregateInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserAvgOrderByAggregateInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserCountAggregateInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserCountOrderByAggregateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserCountOutputTypeArgs.schema.ts +8 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserCountOutputTypeCountPostsArgs.schema.ts +8 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserCountOutputTypeSelect.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserCreateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserCreateManyInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserCreateNestedOneWithoutPostsInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserCreateOrConnectWithoutPostsInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserCreateWithoutPostsInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserInclude.schema.ts +11 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserMaxAggregateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserMaxOrderByAggregateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserMinAggregateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserMinOrderByAggregateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserNullableScalarRelationFilter.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserOrderByWithAggregationInput.schema.ts +22 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserOrderByWithRelationInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserScalarWhereWithAggregatesInput.schema.ts +16 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserSelect.schema.ts +14 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserSumAggregateInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserSumOrderByAggregateInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserUncheckedCreateInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserUncheckedCreateWithoutPostsInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserUncheckedUpdateInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserUncheckedUpdateManyInput.schema.ts +13 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserUncheckedUpdateWithoutPostsInput.schema.ts +13 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserUpdateInput.schema.ts +13 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserUpdateManyMutationInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserUpdateOneWithoutPostsNestedInput.schema.ts +23 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserUpdateToOneWithWhereWithoutPostsInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserUpdateWithoutPostsInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserUpsertWithoutPostsInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserWhereInput.schema.ts +18 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SQLiteUserWhereUniqueInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/SortOrderInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/StringFieldUpdateOperationsInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/StringFilter.schema.ts +19 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/StringNullableFilter.schema.ts +19 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/StringNullableWithAggregatesFilter.schema.ts +24 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/StringWithAggregatesFilter.schema.ts +24 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/objects/index.ts +119 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/results/SQLitePostAggregateResult.schema.ts +34 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/results/SQLitePostCountResult.schema.ts +2 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/results/SQLitePostCreateManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/results/SQLitePostCreateResult.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/results/SQLitePostDeleteManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/results/SQLitePostDeleteResult.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/results/SQLitePostFindFirstResult.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/results/SQLitePostFindManyResult.schema.ts +20 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/results/SQLitePostFindUniqueResult.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/results/SQLitePostGroupByResult.schema.ts +42 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/results/SQLitePostUpdateManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/results/SQLitePostUpdateResult.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/results/SQLitePostUpsertResult.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/results/SQLiteUserAggregateResult.schema.ts +23 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/results/SQLiteUserCountResult.schema.ts +2 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/results/SQLiteUserCreateManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/results/SQLiteUserCreateResult.schema.ts +7 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/results/SQLiteUserDeleteManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/results/SQLiteUserDeleteResult.schema.ts +7 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/results/SQLiteUserFindFirstResult.schema.ts +7 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/results/SQLiteUserFindManyResult.schema.ts +17 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/results/SQLiteUserFindUniqueResult.schema.ts +7 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/results/SQLiteUserGroupByResult.schema.ts +28 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/results/SQLiteUserUpdateManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/results/SQLiteUserUpdateResult.schema.ts +7 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/results/SQLiteUserUpsertResult.schema.ts +7 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/results/index.ts +26 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/updateManySQLitePost.schema.ts +8 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/updateManySQLiteUser.schema.ts +8 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/updateOneSQLitePost.schema.ts +11 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/updateOneSQLiteUser.schema.ts +11 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/upsertOneSQLitePost.schema.ts +13 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/upsertOneSQLiteUser.schema.ts +13 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/variants/index.ts +8 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/variants/input/SQLitePost.input.ts +13 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/variants/input/SQLiteUser.input.ts +10 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/variants/input/index.ts +7 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/variants/pure/SQLitePost.pure.ts +13 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/variants/pure/SQLiteUser.pure.ts +10 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/variants/pure/index.ts +7 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/variants/result/SQLitePost.result.ts +13 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/variants/result/SQLiteUser.result.ts +10 -0
- package/tests/multi-provider/schemas/sqlite/generated/schemas/variants/result/index.ts +7 -0
- package/tests/multi-provider/schemas/sqlite/prisma.config.mjs +8 -0
- package/tests/multi-provider/schemas/sqlite/schema.prisma +30 -0
- package/tests/multi-provider/schemas/sqlserver/generated/.prisma-zod-generator-manifest.json +206 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/aggregateSQLServerPost.schema.ts +14 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/aggregateSQLServerUser.schema.ts +14 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/countSQLServerPost.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/countSQLServerUser.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/createManySQLServerPost.schema.ts +7 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/createManySQLServerUser.schema.ts +7 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/createOneSQLServerPost.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/createOneSQLServerUser.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/deleteManySQLServerPost.schema.ts +7 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/deleteManySQLServerUser.schema.ts +7 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/deleteOneSQLServerPost.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/deleteOneSQLServerUser.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/enums/NullsOrder.schema.ts +5 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/enums/SQLServerPostScalarFieldEnum.schema.ts +5 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/enums/SQLServerUserScalarFieldEnum.schema.ts +5 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/enums/SortOrder.schema.ts +5 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/enums/TransactionIsolationLevel.schema.ts +5 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/findFirstOrThrowSQLServerPost.schema.ts +35 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/findFirstOrThrowSQLServerUser.schema.ts +32 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/findFirstSQLServerPost.schema.ts +35 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/findFirstSQLServerUser.schema.ts +32 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/findManySQLServerPost.schema.ts +35 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/findManySQLServerUser.schema.ts +32 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/findUniqueOrThrowSQLServerPost.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/findUniqueOrThrowSQLServerUser.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/findUniqueSQLServerPost.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/findUniqueSQLServerUser.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/groupBySQLServerPost.schema.ts +15 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/groupBySQLServerUser.schema.ts +15 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/index.ts +73 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/BoolFieldUpdateOperationsInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/BoolFilter.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/BoolWithAggregatesFilter.schema.ts +15 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/DateTimeFieldUpdateOperationsInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/DateTimeFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/DateTimeWithAggregatesFilter.schema.ts +21 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/IntFieldUpdateOperationsInput.schema.ts +13 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/IntFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/IntNullableFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/IntNullableWithAggregatesFilter.schema.ts +23 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/IntWithAggregatesFilter.schema.ts +23 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/NestedBoolFilter.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/NestedBoolWithAggregatesFilter.schema.ts +14 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/NestedDateTimeFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/NestedDateTimeWithAggregatesFilter.schema.ts +20 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/NestedFloatFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/NestedFloatNullableFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/NestedIntFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/NestedIntNullableFilter.schema.ts +16 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/NestedIntNullableWithAggregatesFilter.schema.ts +22 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/NestedIntWithAggregatesFilter.schema.ts +22 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/NestedStringFilter.schema.ts +19 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/NestedStringNullableFilter.schema.ts +19 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/NestedStringNullableWithAggregatesFilter.schema.ts +23 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/NestedStringWithAggregatesFilter.schema.ts +23 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/NullableIntFieldUpdateOperationsInput.schema.ts +13 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/NullableStringFieldUpdateOperationsInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostArgs.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostAvgAggregateInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostAvgOrderByAggregateInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostCountAggregateInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostCountOrderByAggregateInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostCreateInput.schema.ts +13 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostCreateManyAuthorInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostCreateManyAuthorInputEnvelope.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostCreateManyInput.schema.ts +13 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostCreateNestedManyWithoutAuthorInput.schema.ts +16 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostCreateOrConnectWithoutAuthorInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostCreateWithoutAuthorInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostInclude.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostListRelationFilter.schema.ts +11 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostMaxAggregateInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostMaxOrderByAggregateInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostMinAggregateInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostMinOrderByAggregateInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostOrderByRelationAggregateInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostOrderByWithAggregationInput.schema.ts +25 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostOrderByWithRelationInput.schema.ts +17 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostScalarWhereInput.schema.ts +22 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostScalarWhereWithAggregatesInput.schema.ts +22 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostSelect.schema.ts +15 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostSumAggregateInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostSumOrderByAggregateInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostUncheckedCreateInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostUncheckedCreateNestedManyWithoutAuthorInput.schema.ts +16 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostUncheckedCreateWithoutAuthorInput.schema.ts +13 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostUncheckedUpdateInput.schema.ts +19 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostUncheckedUpdateManyInput.schema.ts +19 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostUncheckedUpdateManyWithoutAuthorInput.schema.ts +17 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostUncheckedUpdateManyWithoutAuthorNestedInput.schema.ts +27 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostUncheckedUpdateWithoutAuthorInput.schema.ts +17 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostUpdateInput.schema.ts +17 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostUpdateManyMutationInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostUpdateManyWithWhereWithoutAuthorInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostUpdateManyWithoutAuthorNestedInput.schema.ts +27 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostUpdateWithWhereUniqueWithoutAuthorInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostUpdateWithoutAuthorInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostUpsertWithWhereUniqueWithoutAuthorInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostWhereInput.schema.ts +25 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerPostWhereUniqueInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserArgs.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserAvgAggregateInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserAvgOrderByAggregateInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserCountAggregateInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserCountOrderByAggregateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserCountOutputTypeArgs.schema.ts +8 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserCountOutputTypeCountPostsArgs.schema.ts +8 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserCountOutputTypeSelect.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserCreateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserCreateManyInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserCreateNestedOneWithoutPostsInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserCreateOrConnectWithoutPostsInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserCreateWithoutPostsInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserInclude.schema.ts +11 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserMaxAggregateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserMaxOrderByAggregateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserMinAggregateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserMinOrderByAggregateInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserNullableScalarRelationFilter.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserOrderByWithAggregationInput.schema.ts +22 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserOrderByWithRelationInput.schema.ts +14 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserScalarWhereWithAggregatesInput.schema.ts +16 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserSelect.schema.ts +14 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserSumAggregateInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserSumOrderByAggregateInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserUncheckedCreateInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserUncheckedCreateWithoutPostsInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserUncheckedUpdateInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserUncheckedUpdateManyInput.schema.ts +13 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserUncheckedUpdateWithoutPostsInput.schema.ts +13 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserUpdateInput.schema.ts +13 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserUpdateManyMutationInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserUpdateOneWithoutPostsNestedInput.schema.ts +23 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserUpdateToOneWithWhereWithoutPostsInput.schema.ts +12 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserUpdateWithoutPostsInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserUpsertWithoutPostsInput.schema.ts +15 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserWhereInput.schema.ts +18 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SQLServerUserWhereUniqueInput.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/SortOrderInput.schema.ts +11 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/StringFieldUpdateOperationsInput.schema.ts +9 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/StringFilter.schema.ts +19 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/StringNullableFilter.schema.ts +19 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/StringNullableWithAggregatesFilter.schema.ts +24 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/StringWithAggregatesFilter.schema.ts +24 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/objects/index.ts +119 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/results/SQLServerPostAggregateResult.schema.ts +34 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/results/SQLServerPostCountResult.schema.ts +2 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/results/SQLServerPostCreateManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/results/SQLServerPostCreateResult.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/results/SQLServerPostDeleteManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/results/SQLServerPostDeleteResult.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/results/SQLServerPostFindFirstResult.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/results/SQLServerPostFindManyResult.schema.ts +20 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/results/SQLServerPostFindUniqueResult.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/results/SQLServerPostGroupByResult.schema.ts +42 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/results/SQLServerPostUpdateManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/results/SQLServerPostUpdateResult.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/results/SQLServerPostUpsertResult.schema.ts +10 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/results/SQLServerUserAggregateResult.schema.ts +23 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/results/SQLServerUserCountResult.schema.ts +2 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/results/SQLServerUserCreateManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/results/SQLServerUserCreateResult.schema.ts +7 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/results/SQLServerUserDeleteManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/results/SQLServerUserDeleteResult.schema.ts +7 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/results/SQLServerUserFindFirstResult.schema.ts +7 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/results/SQLServerUserFindManyResult.schema.ts +17 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/results/SQLServerUserFindUniqueResult.schema.ts +7 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/results/SQLServerUserGroupByResult.schema.ts +28 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/results/SQLServerUserUpdateManyResult.schema.ts +4 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/results/SQLServerUserUpdateResult.schema.ts +7 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/results/SQLServerUserUpsertResult.schema.ts +7 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/results/index.ts +26 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/updateManySQLServerPost.schema.ts +8 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/updateManySQLServerUser.schema.ts +8 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/updateOneSQLServerPost.schema.ts +11 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/updateOneSQLServerUser.schema.ts +11 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/upsertOneSQLServerPost.schema.ts +13 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/upsertOneSQLServerUser.schema.ts +13 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/variants/index.ts +8 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/variants/input/SQLServerPost.input.ts +13 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/variants/input/SQLServerUser.input.ts +10 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/variants/input/index.ts +7 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/variants/pure/SQLServerPost.pure.ts +13 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/variants/pure/SQLServerUser.pure.ts +10 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/variants/pure/index.ts +7 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/variants/result/SQLServerPost.result.ts +13 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/variants/result/SQLServerUser.result.ts +10 -0
- package/tests/multi-provider/schemas/sqlserver/generated/schemas/variants/result/index.ts +7 -0
- package/tests/multi-provider/schemas/sqlserver/prisma.config.mjs +8 -0
- package/tests/multi-provider/schemas/sqlserver/schema.prisma +30 -0
- package/tests/naming-customization.test.ts +598 -0
- package/tests/naming-presets-and-emit-controls.test.ts +222 -0
- package/tests/non-ts-artifact-writes.test.ts +87 -0
- package/tests/operation-exclusion.test.ts +587 -0
- package/tests/optional-nullable-behavior.test.ts +140 -0
- package/tests/orderby-zod-annotations.test.ts +201 -0
- package/tests/parse-custom-imports.test.ts +64 -0
- package/tests/prettier-config-resolution.test.ts +74 -0
- package/tests/prisma-client-esm-config.test.ts +879 -0
- package/tests/prisma-client-full-matrix.test.ts +139 -0
- package/tests/prisma-client-path-override.test.ts +136 -0
- package/tests/prisma-client-preview-options.test.ts +135 -0
- package/tests/pro-api-docs-options.test.ts +390 -0
- package/tests/pro-api-docs-path-consistency.test.ts +127 -0
- package/tests/pro-cli-plumbing.test.ts +145 -0
- package/tests/pro-config-parsing.test.ts +146 -0
- package/tests/pro-contract-testing.test.ts +330 -0
- package/tests/pro-data-factories.test.ts +266 -0
- package/tests/pro-dev-bypass.test.ts +79 -0
- package/tests/pro-drift-guard-cli.test.ts +158 -0
- package/tests/pro-drift-guard-report.test.ts +286 -0
- package/tests/pro-emitted-output-compiles.test.ts +290 -0
- package/tests/pro-form-ux-libraries.test.ts +499 -0
- package/tests/pro-license-messaging.test.ts +71 -0
- package/tests/pro-model-filtering.test.ts +132 -0
- package/tests/pro-multi-tenant.test.ts +296 -0
- package/tests/pro-option-validation.test.ts +568 -0
- package/tests/pro-performance-pack.test.ts +709 -0
- package/tests/pro-policies.test.ts +620 -0
- package/tests/pro-postgres-rls.test.ts +262 -0
- package/tests/pro-sdk-publisher.test.ts +570 -0
- package/tests/pro-server-actions.test.ts +355 -0
- package/tests/pro-ui-output-compiles.test.ts +285 -0
- package/tests/pure-models-lean-and-datetime.test.ts +149 -0
- package/tests/pure-models-zod-v4-recursion.test.ts +76 -0
- package/tests/pure-models.test.ts +1877 -0
- package/tests/pzg-skip-env-var.test.ts +89 -0
- package/tests/recipes.test.ts +62 -0
- package/tests/result-nullable-columns.test.ts +180 -0
- package/tests/result-schemas.test.ts +992 -0
- package/tests/safe-output-smart-cleanup.test.ts +105 -0
- package/tests/safety-config-resolver.test.ts +130 -0
- package/tests/schema-test-utils.ts +280 -0
- package/tests/schema-variants.test.ts +1708 -0
- package/tests/select-substring-zod-annotations.test.ts +180 -0
- package/tests/single-file-aggregator.test.ts +128 -0
- package/tests/single-file-mode.test.ts +309 -0
- package/tests/single-file-zod-versions.test.ts +221 -0
- package/tests/snake-case-aggregate-fix.test.ts +486 -0
- package/tests/strict-mode.test.ts +602 -0
- package/tests/transformer-max-constraint.test.ts +25 -0
- package/tests/tsconfig.test.json +26 -0
- package/tests/typecheck-fixtures/README.md +40 -0
- package/tests/typecheck-fixtures/package.json +31 -0
- package/tests/typecheck-fixtures/pnpm-lock.yaml +5114 -0
- package/tests/typed-json-annotation-parser.test.ts +188 -0
- package/tests/typed-json-config.test.ts +252 -0
- package/tests/typed-json-corpus-conformance.test.ts +1871 -0
- package/tests/typed-json-emission.test.ts +801 -0
- package/tests/typed-json-inner-optionality.test.ts +337 -0
- package/tests/typed-json-list-wrappers.test.ts +334 -0
- package/tests/typed-json-namespace.test.ts +633 -0
- package/tests/typed-json-pjtg-corpus.test.ts +530 -0
- package/tests/typed-json-resolver.test.ts +403 -0
- package/tests/typed-json-results.test.ts +564 -0
- package/tests/typed-json-top-level-optionality.test.ts +364 -0
- package/tests/typed-json-ts-type-to-zod.test.ts +469 -0
- package/tests/typed-json-update-operations-collision.test.ts +177 -0
- package/tests/typed-json-update-operations-compile.test.ts +138 -0
- package/tests/typed-json-update-operations.test.ts +314 -0
- package/tests/typed-json-variants.test.ts +248 -0
- package/tests/typescript-inference-lazy-relations.test.ts +142 -0
- package/tests/unchecked-model-name-collision.test.ts +128 -0
- package/tests/upsell-banner.test.ts +203 -0
- package/tests/upstream-mongodb-raw-ops.test.ts +50 -0
- package/tests/variant-input-result-enum.test.ts +62 -0
- package/tests/variant-pure-enum.test.ts +48 -0
- package/tests/write-failures-are-not-swallowed.test.ts +37 -0
- package/tests/zod-coerce-validators.test.ts +103 -0
- package/tests/zod-comments.test.ts +3415 -0
- package/tests/zod-custom-use-more.test.ts +90 -0
- package/tests/zod-custom-use.test.ts +51 -0
- package/tests/zod-imports.test.ts +71 -0
- package/tsconfig.json +25 -0
- package/vitest.config.ts +91 -0
- package/website/README.md +30 -0
- package/website/docs/changelog.md +15 -0
- package/website/docs/config/datetime-strategy.md +281 -0
- package/website/docs/config/dual-exports.md +85 -0
- package/website/docs/config/emission-controls.md +19 -0
- package/website/docs/config/file-layout.md +28 -0
- package/website/docs/config/filtering.md +66 -0
- package/website/docs/config/json-schema-compatibility.md +450 -0
- package/website/docs/config/modes.md +48 -0
- package/website/docs/config/naming.md +177 -0
- package/website/docs/config/optional-fields.md +193 -0
- package/website/docs/config/precedence.md +68 -0
- package/website/docs/config/schema-json.md +68 -0
- package/website/docs/config/strict-mode.md +503 -0
- package/website/docs/config/variants.md +98 -0
- package/website/docs/contributing.md +63 -0
- package/website/docs/features/api-docs.md +187 -0
- package/website/docs/features/contracts.md +152 -0
- package/website/docs/features/factories.md +161 -0
- package/website/docs/features/forms.md +241 -0
- package/website/docs/features/guard.md +86 -0
- package/website/docs/features/multi-tenant.md +158 -0
- package/website/docs/features/overview.md +292 -0
- package/website/docs/features/performance.md +176 -0
- package/website/docs/features/policies.md +287 -0
- package/website/docs/features/postgres-rls.md +198 -0
- package/website/docs/features/sdk.md +211 -0
- package/website/docs/features/server-actions.md +164 -0
- package/website/docs/integrations/overview.md +30 -0
- package/website/docs/integrations/prisma-json-types-generator.md +408 -0
- package/website/docs/intro/concepts.md +61 -0
- package/website/docs/intro/quick-start.md +142 -0
- package/website/docs/intro/what-is.md +97 -0
- package/website/docs/performance.md +49 -0
- package/website/docs/pipeline/mongodb.md +195 -0
- package/website/docs/pipeline/objects-crud.md +35 -0
- package/website/docs/pipeline/pure-models.md +30 -0
- package/website/docs/pipeline/result-schemas.md +199 -0
- package/website/docs/pipeline/select-include.md +192 -0
- package/website/docs/pipeline/single-file.md +25 -0
- package/website/docs/pipeline/special-types.md +129 -0
- package/website/docs/pipeline/zod-comments.md +926 -0
- package/website/docs/recipes/circular-dependency-exclusion.md +151 -0
- package/website/docs/recipes/crud-only.md +31 -0
- package/website/docs/recipes/flexible-api-validation.md +244 -0
- package/website/docs/recipes/granular-per-model.md +37 -0
- package/website/docs/recipes/hide-fields.md +58 -0
- package/website/docs/recipes/input-only.md +59 -0
- package/website/docs/recipes/json-friendly-datetime.md +94 -0
- package/website/docs/recipes/minimal-crud.md +61 -0
- package/website/docs/recipes/models-only.md +38 -0
- package/website/docs/recipes/nodenext-imports.md +62 -0
- package/website/docs/recipes/optional-field-control.md +175 -0
- package/website/docs/recipes/pure-models-lean.md +48 -0
- package/website/docs/recipes/result-only.md +53 -0
- package/website/docs/recipes/safety-custom-configuration.md +351 -0
- package/website/docs/recipes/safety-disable-completely.md +113 -0
- package/website/docs/recipes/safety-force-dangerous-path.md +247 -0
- package/website/docs/recipes/safety-project-migration.md +341 -0
- package/website/docs/recipes/single-file.md +38 -0
- package/website/docs/recipes/trpc-optimized.md +45 -0
- package/website/docs/recipes/zod-import-targets.md +71 -0
- package/website/docs/reference/bytes-json.md +57 -0
- package/website/docs/reference/config-options.md +259 -0
- package/website/docs/reference/default-values.md +176 -0
- package/website/docs/reference/faq.md +98 -0
- package/website/docs/reference/logging-debug.md +59 -0
- package/website/docs/reference/naming-preset-map.md +15 -0
- package/website/docs/reference/pro-cli.md +517 -0
- package/website/docs/reference/safety-system.md +571 -0
- package/website/docs/reference/troubleshooting.md +470 -0
- package/website/docs/reference/where-unique-input.md +57 -0
- package/website/docs/upgrade/pro-migration.md +701 -0
- package/website/docs/upgrade/v3-breaking-changes.md +117 -0
- package/website/docs/upgrade-guide.md +44 -0
- package/website/docs/usage-patterns.md +43 -0
- package/website/docusaurus.config.ts +132 -0
- package/website/package.json +34 -0
- package/website/pnpm-lock.yaml +11207 -0
- package/website/scripts/build-metrics.js +109 -0
- package/website/sidebars.ts +130 -0
- package/website/src/components/FreeTierBanner.module.css +130 -0
- package/website/src/components/FreeTierBanner.tsx +40 -0
- package/website/src/components/Icons.tsx +31 -0
- package/website/src/components/PricingCard.module.css +141 -0
- package/website/src/components/PricingCard.tsx +68 -0
- package/website/src/css/custom.css +940 -0
- package/website/src/data/metrics.json +6 -0
- package/website/src/pages/index.tsx +719 -0
- package/website/src/pages/pricing.module.css +377 -0
- package/website/src/pages/pricing.tsx +604 -0
- package/website/static/img/brand/apple-icon-180.png +0 -0
- package/website/static/img/brand/favicon-16x16.png +0 -0
- package/website/static/img/brand/favicon-24x24.png +0 -0
- package/website/static/img/brand/favicon-32x32.png +0 -0
- package/website/static/img/brand/favicon.ico +0 -0
- package/website/static/img/brand/icon-1024.png +0 -0
- package/website/static/img/brand/icon-128.png +0 -0
- package/website/static/img/brand/icon-16.png +0 -0
- package/website/static/img/brand/icon-180.png +0 -0
- package/website/static/img/brand/icon-192.png +0 -0
- package/website/static/img/brand/icon-24.png +0 -0
- package/website/static/img/brand/icon-256.png +0 -0
- package/website/static/img/brand/icon-32.png +0 -0
- package/website/static/img/brand/icon-48.png +0 -0
- package/website/static/img/brand/icon-512.png +0 -0
- package/website/static/img/brand/icon-64.png +0 -0
- package/website/static/img/brand/icon-96.png +0 -0
- package/website/static/img/brand/icon-manifest.json +25 -0
- package/website/static/img/brand/icon-master.png +0 -0
- package/website/static/img/brand/pwa-icon-192.png +0 -0
- package/website/static/img/brand/pwa-icon-512.png +0 -0
- package/website/static/img/brand/pzg-icon-512.png +0 -0
- package/website/static/img/tiers.png +0 -0
|
@@ -0,0 +1,3181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod Comment Parser
|
|
3
|
+
*
|
|
4
|
+
* Parses @zod validation annotations from Prisma schema field comments
|
|
5
|
+
* to generate enhanced Zod validation schemas.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { DMMF } from '@prisma/generator-helper';
|
|
9
|
+
import { logger } from '../utils/logger';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Interface for field comment context including metadata for error reporting
|
|
13
|
+
*/
|
|
14
|
+
export interface FieldCommentContext {
|
|
15
|
+
modelName: string;
|
|
16
|
+
fieldName: string;
|
|
17
|
+
fieldType: string;
|
|
18
|
+
comment: string;
|
|
19
|
+
isOptional: boolean;
|
|
20
|
+
isList: boolean;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Interface for extracted field comments with processing status
|
|
25
|
+
*/
|
|
26
|
+
export interface ExtractedFieldComment {
|
|
27
|
+
context: FieldCommentContext;
|
|
28
|
+
normalizedComment: string;
|
|
29
|
+
hasZodAnnotations: boolean;
|
|
30
|
+
extractionErrors: string[];
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Interface for custom import statements
|
|
35
|
+
*/
|
|
36
|
+
export interface CustomImport {
|
|
37
|
+
importStatement: string;
|
|
38
|
+
source: string; // The module being imported from
|
|
39
|
+
importedItems: string[]; // Names/aliases being imported
|
|
40
|
+
isDefault: boolean;
|
|
41
|
+
isNamespace: boolean;
|
|
42
|
+
isTypeOnly: boolean; // Whether this is a type-only import (import type)
|
|
43
|
+
originalStatement: string; // Original import string for debugging
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Interface for custom imports parsing result
|
|
48
|
+
*/
|
|
49
|
+
export interface CustomImportsParseResult {
|
|
50
|
+
imports: CustomImport[];
|
|
51
|
+
customSchema?: string;
|
|
52
|
+
parseErrors: string[];
|
|
53
|
+
isValid: boolean;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Interface for model comment context including metadata for error reporting
|
|
58
|
+
*/
|
|
59
|
+
export interface ModelCommentContext {
|
|
60
|
+
modelName: string;
|
|
61
|
+
comment: string;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Extract comments from Prisma DMMF model fields
|
|
66
|
+
*
|
|
67
|
+
* This function processes Prisma model field definitions and extracts
|
|
68
|
+
* comment data with proper normalization and context for downstream parsing.
|
|
69
|
+
*
|
|
70
|
+
* @param models - Array of Prisma DMMF models
|
|
71
|
+
* @returns Array of extracted field comments with context
|
|
72
|
+
*/
|
|
73
|
+
export function extractFieldComments(models: DMMF.Model[]): ExtractedFieldComment[] {
|
|
74
|
+
const extractedComments: ExtractedFieldComment[] = [];
|
|
75
|
+
|
|
76
|
+
for (const model of models) {
|
|
77
|
+
for (const field of model.fields) {
|
|
78
|
+
const comment = field.documentation || '';
|
|
79
|
+
|
|
80
|
+
// Skip fields without comments
|
|
81
|
+
if (!comment.trim()) {
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
try {
|
|
86
|
+
const context: FieldCommentContext = {
|
|
87
|
+
modelName: model.name,
|
|
88
|
+
fieldName: field.name,
|
|
89
|
+
fieldType: field.type,
|
|
90
|
+
comment: comment,
|
|
91
|
+
isOptional: !field.isRequired,
|
|
92
|
+
isList: field.isList,
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
const extractedComment = extractFieldComment(context);
|
|
96
|
+
extractedComments.push(extractedComment);
|
|
97
|
+
} catch (error) {
|
|
98
|
+
// Add error handling for individual field processing failures
|
|
99
|
+
extractedComments.push({
|
|
100
|
+
context: {
|
|
101
|
+
modelName: model.name,
|
|
102
|
+
fieldName: field.name,
|
|
103
|
+
fieldType: field.type,
|
|
104
|
+
comment: comment,
|
|
105
|
+
isOptional: !field.isRequired,
|
|
106
|
+
isList: field.isList,
|
|
107
|
+
},
|
|
108
|
+
normalizedComment: '',
|
|
109
|
+
hasZodAnnotations: false,
|
|
110
|
+
extractionErrors: [
|
|
111
|
+
`Failed to extract comment: ${error instanceof Error ? error.message : String(error)}`,
|
|
112
|
+
],
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
return extractedComments;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Extract and normalize a single field comment
|
|
123
|
+
*
|
|
124
|
+
* @param context - Field context with comment and metadata
|
|
125
|
+
* @returns Extracted comment with processing information
|
|
126
|
+
*/
|
|
127
|
+
export function extractFieldComment(context: FieldCommentContext): ExtractedFieldComment {
|
|
128
|
+
const errors: string[] = [];
|
|
129
|
+
|
|
130
|
+
try {
|
|
131
|
+
// Normalize whitespace and handle multi-line comments
|
|
132
|
+
const normalizedComment = normalizeComment(context.comment);
|
|
133
|
+
|
|
134
|
+
// Check if comment contains @zod annotations
|
|
135
|
+
const hasZodAnnotations = detectZodAnnotations(normalizedComment);
|
|
136
|
+
|
|
137
|
+
// Validate comment structure
|
|
138
|
+
const structureErrors = validateCommentStructure(normalizedComment, context);
|
|
139
|
+
errors.push(...structureErrors);
|
|
140
|
+
|
|
141
|
+
return {
|
|
142
|
+
context,
|
|
143
|
+
normalizedComment,
|
|
144
|
+
hasZodAnnotations,
|
|
145
|
+
extractionErrors: errors,
|
|
146
|
+
};
|
|
147
|
+
} catch (error) {
|
|
148
|
+
errors.push(
|
|
149
|
+
`Comment extraction failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
150
|
+
);
|
|
151
|
+
|
|
152
|
+
return {
|
|
153
|
+
context,
|
|
154
|
+
normalizedComment: '',
|
|
155
|
+
hasZodAnnotations: false,
|
|
156
|
+
extractionErrors: errors,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Normalize comment content for consistent processing
|
|
163
|
+
*
|
|
164
|
+
* Handles multi-line comments, whitespace normalization, and ensures
|
|
165
|
+
* consistent format for downstream parsing.
|
|
166
|
+
*
|
|
167
|
+
* @param comment - Raw comment from Prisma field
|
|
168
|
+
* @returns Normalized comment string
|
|
169
|
+
*/
|
|
170
|
+
export function normalizeComment(comment: string): string {
|
|
171
|
+
if (!comment || typeof comment !== 'string') {
|
|
172
|
+
return '';
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// Handle multi-line comments by preserving @zod annotations on separate lines
|
|
176
|
+
const lines = comment.split(/\r?\n/).map((line) => line.trim());
|
|
177
|
+
|
|
178
|
+
// Remove empty lines and normalize whitespace
|
|
179
|
+
const normalizedLines = lines
|
|
180
|
+
.filter((line) => line.length > 0)
|
|
181
|
+
.map((line) => line.replace(/\s+/g, ' ').trim());
|
|
182
|
+
|
|
183
|
+
return normalizedLines.join(' ');
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Detect if comment contains @zod validation annotations
|
|
188
|
+
*
|
|
189
|
+
* Performs a quick check to determine if the comment contains
|
|
190
|
+
* any @zod annotations before more expensive parsing operations.
|
|
191
|
+
*
|
|
192
|
+
* @param comment - Normalized comment string
|
|
193
|
+
* @returns True if @zod annotations are detected
|
|
194
|
+
*/
|
|
195
|
+
export function detectZodAnnotations(comment: string): boolean {
|
|
196
|
+
if (!comment) {
|
|
197
|
+
return false;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// Look for @zod patterns (case-insensitive) - allow optional whitespace between @zod and .
|
|
201
|
+
const zodPattern = /@zod\s*\./i;
|
|
202
|
+
return zodPattern.test(comment);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Validate comment structure and detect potential issues
|
|
207
|
+
*
|
|
208
|
+
* Performs structural validation to catch common comment formatting
|
|
209
|
+
* issues that could cause parsing problems later.
|
|
210
|
+
*
|
|
211
|
+
* @param comment - Normalized comment string
|
|
212
|
+
* @param context - Field context for error reporting
|
|
213
|
+
* @returns Array of validation errors
|
|
214
|
+
*/
|
|
215
|
+
export function validateCommentStructure(comment: string, context: FieldCommentContext): string[] {
|
|
216
|
+
const errors: string[] = [];
|
|
217
|
+
|
|
218
|
+
if (!comment) {
|
|
219
|
+
return errors; // Empty comments are valid
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// Check for unmatched parentheses in @zod annotations
|
|
223
|
+
if (detectZodAnnotations(comment)) {
|
|
224
|
+
const parenthesesErrors = validateParentheses(comment, context);
|
|
225
|
+
errors.push(...parenthesesErrors);
|
|
226
|
+
|
|
227
|
+
// Check for malformed @zod syntax
|
|
228
|
+
const syntaxErrors = validateZodSyntax(comment, context);
|
|
229
|
+
errors.push(...syntaxErrors);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
return errors;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Validate parentheses matching in comments
|
|
237
|
+
*
|
|
238
|
+
* @param comment - Comment to validate
|
|
239
|
+
* @param context - Field context for error reporting
|
|
240
|
+
* @returns Array of parentheses validation errors
|
|
241
|
+
*/
|
|
242
|
+
function validateParentheses(comment: string, context: FieldCommentContext): string[] {
|
|
243
|
+
const errors: string[] = [];
|
|
244
|
+
let parenCount = 0;
|
|
245
|
+
|
|
246
|
+
for (let i = 0; i < comment.length; i++) {
|
|
247
|
+
const char = comment[i];
|
|
248
|
+
if (char === '(') {
|
|
249
|
+
parenCount++;
|
|
250
|
+
} else if (char === ')') {
|
|
251
|
+
parenCount--;
|
|
252
|
+
if (parenCount < 0) {
|
|
253
|
+
errors.push(
|
|
254
|
+
`${context.modelName}.${context.fieldName}: Unmatched closing parenthesis at position ${i}`,
|
|
255
|
+
);
|
|
256
|
+
break;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
if (parenCount > 0) {
|
|
262
|
+
errors.push(
|
|
263
|
+
`${context.modelName}.${context.fieldName}: ${parenCount} unmatched opening parenthesis(es)`,
|
|
264
|
+
);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
return errors;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Extract @zod annotations from comment with proper nested parentheses handling
|
|
272
|
+
*
|
|
273
|
+
* @param comment - Comment string
|
|
274
|
+
* @returns Array of annotation strings
|
|
275
|
+
*/
|
|
276
|
+
function extractZodAnnotations(comment: string): string[] {
|
|
277
|
+
const annotations: string[] = [];
|
|
278
|
+
const zodRegex = /@zod\s*\./gi;
|
|
279
|
+
let match;
|
|
280
|
+
|
|
281
|
+
while ((match = zodRegex.exec(comment)) !== null) {
|
|
282
|
+
const startIndex = match.index!;
|
|
283
|
+
// Find the method name
|
|
284
|
+
let currentIndex = startIndex + match[0].length;
|
|
285
|
+
|
|
286
|
+
// Skip whitespace
|
|
287
|
+
while (currentIndex < comment.length && /\s/.test(comment[currentIndex])) {
|
|
288
|
+
currentIndex++;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
// Extract method name
|
|
292
|
+
const methodStart = currentIndex;
|
|
293
|
+
while (currentIndex < comment.length && /[a-zA-Z0-9_]/.test(comment[currentIndex])) {
|
|
294
|
+
currentIndex++;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
if (currentIndex === methodStart) continue; // No method name found
|
|
298
|
+
|
|
299
|
+
// Skip whitespace
|
|
300
|
+
while (currentIndex < comment.length && /\s/.test(comment[currentIndex])) {
|
|
301
|
+
currentIndex++;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
// Optional generic args after method name (e.g., <"UserId">)
|
|
305
|
+
if (currentIndex < comment.length && comment[currentIndex] === '<') {
|
|
306
|
+
const genericRes = parseGenericArgs(comment, currentIndex);
|
|
307
|
+
if (genericRes) {
|
|
308
|
+
currentIndex = genericRes.nextIndex;
|
|
309
|
+
// Skip whitespace after generics
|
|
310
|
+
while (currentIndex < comment.length && /\s/.test(comment[currentIndex])) {
|
|
311
|
+
currentIndex++;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
// Check if there are parameters
|
|
317
|
+
if (currentIndex < comment.length && comment[currentIndex] === '(') {
|
|
318
|
+
// Find the matching closing parenthesis with proper nesting
|
|
319
|
+
let depth = 0;
|
|
320
|
+
let inString = false;
|
|
321
|
+
let stringChar = '';
|
|
322
|
+
|
|
323
|
+
while (currentIndex < comment.length) {
|
|
324
|
+
const char = comment[currentIndex];
|
|
325
|
+
|
|
326
|
+
if (!inString && (char === '"' || char === "'")) {
|
|
327
|
+
inString = true;
|
|
328
|
+
stringChar = char;
|
|
329
|
+
} else if (inString && char === stringChar && comment[currentIndex - 1] !== '\\') {
|
|
330
|
+
inString = false;
|
|
331
|
+
stringChar = '';
|
|
332
|
+
} else if (!inString) {
|
|
333
|
+
if (char === '(') {
|
|
334
|
+
depth++;
|
|
335
|
+
} else if (char === ')') {
|
|
336
|
+
depth--;
|
|
337
|
+
if (depth === 0) {
|
|
338
|
+
currentIndex++; // Include the closing parenthesis
|
|
339
|
+
break;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
currentIndex++;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
if (depth === 0) {
|
|
347
|
+
annotations.push(comment.substring(startIndex, currentIndex));
|
|
348
|
+
}
|
|
349
|
+
} else {
|
|
350
|
+
// No parameters, just method name (and possible generics)
|
|
351
|
+
annotations.push(comment.substring(startIndex, currentIndex));
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
return annotations;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
/**
|
|
359
|
+
* Parse @zod annotations with proper nested parentheses support
|
|
360
|
+
*
|
|
361
|
+
* @param comment - Comment string
|
|
362
|
+
* @param context - Field context
|
|
363
|
+
* @returns Parse result with annotations and errors
|
|
364
|
+
*/
|
|
365
|
+
function parseZodAnnotationsWithNestedParentheses(
|
|
366
|
+
comment: string,
|
|
367
|
+
context: FieldCommentContext,
|
|
368
|
+
): ZodAnnotationParseResult {
|
|
369
|
+
const result: ZodAnnotationParseResult = {
|
|
370
|
+
annotations: [],
|
|
371
|
+
parseErrors: [],
|
|
372
|
+
isValid: true,
|
|
373
|
+
};
|
|
374
|
+
|
|
375
|
+
const annotationStrings = extractZodAnnotations(comment);
|
|
376
|
+
|
|
377
|
+
for (const annotationStr of annotationStrings) {
|
|
378
|
+
try {
|
|
379
|
+
const methodMatch = annotationStr.match(/@zod\s*\.([a-zA-Z_][a-zA-Z0-9_]*)/i);
|
|
380
|
+
if (!methodMatch) continue;
|
|
381
|
+
|
|
382
|
+
const methodName = methodMatch[1];
|
|
383
|
+
// Scan after method token for optional generics before params
|
|
384
|
+
const methodToken = methodMatch[0];
|
|
385
|
+
const methodTokenIndex = annotationStr.indexOf(methodToken);
|
|
386
|
+
let scanIndex = methodTokenIndex + methodToken.length;
|
|
387
|
+
while (scanIndex < annotationStr.length && /\s/.test(annotationStr[scanIndex])) scanIndex++;
|
|
388
|
+
let genericArgs = '';
|
|
389
|
+
if (annotationStr[scanIndex] === '<') {
|
|
390
|
+
const genericRes = parseGenericArgs(annotationStr, scanIndex);
|
|
391
|
+
if (genericRes) {
|
|
392
|
+
genericArgs = genericRes.segment;
|
|
393
|
+
scanIndex = genericRes.nextIndex;
|
|
394
|
+
while (scanIndex < annotationStr.length && /\s/.test(annotationStr[scanIndex]))
|
|
395
|
+
scanIndex++;
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
const paramStart = annotationStr.indexOf('(', scanIndex);
|
|
400
|
+
|
|
401
|
+
if (paramStart !== -1) {
|
|
402
|
+
const paramEnd = annotationStr.lastIndexOf(')');
|
|
403
|
+
if (paramEnd !== -1) {
|
|
404
|
+
const parameterString = annotationStr.substring(paramStart, paramEnd + 1);
|
|
405
|
+
const fakeMatch = [
|
|
406
|
+
annotationStr,
|
|
407
|
+
methodName,
|
|
408
|
+
parameterString,
|
|
409
|
+
] as unknown as RegExpExecArray;
|
|
410
|
+
fakeMatch.index = 0;
|
|
411
|
+
|
|
412
|
+
const annotation = parseZodAnnotation(fakeMatch, context, genericArgs);
|
|
413
|
+
result.annotations.push(annotation);
|
|
414
|
+
}
|
|
415
|
+
} else {
|
|
416
|
+
const fakeMatch = [annotationStr, methodName, ''] as unknown as RegExpExecArray;
|
|
417
|
+
fakeMatch.index = 0;
|
|
418
|
+
|
|
419
|
+
const annotation = parseZodAnnotation(fakeMatch, context, genericArgs);
|
|
420
|
+
result.annotations.push(annotation);
|
|
421
|
+
}
|
|
422
|
+
} catch (error) {
|
|
423
|
+
const errorMessage = `Failed to parse @zod annotation "${annotationStr}": ${
|
|
424
|
+
error instanceof Error ? error.message : String(error)
|
|
425
|
+
}`;
|
|
426
|
+
result.parseErrors.push(errorMessage);
|
|
427
|
+
result.isValid = false;
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
return result;
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
/**
|
|
435
|
+
* Validate basic @zod annotation syntax
|
|
436
|
+
*
|
|
437
|
+
* @param comment - Comment to validate
|
|
438
|
+
* @param context - Field context for error reporting
|
|
439
|
+
* @returns Array of syntax validation errors
|
|
440
|
+
*/
|
|
441
|
+
function validateZodSyntax(comment: string, context: FieldCommentContext): string[] {
|
|
442
|
+
const errors: string[] = [];
|
|
443
|
+
|
|
444
|
+
// Look for @zod annotations and validate basic structure - allow optional whitespace
|
|
445
|
+
const zodMatches = extractZodAnnotations(comment);
|
|
446
|
+
|
|
447
|
+
if (zodMatches) {
|
|
448
|
+
zodMatches.forEach((match, _index) => {
|
|
449
|
+
// Check for common syntax issues
|
|
450
|
+
if (match.includes('..')) {
|
|
451
|
+
errors.push(
|
|
452
|
+
`${context.modelName}.${context.fieldName}: Invalid double dots in @zod annotation: ${match}`,
|
|
453
|
+
);
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
if (match.includes('@zod.()')) {
|
|
457
|
+
errors.push(
|
|
458
|
+
`${context.modelName}.${context.fieldName}: Empty method name in @zod annotation: ${match}`,
|
|
459
|
+
);
|
|
460
|
+
}
|
|
461
|
+
});
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
return errors;
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
/**
|
|
468
|
+
* Interface for parsed @zod annotation
|
|
469
|
+
*/
|
|
470
|
+
export interface ParsedZodAnnotation {
|
|
471
|
+
method: string;
|
|
472
|
+
parameters: unknown[];
|
|
473
|
+
rawMatch: string;
|
|
474
|
+
position: number;
|
|
475
|
+
/** Optional generic type arguments captured after the method name, e.g., `<"UserId">` */
|
|
476
|
+
genericArgs?: string;
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
/**
|
|
480
|
+
* Interface for @zod annotation parsing result
|
|
481
|
+
*/
|
|
482
|
+
export interface ZodAnnotationParseResult {
|
|
483
|
+
annotations: ParsedZodAnnotation[];
|
|
484
|
+
parseErrors: string[];
|
|
485
|
+
isValid: boolean;
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
/**
|
|
489
|
+
* Parse @zod annotations from normalized comment text
|
|
490
|
+
*
|
|
491
|
+
* Extracts and parses all @zod annotations including method names,
|
|
492
|
+
* parameters, and handles complex chaining scenarios.
|
|
493
|
+
*
|
|
494
|
+
* @param comment - Normalized comment string
|
|
495
|
+
* @param context - Field context for error reporting
|
|
496
|
+
* @returns Parse result with annotations and errors
|
|
497
|
+
*/
|
|
498
|
+
export function parseZodAnnotations(
|
|
499
|
+
comment: string,
|
|
500
|
+
context: FieldCommentContext,
|
|
501
|
+
): ZodAnnotationParseResult {
|
|
502
|
+
const result: ZodAnnotationParseResult = {
|
|
503
|
+
annotations: [],
|
|
504
|
+
parseErrors: [],
|
|
505
|
+
isValid: true,
|
|
506
|
+
};
|
|
507
|
+
|
|
508
|
+
if (!comment || !detectZodAnnotations(comment)) {
|
|
509
|
+
return result;
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
try {
|
|
513
|
+
// Check if we have multiple method calls (chained) by counting dots after @zod
|
|
514
|
+
const methodCount = (comment.match(/\.([a-zA-Z_][a-zA-Z0-9_]*)/g) || []).length;
|
|
515
|
+
const hasChainedAnnotations = methodCount > 1;
|
|
516
|
+
|
|
517
|
+
if (hasChainedAnnotations) {
|
|
518
|
+
// Handle chained @zod annotations (e.g., @zod.min(1).max(100))
|
|
519
|
+
const chainedAnnotations = parseChainedZodAnnotations(comment, context);
|
|
520
|
+
result.annotations.push(...chainedAnnotations.annotations);
|
|
521
|
+
result.parseErrors.push(...chainedAnnotations.parseErrors);
|
|
522
|
+
|
|
523
|
+
if (chainedAnnotations.parseErrors.length > 0) {
|
|
524
|
+
result.isValid = false;
|
|
525
|
+
}
|
|
526
|
+
} else {
|
|
527
|
+
// Handle simple @zod annotations with proper nested parentheses support
|
|
528
|
+
const annotations = parseZodAnnotationsWithNestedParentheses(comment, context);
|
|
529
|
+
result.annotations.push(...annotations.annotations);
|
|
530
|
+
result.parseErrors.push(...annotations.parseErrors);
|
|
531
|
+
if (annotations.parseErrors.length > 0) {
|
|
532
|
+
result.isValid = false;
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
// Drop bare base-type tokens (e.g. the leading `.string()` in
|
|
537
|
+
// `@zod.string().min(1)`): they are no-ops in the emitted chain, and
|
|
538
|
+
// passing them through validation rejects the whole comment (issue #374).
|
|
539
|
+
// 'date' is intentionally absent: @zod.date() is a registered format method.
|
|
540
|
+
const BASE_TYPE_TOKENS = new Set(['string', 'number', 'boolean', 'bigint']);
|
|
541
|
+
result.annotations = result.annotations.filter(
|
|
542
|
+
(a) => !(BASE_TYPE_TOKENS.has(a.method) && (!a.parameters || a.parameters.length === 0)),
|
|
543
|
+
);
|
|
544
|
+
|
|
545
|
+
// Validate and filter the parsed annotations
|
|
546
|
+
if (result.annotations.length > 0) {
|
|
547
|
+
const validAnnotations: ParsedZodAnnotation[] = [];
|
|
548
|
+
const validationErrors: string[] = [];
|
|
549
|
+
|
|
550
|
+
for (const annotation of result.annotations) {
|
|
551
|
+
try {
|
|
552
|
+
validateZodMethod(annotation, context);
|
|
553
|
+
validAnnotations.push(annotation);
|
|
554
|
+
} catch (error) {
|
|
555
|
+
validationErrors.push(
|
|
556
|
+
`${context.modelName}.${context.fieldName}: ${error instanceof Error ? error.message : String(error)}`,
|
|
557
|
+
);
|
|
558
|
+
// Continue processing other annotations instead of failing completely
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
// Only fail if no annotations are valid
|
|
563
|
+
if (validAnnotations.length === 0 && validationErrors.length > 0) {
|
|
564
|
+
result.parseErrors.push(...validationErrors);
|
|
565
|
+
result.isValid = false;
|
|
566
|
+
} else {
|
|
567
|
+
result.annotations = validAnnotations;
|
|
568
|
+
// Log validation errors but don't fail if we have some valid annotations
|
|
569
|
+
if (validationErrors.length > 0) {
|
|
570
|
+
logger.warn('Some @zod annotations were invalid and filtered out:', validationErrors);
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
} catch (error) {
|
|
575
|
+
result.parseErrors.push(
|
|
576
|
+
`General parsing error: ${error instanceof Error ? error.message : String(error)}`,
|
|
577
|
+
);
|
|
578
|
+
result.isValid = false;
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
return result;
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
/**
|
|
585
|
+
* Parse a single @zod annotation match
|
|
586
|
+
*
|
|
587
|
+
* @param match - Regex match result
|
|
588
|
+
* @param context - Field context for error reporting
|
|
589
|
+
* @returns Parsed annotation object
|
|
590
|
+
*/
|
|
591
|
+
function parseZodAnnotation(
|
|
592
|
+
match: RegExpExecArray,
|
|
593
|
+
context: FieldCommentContext,
|
|
594
|
+
genericArgs = '',
|
|
595
|
+
): ParsedZodAnnotation {
|
|
596
|
+
const [fullMatch, methodName, parameterString] = match;
|
|
597
|
+
const position = match.index || 0;
|
|
598
|
+
|
|
599
|
+
// Parse parameters if present
|
|
600
|
+
let parameters: unknown[] = [];
|
|
601
|
+
if (parameterString && parameterString.trim() !== '()') {
|
|
602
|
+
try {
|
|
603
|
+
parameters = parseZodParameters(parameterString, context, methodName);
|
|
604
|
+
} catch (error) {
|
|
605
|
+
throw new Error(
|
|
606
|
+
`Invalid parameters in ${methodName}: ${error instanceof Error ? error.message : String(error)}`,
|
|
607
|
+
);
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
return {
|
|
612
|
+
method: methodName,
|
|
613
|
+
parameters,
|
|
614
|
+
rawMatch: fullMatch,
|
|
615
|
+
position,
|
|
616
|
+
genericArgs: genericArgs || undefined,
|
|
617
|
+
};
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
/**
|
|
621
|
+
* Parse chained @zod annotations like @zod.min(1).max(100)
|
|
622
|
+
*
|
|
623
|
+
* @param comment - Comment string
|
|
624
|
+
* @param context - Field context
|
|
625
|
+
* @returns Parse result for chained annotations
|
|
626
|
+
*/
|
|
627
|
+
function parseChainedZodAnnotations(
|
|
628
|
+
comment: string,
|
|
629
|
+
context: FieldCommentContext,
|
|
630
|
+
): ZodAnnotationParseResult {
|
|
631
|
+
const result: ZodAnnotationParseResult = {
|
|
632
|
+
annotations: [],
|
|
633
|
+
parseErrors: [],
|
|
634
|
+
isValid: true,
|
|
635
|
+
};
|
|
636
|
+
|
|
637
|
+
try {
|
|
638
|
+
// Find the @zod annotation start
|
|
639
|
+
const zodIndex = comment.indexOf('@zod');
|
|
640
|
+
if (zodIndex === -1) {
|
|
641
|
+
return result;
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
// Extract the entire @zod chain starting from @zod
|
|
645
|
+
const zodChain = comment.slice(zodIndex);
|
|
646
|
+
|
|
647
|
+
// Use the improved parseMethodChain function to handle the entire chain
|
|
648
|
+
const chainedMethods = parseMethodChain(zodChain, context);
|
|
649
|
+
result.annotations.push(...chainedMethods);
|
|
650
|
+
} catch (error) {
|
|
651
|
+
result.parseErrors.push(
|
|
652
|
+
`Failed to parse chained annotation: ${error instanceof Error ? error.message : String(error)}`,
|
|
653
|
+
);
|
|
654
|
+
result.isValid = false;
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
return result;
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
/**
|
|
661
|
+
* Parse a method chain like .min(1).max(100)
|
|
662
|
+
*
|
|
663
|
+
* @param chainString - The chained method string
|
|
664
|
+
* @param context - Field context
|
|
665
|
+
* @returns Array of parsed annotations
|
|
666
|
+
*/
|
|
667
|
+
function parseMethodChain(
|
|
668
|
+
chainString: string,
|
|
669
|
+
context: FieldCommentContext,
|
|
670
|
+
): ParsedZodAnnotation[] {
|
|
671
|
+
const annotations: ParsedZodAnnotation[] = [];
|
|
672
|
+
|
|
673
|
+
// Parse method calls manually to handle nested parentheses properly
|
|
674
|
+
let i = 0;
|
|
675
|
+
while (i < chainString.length) {
|
|
676
|
+
// Find next method call starting with a dot
|
|
677
|
+
const dotIndex = chainString.indexOf('.', i);
|
|
678
|
+
if (dotIndex === -1) break;
|
|
679
|
+
|
|
680
|
+
// Extract method name
|
|
681
|
+
const methodStart = dotIndex + 1;
|
|
682
|
+
let methodEnd = methodStart;
|
|
683
|
+
while (methodEnd < chainString.length && /[a-zA-Z0-9_]/.test(chainString[methodEnd])) {
|
|
684
|
+
methodEnd++;
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
if (methodEnd === methodStart) {
|
|
688
|
+
i = dotIndex + 1;
|
|
689
|
+
continue;
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
const methodName = chainString.slice(methodStart, methodEnd);
|
|
693
|
+
|
|
694
|
+
// Skip whitespace
|
|
695
|
+
while (methodEnd < chainString.length && /\s/.test(chainString[methodEnd])) {
|
|
696
|
+
methodEnd++;
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
// Optional generic arguments after method name
|
|
700
|
+
let iAfterName = methodEnd;
|
|
701
|
+
while (iAfterName < chainString.length && /\s/.test(chainString[iAfterName])) {
|
|
702
|
+
iAfterName++;
|
|
703
|
+
}
|
|
704
|
+
let genericArgs = '';
|
|
705
|
+
if (iAfterName < chainString.length && chainString[iAfterName] === '<') {
|
|
706
|
+
const genRes = parseGenericArgs(chainString, iAfterName);
|
|
707
|
+
if (genRes) {
|
|
708
|
+
genericArgs = genRes.segment;
|
|
709
|
+
iAfterName = genRes.nextIndex;
|
|
710
|
+
while (iAfterName < chainString.length && /\s/.test(chainString[iAfterName])) {
|
|
711
|
+
iAfterName++;
|
|
712
|
+
}
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
// Check for parameter list
|
|
717
|
+
let parameterString = '';
|
|
718
|
+
if (iAfterName < chainString.length && chainString[iAfterName] === '(') {
|
|
719
|
+
// Find matching closing parenthesis, handling nested parentheses
|
|
720
|
+
let parenCount = 1;
|
|
721
|
+
const paramStart = iAfterName + 1;
|
|
722
|
+
let paramEnd = paramStart;
|
|
723
|
+
|
|
724
|
+
while (paramEnd < chainString.length && parenCount > 0) {
|
|
725
|
+
const char = chainString[paramEnd];
|
|
726
|
+
if (char === '(') {
|
|
727
|
+
parenCount++;
|
|
728
|
+
} else if (char === ')') {
|
|
729
|
+
parenCount--;
|
|
730
|
+
}
|
|
731
|
+
paramEnd++;
|
|
732
|
+
}
|
|
733
|
+
|
|
734
|
+
if (parenCount === 0) {
|
|
735
|
+
parameterString = chainString.slice(iAfterName, paramEnd);
|
|
736
|
+
i = paramEnd;
|
|
737
|
+
} else {
|
|
738
|
+
throw new Error(`Unmatched parentheses in method ${methodName}`);
|
|
739
|
+
}
|
|
740
|
+
} else {
|
|
741
|
+
// No parameters
|
|
742
|
+
parameterString = '()';
|
|
743
|
+
i = iAfterName;
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
// Parse parameters
|
|
747
|
+
let parameters: unknown[] = [];
|
|
748
|
+
if (parameterString && parameterString.trim() !== '()') {
|
|
749
|
+
try {
|
|
750
|
+
parameters = parseZodParameters(parameterString, context, methodName);
|
|
751
|
+
} catch (error) {
|
|
752
|
+
throw new Error(
|
|
753
|
+
`Invalid parameters in chained method ${methodName}: ${error instanceof Error ? error.message : String(error)}`,
|
|
754
|
+
);
|
|
755
|
+
}
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
annotations.push({
|
|
759
|
+
method: methodName,
|
|
760
|
+
parameters,
|
|
761
|
+
rawMatch: `.${methodName}${genericArgs}${parameterString}`,
|
|
762
|
+
position: dotIndex,
|
|
763
|
+
genericArgs: genericArgs || undefined,
|
|
764
|
+
});
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
return annotations;
|
|
768
|
+
}
|
|
769
|
+
|
|
770
|
+
/**
|
|
771
|
+
* Parse parameter string from @zod annotation
|
|
772
|
+
*
|
|
773
|
+
* Handles various parameter types: numbers, strings, booleans, arrays, objects
|
|
774
|
+
*
|
|
775
|
+
* @param parameterString - Parameter string including parentheses
|
|
776
|
+
* @param context - Field context for error reporting
|
|
777
|
+
* @param methodName - Method name for error context
|
|
778
|
+
* @returns Array of parsed parameters
|
|
779
|
+
*/
|
|
780
|
+
function parseZodParameters(
|
|
781
|
+
parameterString: string,
|
|
782
|
+
context: FieldCommentContext,
|
|
783
|
+
methodName: string,
|
|
784
|
+
): unknown[] {
|
|
785
|
+
// Remove outer parentheses
|
|
786
|
+
const innerParams = parameterString.slice(1, -1).trim();
|
|
787
|
+
|
|
788
|
+
if (!innerParams) {
|
|
789
|
+
return [];
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
try {
|
|
793
|
+
// Handle simple cases first
|
|
794
|
+
if (isSimpleParameter(innerParams)) {
|
|
795
|
+
return [parseSimpleParameter(innerParams)];
|
|
796
|
+
}
|
|
797
|
+
|
|
798
|
+
// Handle multiple parameters - split by commas not inside quotes or nested structures
|
|
799
|
+
const paramParts = splitParameters(innerParams);
|
|
800
|
+
return paramParts.map((part) => parseSimpleParameter(part.trim()));
|
|
801
|
+
} catch (error) {
|
|
802
|
+
throw new Error(
|
|
803
|
+
`Failed to parse parameters "${innerParams}" for ${methodName}: ${error instanceof Error ? error.message : String(error)}`,
|
|
804
|
+
);
|
|
805
|
+
}
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
/**
|
|
809
|
+
* Check if parameter string is a simple single parameter
|
|
810
|
+
*
|
|
811
|
+
* @param paramString - Parameter string
|
|
812
|
+
* @returns True if simple parameter
|
|
813
|
+
*/
|
|
814
|
+
function isSimpleParameter(paramString: string): boolean {
|
|
815
|
+
const trimmed = paramString.trim();
|
|
816
|
+
|
|
817
|
+
// Check if it contains unquoted commas (indicating multiple parameters)
|
|
818
|
+
let inQuotes = false;
|
|
819
|
+
let quoteChar = '';
|
|
820
|
+
let bracketDepth = 0;
|
|
821
|
+
|
|
822
|
+
for (let i = 0; i < trimmed.length; i++) {
|
|
823
|
+
const char = trimmed[i];
|
|
824
|
+
|
|
825
|
+
if (!inQuotes && (char === '"' || char === "'")) {
|
|
826
|
+
inQuotes = true;
|
|
827
|
+
quoteChar = char;
|
|
828
|
+
} else if (inQuotes && char === quoteChar && trimmed[i - 1] !== '\\') {
|
|
829
|
+
inQuotes = false;
|
|
830
|
+
quoteChar = '';
|
|
831
|
+
} else if (!inQuotes) {
|
|
832
|
+
if (char === '[' || char === '{' || char === '(') {
|
|
833
|
+
bracketDepth++;
|
|
834
|
+
} else if (char === ']' || char === '}' || char === ')') {
|
|
835
|
+
bracketDepth--;
|
|
836
|
+
} else if (char === ',' && bracketDepth === 0) {
|
|
837
|
+
return false; // Multiple parameters
|
|
838
|
+
}
|
|
839
|
+
}
|
|
840
|
+
}
|
|
841
|
+
|
|
842
|
+
return true;
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
/**
|
|
846
|
+
* Parse generic arguments starting at the given index (which must point to '<').
|
|
847
|
+
* Handles nested angle brackets and quoted strings.
|
|
848
|
+
* Returns the captured segment and the index immediately after it.
|
|
849
|
+
*/
|
|
850
|
+
function parseGenericArgs(
|
|
851
|
+
source: string,
|
|
852
|
+
startIndex: number,
|
|
853
|
+
): { segment: string; nextIndex: number } | null {
|
|
854
|
+
if (source[startIndex] !== '<') return null;
|
|
855
|
+
let i = startIndex;
|
|
856
|
+
let depth = 0;
|
|
857
|
+
let inString = false;
|
|
858
|
+
let stringChar = '';
|
|
859
|
+
while (i < source.length) {
|
|
860
|
+
const char = source[i];
|
|
861
|
+
if (!inString && (char === '"' || char === "'")) {
|
|
862
|
+
inString = true;
|
|
863
|
+
stringChar = char;
|
|
864
|
+
} else if (inString && char === stringChar && source[i - 1] !== '\\') {
|
|
865
|
+
inString = false;
|
|
866
|
+
stringChar = '';
|
|
867
|
+
} else if (!inString) {
|
|
868
|
+
if (char === '<') {
|
|
869
|
+
depth++;
|
|
870
|
+
} else if (char === '>') {
|
|
871
|
+
depth--;
|
|
872
|
+
if (depth === 0) {
|
|
873
|
+
const segment = source.slice(startIndex, i + 1);
|
|
874
|
+
return { segment, nextIndex: i + 1 };
|
|
875
|
+
}
|
|
876
|
+
}
|
|
877
|
+
}
|
|
878
|
+
i++;
|
|
879
|
+
}
|
|
880
|
+
return null;
|
|
881
|
+
}
|
|
882
|
+
|
|
883
|
+
/**
|
|
884
|
+
* Split parameter string by commas, respecting quotes and nested structures
|
|
885
|
+
*
|
|
886
|
+
* @param paramString - Parameter string
|
|
887
|
+
* @returns Array of parameter parts
|
|
888
|
+
*/
|
|
889
|
+
function splitParameters(paramString: string): string[] {
|
|
890
|
+
const parts: string[] = [];
|
|
891
|
+
let current = '';
|
|
892
|
+
let inQuotes = false;
|
|
893
|
+
let quoteChar = '';
|
|
894
|
+
let bracketDepth = 0;
|
|
895
|
+
|
|
896
|
+
for (let i = 0; i < paramString.length; i++) {
|
|
897
|
+
const char = paramString[i];
|
|
898
|
+
|
|
899
|
+
if (!inQuotes && (char === '"' || char === "'")) {
|
|
900
|
+
inQuotes = true;
|
|
901
|
+
quoteChar = char;
|
|
902
|
+
current += char;
|
|
903
|
+
} else if (inQuotes && char === quoteChar && paramString[i - 1] !== '\\') {
|
|
904
|
+
inQuotes = false;
|
|
905
|
+
quoteChar = '';
|
|
906
|
+
current += char;
|
|
907
|
+
} else if (!inQuotes) {
|
|
908
|
+
if (char === '[' || char === '{' || char === '(') {
|
|
909
|
+
bracketDepth++;
|
|
910
|
+
current += char;
|
|
911
|
+
} else if (char === ']' || char === '}' || char === ')') {
|
|
912
|
+
bracketDepth--;
|
|
913
|
+
current += char;
|
|
914
|
+
} else if (char === ',' && bracketDepth === 0) {
|
|
915
|
+
parts.push(current);
|
|
916
|
+
current = '';
|
|
917
|
+
} else {
|
|
918
|
+
current += char;
|
|
919
|
+
}
|
|
920
|
+
} else {
|
|
921
|
+
current += char;
|
|
922
|
+
}
|
|
923
|
+
}
|
|
924
|
+
|
|
925
|
+
if (current) {
|
|
926
|
+
parts.push(current);
|
|
927
|
+
}
|
|
928
|
+
|
|
929
|
+
return parts;
|
|
930
|
+
}
|
|
931
|
+
|
|
932
|
+
/**
|
|
933
|
+
* Parse a single parameter value
|
|
934
|
+
*
|
|
935
|
+
* @param paramValue - Parameter string value
|
|
936
|
+
* @returns Parsed parameter value
|
|
937
|
+
*/
|
|
938
|
+
function parseSimpleParameter(paramValue: string): unknown {
|
|
939
|
+
const trimmed = paramValue.trim();
|
|
940
|
+
|
|
941
|
+
if (!trimmed) {
|
|
942
|
+
throw new Error('Empty parameter value');
|
|
943
|
+
}
|
|
944
|
+
|
|
945
|
+
// Boolean values
|
|
946
|
+
if (trimmed === 'true') return true;
|
|
947
|
+
if (trimmed === 'false') return false;
|
|
948
|
+
|
|
949
|
+
// Null and undefined
|
|
950
|
+
if (trimmed === 'null') return null;
|
|
951
|
+
if (trimmed === 'undefined') return undefined;
|
|
952
|
+
|
|
953
|
+
// Numbers (integers and floats)
|
|
954
|
+
if (/^-?\d+$/.test(trimmed)) {
|
|
955
|
+
return parseInt(trimmed, 10);
|
|
956
|
+
}
|
|
957
|
+
if (/^-?\d*\.\d+$/.test(trimmed)) {
|
|
958
|
+
return parseFloat(trimmed);
|
|
959
|
+
}
|
|
960
|
+
|
|
961
|
+
// Quoted strings
|
|
962
|
+
if (
|
|
963
|
+
(trimmed.startsWith('"') && trimmed.endsWith('"')) ||
|
|
964
|
+
(trimmed.startsWith("'") && trimmed.endsWith("'"))
|
|
965
|
+
) {
|
|
966
|
+
return trimmed.slice(1, -1);
|
|
967
|
+
}
|
|
968
|
+
|
|
969
|
+
// Regular expressions
|
|
970
|
+
if (trimmed.startsWith('/') && trimmed.match(/\/[gimuy]*$/)) {
|
|
971
|
+
try {
|
|
972
|
+
const lastSlash = trimmed.lastIndexOf('/');
|
|
973
|
+
const pattern = trimmed.slice(1, lastSlash);
|
|
974
|
+
const flags = trimmed.slice(lastSlash + 1);
|
|
975
|
+
return new RegExp(pattern, flags);
|
|
976
|
+
} catch {
|
|
977
|
+
throw new Error(`Invalid regex: ${trimmed}`);
|
|
978
|
+
}
|
|
979
|
+
}
|
|
980
|
+
|
|
981
|
+
// Arrays (basic support)
|
|
982
|
+
if (trimmed.startsWith('[') && trimmed.endsWith(']')) {
|
|
983
|
+
try {
|
|
984
|
+
return JSON.parse(trimmed);
|
|
985
|
+
} catch {
|
|
986
|
+
throw new Error(`Invalid array: ${trimmed}`);
|
|
987
|
+
}
|
|
988
|
+
}
|
|
989
|
+
|
|
990
|
+
// Objects (JavaScript object literal support)
|
|
991
|
+
if (trimmed.startsWith('{') && trimmed.endsWith('}')) {
|
|
992
|
+
try {
|
|
993
|
+
// First try standard JSON parsing for simple cases
|
|
994
|
+
return JSON.parse(trimmed);
|
|
995
|
+
} catch {
|
|
996
|
+
// For complex JavaScript object literals, return as-is as a special marker
|
|
997
|
+
// This will be handled specially in formatParameters to preserve JavaScript expressions
|
|
998
|
+
return { __js_object_literal__: trimmed };
|
|
999
|
+
}
|
|
1000
|
+
}
|
|
1001
|
+
|
|
1002
|
+
// Complex expressions (like new Date(), function calls, etc.)
|
|
1003
|
+
if (trimmed.includes('(') && trimmed.includes(')')) {
|
|
1004
|
+
// Pass through complex expressions as-is for evaluation at runtime
|
|
1005
|
+
return trimmed;
|
|
1006
|
+
}
|
|
1007
|
+
|
|
1008
|
+
// Unquoted strings (identifiers, etc.)
|
|
1009
|
+
if (/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(trimmed)) {
|
|
1010
|
+
return trimmed;
|
|
1011
|
+
}
|
|
1012
|
+
|
|
1013
|
+
// If we can't parse it, pass it through as a raw string
|
|
1014
|
+
// This allows complex expressions to be used in the generated code
|
|
1015
|
+
return trimmed;
|
|
1016
|
+
}
|
|
1017
|
+
|
|
1018
|
+
/**
|
|
1019
|
+
* Validate parsed @zod annotations for semantic correctness
|
|
1020
|
+
*
|
|
1021
|
+
* @param annotations - Array of parsed annotations
|
|
1022
|
+
* @param context - Field context
|
|
1023
|
+
* @returns Array of validation errors
|
|
1024
|
+
*/
|
|
1025
|
+
export function validateZodAnnotations(
|
|
1026
|
+
annotations: ParsedZodAnnotation[],
|
|
1027
|
+
context: FieldCommentContext,
|
|
1028
|
+
): string[] {
|
|
1029
|
+
const errors: string[] = [];
|
|
1030
|
+
|
|
1031
|
+
for (const annotation of annotations) {
|
|
1032
|
+
try {
|
|
1033
|
+
validateZodMethod(annotation, context);
|
|
1034
|
+
} catch (error) {
|
|
1035
|
+
errors.push(
|
|
1036
|
+
`${context.modelName}.${context.fieldName}: ${error instanceof Error ? error.message : String(error)}`,
|
|
1037
|
+
);
|
|
1038
|
+
}
|
|
1039
|
+
}
|
|
1040
|
+
|
|
1041
|
+
return errors;
|
|
1042
|
+
}
|
|
1043
|
+
|
|
1044
|
+
/**
|
|
1045
|
+
* Validate a single @zod method annotation
|
|
1046
|
+
*
|
|
1047
|
+
* @param annotation - Parsed annotation
|
|
1048
|
+
* @param context - Field context
|
|
1049
|
+
*/
|
|
1050
|
+
function validateZodMethod(annotation: ParsedZodAnnotation, context: FieldCommentContext): void {
|
|
1051
|
+
const { method, parameters } = annotation;
|
|
1052
|
+
|
|
1053
|
+
// Common string validation methods
|
|
1054
|
+
const stringMethods = [
|
|
1055
|
+
'min',
|
|
1056
|
+
'max',
|
|
1057
|
+
'length',
|
|
1058
|
+
'email',
|
|
1059
|
+
'url',
|
|
1060
|
+
'uuid',
|
|
1061
|
+
'regex',
|
|
1062
|
+
'includes',
|
|
1063
|
+
'startsWith',
|
|
1064
|
+
'endsWith',
|
|
1065
|
+
'trim',
|
|
1066
|
+
'toLowerCase',
|
|
1067
|
+
'toUpperCase',
|
|
1068
|
+
'datetime',
|
|
1069
|
+
'ip',
|
|
1070
|
+
'cidr',
|
|
1071
|
+
'date',
|
|
1072
|
+
'time',
|
|
1073
|
+
'duration',
|
|
1074
|
+
'normalize',
|
|
1075
|
+
'uppercase',
|
|
1076
|
+
'lowercase',
|
|
1077
|
+
// New Zod v4 string format methods - Issue #233
|
|
1078
|
+
'httpUrl',
|
|
1079
|
+
'hostname',
|
|
1080
|
+
'guid',
|
|
1081
|
+
'nanoid',
|
|
1082
|
+
'cuid',
|
|
1083
|
+
'cuid2',
|
|
1084
|
+
'ulid',
|
|
1085
|
+
'base64',
|
|
1086
|
+
'base64url',
|
|
1087
|
+
'hex',
|
|
1088
|
+
'jwt',
|
|
1089
|
+
'hash',
|
|
1090
|
+
'ipv4',
|
|
1091
|
+
'ipv6',
|
|
1092
|
+
'cidrv4',
|
|
1093
|
+
'cidrv6',
|
|
1094
|
+
'emoji',
|
|
1095
|
+
'isoDate',
|
|
1096
|
+
'isoTime',
|
|
1097
|
+
'isoDatetime',
|
|
1098
|
+
'isoDuration',
|
|
1099
|
+
];
|
|
1100
|
+
|
|
1101
|
+
// Common number validation methods
|
|
1102
|
+
const numberMethods = [
|
|
1103
|
+
'min',
|
|
1104
|
+
'max',
|
|
1105
|
+
'int',
|
|
1106
|
+
'positive',
|
|
1107
|
+
'negative',
|
|
1108
|
+
'nonnegative',
|
|
1109
|
+
'nonpositive',
|
|
1110
|
+
'finite',
|
|
1111
|
+
'multipleOf',
|
|
1112
|
+
'step',
|
|
1113
|
+
'gt',
|
|
1114
|
+
'gte',
|
|
1115
|
+
'lt',
|
|
1116
|
+
'lte',
|
|
1117
|
+
];
|
|
1118
|
+
|
|
1119
|
+
// Common array validation methods
|
|
1120
|
+
const arrayMethods = ['min', 'max', 'length', 'nonempty'];
|
|
1121
|
+
|
|
1122
|
+
// Methods that require parameters
|
|
1123
|
+
const requiresParams = [
|
|
1124
|
+
'min',
|
|
1125
|
+
'max',
|
|
1126
|
+
'length',
|
|
1127
|
+
'regex',
|
|
1128
|
+
'includes',
|
|
1129
|
+
'startsWith',
|
|
1130
|
+
'endsWith',
|
|
1131
|
+
'enum',
|
|
1132
|
+
'default',
|
|
1133
|
+
'refine',
|
|
1134
|
+
'transform',
|
|
1135
|
+
'multipleOf',
|
|
1136
|
+
'step',
|
|
1137
|
+
'gt',
|
|
1138
|
+
'gte',
|
|
1139
|
+
'lt',
|
|
1140
|
+
'lte',
|
|
1141
|
+
'catch',
|
|
1142
|
+
'pipe',
|
|
1143
|
+
// New methods that require parameters - Issue #233
|
|
1144
|
+
'hash', // hash requires algorithm parameter like "sha256"
|
|
1145
|
+
'custom', // custom requires object/array schema parameter
|
|
1146
|
+
];
|
|
1147
|
+
|
|
1148
|
+
// Methods that don't allow parameters
|
|
1149
|
+
const noParams = [
|
|
1150
|
+
'nonempty',
|
|
1151
|
+
'trim',
|
|
1152
|
+
'toLowerCase',
|
|
1153
|
+
'toUpperCase',
|
|
1154
|
+
'uppercase',
|
|
1155
|
+
'lowercase',
|
|
1156
|
+
'brand',
|
|
1157
|
+
'readonly',
|
|
1158
|
+
'coerce',
|
|
1159
|
+
];
|
|
1160
|
+
|
|
1161
|
+
// Methods that accept optional parameters (format validation methods)
|
|
1162
|
+
const optionalParams = [
|
|
1163
|
+
// Existing string format methods
|
|
1164
|
+
'email',
|
|
1165
|
+
'url',
|
|
1166
|
+
'uuid',
|
|
1167
|
+
'datetime',
|
|
1168
|
+
'ip',
|
|
1169
|
+
'cidr',
|
|
1170
|
+
'date',
|
|
1171
|
+
'time',
|
|
1172
|
+
'duration',
|
|
1173
|
+
'normalize',
|
|
1174
|
+
// New Zod v4 string format methods - Issue #233
|
|
1175
|
+
'httpUrl',
|
|
1176
|
+
'hostname',
|
|
1177
|
+
'guid',
|
|
1178
|
+
'nanoid',
|
|
1179
|
+
'cuid',
|
|
1180
|
+
'cuid2',
|
|
1181
|
+
'ulid',
|
|
1182
|
+
'base64',
|
|
1183
|
+
'base64url',
|
|
1184
|
+
'hex',
|
|
1185
|
+
'jwt',
|
|
1186
|
+
'ipv4',
|
|
1187
|
+
'ipv6',
|
|
1188
|
+
'cidrv4',
|
|
1189
|
+
'cidrv6',
|
|
1190
|
+
'emoji',
|
|
1191
|
+
'isoDate',
|
|
1192
|
+
'isoTime',
|
|
1193
|
+
'isoDatetime',
|
|
1194
|
+
'isoDuration',
|
|
1195
|
+
];
|
|
1196
|
+
|
|
1197
|
+
// Methods that accept optional error message parameter
|
|
1198
|
+
const optionalErrorMessage = [
|
|
1199
|
+
'int',
|
|
1200
|
+
'positive',
|
|
1201
|
+
'negative',
|
|
1202
|
+
'nonnegative',
|
|
1203
|
+
'nonpositive',
|
|
1204
|
+
'finite',
|
|
1205
|
+
];
|
|
1206
|
+
|
|
1207
|
+
// Additional known methods not covered above
|
|
1208
|
+
//
|
|
1209
|
+
// This list and getValidationMethodConfig()'s table below are two separate,
|
|
1210
|
+
// hand-maintained sources of truth for "is this a real @zod method" - a name
|
|
1211
|
+
// missing from *either* one silently drops the annotation with no error, since a
|
|
1212
|
+
// field with at least one other valid annotation never trips isValid:false. Adding
|
|
1213
|
+
// a method means updating both; coerce was missed here the first time for exactly
|
|
1214
|
+
// that reason.
|
|
1215
|
+
const additionalMethods = [
|
|
1216
|
+
'default',
|
|
1217
|
+
'optional',
|
|
1218
|
+
'nullable',
|
|
1219
|
+
'nullish',
|
|
1220
|
+
'refine',
|
|
1221
|
+
'transform',
|
|
1222
|
+
'enum',
|
|
1223
|
+
'object',
|
|
1224
|
+
'array',
|
|
1225
|
+
'record',
|
|
1226
|
+
'json',
|
|
1227
|
+
'catch',
|
|
1228
|
+
'pipe',
|
|
1229
|
+
'brand',
|
|
1230
|
+
'readonly',
|
|
1231
|
+
'coerce',
|
|
1232
|
+
// Schema metadata (issue #225/#371): describe works on v3 and v4;
|
|
1233
|
+
// meta is v4-only and is version-mapped during emission.
|
|
1234
|
+
'describe',
|
|
1235
|
+
'meta',
|
|
1236
|
+
];
|
|
1237
|
+
|
|
1238
|
+
// Check if method is known
|
|
1239
|
+
const allKnownMethods = [
|
|
1240
|
+
...new Set([
|
|
1241
|
+
...stringMethods,
|
|
1242
|
+
...numberMethods,
|
|
1243
|
+
...arrayMethods,
|
|
1244
|
+
...additionalMethods,
|
|
1245
|
+
...optionalErrorMessage,
|
|
1246
|
+
...optionalParams,
|
|
1247
|
+
...requiresParams, // Add methods that require parameters
|
|
1248
|
+
]),
|
|
1249
|
+
];
|
|
1250
|
+
if (!allKnownMethods.includes(method)) {
|
|
1251
|
+
throw new Error(`Unknown @zod method: ${method} - this method is not supported`);
|
|
1252
|
+
}
|
|
1253
|
+
|
|
1254
|
+
// Validate parameter requirements
|
|
1255
|
+
if (requiresParams.includes(method) && parameters.length === 0) {
|
|
1256
|
+
throw new Error(`Method ${method} requires parameters`);
|
|
1257
|
+
}
|
|
1258
|
+
|
|
1259
|
+
if (noParams.includes(method) && parameters.length > 0) {
|
|
1260
|
+
throw new Error(`Method ${method} does not accept parameters`);
|
|
1261
|
+
}
|
|
1262
|
+
|
|
1263
|
+
// Validate optional parameter methods (string format methods)
|
|
1264
|
+
if (optionalParams.includes(method) && parameters.length > 1) {
|
|
1265
|
+
throw new Error(`Method ${method} accepts at most one parameter`);
|
|
1266
|
+
}
|
|
1267
|
+
|
|
1268
|
+
// Validate optional error message methods
|
|
1269
|
+
if (optionalErrorMessage.includes(method) && parameters.length > 1) {
|
|
1270
|
+
throw new Error(`Method ${method} accepts at most one parameter (error message)`);
|
|
1271
|
+
}
|
|
1272
|
+
|
|
1273
|
+
if (
|
|
1274
|
+
optionalErrorMessage.includes(method) &&
|
|
1275
|
+
parameters.length === 1 &&
|
|
1276
|
+
!isErrorMessageParam(parameters[0])
|
|
1277
|
+
) {
|
|
1278
|
+
throw new Error(`Method ${method} error message parameter must be a string or params object`);
|
|
1279
|
+
}
|
|
1280
|
+
|
|
1281
|
+
// Type-specific validations based on field type
|
|
1282
|
+
if (context.fieldType === 'String') {
|
|
1283
|
+
validateStringMethodParameters(method, parameters);
|
|
1284
|
+
} else if (context.fieldType === 'Int' || context.fieldType === 'Float') {
|
|
1285
|
+
validateNumberMethodParameters(method, parameters);
|
|
1286
|
+
}
|
|
1287
|
+
}
|
|
1288
|
+
|
|
1289
|
+
/**
|
|
1290
|
+
* Accept both error-message shapes Zod supports: the string shorthand and the
|
|
1291
|
+
* params object form (`{ message: "..." }` / `{ error: "..." }`). Object-form
|
|
1292
|
+
* arguments arrive either JSON-parsed or as `{ __js_object_literal__ }` markers.
|
|
1293
|
+
*/
|
|
1294
|
+
function isErrorMessageParam(param: unknown): boolean {
|
|
1295
|
+
return (
|
|
1296
|
+
typeof param === 'string' ||
|
|
1297
|
+
(typeof param === 'object' &&
|
|
1298
|
+
param !== null &&
|
|
1299
|
+
!Array.isArray(param) &&
|
|
1300
|
+
!(param instanceof RegExp))
|
|
1301
|
+
);
|
|
1302
|
+
}
|
|
1303
|
+
|
|
1304
|
+
/**
|
|
1305
|
+
* Validate parameters for string validation methods
|
|
1306
|
+
*
|
|
1307
|
+
* @param method - Validation method name
|
|
1308
|
+
* @param parameters - Method parameters
|
|
1309
|
+
*/
|
|
1310
|
+
function validateStringMethodParameters(method: string, parameters: unknown[]): void {
|
|
1311
|
+
switch (method) {
|
|
1312
|
+
case 'min':
|
|
1313
|
+
case 'max':
|
|
1314
|
+
case 'length':
|
|
1315
|
+
// Allow 1 parameter (number) or 2 parameters (number + error message)
|
|
1316
|
+
if (
|
|
1317
|
+
parameters.length < 1 ||
|
|
1318
|
+
parameters.length > 2 ||
|
|
1319
|
+
typeof parameters[0] !== 'number' ||
|
|
1320
|
+
parameters[0] < 0 ||
|
|
1321
|
+
(parameters.length === 2 && !isErrorMessageParam(parameters[1]))
|
|
1322
|
+
) {
|
|
1323
|
+
throw new Error(
|
|
1324
|
+
`${method} requires a non-negative number parameter and optional error message (string or params object)`,
|
|
1325
|
+
);
|
|
1326
|
+
}
|
|
1327
|
+
break;
|
|
1328
|
+
|
|
1329
|
+
case 'regex':
|
|
1330
|
+
if (parameters.length < 1 || parameters.length > 2) {
|
|
1331
|
+
throw new Error(`regex requires 1-2 parameters (RegExp/string, optional error message)`);
|
|
1332
|
+
}
|
|
1333
|
+
if (!(parameters[0] instanceof RegExp || typeof parameters[0] === 'string')) {
|
|
1334
|
+
throw new Error(`regex first parameter must be a RegExp or string`);
|
|
1335
|
+
}
|
|
1336
|
+
if (parameters.length === 2 && typeof parameters[1] !== 'string') {
|
|
1337
|
+
throw new Error(`regex second parameter (error message) must be a string`);
|
|
1338
|
+
}
|
|
1339
|
+
break;
|
|
1340
|
+
|
|
1341
|
+
case 'includes':
|
|
1342
|
+
case 'startsWith':
|
|
1343
|
+
case 'endsWith':
|
|
1344
|
+
if (parameters.length !== 1 || typeof parameters[0] !== 'string') {
|
|
1345
|
+
throw new Error(`${method} requires a string parameter`);
|
|
1346
|
+
}
|
|
1347
|
+
break;
|
|
1348
|
+
|
|
1349
|
+
case 'hash':
|
|
1350
|
+
if (parameters.length !== 1 || typeof parameters[0] !== 'string') {
|
|
1351
|
+
throw new Error(`hash requires a single string algorithm parameter (e.g., 'sha256')`);
|
|
1352
|
+
}
|
|
1353
|
+
break;
|
|
1354
|
+
}
|
|
1355
|
+
}
|
|
1356
|
+
|
|
1357
|
+
/**
|
|
1358
|
+
* Validate parameters for number validation methods
|
|
1359
|
+
*
|
|
1360
|
+
* @param method - Validation method name
|
|
1361
|
+
* @param parameters - Method parameters
|
|
1362
|
+
*/
|
|
1363
|
+
function validateNumberMethodParameters(method: string, parameters: unknown[]): void {
|
|
1364
|
+
switch (method) {
|
|
1365
|
+
case 'min':
|
|
1366
|
+
case 'max':
|
|
1367
|
+
// Allow 1 parameter (number) or 2 parameters (number + error message)
|
|
1368
|
+
if (
|
|
1369
|
+
parameters.length < 1 ||
|
|
1370
|
+
parameters.length > 2 ||
|
|
1371
|
+
typeof parameters[0] !== 'number' ||
|
|
1372
|
+
(parameters.length === 2 && !isErrorMessageParam(parameters[1]))
|
|
1373
|
+
) {
|
|
1374
|
+
throw new Error(`${method} requires a number parameter and optional error message`);
|
|
1375
|
+
}
|
|
1376
|
+
break;
|
|
1377
|
+
|
|
1378
|
+
case 'positive':
|
|
1379
|
+
case 'negative':
|
|
1380
|
+
case 'int':
|
|
1381
|
+
case 'finite':
|
|
1382
|
+
// Allow 0 parameters or 1 parameter (error message)
|
|
1383
|
+
if (
|
|
1384
|
+
parameters.length > 1 ||
|
|
1385
|
+
(parameters.length === 1 && !isErrorMessageParam(parameters[0]))
|
|
1386
|
+
) {
|
|
1387
|
+
throw new Error(`${method} accepts optional error message parameter`);
|
|
1388
|
+
}
|
|
1389
|
+
break;
|
|
1390
|
+
|
|
1391
|
+
case 'multipleOf':
|
|
1392
|
+
case 'step':
|
|
1393
|
+
// Allow 1 parameter (number) or 2 parameters (number + error message)
|
|
1394
|
+
if (
|
|
1395
|
+
parameters.length < 1 ||
|
|
1396
|
+
parameters.length > 2 ||
|
|
1397
|
+
typeof parameters[0] !== 'number' ||
|
|
1398
|
+
(parameters.length === 2 && !isErrorMessageParam(parameters[1]))
|
|
1399
|
+
) {
|
|
1400
|
+
throw new Error(`${method} requires a number parameter and optional error message`);
|
|
1401
|
+
}
|
|
1402
|
+
break;
|
|
1403
|
+
}
|
|
1404
|
+
}
|
|
1405
|
+
|
|
1406
|
+
/**
|
|
1407
|
+
* Interface for Zod schema generation result
|
|
1408
|
+
*/
|
|
1409
|
+
export interface ZodSchemaGenerationResult {
|
|
1410
|
+
schemaChain: string;
|
|
1411
|
+
imports: Set<string>;
|
|
1412
|
+
errors: string[];
|
|
1413
|
+
isValid: boolean;
|
|
1414
|
+
}
|
|
1415
|
+
|
|
1416
|
+
/**
|
|
1417
|
+
* Interface for validation method mapping configuration
|
|
1418
|
+
*/
|
|
1419
|
+
export interface ValidationMethodConfig {
|
|
1420
|
+
methodName: string;
|
|
1421
|
+
zodMethod: string;
|
|
1422
|
+
parameterCount: number | 'variable';
|
|
1423
|
+
requiresImport?: string;
|
|
1424
|
+
fieldTypeCompatibility?: string[];
|
|
1425
|
+
}
|
|
1426
|
+
|
|
1427
|
+
/**
|
|
1428
|
+
* Map parsed @zod annotations to Zod schema method calls
|
|
1429
|
+
*
|
|
1430
|
+
* Converts parsed annotations into actual Zod validation method chains
|
|
1431
|
+
* that can be used in generated schema code.
|
|
1432
|
+
*
|
|
1433
|
+
* @param annotations - Array of parsed annotations
|
|
1434
|
+
* @param context - Field context for validation
|
|
1435
|
+
* @param zodVersion - Zod version target ('v3', 'v4', or 'auto')
|
|
1436
|
+
* @returns Schema generation result with method chain and imports
|
|
1437
|
+
*/
|
|
1438
|
+
export function mapAnnotationsToZodSchema(
|
|
1439
|
+
annotations: ParsedZodAnnotation[],
|
|
1440
|
+
context: FieldCommentContext,
|
|
1441
|
+
zodVersion: 'auto' | 'v3' | 'v4' = 'auto',
|
|
1442
|
+
): ZodSchemaGenerationResult {
|
|
1443
|
+
const result: ZodSchemaGenerationResult = {
|
|
1444
|
+
schemaChain: '',
|
|
1445
|
+
imports: new Set<string>(),
|
|
1446
|
+
errors: [],
|
|
1447
|
+
isValid: true,
|
|
1448
|
+
};
|
|
1449
|
+
|
|
1450
|
+
if (annotations.length === 0) {
|
|
1451
|
+
return result;
|
|
1452
|
+
}
|
|
1453
|
+
|
|
1454
|
+
try {
|
|
1455
|
+
const methodCalls: string[] = [];
|
|
1456
|
+
const methodResults: MethodMappingResult[] = [];
|
|
1457
|
+
|
|
1458
|
+
for (const annotation of annotations) {
|
|
1459
|
+
try {
|
|
1460
|
+
const methodResult = mapAnnotationToZodMethod(annotation, context, zodVersion);
|
|
1461
|
+
// Skip empty fallbacks (e.g., v3 for v4-only base methods)
|
|
1462
|
+
if (methodResult.methodCall) {
|
|
1463
|
+
methodCalls.push(methodResult.methodCall);
|
|
1464
|
+
}
|
|
1465
|
+
methodResults.push(methodResult);
|
|
1466
|
+
|
|
1467
|
+
// Add any required imports
|
|
1468
|
+
if (methodResult.requiredImport) {
|
|
1469
|
+
result.imports.add(methodResult.requiredImport);
|
|
1470
|
+
}
|
|
1471
|
+
} catch (error) {
|
|
1472
|
+
result.errors.push(
|
|
1473
|
+
`Failed to map ${annotation.method}: ${error instanceof Error ? error.message : String(error)}`,
|
|
1474
|
+
);
|
|
1475
|
+
result.isValid = false;
|
|
1476
|
+
}
|
|
1477
|
+
}
|
|
1478
|
+
|
|
1479
|
+
// Join all method calls into a chain
|
|
1480
|
+
if (methodCalls.length > 0) {
|
|
1481
|
+
// Check if we have a base replacement method (like z.email() in v4)
|
|
1482
|
+
const baseReplacements = methodResults.filter((result) => result.isBaseReplacement);
|
|
1483
|
+
const regularReplacements = methodCalls.filter(
|
|
1484
|
+
(call) =>
|
|
1485
|
+
call &&
|
|
1486
|
+
!call.startsWith('.') &&
|
|
1487
|
+
!methodResults.find((r) => r.methodCall === call)?.isBaseReplacement,
|
|
1488
|
+
);
|
|
1489
|
+
const chainMethods = methodCalls.filter((call) => call.startsWith('.'));
|
|
1490
|
+
|
|
1491
|
+
if (baseReplacements.length > 0) {
|
|
1492
|
+
// Handle base replacement (like z.email() in v4) with chaining
|
|
1493
|
+
if (baseReplacements.length > 1) {
|
|
1494
|
+
result.errors.push(
|
|
1495
|
+
'Multiple base replacement methods detected - only one allowed per field',
|
|
1496
|
+
);
|
|
1497
|
+
result.isValid = false;
|
|
1498
|
+
} else {
|
|
1499
|
+
result.schemaChain = baseReplacements[0].methodCall + chainMethods.join('');
|
|
1500
|
+
}
|
|
1501
|
+
} else if (regularReplacements.length > 0) {
|
|
1502
|
+
// Handle regular replacement methods (json, enum)
|
|
1503
|
+
const chainMethods = methodCalls.filter((call) => call.startsWith('.'));
|
|
1504
|
+
|
|
1505
|
+
if (regularReplacements.length > 1) {
|
|
1506
|
+
result.errors.push('Multiple replacement methods detected - only one allowed per field');
|
|
1507
|
+
result.isValid = false;
|
|
1508
|
+
} else {
|
|
1509
|
+
// Use the replacement method as base, then chain any additional methods
|
|
1510
|
+
result.schemaChain = regularReplacements[0] + chainMethods.join('');
|
|
1511
|
+
}
|
|
1512
|
+
} else {
|
|
1513
|
+
// All are chaining methods, join normally
|
|
1514
|
+
result.schemaChain = methodCalls.join('');
|
|
1515
|
+
}
|
|
1516
|
+
}
|
|
1517
|
+
} catch (error) {
|
|
1518
|
+
result.errors.push(
|
|
1519
|
+
`Schema generation failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
1520
|
+
);
|
|
1521
|
+
result.isValid = false;
|
|
1522
|
+
}
|
|
1523
|
+
|
|
1524
|
+
return result;
|
|
1525
|
+
}
|
|
1526
|
+
|
|
1527
|
+
/**
|
|
1528
|
+
* Interface for single method mapping result
|
|
1529
|
+
*/
|
|
1530
|
+
interface MethodMappingResult {
|
|
1531
|
+
methodCall: string;
|
|
1532
|
+
requiredImport?: string;
|
|
1533
|
+
isBaseReplacement?: boolean;
|
|
1534
|
+
}
|
|
1535
|
+
|
|
1536
|
+
/**
|
|
1537
|
+
* Resolve the target Zod version for syntax generation
|
|
1538
|
+
*
|
|
1539
|
+
* @param zodVersion - Version specification ('auto', 'v3', or 'v4')
|
|
1540
|
+
* @returns Resolved version ('v3' or 'v4')
|
|
1541
|
+
*/
|
|
1542
|
+
function resolveZodVersion(zodVersion: 'auto' | 'v3' | 'v4'): 'v3' | 'v4' {
|
|
1543
|
+
if (zodVersion === 'v3' || zodVersion === 'v4') {
|
|
1544
|
+
return zodVersion;
|
|
1545
|
+
}
|
|
1546
|
+
|
|
1547
|
+
// Auto-detect Zod version
|
|
1548
|
+
try {
|
|
1549
|
+
// Try to detect Zod version by loading zod package.json
|
|
1550
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
1551
|
+
const zodPackage = require('zod/package.json');
|
|
1552
|
+
const version = zodPackage.version;
|
|
1553
|
+
|
|
1554
|
+
if (version) {
|
|
1555
|
+
const majorVersion = parseInt(version.split('.')[0], 10);
|
|
1556
|
+
return majorVersion >= 4 ? 'v4' : 'v3';
|
|
1557
|
+
}
|
|
1558
|
+
} catch {
|
|
1559
|
+
// If we can't load zod package.json, try alternative detection
|
|
1560
|
+
try {
|
|
1561
|
+
// Try to detect by checking if z.email() method exists as standalone
|
|
1562
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
1563
|
+
const zod = require('zod');
|
|
1564
|
+
if (typeof zod.z?.email === 'function') {
|
|
1565
|
+
return 'v4';
|
|
1566
|
+
}
|
|
1567
|
+
} catch {
|
|
1568
|
+
// Ignore inner detection errors
|
|
1569
|
+
}
|
|
1570
|
+
}
|
|
1571
|
+
|
|
1572
|
+
// Fallback to v3 if detection fails
|
|
1573
|
+
logger.warn('Failed to detect Zod version, defaulting to v3 syntax');
|
|
1574
|
+
return 'v3';
|
|
1575
|
+
}
|
|
1576
|
+
|
|
1577
|
+
/**
|
|
1578
|
+
* Map a single annotation to a Zod method call
|
|
1579
|
+
*
|
|
1580
|
+
* @param annotation - Parsed annotation
|
|
1581
|
+
* @param context - Field context
|
|
1582
|
+
* @param zodVersion - Zod version target for version-specific handling
|
|
1583
|
+
* @returns Method mapping result
|
|
1584
|
+
*/
|
|
1585
|
+
/**
|
|
1586
|
+
* Map .meta({...}) parameters to a .describe(...) call for Zod v3, which has
|
|
1587
|
+
* no .meta(). Returns null when no description key can be extracted.
|
|
1588
|
+
*/
|
|
1589
|
+
function metaParamsToDescribeCall(parameters: unknown[]): string | null {
|
|
1590
|
+
const p = parameters[0];
|
|
1591
|
+
if (!p || typeof p !== 'object') return null;
|
|
1592
|
+
if ('__js_object_literal__' in (p as Record<string, unknown>)) {
|
|
1593
|
+
const literal = (p as { __js_object_literal__: string }).__js_object_literal__;
|
|
1594
|
+
const m = literal.match(/\bdescription\s*:\s*("(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*')/);
|
|
1595
|
+
return m ? `.describe(${m[1]})` : null;
|
|
1596
|
+
}
|
|
1597
|
+
const description = (p as { description?: unknown }).description;
|
|
1598
|
+
return typeof description === 'string' ? `.describe(${JSON.stringify(description)})` : null;
|
|
1599
|
+
}
|
|
1600
|
+
|
|
1601
|
+
function mapAnnotationToZodMethod(
|
|
1602
|
+
annotation: ParsedZodAnnotation,
|
|
1603
|
+
context: FieldCommentContext,
|
|
1604
|
+
zodVersion: 'auto' | 'v3' | 'v4' = 'auto',
|
|
1605
|
+
): MethodMappingResult {
|
|
1606
|
+
const { method, parameters } = annotation;
|
|
1607
|
+
|
|
1608
|
+
// Schema metadata (issues #225/#371). describe exists on v3 and v4; meta is
|
|
1609
|
+
// v4-only and downgrades to .describe(description) on v3.
|
|
1610
|
+
if (method === 'describe') {
|
|
1611
|
+
return { methodCall: `.describe(${formatParameters(parameters)})` };
|
|
1612
|
+
}
|
|
1613
|
+
if (method === 'meta') {
|
|
1614
|
+
if (resolveZodVersion(zodVersion) === 'v4') {
|
|
1615
|
+
return { methodCall: `.meta(${formatParameters(parameters)})` };
|
|
1616
|
+
}
|
|
1617
|
+
const describeCall = metaParamsToDescribeCall(parameters);
|
|
1618
|
+
if (describeCall) {
|
|
1619
|
+
return { methodCall: describeCall };
|
|
1620
|
+
}
|
|
1621
|
+
logger.warn(
|
|
1622
|
+
`@zod.meta() requires Zod v4; dropped for ${context.modelName}.${context.fieldName} (no description key to map to .describe)`,
|
|
1623
|
+
);
|
|
1624
|
+
return { methodCall: '' };
|
|
1625
|
+
}
|
|
1626
|
+
|
|
1627
|
+
// Get method configuration. For list fields, validations like .min/.max/.length should
|
|
1628
|
+
// target the array wrapper rather than the element type, so treat the effective
|
|
1629
|
+
// field type as 'Array' for compatibility checks.
|
|
1630
|
+
const effectiveFieldType = context.isList ? 'Array' : context.fieldType;
|
|
1631
|
+
const methodConfig = getValidationMethodConfig(method, effectiveFieldType);
|
|
1632
|
+
|
|
1633
|
+
if (!methodConfig) {
|
|
1634
|
+
// Unknown method - pass through as-is with warning
|
|
1635
|
+
logger.warn(`Unknown @zod method: ${method} - generating as-is`);
|
|
1636
|
+
return {
|
|
1637
|
+
methodCall: `.${method}(${formatParameters(parameters)})`,
|
|
1638
|
+
};
|
|
1639
|
+
}
|
|
1640
|
+
|
|
1641
|
+
// Validate field type compatibility
|
|
1642
|
+
if (
|
|
1643
|
+
methodConfig.fieldTypeCompatibility &&
|
|
1644
|
+
!methodConfig.fieldTypeCompatibility.includes(effectiveFieldType)
|
|
1645
|
+
) {
|
|
1646
|
+
throw new Error(
|
|
1647
|
+
`Method ${method} is not compatible with field type ${effectiveFieldType}. Compatible types: ${methodConfig.fieldTypeCompatibility.join(', ')}`,
|
|
1648
|
+
);
|
|
1649
|
+
}
|
|
1650
|
+
|
|
1651
|
+
// Validate parameter count
|
|
1652
|
+
if (methodConfig.parameterCount !== 'variable') {
|
|
1653
|
+
if (parameters.length !== methodConfig.parameterCount) {
|
|
1654
|
+
throw new Error(
|
|
1655
|
+
`Method ${method} expects ${methodConfig.parameterCount} parameters, got ${parameters.length}`,
|
|
1656
|
+
);
|
|
1657
|
+
}
|
|
1658
|
+
}
|
|
1659
|
+
|
|
1660
|
+
// Handle special cases that replace the base type rather than chain
|
|
1661
|
+
if (method === 'json') {
|
|
1662
|
+
// z.json() replaces the base type entirely
|
|
1663
|
+
return {
|
|
1664
|
+
methodCall: 'z.json()',
|
|
1665
|
+
requiredImport: methodConfig.requiresImport,
|
|
1666
|
+
};
|
|
1667
|
+
}
|
|
1668
|
+
|
|
1669
|
+
if (method === 'enum') {
|
|
1670
|
+
// z.enum() replaces the base type entirely
|
|
1671
|
+
const formattedParams = formatParameters(parameters);
|
|
1672
|
+
return {
|
|
1673
|
+
methodCall: `z.enum(${formattedParams})`,
|
|
1674
|
+
requiredImport: methodConfig.requiresImport,
|
|
1675
|
+
};
|
|
1676
|
+
}
|
|
1677
|
+
|
|
1678
|
+
if (method === 'coerce') {
|
|
1679
|
+
// Zod has no `.coerce()` chain method — coercion only exists as a constructor
|
|
1680
|
+
// variant (z.coerce.number(), never z.number().coerce()) — so this replaces the
|
|
1681
|
+
// base type rather than appending to it, the same way json/enum do above.
|
|
1682
|
+
// fieldTypeCompatibility already narrowed context.fieldType to one of these four.
|
|
1683
|
+
const coerceExpr =
|
|
1684
|
+
context.fieldType === 'Int'
|
|
1685
|
+
? 'z.coerce.number().int()' // preserves the .int() an uncoerced Int field gets
|
|
1686
|
+
: context.fieldType === 'BigInt'
|
|
1687
|
+
? 'z.coerce.bigint()'
|
|
1688
|
+
: context.fieldType === 'Boolean'
|
|
1689
|
+
? 'z.coerce.boolean()'
|
|
1690
|
+
: 'z.coerce.number()'; // Float
|
|
1691
|
+
return { methodCall: coerceExpr };
|
|
1692
|
+
}
|
|
1693
|
+
|
|
1694
|
+
if (method === 'custom') {
|
|
1695
|
+
if (parameters.length === 0) {
|
|
1696
|
+
throw new Error('Method custom requires parameters');
|
|
1697
|
+
}
|
|
1698
|
+
|
|
1699
|
+
const [schemaCandidate] = parameters;
|
|
1700
|
+
|
|
1701
|
+
if (
|
|
1702
|
+
schemaCandidate &&
|
|
1703
|
+
typeof schemaCandidate === 'object' &&
|
|
1704
|
+
!('__js_object_literal__' in (schemaCandidate as Record<string, unknown>))
|
|
1705
|
+
) {
|
|
1706
|
+
const zodSchema = inferZodTypeFromValue(schemaCandidate);
|
|
1707
|
+
return {
|
|
1708
|
+
methodCall: zodSchema,
|
|
1709
|
+
requiredImport: methodConfig.requiresImport,
|
|
1710
|
+
isBaseReplacement: true,
|
|
1711
|
+
};
|
|
1712
|
+
}
|
|
1713
|
+
|
|
1714
|
+
if (typeof schemaCandidate === 'string') {
|
|
1715
|
+
try {
|
|
1716
|
+
const zodSchema = inferZodTypeFromValue(JSON.parse(schemaCandidate));
|
|
1717
|
+
return {
|
|
1718
|
+
methodCall: zodSchema,
|
|
1719
|
+
requiredImport: methodConfig.requiresImport,
|
|
1720
|
+
isBaseReplacement: true,
|
|
1721
|
+
};
|
|
1722
|
+
} catch {
|
|
1723
|
+
// Fall through; formatParameters will handle non-JSON literals.
|
|
1724
|
+
}
|
|
1725
|
+
}
|
|
1726
|
+
|
|
1727
|
+
const formattedParams = formatParameters(parameters);
|
|
1728
|
+
return {
|
|
1729
|
+
methodCall: `z.object(${formattedParams})`,
|
|
1730
|
+
requiredImport: methodConfig.requiresImport,
|
|
1731
|
+
isBaseReplacement: true,
|
|
1732
|
+
};
|
|
1733
|
+
}
|
|
1734
|
+
|
|
1735
|
+
// Handle new Zod v4 string format methods - Issue #233
|
|
1736
|
+
const newStringFormatMethods = [
|
|
1737
|
+
'email',
|
|
1738
|
+
'url',
|
|
1739
|
+
'uuid',
|
|
1740
|
+
'httpUrl',
|
|
1741
|
+
'hostname',
|
|
1742
|
+
'guid',
|
|
1743
|
+
'nanoid',
|
|
1744
|
+
'cuid',
|
|
1745
|
+
'cuid2',
|
|
1746
|
+
'ulid',
|
|
1747
|
+
'base64',
|
|
1748
|
+
'base64url',
|
|
1749
|
+
'hex',
|
|
1750
|
+
'jwt',
|
|
1751
|
+
'ipv4',
|
|
1752
|
+
'ipv6',
|
|
1753
|
+
'cidrv4',
|
|
1754
|
+
'cidrv6',
|
|
1755
|
+
'emoji',
|
|
1756
|
+
// Note: 'regex' is not included because z.regex() is not a valid method
|
|
1757
|
+
// regex should use z.string().regex() syntax instead
|
|
1758
|
+
'isoDate',
|
|
1759
|
+
'isoTime',
|
|
1760
|
+
'isoDatetime',
|
|
1761
|
+
'isoDuration',
|
|
1762
|
+
];
|
|
1763
|
+
|
|
1764
|
+
if (newStringFormatMethods.includes(method)) {
|
|
1765
|
+
const resolvedVersion = resolveZodVersion(zodVersion);
|
|
1766
|
+
|
|
1767
|
+
if (resolvedVersion === 'v4') {
|
|
1768
|
+
// In Zod v4, prefer base types like z.httpUrl(), z.base64(), etc.
|
|
1769
|
+
// Don't chain unnecessarily!
|
|
1770
|
+
const formattedParams = formatV4StringFormatParameters(method, parameters);
|
|
1771
|
+
|
|
1772
|
+
// Special handling for ISO methods which use z.iso.xxx() syntax
|
|
1773
|
+
const isoMethods = ['isoDate', 'isoTime', 'isoDatetime', 'isoDuration'];
|
|
1774
|
+
let methodCall: string;
|
|
1775
|
+
if (isoMethods.includes(method)) {
|
|
1776
|
+
const isoMethodMap: Record<string, string> = {
|
|
1777
|
+
isoDate: 'z.iso.date',
|
|
1778
|
+
isoTime: 'z.iso.time',
|
|
1779
|
+
isoDatetime: 'z.iso.datetime',
|
|
1780
|
+
isoDuration: 'z.iso.duration',
|
|
1781
|
+
};
|
|
1782
|
+
methodCall = formattedParams
|
|
1783
|
+
? `${isoMethodMap[method]}(${formattedParams})`
|
|
1784
|
+
: `${isoMethodMap[method]}()`;
|
|
1785
|
+
} else {
|
|
1786
|
+
methodCall = formattedParams ? `z.${method}(${formattedParams})` : `z.${method}()`;
|
|
1787
|
+
}
|
|
1788
|
+
|
|
1789
|
+
return {
|
|
1790
|
+
methodCall,
|
|
1791
|
+
requiredImport: methodConfig.requiresImport,
|
|
1792
|
+
isBaseReplacement: true,
|
|
1793
|
+
};
|
|
1794
|
+
}
|
|
1795
|
+
// For v3, fallback to z.string() since these methods likely don't exist
|
|
1796
|
+
logger.warn(
|
|
1797
|
+
`[zod-comments] Method ${method} not supported in Zod v3; falling back to z.string()`,
|
|
1798
|
+
);
|
|
1799
|
+
return {
|
|
1800
|
+
methodCall: '', // Will result in base z.string() only
|
|
1801
|
+
requiredImport: methodConfig.requiresImport,
|
|
1802
|
+
};
|
|
1803
|
+
}
|
|
1804
|
+
|
|
1805
|
+
// Handle hash method with parameter (special case)
|
|
1806
|
+
if (method === 'hash') {
|
|
1807
|
+
const resolvedVersion = resolveZodVersion(zodVersion);
|
|
1808
|
+
|
|
1809
|
+
if (resolvedVersion === 'v4') {
|
|
1810
|
+
// In Zod v4, z.hash(algorithm) is a base type
|
|
1811
|
+
const formattedParams = formatParameters(parameters);
|
|
1812
|
+
return {
|
|
1813
|
+
methodCall: `z.hash(${formattedParams})`,
|
|
1814
|
+
requiredImport: methodConfig.requiresImport,
|
|
1815
|
+
isBaseReplacement: true,
|
|
1816
|
+
};
|
|
1817
|
+
}
|
|
1818
|
+
// For v3, fallback to z.string() since hash() likely doesn't exist
|
|
1819
|
+
logger.warn(`[zod-comments] Method hash not supported in Zod v3; falling back to z.string()`);
|
|
1820
|
+
return {
|
|
1821
|
+
methodCall: '', // Will result in base z.string() only
|
|
1822
|
+
requiredImport: methodConfig.requiresImport,
|
|
1823
|
+
};
|
|
1824
|
+
}
|
|
1825
|
+
|
|
1826
|
+
// Generate the method call for regular chaining methods
|
|
1827
|
+
const formattedParams = formatParameters(parameters);
|
|
1828
|
+
const methodCall = `.${methodConfig.zodMethod}${annotation.genericArgs ?? ''}(${formattedParams})`;
|
|
1829
|
+
|
|
1830
|
+
return {
|
|
1831
|
+
methodCall,
|
|
1832
|
+
requiredImport: methodConfig.requiresImport,
|
|
1833
|
+
};
|
|
1834
|
+
}
|
|
1835
|
+
|
|
1836
|
+
/**
|
|
1837
|
+
* Get validation method configuration
|
|
1838
|
+
*
|
|
1839
|
+
* @param methodName - Name of the validation method
|
|
1840
|
+
* @param fieldType - Field type for compatibility checking
|
|
1841
|
+
* @returns Method configuration or null if unknown
|
|
1842
|
+
*/
|
|
1843
|
+
function getValidationMethodConfig(
|
|
1844
|
+
methodName: string,
|
|
1845
|
+
fieldType?: string,
|
|
1846
|
+
): ValidationMethodConfig | null {
|
|
1847
|
+
const configs: ValidationMethodConfig[] = [
|
|
1848
|
+
// String validation methods
|
|
1849
|
+
{
|
|
1850
|
+
methodName: 'min',
|
|
1851
|
+
zodMethod: 'min',
|
|
1852
|
+
parameterCount: 'variable',
|
|
1853
|
+
fieldTypeCompatibility: ['String'],
|
|
1854
|
+
},
|
|
1855
|
+
{
|
|
1856
|
+
methodName: 'max',
|
|
1857
|
+
zodMethod: 'max',
|
|
1858
|
+
parameterCount: 'variable',
|
|
1859
|
+
fieldTypeCompatibility: ['String'],
|
|
1860
|
+
},
|
|
1861
|
+
{
|
|
1862
|
+
methodName: 'length',
|
|
1863
|
+
zodMethod: 'length',
|
|
1864
|
+
parameterCount: 'variable',
|
|
1865
|
+
fieldTypeCompatibility: ['String'],
|
|
1866
|
+
},
|
|
1867
|
+
{
|
|
1868
|
+
methodName: 'email',
|
|
1869
|
+
zodMethod: 'email',
|
|
1870
|
+
parameterCount: 'variable', // 0 or 1 parameter
|
|
1871
|
+
fieldTypeCompatibility: ['String'],
|
|
1872
|
+
},
|
|
1873
|
+
{
|
|
1874
|
+
methodName: 'url',
|
|
1875
|
+
zodMethod: 'url',
|
|
1876
|
+
parameterCount: 'variable',
|
|
1877
|
+
fieldTypeCompatibility: ['String'],
|
|
1878
|
+
},
|
|
1879
|
+
{
|
|
1880
|
+
methodName: 'uuid',
|
|
1881
|
+
zodMethod: 'uuid',
|
|
1882
|
+
parameterCount: 'variable', // 0 or 1 parameter
|
|
1883
|
+
fieldTypeCompatibility: ['String'],
|
|
1884
|
+
},
|
|
1885
|
+
{
|
|
1886
|
+
methodName: 'regex',
|
|
1887
|
+
zodMethod: 'regex',
|
|
1888
|
+
parameterCount: 'variable',
|
|
1889
|
+
fieldTypeCompatibility: ['String'],
|
|
1890
|
+
},
|
|
1891
|
+
{
|
|
1892
|
+
methodName: 'includes',
|
|
1893
|
+
zodMethod: 'includes',
|
|
1894
|
+
parameterCount: 1,
|
|
1895
|
+
fieldTypeCompatibility: ['String'],
|
|
1896
|
+
},
|
|
1897
|
+
{
|
|
1898
|
+
methodName: 'startsWith',
|
|
1899
|
+
zodMethod: 'startsWith',
|
|
1900
|
+
parameterCount: 1,
|
|
1901
|
+
fieldTypeCompatibility: ['String'],
|
|
1902
|
+
},
|
|
1903
|
+
{
|
|
1904
|
+
methodName: 'endsWith',
|
|
1905
|
+
zodMethod: 'endsWith',
|
|
1906
|
+
parameterCount: 1,
|
|
1907
|
+
fieldTypeCompatibility: ['String'],
|
|
1908
|
+
},
|
|
1909
|
+
{
|
|
1910
|
+
methodName: 'trim',
|
|
1911
|
+
zodMethod: 'trim',
|
|
1912
|
+
parameterCount: 0,
|
|
1913
|
+
fieldTypeCompatibility: ['String'],
|
|
1914
|
+
},
|
|
1915
|
+
{
|
|
1916
|
+
methodName: 'toLowerCase',
|
|
1917
|
+
zodMethod: 'toLowerCase',
|
|
1918
|
+
parameterCount: 0,
|
|
1919
|
+
fieldTypeCompatibility: ['String'],
|
|
1920
|
+
},
|
|
1921
|
+
{
|
|
1922
|
+
methodName: 'toUpperCase',
|
|
1923
|
+
zodMethod: 'toUpperCase',
|
|
1924
|
+
parameterCount: 0,
|
|
1925
|
+
fieldTypeCompatibility: ['String'],
|
|
1926
|
+
},
|
|
1927
|
+
{
|
|
1928
|
+
methodName: 'ip',
|
|
1929
|
+
zodMethod: 'ip',
|
|
1930
|
+
parameterCount: 'variable',
|
|
1931
|
+
fieldTypeCompatibility: ['String'],
|
|
1932
|
+
},
|
|
1933
|
+
{
|
|
1934
|
+
methodName: 'cidr',
|
|
1935
|
+
zodMethod: 'cidr',
|
|
1936
|
+
parameterCount: 'variable',
|
|
1937
|
+
fieldTypeCompatibility: ['String'],
|
|
1938
|
+
},
|
|
1939
|
+
{
|
|
1940
|
+
methodName: 'date',
|
|
1941
|
+
zodMethod: 'date',
|
|
1942
|
+
parameterCount: 'variable',
|
|
1943
|
+
fieldTypeCompatibility: ['String'],
|
|
1944
|
+
},
|
|
1945
|
+
{
|
|
1946
|
+
methodName: 'time',
|
|
1947
|
+
zodMethod: 'time',
|
|
1948
|
+
parameterCount: 'variable',
|
|
1949
|
+
fieldTypeCompatibility: ['String'],
|
|
1950
|
+
},
|
|
1951
|
+
{
|
|
1952
|
+
methodName: 'duration',
|
|
1953
|
+
zodMethod: 'duration',
|
|
1954
|
+
parameterCount: 'variable',
|
|
1955
|
+
fieldTypeCompatibility: ['String'],
|
|
1956
|
+
},
|
|
1957
|
+
{
|
|
1958
|
+
methodName: 'normalize',
|
|
1959
|
+
zodMethod: 'normalize',
|
|
1960
|
+
parameterCount: 'variable',
|
|
1961
|
+
fieldTypeCompatibility: ['String'],
|
|
1962
|
+
},
|
|
1963
|
+
{
|
|
1964
|
+
methodName: 'uppercase',
|
|
1965
|
+
zodMethod: 'uppercase',
|
|
1966
|
+
parameterCount: 0,
|
|
1967
|
+
fieldTypeCompatibility: ['String'],
|
|
1968
|
+
},
|
|
1969
|
+
{
|
|
1970
|
+
methodName: 'lowercase',
|
|
1971
|
+
zodMethod: 'lowercase',
|
|
1972
|
+
parameterCount: 0,
|
|
1973
|
+
fieldTypeCompatibility: ['String'],
|
|
1974
|
+
},
|
|
1975
|
+
|
|
1976
|
+
// Number validation methods
|
|
1977
|
+
{
|
|
1978
|
+
methodName: 'min',
|
|
1979
|
+
zodMethod: 'min',
|
|
1980
|
+
parameterCount: 'variable',
|
|
1981
|
+
fieldTypeCompatibility: ['Int', 'Float', 'BigInt'],
|
|
1982
|
+
},
|
|
1983
|
+
{
|
|
1984
|
+
methodName: 'max',
|
|
1985
|
+
zodMethod: 'max',
|
|
1986
|
+
parameterCount: 'variable',
|
|
1987
|
+
fieldTypeCompatibility: ['Int', 'Float', 'BigInt'],
|
|
1988
|
+
},
|
|
1989
|
+
{
|
|
1990
|
+
methodName: 'int',
|
|
1991
|
+
zodMethod: 'int',
|
|
1992
|
+
parameterCount: 0,
|
|
1993
|
+
fieldTypeCompatibility: ['Int', 'Float'],
|
|
1994
|
+
},
|
|
1995
|
+
{
|
|
1996
|
+
methodName: 'positive',
|
|
1997
|
+
zodMethod: 'positive',
|
|
1998
|
+
parameterCount: 'variable',
|
|
1999
|
+
fieldTypeCompatibility: ['Int', 'Float', 'BigInt'],
|
|
2000
|
+
},
|
|
2001
|
+
{
|
|
2002
|
+
methodName: 'negative',
|
|
2003
|
+
zodMethod: 'negative',
|
|
2004
|
+
parameterCount: 0,
|
|
2005
|
+
fieldTypeCompatibility: ['Int', 'Float', 'BigInt'],
|
|
2006
|
+
},
|
|
2007
|
+
{
|
|
2008
|
+
methodName: 'nonnegative',
|
|
2009
|
+
zodMethod: 'nonnegative',
|
|
2010
|
+
parameterCount: 0,
|
|
2011
|
+
fieldTypeCompatibility: ['Int', 'Float', 'BigInt'],
|
|
2012
|
+
},
|
|
2013
|
+
{
|
|
2014
|
+
methodName: 'nonpositive',
|
|
2015
|
+
zodMethod: 'nonpositive',
|
|
2016
|
+
parameterCount: 0,
|
|
2017
|
+
fieldTypeCompatibility: ['Int', 'Float', 'BigInt'],
|
|
2018
|
+
},
|
|
2019
|
+
{
|
|
2020
|
+
methodName: 'finite',
|
|
2021
|
+
zodMethod: 'finite',
|
|
2022
|
+
parameterCount: 0,
|
|
2023
|
+
fieldTypeCompatibility: ['Float'],
|
|
2024
|
+
},
|
|
2025
|
+
{
|
|
2026
|
+
methodName: 'safe',
|
|
2027
|
+
zodMethod: 'safe',
|
|
2028
|
+
parameterCount: 0,
|
|
2029
|
+
fieldTypeCompatibility: ['Int', 'Float'],
|
|
2030
|
+
},
|
|
2031
|
+
{
|
|
2032
|
+
methodName: 'multipleOf',
|
|
2033
|
+
zodMethod: 'multipleOf',
|
|
2034
|
+
parameterCount: 'variable',
|
|
2035
|
+
fieldTypeCompatibility: ['Int', 'Float'],
|
|
2036
|
+
},
|
|
2037
|
+
{
|
|
2038
|
+
methodName: 'gt',
|
|
2039
|
+
zodMethod: 'gt',
|
|
2040
|
+
parameterCount: 'variable',
|
|
2041
|
+
fieldTypeCompatibility: ['Int', 'Float', 'BigInt'],
|
|
2042
|
+
},
|
|
2043
|
+
{
|
|
2044
|
+
methodName: 'gte',
|
|
2045
|
+
zodMethod: 'gte',
|
|
2046
|
+
parameterCount: 'variable',
|
|
2047
|
+
fieldTypeCompatibility: ['Int', 'Float', 'BigInt'],
|
|
2048
|
+
},
|
|
2049
|
+
{
|
|
2050
|
+
methodName: 'lt',
|
|
2051
|
+
zodMethod: 'lt',
|
|
2052
|
+
parameterCount: 'variable',
|
|
2053
|
+
fieldTypeCompatibility: ['Int', 'Float', 'BigInt'],
|
|
2054
|
+
},
|
|
2055
|
+
{
|
|
2056
|
+
methodName: 'lte',
|
|
2057
|
+
zodMethod: 'lte',
|
|
2058
|
+
parameterCount: 'variable',
|
|
2059
|
+
fieldTypeCompatibility: ['Int', 'Float', 'BigInt'],
|
|
2060
|
+
},
|
|
2061
|
+
{
|
|
2062
|
+
methodName: 'step',
|
|
2063
|
+
zodMethod: 'multipleOf',
|
|
2064
|
+
parameterCount: 'variable',
|
|
2065
|
+
fieldTypeCompatibility: ['Int', 'Float'],
|
|
2066
|
+
},
|
|
2067
|
+
|
|
2068
|
+
// Array validation methods
|
|
2069
|
+
// Array validation methods accept an optional error message parameter in Zod
|
|
2070
|
+
{
|
|
2071
|
+
methodName: 'min',
|
|
2072
|
+
zodMethod: 'min',
|
|
2073
|
+
parameterCount: 'variable',
|
|
2074
|
+
fieldTypeCompatibility: ['Array'],
|
|
2075
|
+
},
|
|
2076
|
+
{
|
|
2077
|
+
methodName: 'max',
|
|
2078
|
+
zodMethod: 'max',
|
|
2079
|
+
parameterCount: 'variable',
|
|
2080
|
+
fieldTypeCompatibility: ['Array'],
|
|
2081
|
+
},
|
|
2082
|
+
{
|
|
2083
|
+
methodName: 'length',
|
|
2084
|
+
zodMethod: 'length',
|
|
2085
|
+
parameterCount: 'variable',
|
|
2086
|
+
fieldTypeCompatibility: ['Array'],
|
|
2087
|
+
},
|
|
2088
|
+
{
|
|
2089
|
+
methodName: 'nonempty',
|
|
2090
|
+
zodMethod: 'nonempty',
|
|
2091
|
+
parameterCount: 'variable',
|
|
2092
|
+
fieldTypeCompatibility: ['Array'],
|
|
2093
|
+
},
|
|
2094
|
+
|
|
2095
|
+
// Date validation methods
|
|
2096
|
+
{
|
|
2097
|
+
methodName: 'min',
|
|
2098
|
+
zodMethod: 'min',
|
|
2099
|
+
parameterCount: 1,
|
|
2100
|
+
fieldTypeCompatibility: ['DateTime'],
|
|
2101
|
+
},
|
|
2102
|
+
{
|
|
2103
|
+
methodName: 'max',
|
|
2104
|
+
zodMethod: 'max',
|
|
2105
|
+
parameterCount: 1,
|
|
2106
|
+
fieldTypeCompatibility: ['DateTime'],
|
|
2107
|
+
},
|
|
2108
|
+
|
|
2109
|
+
// Custom validation methods
|
|
2110
|
+
{ methodName: 'refine', zodMethod: 'refine', parameterCount: 'variable' },
|
|
2111
|
+
{ methodName: 'transform', zodMethod: 'transform', parameterCount: 1 },
|
|
2112
|
+
{ methodName: 'optional', zodMethod: 'optional', parameterCount: 0 },
|
|
2113
|
+
{ methodName: 'nullable', zodMethod: 'nullable', parameterCount: 0 },
|
|
2114
|
+
{ methodName: 'nullish', zodMethod: 'nullish', parameterCount: 0 },
|
|
2115
|
+
{ methodName: 'default', zodMethod: 'default', parameterCount: 1 },
|
|
2116
|
+
{
|
|
2117
|
+
methodName: 'enum',
|
|
2118
|
+
zodMethod: 'enum',
|
|
2119
|
+
parameterCount: 1,
|
|
2120
|
+
fieldTypeCompatibility: ['String'],
|
|
2121
|
+
},
|
|
2122
|
+
{
|
|
2123
|
+
methodName: 'datetime',
|
|
2124
|
+
zodMethod: 'datetime',
|
|
2125
|
+
parameterCount: 'variable',
|
|
2126
|
+
fieldTypeCompatibility: ['String'],
|
|
2127
|
+
},
|
|
2128
|
+
{ methodName: 'object', zodMethod: 'object', parameterCount: 0 },
|
|
2129
|
+
{ methodName: 'array', zodMethod: 'array', parameterCount: 'variable' },
|
|
2130
|
+
{
|
|
2131
|
+
methodName: 'json',
|
|
2132
|
+
zodMethod: 'json',
|
|
2133
|
+
parameterCount: 0,
|
|
2134
|
+
fieldTypeCompatibility: ['Json'],
|
|
2135
|
+
},
|
|
2136
|
+
{
|
|
2137
|
+
methodName: 'coerce',
|
|
2138
|
+
zodMethod: 'coerce',
|
|
2139
|
+
parameterCount: 0,
|
|
2140
|
+
// DateTime already has its own generator-level dateTimeStrategy:'coerce'; String
|
|
2141
|
+
// coercion (z.coerce.string()) stringifies arbitrary input, a different and much
|
|
2142
|
+
// rarer need than #237's ask (a numeric HTML form value coming in as a string).
|
|
2143
|
+
// Deliberately excludes 'Array': effectiveFieldType becomes 'Array' for list
|
|
2144
|
+
// fields, so `Int[]` with @zod.coerce() is rejected by the same
|
|
2145
|
+
// fieldTypeCompatibility check every other validator goes through, rather than
|
|
2146
|
+
// silently doing nothing.
|
|
2147
|
+
fieldTypeCompatibility: ['Int', 'Float', 'BigInt', 'Boolean'],
|
|
2148
|
+
},
|
|
2149
|
+
{ methodName: 'catch', zodMethod: 'catch', parameterCount: 1 },
|
|
2150
|
+
{ methodName: 'pipe', zodMethod: 'pipe', parameterCount: 1 },
|
|
2151
|
+
{ methodName: 'brand', zodMethod: 'brand', parameterCount: 0 },
|
|
2152
|
+
{ methodName: 'readonly', zodMethod: 'readonly', parameterCount: 0 },
|
|
2153
|
+
|
|
2154
|
+
// New Zod v4 string format methods - Issue #233
|
|
2155
|
+
// Network/URL validation methods
|
|
2156
|
+
{
|
|
2157
|
+
methodName: 'httpUrl',
|
|
2158
|
+
zodMethod: 'httpUrl',
|
|
2159
|
+
parameterCount: 'variable',
|
|
2160
|
+
fieldTypeCompatibility: ['String'],
|
|
2161
|
+
},
|
|
2162
|
+
{
|
|
2163
|
+
methodName: 'hostname',
|
|
2164
|
+
zodMethod: 'hostname',
|
|
2165
|
+
parameterCount: 'variable',
|
|
2166
|
+
fieldTypeCompatibility: ['String'],
|
|
2167
|
+
},
|
|
2168
|
+
|
|
2169
|
+
// Identifier validation methods
|
|
2170
|
+
{
|
|
2171
|
+
methodName: 'guid',
|
|
2172
|
+
zodMethod: 'guid',
|
|
2173
|
+
parameterCount: 'variable',
|
|
2174
|
+
fieldTypeCompatibility: ['String'],
|
|
2175
|
+
},
|
|
2176
|
+
{
|
|
2177
|
+
methodName: 'nanoid',
|
|
2178
|
+
zodMethod: 'nanoid',
|
|
2179
|
+
parameterCount: 'variable',
|
|
2180
|
+
fieldTypeCompatibility: ['String'],
|
|
2181
|
+
},
|
|
2182
|
+
{
|
|
2183
|
+
methodName: 'cuid',
|
|
2184
|
+
zodMethod: 'cuid',
|
|
2185
|
+
parameterCount: 'variable',
|
|
2186
|
+
fieldTypeCompatibility: ['String'],
|
|
2187
|
+
},
|
|
2188
|
+
{
|
|
2189
|
+
methodName: 'cuid2',
|
|
2190
|
+
zodMethod: 'cuid2',
|
|
2191
|
+
parameterCount: 'variable',
|
|
2192
|
+
fieldTypeCompatibility: ['String'],
|
|
2193
|
+
},
|
|
2194
|
+
{
|
|
2195
|
+
methodName: 'ulid',
|
|
2196
|
+
zodMethod: 'ulid',
|
|
2197
|
+
parameterCount: 'variable',
|
|
2198
|
+
fieldTypeCompatibility: ['String'],
|
|
2199
|
+
},
|
|
2200
|
+
|
|
2201
|
+
// Encoding validation methods
|
|
2202
|
+
{
|
|
2203
|
+
methodName: 'base64',
|
|
2204
|
+
zodMethod: 'base64',
|
|
2205
|
+
parameterCount: 'variable',
|
|
2206
|
+
fieldTypeCompatibility: ['String'],
|
|
2207
|
+
},
|
|
2208
|
+
{
|
|
2209
|
+
methodName: 'base64url',
|
|
2210
|
+
zodMethod: 'base64url',
|
|
2211
|
+
parameterCount: 'variable',
|
|
2212
|
+
fieldTypeCompatibility: ['String'],
|
|
2213
|
+
},
|
|
2214
|
+
{
|
|
2215
|
+
methodName: 'hex',
|
|
2216
|
+
zodMethod: 'hex',
|
|
2217
|
+
parameterCount: 'variable',
|
|
2218
|
+
fieldTypeCompatibility: ['String'],
|
|
2219
|
+
},
|
|
2220
|
+
|
|
2221
|
+
// Security/Crypto validation methods
|
|
2222
|
+
{
|
|
2223
|
+
methodName: 'jwt',
|
|
2224
|
+
zodMethod: 'jwt',
|
|
2225
|
+
parameterCount: 'variable',
|
|
2226
|
+
fieldTypeCompatibility: ['String'],
|
|
2227
|
+
},
|
|
2228
|
+
{
|
|
2229
|
+
methodName: 'hash',
|
|
2230
|
+
zodMethod: 'hash',
|
|
2231
|
+
parameterCount: 1, // Takes algorithm parameter like "sha256"
|
|
2232
|
+
fieldTypeCompatibility: ['String'],
|
|
2233
|
+
},
|
|
2234
|
+
|
|
2235
|
+
// Network validation methods
|
|
2236
|
+
{
|
|
2237
|
+
methodName: 'ipv4',
|
|
2238
|
+
zodMethod: 'ipv4',
|
|
2239
|
+
parameterCount: 'variable',
|
|
2240
|
+
fieldTypeCompatibility: ['String'],
|
|
2241
|
+
},
|
|
2242
|
+
{
|
|
2243
|
+
methodName: 'ipv6',
|
|
2244
|
+
zodMethod: 'ipv6',
|
|
2245
|
+
parameterCount: 'variable',
|
|
2246
|
+
fieldTypeCompatibility: ['String'],
|
|
2247
|
+
},
|
|
2248
|
+
{
|
|
2249
|
+
methodName: 'cidrv4',
|
|
2250
|
+
zodMethod: 'cidrv4',
|
|
2251
|
+
parameterCount: 'variable',
|
|
2252
|
+
fieldTypeCompatibility: ['String'],
|
|
2253
|
+
},
|
|
2254
|
+
{
|
|
2255
|
+
methodName: 'cidrv6',
|
|
2256
|
+
zodMethod: 'cidrv6',
|
|
2257
|
+
parameterCount: 'variable',
|
|
2258
|
+
fieldTypeCompatibility: ['String'],
|
|
2259
|
+
},
|
|
2260
|
+
|
|
2261
|
+
// Character validation methods
|
|
2262
|
+
{
|
|
2263
|
+
methodName: 'emoji',
|
|
2264
|
+
zodMethod: 'emoji',
|
|
2265
|
+
parameterCount: 'variable',
|
|
2266
|
+
fieldTypeCompatibility: ['String'],
|
|
2267
|
+
},
|
|
2268
|
+
|
|
2269
|
+
// ISO date/time validation methods
|
|
2270
|
+
{
|
|
2271
|
+
methodName: 'isoDate',
|
|
2272
|
+
zodMethod: 'iso.date',
|
|
2273
|
+
parameterCount: 'variable',
|
|
2274
|
+
fieldTypeCompatibility: ['String'],
|
|
2275
|
+
},
|
|
2276
|
+
{
|
|
2277
|
+
methodName: 'isoTime',
|
|
2278
|
+
zodMethod: 'iso.time',
|
|
2279
|
+
parameterCount: 'variable',
|
|
2280
|
+
fieldTypeCompatibility: ['String'],
|
|
2281
|
+
},
|
|
2282
|
+
{
|
|
2283
|
+
methodName: 'isoDatetime',
|
|
2284
|
+
zodMethod: 'iso.datetime',
|
|
2285
|
+
parameterCount: 'variable',
|
|
2286
|
+
fieldTypeCompatibility: ['String'],
|
|
2287
|
+
},
|
|
2288
|
+
{
|
|
2289
|
+
methodName: 'isoDuration',
|
|
2290
|
+
zodMethod: 'iso.duration',
|
|
2291
|
+
parameterCount: 'variable',
|
|
2292
|
+
fieldTypeCompatibility: ['String'],
|
|
2293
|
+
},
|
|
2294
|
+
|
|
2295
|
+
// Custom schema method - replaces base type entirely
|
|
2296
|
+
{
|
|
2297
|
+
methodName: 'custom',
|
|
2298
|
+
zodMethod: 'object', // This will be overridden in special handling
|
|
2299
|
+
parameterCount: 1,
|
|
2300
|
+
fieldTypeCompatibility: ['Json'], // Only works with Json fields
|
|
2301
|
+
},
|
|
2302
|
+
|
|
2303
|
+
// Note: Removed 'string', 'number', 'boolean' method configs as they duplicate base types
|
|
2304
|
+
];
|
|
2305
|
+
|
|
2306
|
+
// If field type is provided, find the config that matches both method name and field type
|
|
2307
|
+
if (fieldType) {
|
|
2308
|
+
const compatibleConfigs = configs.filter(
|
|
2309
|
+
(config) =>
|
|
2310
|
+
config.methodName === methodName &&
|
|
2311
|
+
(!config.fieldTypeCompatibility || config.fieldTypeCompatibility.includes(fieldType)),
|
|
2312
|
+
);
|
|
2313
|
+
|
|
2314
|
+
if (compatibleConfigs.length > 0) {
|
|
2315
|
+
return compatibleConfigs[0];
|
|
2316
|
+
}
|
|
2317
|
+
}
|
|
2318
|
+
|
|
2319
|
+
// Fallback to first match by method name only
|
|
2320
|
+
return configs.find((config) => config.methodName === methodName) || null;
|
|
2321
|
+
}
|
|
2322
|
+
|
|
2323
|
+
/**
|
|
2324
|
+
* Format parameters for Zod method calls
|
|
2325
|
+
*
|
|
2326
|
+
* @param parameters - Array of parameter values
|
|
2327
|
+
* @returns Formatted parameter string
|
|
2328
|
+
*/
|
|
2329
|
+
function formatParameters(parameters: unknown[]): string {
|
|
2330
|
+
if (parameters.length === 0) {
|
|
2331
|
+
return '';
|
|
2332
|
+
}
|
|
2333
|
+
|
|
2334
|
+
return parameters.map((param) => formatSingleParameter(param)).join(', ');
|
|
2335
|
+
}
|
|
2336
|
+
|
|
2337
|
+
/**
|
|
2338
|
+
* Format parameters specifically for Zod v4 string format methods
|
|
2339
|
+
* These methods expect either string error messages or validation parameter objects
|
|
2340
|
+
*
|
|
2341
|
+
* From the Zod v4 API: all string format methods expect `string | core.$ZodCheck{Method}Params`
|
|
2342
|
+
* These are validation parameters, not configuration parameters
|
|
2343
|
+
*
|
|
2344
|
+
* @param method - The method name (nanoid, jwt, base64, etc.)
|
|
2345
|
+
* @param parameters - Array of parameters to format
|
|
2346
|
+
* @returns Formatted parameter string or empty string
|
|
2347
|
+
*/
|
|
2348
|
+
function formatV4StringFormatParameters(_method: string, parameters: any[] | undefined): string {
|
|
2349
|
+
if (!parameters || parameters.length === 0) {
|
|
2350
|
+
return '';
|
|
2351
|
+
}
|
|
2352
|
+
|
|
2353
|
+
const firstParam = parameters[0];
|
|
2354
|
+
|
|
2355
|
+
// For numeric/boolean parameters, preserve them as-is to maintain user intent
|
|
2356
|
+
// Even if they result in invalid TypeScript, let the user fix their annotations
|
|
2357
|
+
if (typeof firstParam === 'number' || typeof firstParam === 'boolean') {
|
|
2358
|
+
return formatParameters(parameters);
|
|
2359
|
+
}
|
|
2360
|
+
|
|
2361
|
+
// For string parameters, format them normally as error messages
|
|
2362
|
+
if (typeof firstParam === 'string') {
|
|
2363
|
+
return formatSingleParameter(firstParam);
|
|
2364
|
+
}
|
|
2365
|
+
|
|
2366
|
+
// For other types (objects, arrays), format normally
|
|
2367
|
+
return formatParameters(parameters);
|
|
2368
|
+
}
|
|
2369
|
+
|
|
2370
|
+
/**
|
|
2371
|
+
* Format a single parameter for Zod method calls
|
|
2372
|
+
*
|
|
2373
|
+
* @param param - Parameter value
|
|
2374
|
+
* @returns Formatted parameter string
|
|
2375
|
+
*/
|
|
2376
|
+
function formatSingleParameter(param: unknown): string {
|
|
2377
|
+
if (param === null) {
|
|
2378
|
+
return 'null';
|
|
2379
|
+
}
|
|
2380
|
+
|
|
2381
|
+
if (param === undefined) {
|
|
2382
|
+
return 'undefined';
|
|
2383
|
+
}
|
|
2384
|
+
|
|
2385
|
+
if (typeof param === 'string') {
|
|
2386
|
+
// Check if it's a complex expression that shouldn't be quoted
|
|
2387
|
+
// Complex expressions include: new Date(), RegExp(), function calls,
|
|
2388
|
+
// arrow functions (value => ... or (value) => ...), async arrows, or dotted calls like z.string()
|
|
2389
|
+
const isDottedOrCtorCall = /^(new\s+\w+\(|RegExp\(|[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)*\()/;
|
|
2390
|
+
const isFunctionKeyword = /^\s*function\b/;
|
|
2391
|
+
const isArrowFunction = /^\s*(?:async\s+)?(?:\([^)]*\)|[A-Za-z_$][\w$]*)\s*=>/;
|
|
2392
|
+
if (
|
|
2393
|
+
isDottedOrCtorCall.test(param) ||
|
|
2394
|
+
isFunctionKeyword.test(param) ||
|
|
2395
|
+
isArrowFunction.test(param)
|
|
2396
|
+
) {
|
|
2397
|
+
return param; // Return complex/functional expressions as-is
|
|
2398
|
+
}
|
|
2399
|
+
// Prefer double quotes for URL-like strings (e.g., https://) to match snapshots
|
|
2400
|
+
if (/^https?:\/\//i.test(param)) {
|
|
2401
|
+
const escapedDq = param.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
|
|
2402
|
+
return `"${escapedDq}"`;
|
|
2403
|
+
}
|
|
2404
|
+
// Default: single quotes for plain strings (error messages, enum values, etc.)
|
|
2405
|
+
const escapedSq = param.replace(/\\/g, '\\\\').replace(/'/g, "\\'");
|
|
2406
|
+
return `'${escapedSq}'`;
|
|
2407
|
+
}
|
|
2408
|
+
|
|
2409
|
+
if (typeof param === 'number' || typeof param === 'boolean') {
|
|
2410
|
+
return String(param);
|
|
2411
|
+
}
|
|
2412
|
+
|
|
2413
|
+
if (param instanceof RegExp) {
|
|
2414
|
+
return param.toString();
|
|
2415
|
+
}
|
|
2416
|
+
|
|
2417
|
+
if (Array.isArray(param)) {
|
|
2418
|
+
return `[${param.map(formatSingleParameter).join(', ')}]`;
|
|
2419
|
+
}
|
|
2420
|
+
|
|
2421
|
+
if (typeof param === 'object') {
|
|
2422
|
+
// Handle special JavaScript object literal marker
|
|
2423
|
+
if (param && typeof param === 'object' && '__js_object_literal__' in param) {
|
|
2424
|
+
// Return the raw JavaScript object literal without quotes
|
|
2425
|
+
return (param as { __js_object_literal__: string }).__js_object_literal__;
|
|
2426
|
+
}
|
|
2427
|
+
return JSON.stringify(param);
|
|
2428
|
+
}
|
|
2429
|
+
|
|
2430
|
+
// Fallback for unknown types
|
|
2431
|
+
return String(param);
|
|
2432
|
+
}
|
|
2433
|
+
|
|
2434
|
+
/**
|
|
2435
|
+
* Generate complete Zod schema with base type and validations
|
|
2436
|
+
*
|
|
2437
|
+
* @param baseType - Base Zod type (e.g., 'z.string()', 'z.number()')
|
|
2438
|
+
* @param annotations - Parsed annotations
|
|
2439
|
+
* @param context - Field context
|
|
2440
|
+
* @returns Complete schema generation result
|
|
2441
|
+
*/
|
|
2442
|
+
export function generateCompleteZodSchema(
|
|
2443
|
+
baseType: string,
|
|
2444
|
+
annotations: ParsedZodAnnotation[],
|
|
2445
|
+
context: FieldCommentContext,
|
|
2446
|
+
zodVersion: 'auto' | 'v3' | 'v4' = 'auto',
|
|
2447
|
+
): ZodSchemaGenerationResult {
|
|
2448
|
+
const validationResult = mapAnnotationsToZodSchema(annotations, context, zodVersion);
|
|
2449
|
+
|
|
2450
|
+
if (!validationResult.isValid) {
|
|
2451
|
+
return validationResult;
|
|
2452
|
+
}
|
|
2453
|
+
|
|
2454
|
+
// Combine base type with validation chain
|
|
2455
|
+
let schemaChain = validationResult.schemaChain;
|
|
2456
|
+
|
|
2457
|
+
// Check if the schema chain is a replacement method (doesn't start with dot)
|
|
2458
|
+
const hasChain = schemaChain.length > 0;
|
|
2459
|
+
const isReplacementSchema = hasChain && !schemaChain.startsWith('.');
|
|
2460
|
+
|
|
2461
|
+
let fullSchema: string;
|
|
2462
|
+
if (!hasChain) {
|
|
2463
|
+
// No validations to apply; return base type untouched
|
|
2464
|
+
fullSchema = baseType;
|
|
2465
|
+
} else if (isReplacementSchema) {
|
|
2466
|
+
// For replacement schemas (json, enum), use them directly instead of concatenating
|
|
2467
|
+
fullSchema = schemaChain;
|
|
2468
|
+
} else {
|
|
2469
|
+
// Remove redundant .optional() calls if base type already includes .optional()
|
|
2470
|
+
if (baseType.includes('.optional()') && schemaChain.includes('.optional()')) {
|
|
2471
|
+
// Remove all .optional() calls from the chain since base type already handles optionality
|
|
2472
|
+
schemaChain = schemaChain.replace(/\.optional\(\)/g, '');
|
|
2473
|
+
}
|
|
2474
|
+
|
|
2475
|
+
// Regular concatenation for chaining methods
|
|
2476
|
+
fullSchema = baseType + schemaChain;
|
|
2477
|
+
}
|
|
2478
|
+
|
|
2479
|
+
return {
|
|
2480
|
+
schemaChain: fullSchema,
|
|
2481
|
+
imports: validationResult.imports,
|
|
2482
|
+
errors: validationResult.errors,
|
|
2483
|
+
isValid: validationResult.isValid,
|
|
2484
|
+
};
|
|
2485
|
+
}
|
|
2486
|
+
|
|
2487
|
+
/**
|
|
2488
|
+
* Field-aware base type resolver to correctly handle enums vs relations.
|
|
2489
|
+
*/
|
|
2490
|
+
export function getBaseZodTypeForField(
|
|
2491
|
+
field: import('@prisma/generator-helper').DMMF.Field,
|
|
2492
|
+
isOptionalOverride?: boolean,
|
|
2493
|
+
): string {
|
|
2494
|
+
const isOptional =
|
|
2495
|
+
typeof isOptionalOverride === 'boolean' ? isOptionalOverride : !field.isRequired;
|
|
2496
|
+
|
|
2497
|
+
let baseType: string;
|
|
2498
|
+
switch (field.type) {
|
|
2499
|
+
case 'String':
|
|
2500
|
+
baseType = 'z.string()';
|
|
2501
|
+
break;
|
|
2502
|
+
case 'Int':
|
|
2503
|
+
baseType = 'z.number().int()';
|
|
2504
|
+
break;
|
|
2505
|
+
case 'Float':
|
|
2506
|
+
baseType = 'z.number()';
|
|
2507
|
+
break;
|
|
2508
|
+
case 'Boolean':
|
|
2509
|
+
baseType = 'z.boolean()';
|
|
2510
|
+
break;
|
|
2511
|
+
case 'DateTime':
|
|
2512
|
+
baseType = 'z.date()';
|
|
2513
|
+
break;
|
|
2514
|
+
case 'BigInt':
|
|
2515
|
+
baseType = 'z.bigint()';
|
|
2516
|
+
break;
|
|
2517
|
+
case 'Decimal':
|
|
2518
|
+
baseType = 'z.number()';
|
|
2519
|
+
break;
|
|
2520
|
+
case 'Json':
|
|
2521
|
+
baseType = 'z.unknown()';
|
|
2522
|
+
break;
|
|
2523
|
+
case 'Bytes':
|
|
2524
|
+
baseType = 'z.instanceof(Uint8Array)';
|
|
2525
|
+
break;
|
|
2526
|
+
default:
|
|
2527
|
+
if (field.kind === 'enum') {
|
|
2528
|
+
baseType = `${String(field.type)}Schema`;
|
|
2529
|
+
} else {
|
|
2530
|
+
baseType = 'z.unknown()';
|
|
2531
|
+
}
|
|
2532
|
+
break;
|
|
2533
|
+
}
|
|
2534
|
+
|
|
2535
|
+
if (field.isList) {
|
|
2536
|
+
baseType = `z.array(${baseType})`;
|
|
2537
|
+
}
|
|
2538
|
+
if (isOptional) {
|
|
2539
|
+
baseType = `${baseType}.optional()`;
|
|
2540
|
+
}
|
|
2541
|
+
return baseType;
|
|
2542
|
+
}
|
|
2543
|
+
|
|
2544
|
+
/**
|
|
2545
|
+
* Get required imports for Zod schema generation
|
|
2546
|
+
*
|
|
2547
|
+
* @param fieldType - Prisma field type
|
|
2548
|
+
* @param customImports - Additional imports from validation methods
|
|
2549
|
+
* @returns Set of import statements
|
|
2550
|
+
*/
|
|
2551
|
+
export function getRequiredImports(
|
|
2552
|
+
fieldType: string,
|
|
2553
|
+
customImports: Set<string> = new Set(),
|
|
2554
|
+
): Set<string> {
|
|
2555
|
+
const imports = new Set<string>(customImports);
|
|
2556
|
+
|
|
2557
|
+
// Always need zod
|
|
2558
|
+
imports.add('z');
|
|
2559
|
+
|
|
2560
|
+
// Special imports for certain types
|
|
2561
|
+
switch (fieldType) {
|
|
2562
|
+
case 'Bytes':
|
|
2563
|
+
// Uint8Array is built-in, no import needed
|
|
2564
|
+
break;
|
|
2565
|
+
case 'DateTime':
|
|
2566
|
+
// Date is built-in, no import needed
|
|
2567
|
+
break;
|
|
2568
|
+
default:
|
|
2569
|
+
// Check if it's an enum type (would need enum import)
|
|
2570
|
+
if (!['String', 'Int', 'Float', 'Boolean', 'BigInt', 'Decimal', 'Json'].includes(fieldType)) {
|
|
2571
|
+
// This is likely an enum or model type - might need custom import
|
|
2572
|
+
imports.add(`${fieldType} // Enum import may be needed`);
|
|
2573
|
+
}
|
|
2574
|
+
break;
|
|
2575
|
+
}
|
|
2576
|
+
|
|
2577
|
+
return imports;
|
|
2578
|
+
}
|
|
2579
|
+
|
|
2580
|
+
/**
|
|
2581
|
+
* Convert a JavaScript object to a Zod object schema string
|
|
2582
|
+
*/
|
|
2583
|
+
function convertObjectToZodSchema(obj: any): string {
|
|
2584
|
+
const properties: string[] = [];
|
|
2585
|
+
|
|
2586
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
2587
|
+
const zodType = inferZodTypeFromValue(value);
|
|
2588
|
+
properties.push(`${JSON.stringify(key)}: ${zodType}`);
|
|
2589
|
+
}
|
|
2590
|
+
|
|
2591
|
+
return `{ ${properties.join(', ')} }`;
|
|
2592
|
+
}
|
|
2593
|
+
|
|
2594
|
+
/**
|
|
2595
|
+
* Infer Zod type from a JavaScript value
|
|
2596
|
+
*/
|
|
2597
|
+
function inferZodTypeFromValue(value: any): string {
|
|
2598
|
+
if (typeof value === 'string') {
|
|
2599
|
+
return `z.string()`;
|
|
2600
|
+
} else if (typeof value === 'number') {
|
|
2601
|
+
return Number.isInteger(value) ? `z.number().int()` : `z.number()`;
|
|
2602
|
+
} else if (typeof value === 'boolean') {
|
|
2603
|
+
return `z.boolean()`;
|
|
2604
|
+
} else if (Array.isArray(value)) {
|
|
2605
|
+
if (value.length === 0) {
|
|
2606
|
+
return `z.array(z.unknown())`;
|
|
2607
|
+
}
|
|
2608
|
+
const firstElementType = inferZodTypeFromValue(value[0]);
|
|
2609
|
+
return `z.array(${firstElementType})`;
|
|
2610
|
+
} else if (value && typeof value === 'object') {
|
|
2611
|
+
return `z.object(${convertObjectToZodSchema(value)})`;
|
|
2612
|
+
} else if (value === null) {
|
|
2613
|
+
return `z.null()`;
|
|
2614
|
+
} else {
|
|
2615
|
+
return `z.unknown()`;
|
|
2616
|
+
}
|
|
2617
|
+
}
|
|
2618
|
+
|
|
2619
|
+
/**
|
|
2620
|
+
* Detect if comment contains @zod.import annotations
|
|
2621
|
+
*
|
|
2622
|
+
* @param comment - Normalized comment string
|
|
2623
|
+
* @returns True if @zod.import annotations are detected
|
|
2624
|
+
*/
|
|
2625
|
+
export function detectCustomImports(comment: string): boolean {
|
|
2626
|
+
if (!comment) {
|
|
2627
|
+
return false;
|
|
2628
|
+
}
|
|
2629
|
+
|
|
2630
|
+
// Look for @zod.import patterns (case-insensitive)
|
|
2631
|
+
const importPattern = /@zod\s*\.\s*import\s*\(/i;
|
|
2632
|
+
return importPattern.test(comment);
|
|
2633
|
+
}
|
|
2634
|
+
|
|
2635
|
+
/**
|
|
2636
|
+
* Parse custom imports from a comment string
|
|
2637
|
+
*
|
|
2638
|
+
* Supports both model-level and field-level imports:
|
|
2639
|
+
* - @zod.import(["import { myFunction } from 'mypackage'"])
|
|
2640
|
+
* - @zod.import(["import myFunction from 'mypackage'"])
|
|
2641
|
+
* - @zod.import(["import * as myModule from 'mypackage'"])
|
|
2642
|
+
*
|
|
2643
|
+
* @param comment - Comment string to parse
|
|
2644
|
+
* @param context - Context for error reporting (model or field)
|
|
2645
|
+
* @returns Custom imports parsing result
|
|
2646
|
+
*/
|
|
2647
|
+
export function parseCustomImports(
|
|
2648
|
+
comment: string,
|
|
2649
|
+
context: ModelCommentContext | FieldCommentContext,
|
|
2650
|
+
): CustomImportsParseResult {
|
|
2651
|
+
const result: CustomImportsParseResult = {
|
|
2652
|
+
imports: [],
|
|
2653
|
+
parseErrors: [],
|
|
2654
|
+
isValid: true,
|
|
2655
|
+
customSchema: undefined,
|
|
2656
|
+
};
|
|
2657
|
+
|
|
2658
|
+
if (!comment || !detectCustomImports(comment)) {
|
|
2659
|
+
return result;
|
|
2660
|
+
}
|
|
2661
|
+
|
|
2662
|
+
try {
|
|
2663
|
+
// Simpler approach: find @zod.import patterns and check for .custom.use after
|
|
2664
|
+
const importPattern = /@zod\s*\.\s*import\s*\(([^)]+(?:\([^)]*\)[^)]*)*)\)/gi;
|
|
2665
|
+
let match;
|
|
2666
|
+
|
|
2667
|
+
while ((match = importPattern.exec(comment)) !== null) {
|
|
2668
|
+
const importArrayString = match[1].trim();
|
|
2669
|
+
const endOfImport = match.index + match[0].length;
|
|
2670
|
+
const afterImport = comment.substring(endOfImport);
|
|
2671
|
+
|
|
2672
|
+
// Look for validation methods after the import - support both field and model level
|
|
2673
|
+
let customSchemaString: string | null = null;
|
|
2674
|
+
|
|
2675
|
+
// Field-level: .custom.use(...)
|
|
2676
|
+
const customUseMatch = afterImport.match(/^\s*\.\s*custom\s*\.\s*use\s*\(/);
|
|
2677
|
+
if (customUseMatch) {
|
|
2678
|
+
const startPos = customUseMatch.index! + customUseMatch[0].length;
|
|
2679
|
+
const endPos = findBalancedParentheses(afterImport, startPos);
|
|
2680
|
+
if (endPos !== -1) {
|
|
2681
|
+
customSchemaString = afterImport.substring(startPos, endPos).trim();
|
|
2682
|
+
}
|
|
2683
|
+
}
|
|
2684
|
+
|
|
2685
|
+
// Model-level: .refine(...), .transform(...), etc.
|
|
2686
|
+
if (!customSchemaString) {
|
|
2687
|
+
const modelValidationMatch = afterImport.match(
|
|
2688
|
+
/^\s*\.\s*(refine|transform|superRefine|pipe)\s*\(/,
|
|
2689
|
+
);
|
|
2690
|
+
if (modelValidationMatch) {
|
|
2691
|
+
const method = modelValidationMatch[1];
|
|
2692
|
+
const startPos = modelValidationMatch.index! + modelValidationMatch[0].length;
|
|
2693
|
+
const endPos = findBalancedParentheses(afterImport, startPos);
|
|
2694
|
+
if (endPos !== -1) {
|
|
2695
|
+
const validationArgs = afterImport.substring(startPos, endPos).trim();
|
|
2696
|
+
customSchemaString = `${method}(${validationArgs})`;
|
|
2697
|
+
}
|
|
2698
|
+
}
|
|
2699
|
+
}
|
|
2700
|
+
|
|
2701
|
+
try {
|
|
2702
|
+
// Parse the import array - it should be a JSON array of strings
|
|
2703
|
+
const importStatements = parseImportArray(importArrayString, context);
|
|
2704
|
+
|
|
2705
|
+
// Process each import statement
|
|
2706
|
+
for (const importStatement of importStatements) {
|
|
2707
|
+
const customImport = parseImportStatement(importStatement, context);
|
|
2708
|
+
if (customImport) {
|
|
2709
|
+
result.imports.push(customImport);
|
|
2710
|
+
}
|
|
2711
|
+
}
|
|
2712
|
+
|
|
2713
|
+
// Store the custom schema if present
|
|
2714
|
+
if (customSchemaString) {
|
|
2715
|
+
result.customSchema = customSchemaString;
|
|
2716
|
+
}
|
|
2717
|
+
} catch (error) {
|
|
2718
|
+
const contextStr =
|
|
2719
|
+
'fieldName' in context
|
|
2720
|
+
? `${context.modelName}.${context.fieldName}`
|
|
2721
|
+
: `${context.modelName}`;
|
|
2722
|
+
|
|
2723
|
+
result.parseErrors.push(
|
|
2724
|
+
`${contextStr}: Failed to parse import array: ${error instanceof Error ? error.message : String(error)}`,
|
|
2725
|
+
);
|
|
2726
|
+
result.isValid = false;
|
|
2727
|
+
}
|
|
2728
|
+
}
|
|
2729
|
+
|
|
2730
|
+
// Deduplicate imports by import statement
|
|
2731
|
+
result.imports = deduplicateImports(result.imports);
|
|
2732
|
+
} catch (error) {
|
|
2733
|
+
const contextStr =
|
|
2734
|
+
'fieldName' in context ? `${context.modelName}.${context.fieldName}` : `${context.modelName}`;
|
|
2735
|
+
|
|
2736
|
+
result.parseErrors.push(
|
|
2737
|
+
`${contextStr}: Failed to parse custom imports: ${error instanceof Error ? error.message : String(error)}`,
|
|
2738
|
+
);
|
|
2739
|
+
result.isValid = false;
|
|
2740
|
+
}
|
|
2741
|
+
|
|
2742
|
+
return result;
|
|
2743
|
+
}
|
|
2744
|
+
|
|
2745
|
+
/**
|
|
2746
|
+
* Parse import array string into individual import statements
|
|
2747
|
+
*
|
|
2748
|
+
* @param importArrayString - String representation of import array
|
|
2749
|
+
* @param context - Context for error reporting
|
|
2750
|
+
* @returns Array of import statement strings
|
|
2751
|
+
*/
|
|
2752
|
+
function parseImportArray(
|
|
2753
|
+
importArrayString: string,
|
|
2754
|
+
_context: ModelCommentContext | FieldCommentContext,
|
|
2755
|
+
): string[] {
|
|
2756
|
+
const trimmedInput = importArrayString.trim();
|
|
2757
|
+
|
|
2758
|
+
if (!trimmedInput) {
|
|
2759
|
+
return [];
|
|
2760
|
+
}
|
|
2761
|
+
|
|
2762
|
+
const statementsFromJson = parseImportArrayJson(trimmedInput);
|
|
2763
|
+
if (statementsFromJson.length > 0) {
|
|
2764
|
+
return statementsFromJson;
|
|
2765
|
+
}
|
|
2766
|
+
|
|
2767
|
+
const fallbackStatements = extractImportStatements(trimmedInput);
|
|
2768
|
+
if (fallbackStatements.length > 0) {
|
|
2769
|
+
return fallbackStatements;
|
|
2770
|
+
}
|
|
2771
|
+
|
|
2772
|
+
throw new Error(
|
|
2773
|
+
`Invalid import array format. Expected JSON array of strings, got: ${importArrayString}`,
|
|
2774
|
+
);
|
|
2775
|
+
}
|
|
2776
|
+
|
|
2777
|
+
function extractImportStatements(segment: string): string[] {
|
|
2778
|
+
const cleanedSegment = stripWrappingQuotes(segment);
|
|
2779
|
+
|
|
2780
|
+
if (!cleanedSegment) {
|
|
2781
|
+
return [];
|
|
2782
|
+
}
|
|
2783
|
+
|
|
2784
|
+
const statements: string[] = [];
|
|
2785
|
+
const importRegex = /import\s+(?:type\s+)?[\s\S]*?from\s+['"`][^'"`]+['"`](?:\s*;)?/g;
|
|
2786
|
+
let match: RegExpExecArray | null;
|
|
2787
|
+
|
|
2788
|
+
while ((match = importRegex.exec(cleanedSegment)) !== null) {
|
|
2789
|
+
const statement = match[0].trim();
|
|
2790
|
+
if (statement) {
|
|
2791
|
+
statements.push(statement);
|
|
2792
|
+
}
|
|
2793
|
+
}
|
|
2794
|
+
|
|
2795
|
+
if (!statements.length && cleanedSegment.startsWith('import')) {
|
|
2796
|
+
statements.push(cleanedSegment);
|
|
2797
|
+
}
|
|
2798
|
+
|
|
2799
|
+
return statements;
|
|
2800
|
+
}
|
|
2801
|
+
|
|
2802
|
+
function stripWrappingQuotes(value: string): string {
|
|
2803
|
+
const trimmed = value.trim();
|
|
2804
|
+
|
|
2805
|
+
if (trimmed.length >= 2) {
|
|
2806
|
+
const first = trimmed[0];
|
|
2807
|
+
const last = trimmed[trimmed.length - 1];
|
|
2808
|
+
|
|
2809
|
+
if (first === last && (first === '"' || first === "'" || first === '`')) {
|
|
2810
|
+
const inner = trimmed.slice(1, -1);
|
|
2811
|
+
return unescapeString(inner);
|
|
2812
|
+
}
|
|
2813
|
+
}
|
|
2814
|
+
|
|
2815
|
+
return trimmed;
|
|
2816
|
+
}
|
|
2817
|
+
|
|
2818
|
+
function unescapeString(value: string): string {
|
|
2819
|
+
try {
|
|
2820
|
+
const escaped = value.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
|
|
2821
|
+
return JSON.parse(`"${escaped}"`);
|
|
2822
|
+
} catch {
|
|
2823
|
+
return value;
|
|
2824
|
+
}
|
|
2825
|
+
}
|
|
2826
|
+
|
|
2827
|
+
function parseImportArrayJson(raw: string): string[] {
|
|
2828
|
+
try {
|
|
2829
|
+
const jsonText = raw.startsWith('[') ? raw : `[${raw}]`;
|
|
2830
|
+
const parsed = JSON.parse(jsonText);
|
|
2831
|
+
|
|
2832
|
+
if (!Array.isArray(parsed)) {
|
|
2833
|
+
return [];
|
|
2834
|
+
}
|
|
2835
|
+
|
|
2836
|
+
const statements: string[] = [];
|
|
2837
|
+
|
|
2838
|
+
for (const entry of parsed) {
|
|
2839
|
+
if (typeof entry !== 'string') {
|
|
2840
|
+
continue;
|
|
2841
|
+
}
|
|
2842
|
+
|
|
2843
|
+
const extracted = extractImportStatements(entry);
|
|
2844
|
+
statements.push(...extracted);
|
|
2845
|
+
}
|
|
2846
|
+
|
|
2847
|
+
return statements;
|
|
2848
|
+
} catch {
|
|
2849
|
+
return [];
|
|
2850
|
+
}
|
|
2851
|
+
}
|
|
2852
|
+
|
|
2853
|
+
/**
|
|
2854
|
+
* Parse a single import statement into a CustomImport object
|
|
2855
|
+
*
|
|
2856
|
+
* @param importStatement - Import statement string
|
|
2857
|
+
* @param context - Context for error reporting
|
|
2858
|
+
* @returns CustomImport object or null if invalid
|
|
2859
|
+
*/
|
|
2860
|
+
function parseImportStatement(
|
|
2861
|
+
importStatement: string,
|
|
2862
|
+
context: ModelCommentContext | FieldCommentContext,
|
|
2863
|
+
): CustomImport | null {
|
|
2864
|
+
if (!importStatement || typeof importStatement !== 'string') {
|
|
2865
|
+
return null;
|
|
2866
|
+
}
|
|
2867
|
+
|
|
2868
|
+
const trimmed = importStatement.trim();
|
|
2869
|
+
|
|
2870
|
+
// Basic validation - must start with import and include a from-clause
|
|
2871
|
+
if (!/^\s*import\b/.test(trimmed) || !/\bfrom\s+['"`]/.test(trimmed)) {
|
|
2872
|
+
const contextStr =
|
|
2873
|
+
'fieldName' in context ? `${context.modelName}.${context.fieldName}` : `${context.modelName}`;
|
|
2874
|
+
|
|
2875
|
+
logger.warn(`${contextStr}: Invalid import statement format: ${trimmed}`);
|
|
2876
|
+
return null;
|
|
2877
|
+
}
|
|
2878
|
+
|
|
2879
|
+
// Detect type-only imports
|
|
2880
|
+
const isTypeOnly = /^\s*import\s+type\b/.test(trimmed);
|
|
2881
|
+
let hasValueSpecifier = false;
|
|
2882
|
+
let hasTypeSpecifier = isTypeOnly;
|
|
2883
|
+
|
|
2884
|
+
// Extract source module
|
|
2885
|
+
const fromMatch = trimmed.match(/from\s+['"`]([^'"`]+)['"`]/);
|
|
2886
|
+
if (!fromMatch) {
|
|
2887
|
+
const contextStr =
|
|
2888
|
+
'fieldName' in context ? `${context.modelName}.${context.fieldName}` : `${context.modelName}`;
|
|
2889
|
+
|
|
2890
|
+
logger.warn(`${contextStr}: Could not extract source module from: ${trimmed}`);
|
|
2891
|
+
return null;
|
|
2892
|
+
}
|
|
2893
|
+
|
|
2894
|
+
const source = fromMatch[1];
|
|
2895
|
+
|
|
2896
|
+
// Extract import clause (between the import keyword and the from-clause)
|
|
2897
|
+
const importPrefixMatch = trimmed.match(/^\s*import\s+(?:type\s+)?/);
|
|
2898
|
+
const clauseStart = importPrefixMatch ? importPrefixMatch[0].length : 0;
|
|
2899
|
+
const fromIndex = trimmed.search(/\bfrom\s+['"`]/);
|
|
2900
|
+
if (fromIndex === -1 || clauseStart === 0) {
|
|
2901
|
+
const contextStr =
|
|
2902
|
+
'fieldName' in context ? `${context.modelName}.${context.fieldName}` : `${context.modelName}`;
|
|
2903
|
+
|
|
2904
|
+
logger.warn(`${contextStr}: Could not determine import clause: ${trimmed}`);
|
|
2905
|
+
return null;
|
|
2906
|
+
}
|
|
2907
|
+
const importClause = trimmed.substring(clauseStart, fromIndex).trim();
|
|
2908
|
+
|
|
2909
|
+
// Determine import type(s) and extract imported items
|
|
2910
|
+
let isDefault = false;
|
|
2911
|
+
let isNamespace = false;
|
|
2912
|
+
const importedItems: string[] = [];
|
|
2913
|
+
|
|
2914
|
+
if (importClause.startsWith('* as ')) {
|
|
2915
|
+
isNamespace = true;
|
|
2916
|
+
const nameMatch = importClause.match(/\*\s+as\s+([A-Za-z_$][\w$]*)/);
|
|
2917
|
+
if (nameMatch) {
|
|
2918
|
+
importedItems.push(nameMatch[1]);
|
|
2919
|
+
}
|
|
2920
|
+
hasValueSpecifier = true;
|
|
2921
|
+
} else {
|
|
2922
|
+
const namedStart = importClause.indexOf('{');
|
|
2923
|
+
const namedEnd = importClause.lastIndexOf('}');
|
|
2924
|
+
|
|
2925
|
+
// Default portion (before named block)
|
|
2926
|
+
const defaultCandidate =
|
|
2927
|
+
namedStart > 0
|
|
2928
|
+
? importClause
|
|
2929
|
+
.slice(0, namedStart)
|
|
2930
|
+
.replace(/,?\s*$/, '')
|
|
2931
|
+
.trim()
|
|
2932
|
+
: namedStart === -1
|
|
2933
|
+
? importClause.trim().replace(/,?\s*$/, '')
|
|
2934
|
+
: '';
|
|
2935
|
+
|
|
2936
|
+
if (defaultCandidate) {
|
|
2937
|
+
isDefault = true;
|
|
2938
|
+
hasValueSpecifier = true;
|
|
2939
|
+
importedItems.push(defaultCandidate);
|
|
2940
|
+
}
|
|
2941
|
+
|
|
2942
|
+
// Named imports block
|
|
2943
|
+
if (namedStart !== -1 && namedEnd !== -1 && namedEnd > namedStart) {
|
|
2944
|
+
const namedBlock = importClause.slice(namedStart + 1, namedEnd);
|
|
2945
|
+
const namedItems = namedBlock
|
|
2946
|
+
.split(',')
|
|
2947
|
+
.map((item) => item.trim())
|
|
2948
|
+
.filter(Boolean)
|
|
2949
|
+
.map((item) => {
|
|
2950
|
+
const aliasMatch = item.match(/^([A-Za-z_$][\w$]*)\s+as\s+([A-Za-z_$][\w$]*)$/);
|
|
2951
|
+
if (aliasMatch) {
|
|
2952
|
+
hasValueSpecifier = true;
|
|
2953
|
+
return aliasMatch[2];
|
|
2954
|
+
}
|
|
2955
|
+
|
|
2956
|
+
const typeMatch = item.match(
|
|
2957
|
+
/^type\s+([A-Za-z_$][\w$]*)(?:\s+as\s+([A-Za-z_$][\w$]*))?$/i,
|
|
2958
|
+
);
|
|
2959
|
+
if (typeMatch) {
|
|
2960
|
+
hasTypeSpecifier = true;
|
|
2961
|
+
return typeMatch[2] ?? typeMatch[1];
|
|
2962
|
+
}
|
|
2963
|
+
|
|
2964
|
+
hasValueSpecifier = true;
|
|
2965
|
+
return item;
|
|
2966
|
+
});
|
|
2967
|
+
|
|
2968
|
+
importedItems.push(...namedItems);
|
|
2969
|
+
}
|
|
2970
|
+
}
|
|
2971
|
+
|
|
2972
|
+
const effectiveTypeOnly = isTypeOnly || (!hasValueSpecifier && hasTypeSpecifier);
|
|
2973
|
+
|
|
2974
|
+
return {
|
|
2975
|
+
importStatement: trimmed,
|
|
2976
|
+
source,
|
|
2977
|
+
importedItems,
|
|
2978
|
+
isDefault,
|
|
2979
|
+
isNamespace,
|
|
2980
|
+
isTypeOnly: effectiveTypeOnly,
|
|
2981
|
+
originalStatement: importStatement,
|
|
2982
|
+
};
|
|
2983
|
+
}
|
|
2984
|
+
|
|
2985
|
+
/**
|
|
2986
|
+
* Find balanced parentheses in a string starting from a given position
|
|
2987
|
+
*
|
|
2988
|
+
* @param text - Text to search in
|
|
2989
|
+
* @param startPos - Starting position (after opening parenthesis)
|
|
2990
|
+
* @returns End position of balanced parentheses or -1 if not found
|
|
2991
|
+
*/
|
|
2992
|
+
export function findBalancedParentheses(text: string, startPos: number): number {
|
|
2993
|
+
let depth = 1;
|
|
2994
|
+
let pos = startPos;
|
|
2995
|
+
let inString = false;
|
|
2996
|
+
let quote = '';
|
|
2997
|
+
|
|
2998
|
+
while (pos < text.length && depth > 0) {
|
|
2999
|
+
const ch = text[pos];
|
|
3000
|
+
|
|
3001
|
+
if (inString) {
|
|
3002
|
+
if (ch === '\\') {
|
|
3003
|
+
pos += 2;
|
|
3004
|
+
continue;
|
|
3005
|
+
}
|
|
3006
|
+
|
|
3007
|
+
if (ch === quote) {
|
|
3008
|
+
inString = false;
|
|
3009
|
+
quote = '';
|
|
3010
|
+
}
|
|
3011
|
+
|
|
3012
|
+
pos++;
|
|
3013
|
+
continue;
|
|
3014
|
+
}
|
|
3015
|
+
|
|
3016
|
+
if (ch === '"' || ch === "'") {
|
|
3017
|
+
inString = true;
|
|
3018
|
+
quote = ch;
|
|
3019
|
+
} else if (ch === '(') {
|
|
3020
|
+
depth++;
|
|
3021
|
+
} else if (ch === ')') {
|
|
3022
|
+
depth--;
|
|
3023
|
+
if (depth === 0) {
|
|
3024
|
+
return pos;
|
|
3025
|
+
}
|
|
3026
|
+
}
|
|
3027
|
+
|
|
3028
|
+
pos++;
|
|
3029
|
+
}
|
|
3030
|
+
|
|
3031
|
+
return -1;
|
|
3032
|
+
}
|
|
3033
|
+
|
|
3034
|
+
/**
|
|
3035
|
+
* Deduplicate imports by import statement
|
|
3036
|
+
*
|
|
3037
|
+
* @param imports - Array of CustomImport objects
|
|
3038
|
+
* @returns Deduplicated array of CustomImport objects
|
|
3039
|
+
*/
|
|
3040
|
+
function deduplicateImports(imports: CustomImport[]): CustomImport[] {
|
|
3041
|
+
const seen = new Set<string>();
|
|
3042
|
+
const deduplicated: CustomImport[] = [];
|
|
3043
|
+
|
|
3044
|
+
for (const customImport of imports) {
|
|
3045
|
+
if (!seen.has(customImport.importStatement)) {
|
|
3046
|
+
seen.add(customImport.importStatement);
|
|
3047
|
+
deduplicated.push(customImport);
|
|
3048
|
+
}
|
|
3049
|
+
}
|
|
3050
|
+
|
|
3051
|
+
return deduplicated;
|
|
3052
|
+
}
|
|
3053
|
+
|
|
3054
|
+
/**
|
|
3055
|
+
* Extract custom imports from model documentation
|
|
3056
|
+
*
|
|
3057
|
+
* @param model - Prisma DMMF model
|
|
3058
|
+
* @returns Custom imports parsing result
|
|
3059
|
+
*/
|
|
3060
|
+
/**
|
|
3061
|
+
* Extract a bare model-level metadata chain (`/// @zod .meta({...})` or
|
|
3062
|
+
* `.describe("...")` without an accompanying @zod.import). Only metadata
|
|
3063
|
+
* methods are recognized here — behavioral chains (refine/transform) remain
|
|
3064
|
+
* exclusive to the import-based path. meta is version-mapped: passthrough on
|
|
3065
|
+
* v4, downgraded to .describe(description) or dropped on v3 (issue #225).
|
|
3066
|
+
*/
|
|
3067
|
+
function extractBareModelMetadataChain(modelComment: string): string | undefined {
|
|
3068
|
+
const zodMatch = modelComment.match(/@zod\s*(?=\.\s*(?:meta|describe)\s*\()/);
|
|
3069
|
+
if (!zodMatch || zodMatch.index === undefined) return undefined;
|
|
3070
|
+
|
|
3071
|
+
let zodVersion: 'auto' | 'v3' | 'v4' = 'auto';
|
|
3072
|
+
try {
|
|
3073
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports -- lazy require to avoid circular import
|
|
3074
|
+
const cfg = require('../transformer').default.getGeneratorConfig?.();
|
|
3075
|
+
if (cfg?.zodImportTarget === 'v3' || cfg?.zodImportTarget === 'v4') {
|
|
3076
|
+
zodVersion = cfg.zodImportTarget;
|
|
3077
|
+
}
|
|
3078
|
+
} catch {
|
|
3079
|
+
/* ignore — resolveZodVersion handles 'auto' */
|
|
3080
|
+
}
|
|
3081
|
+
const isV4 = resolveZodVersion(zodVersion) === 'v4';
|
|
3082
|
+
|
|
3083
|
+
let rest = modelComment.slice(zodMatch.index + zodMatch[0].length);
|
|
3084
|
+
const calls: string[] = [];
|
|
3085
|
+
|
|
3086
|
+
for (;;) {
|
|
3087
|
+
const methodMatch = rest.match(/^\s*\.\s*(meta|describe)\s*\(/);
|
|
3088
|
+
if (!methodMatch) break;
|
|
3089
|
+
const argsStart = methodMatch[0].length;
|
|
3090
|
+
const argsEnd = findBalancedParentheses(rest, argsStart);
|
|
3091
|
+
if (argsEnd === -1) break;
|
|
3092
|
+
const args = rest.slice(argsStart, argsEnd).trim();
|
|
3093
|
+
const method = methodMatch[1];
|
|
3094
|
+
|
|
3095
|
+
if (method === 'describe') {
|
|
3096
|
+
calls.push(`.describe(${args})`);
|
|
3097
|
+
} else if (isV4) {
|
|
3098
|
+
calls.push(`.meta(${args})`);
|
|
3099
|
+
} else {
|
|
3100
|
+
const m = args.match(/\bdescription\s*:\s*("(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*')/);
|
|
3101
|
+
if (m) {
|
|
3102
|
+
calls.push(`.describe(${m[1]})`);
|
|
3103
|
+
} else {
|
|
3104
|
+
logger.warn('@zod.meta() on a model requires Zod v4; annotation dropped');
|
|
3105
|
+
}
|
|
3106
|
+
}
|
|
3107
|
+
rest = rest.slice(argsEnd + 1);
|
|
3108
|
+
}
|
|
3109
|
+
|
|
3110
|
+
return calls.length > 0 ? calls.join('') : undefined;
|
|
3111
|
+
}
|
|
3112
|
+
|
|
3113
|
+
export function extractModelCustomImports(model: DMMF.Model): CustomImportsParseResult {
|
|
3114
|
+
const modelComment = model.documentation || '';
|
|
3115
|
+
|
|
3116
|
+
if (!modelComment.trim()) {
|
|
3117
|
+
return {
|
|
3118
|
+
imports: [],
|
|
3119
|
+
parseErrors: [],
|
|
3120
|
+
isValid: true,
|
|
3121
|
+
customSchema: undefined,
|
|
3122
|
+
};
|
|
3123
|
+
}
|
|
3124
|
+
|
|
3125
|
+
const context: ModelCommentContext = {
|
|
3126
|
+
modelName: model.name,
|
|
3127
|
+
comment: modelComment,
|
|
3128
|
+
};
|
|
3129
|
+
|
|
3130
|
+
const result = parseCustomImports(modelComment, context);
|
|
3131
|
+
|
|
3132
|
+
// Bare metadata chains work without @zod.import (issue #225)
|
|
3133
|
+
if (!result.customSchema) {
|
|
3134
|
+
const metadataChain = extractBareModelMetadataChain(modelComment);
|
|
3135
|
+
if (metadataChain) {
|
|
3136
|
+
result.customSchema = metadataChain;
|
|
3137
|
+
}
|
|
3138
|
+
}
|
|
3139
|
+
|
|
3140
|
+
return result;
|
|
3141
|
+
}
|
|
3142
|
+
|
|
3143
|
+
/**
|
|
3144
|
+
* Extract custom imports from field documentation
|
|
3145
|
+
*
|
|
3146
|
+
* @param field - Prisma DMMF field
|
|
3147
|
+
* @param modelName - Name of the model containing the field
|
|
3148
|
+
* @returns Custom imports parsing result
|
|
3149
|
+
*/
|
|
3150
|
+
export function extractFieldCustomImports(
|
|
3151
|
+
field: DMMF.Field,
|
|
3152
|
+
modelName: string,
|
|
3153
|
+
): CustomImportsParseResult {
|
|
3154
|
+
const fieldComment = field.documentation || '';
|
|
3155
|
+
|
|
3156
|
+
if (!fieldComment.trim()) {
|
|
3157
|
+
return {
|
|
3158
|
+
imports: [],
|
|
3159
|
+
parseErrors: [],
|
|
3160
|
+
isValid: true,
|
|
3161
|
+
customSchema: undefined,
|
|
3162
|
+
};
|
|
3163
|
+
}
|
|
3164
|
+
|
|
3165
|
+
const context: FieldCommentContext = {
|
|
3166
|
+
modelName,
|
|
3167
|
+
fieldName: field.name,
|
|
3168
|
+
fieldType: field.type,
|
|
3169
|
+
comment: fieldComment,
|
|
3170
|
+
isOptional: !field.isRequired,
|
|
3171
|
+
isList: field.isList,
|
|
3172
|
+
};
|
|
3173
|
+
|
|
3174
|
+
return parseCustomImports(fieldComment, context);
|
|
3175
|
+
}
|
|
3176
|
+
|
|
3177
|
+
/*
|
|
3178
|
+
* getExtractionStatistics, filterZodComments, getAllExtractionErrors and getBaseZodType were
|
|
3179
|
+
* removed as unreachable — no caller inside or outside this module. getBaseZodTypeForField is
|
|
3180
|
+
* the live counterpart of the last one.
|
|
3181
|
+
*/
|