@stryke/prisma-trpc-generator 0.13.80 → 0.13.81
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/dist/config.cjs +29 -28
- package/dist/config.mjs +20 -20
- package/dist/config.mjs.map +1 -1
- package/dist/helpers.mjs.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/project.mjs.map +1 -1
- package/dist/utils/format-file.mjs.map +1 -1
- package/dist/utils/get-prisma-internals.mjs.map +1 -1
- package/dist/utils/write-file-safely.mjs.map +1 -1
- package/dist/zod/aggregate-helpers.mjs.map +1 -1
- package/dist/zod/comments-helpers.mjs.map +1 -1
- package/dist/zod/docs-helpers.mjs.map +1 -1
- package/dist/zod/generator-helpers.mjs.map +1 -1
- package/dist/zod/helpers.mjs.map +1 -1
- package/dist/zod/include-helpers.mjs.map +1 -1
- package/dist/zod/model-helpers.mjs.map +1 -1
- package/dist/zod/modelArgs-helpers.mjs.map +1 -1
- package/dist/zod/mongodb-helpers.mjs.map +1 -1
- package/dist/zod/select-helpers.mjs.map +1 -1
- package/dist/zod/transformer.mjs.map +1 -1
- package/dist/zod/whereUniqueInput-helpers.mjs.map +1 -1
- package/package.json +4 -4
package/dist/config.cjs
CHANGED
|
@@ -1,48 +1,49 @@
|
|
|
1
1
|
const require_rolldown_runtime = require('./_virtual/rolldown_runtime.cjs');
|
|
2
2
|
let zod = require("zod");
|
|
3
|
+
zod = require_rolldown_runtime.__toESM(zod);
|
|
3
4
|
|
|
4
5
|
//#region src/config.ts
|
|
5
6
|
let ModelAction = /* @__PURE__ */ function(ModelAction$1) {
|
|
6
|
-
ModelAction$1["
|
|
7
|
-
ModelAction$1["
|
|
8
|
-
ModelAction$1["
|
|
9
|
-
ModelAction$1["
|
|
10
|
-
ModelAction$1["
|
|
11
|
-
ModelAction$1["
|
|
12
|
-
ModelAction$1["
|
|
13
|
-
ModelAction$1["
|
|
14
|
-
ModelAction$1["
|
|
15
|
-
ModelAction$1["
|
|
16
|
-
ModelAction$1["
|
|
17
|
-
ModelAction$1["
|
|
18
|
-
ModelAction$1["
|
|
19
|
-
ModelAction$1["
|
|
20
|
-
ModelAction$1["
|
|
21
|
-
ModelAction$1["
|
|
22
|
-
ModelAction$1["
|
|
23
|
-
ModelAction$1["
|
|
24
|
-
ModelAction$1["
|
|
7
|
+
ModelAction$1["FIND_UNIQUE"] = "findUnique";
|
|
8
|
+
ModelAction$1["FIND_UNIQUE_OR_THROW"] = "findUniqueOrThrow";
|
|
9
|
+
ModelAction$1["FIND_FIRST"] = "findFirst";
|
|
10
|
+
ModelAction$1["FIND_FIRST_OR_THROW"] = "findFirstOrThrow";
|
|
11
|
+
ModelAction$1["FIND_MANY"] = "findMany";
|
|
12
|
+
ModelAction$1["CREATE"] = "create";
|
|
13
|
+
ModelAction$1["CREATE_MANY"] = "createMany";
|
|
14
|
+
ModelAction$1["CREATE_MANY_AND_RETURN"] = "createManyAndReturn";
|
|
15
|
+
ModelAction$1["UPDATE"] = "update";
|
|
16
|
+
ModelAction$1["UPDATE_MANY"] = "updateMany";
|
|
17
|
+
ModelAction$1["UPDATE_MANY_AND_RETURN"] = "updateManyAndReturn";
|
|
18
|
+
ModelAction$1["UPSERT"] = "upsert";
|
|
19
|
+
ModelAction$1["DELETE"] = "delete";
|
|
20
|
+
ModelAction$1["DELETE_MANY"] = "deleteMany";
|
|
21
|
+
ModelAction$1["GROUP_BY"] = "groupBy";
|
|
22
|
+
ModelAction$1["COUNT"] = "count";
|
|
23
|
+
ModelAction$1["AGGREGATE"] = "aggregate";
|
|
24
|
+
ModelAction$1["FIND_RAW"] = "findRaw";
|
|
25
|
+
ModelAction$1["AGGREGATE_RAW"] = "aggregateRaw";
|
|
25
26
|
return ModelAction$1;
|
|
26
27
|
}({});
|
|
27
|
-
const modelActionEnum = zod.
|
|
28
|
-
const configBoolean = zod.
|
|
29
|
-
const configSchema = zod.
|
|
28
|
+
const modelActionEnum = zod.nativeEnum(ModelAction);
|
|
29
|
+
const configBoolean = zod.string().trim().transform((value) => !value || value.toLowerCase() === "false" || value.toLowerCase() === "n" || value.toLowerCase() === "no" || value === "0" ? false : value.toLowerCase() === "true" || value.toLowerCase() === "y" || value.toLowerCase() === "yes" || value === "1" ? true : value);
|
|
30
|
+
const configSchema = zod.object({
|
|
30
31
|
debug: configBoolean.default("false"),
|
|
31
32
|
withNext: configBoolean.default("true"),
|
|
32
33
|
withMiddleware: configBoolean.default("false"),
|
|
33
34
|
withShield: configBoolean.default("false"),
|
|
34
|
-
contextPath: zod.
|
|
35
|
+
contextPath: zod.string().trim().default("../context"),
|
|
35
36
|
trpcOptions: configBoolean.default("true"),
|
|
36
37
|
showModelNameInProcedure: configBoolean.default("false"),
|
|
37
|
-
generateModelActions: zod.
|
|
38
|
+
generateModelActions: zod.string().default(Object.values(ModelAction).join(",")).transform((arg) => {
|
|
38
39
|
return arg.split(",").map((action) => modelActionEnum.parse(action.trim()));
|
|
39
40
|
}),
|
|
40
41
|
withZod: configBoolean.default("true"),
|
|
41
|
-
relationModel: configBoolean.default("true").or(zod.
|
|
42
|
-
modelSuffix: zod.
|
|
43
|
-
modelCase: zod.
|
|
42
|
+
relationModel: configBoolean.default("true").or(zod.literal("default")),
|
|
43
|
+
modelSuffix: zod.string().default("Schema"),
|
|
44
|
+
modelCase: zod.enum(["PascalCase", "camelCase"]).default("camelCase"),
|
|
44
45
|
useDecimalJs: configBoolean.default("true"),
|
|
45
|
-
imports: zod.
|
|
46
|
+
imports: zod.string().optional(),
|
|
46
47
|
prismaJsonNullability: configBoolean.default("true")
|
|
47
48
|
});
|
|
48
49
|
|
package/dist/config.mjs
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as z from "zod";
|
|
2
2
|
|
|
3
3
|
//#region src/config.ts
|
|
4
4
|
let ModelAction = /* @__PURE__ */ function(ModelAction$1) {
|
|
5
|
-
ModelAction$1["
|
|
6
|
-
ModelAction$1["
|
|
7
|
-
ModelAction$1["
|
|
8
|
-
ModelAction$1["
|
|
9
|
-
ModelAction$1["
|
|
10
|
-
ModelAction$1["
|
|
11
|
-
ModelAction$1["
|
|
12
|
-
ModelAction$1["
|
|
13
|
-
ModelAction$1["
|
|
14
|
-
ModelAction$1["
|
|
15
|
-
ModelAction$1["
|
|
16
|
-
ModelAction$1["
|
|
17
|
-
ModelAction$1["
|
|
18
|
-
ModelAction$1["
|
|
19
|
-
ModelAction$1["
|
|
20
|
-
ModelAction$1["
|
|
21
|
-
ModelAction$1["
|
|
22
|
-
ModelAction$1["
|
|
23
|
-
ModelAction$1["
|
|
5
|
+
ModelAction$1["FIND_UNIQUE"] = "findUnique";
|
|
6
|
+
ModelAction$1["FIND_UNIQUE_OR_THROW"] = "findUniqueOrThrow";
|
|
7
|
+
ModelAction$1["FIND_FIRST"] = "findFirst";
|
|
8
|
+
ModelAction$1["FIND_FIRST_OR_THROW"] = "findFirstOrThrow";
|
|
9
|
+
ModelAction$1["FIND_MANY"] = "findMany";
|
|
10
|
+
ModelAction$1["CREATE"] = "create";
|
|
11
|
+
ModelAction$1["CREATE_MANY"] = "createMany";
|
|
12
|
+
ModelAction$1["CREATE_MANY_AND_RETURN"] = "createManyAndReturn";
|
|
13
|
+
ModelAction$1["UPDATE"] = "update";
|
|
14
|
+
ModelAction$1["UPDATE_MANY"] = "updateMany";
|
|
15
|
+
ModelAction$1["UPDATE_MANY_AND_RETURN"] = "updateManyAndReturn";
|
|
16
|
+
ModelAction$1["UPSERT"] = "upsert";
|
|
17
|
+
ModelAction$1["DELETE"] = "delete";
|
|
18
|
+
ModelAction$1["DELETE_MANY"] = "deleteMany";
|
|
19
|
+
ModelAction$1["GROUP_BY"] = "groupBy";
|
|
20
|
+
ModelAction$1["COUNT"] = "count";
|
|
21
|
+
ModelAction$1["AGGREGATE"] = "aggregate";
|
|
22
|
+
ModelAction$1["FIND_RAW"] = "findRaw";
|
|
23
|
+
ModelAction$1["AGGREGATE_RAW"] = "aggregateRaw";
|
|
24
24
|
return ModelAction$1;
|
|
25
25
|
}({});
|
|
26
26
|
const modelActionEnum = z.nativeEnum(ModelAction);
|
package/dist/config.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.mjs","names":[],"sources":["../src/config.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/stryke.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://docs.stormsoftware.com/projects/stryke\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport
|
|
1
|
+
{"version":3,"file":"config.mjs","names":[],"sources":["../src/config.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/stryke.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://docs.stormsoftware.com/projects/stryke\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport * as z from \"zod\";\n\nexport enum ModelAction {\n FIND_UNIQUE = \"findUnique\",\n FIND_UNIQUE_OR_THROW = \"findUniqueOrThrow\",\n FIND_FIRST = \"findFirst\",\n FIND_FIRST_OR_THROW = \"findFirstOrThrow\",\n FIND_MANY = \"findMany\",\n CREATE = \"create\",\n CREATE_MANY = \"createMany\",\n CREATE_MANY_AND_RETURN = \"createManyAndReturn\",\n UPDATE = \"update\",\n UPDATE_MANY = \"updateMany\",\n UPDATE_MANY_AND_RETURN = \"updateManyAndReturn\",\n UPSERT = \"upsert\",\n DELETE = \"delete\",\n DELETE_MANY = \"deleteMany\",\n GROUP_BY = \"groupBy\",\n COUNT = \"count\", // TODO: count does not actually exist, why?\n AGGREGATE = \"aggregate\",\n FIND_RAW = \"findRaw\",\n AGGREGATE_RAW = \"aggregateRaw\"\n}\n\nconst modelActionEnum = z.nativeEnum(ModelAction);\n\nconst configBoolean = z\n .string()\n .trim()\n .transform(value =>\n !value ||\n value.toLowerCase() === \"false\" ||\n value.toLowerCase() === \"n\" ||\n value.toLowerCase() === \"no\" ||\n value === \"0\"\n ? false\n : value.toLowerCase() === \"true\" ||\n value.toLowerCase() === \"y\" ||\n value.toLowerCase() === \"yes\" ||\n value === \"1\"\n ? true\n : value\n );\n\nexport const configSchema = z.object({\n debug: configBoolean.default(\"false\"),\n withNext: configBoolean.default(\"true\"),\n withMiddleware: configBoolean.default(\"false\"),\n withShield: configBoolean.default(\"false\"),\n contextPath: z.string().trim().default(\"../context\"),\n trpcOptions: configBoolean.default(\"true\"),\n showModelNameInProcedure: configBoolean.default(\"false\"),\n generateModelActions: z\n .string()\n .default(Object.values(ModelAction).join(\",\"))\n .transform(arg => {\n return arg.split(\",\").map(action => modelActionEnum.parse(action.trim()));\n }),\n\n // Zod configuration\n withZod: configBoolean.default(\"true\"),\n relationModel: configBoolean.default(\"true\").or(z.literal(\"default\")),\n modelSuffix: z.string().default(\"Schema\"),\n modelCase: z.enum([\"PascalCase\", \"camelCase\"]).default(\"camelCase\"),\n useDecimalJs: configBoolean.default(\"true\"),\n imports: z.string().optional(),\n prismaJsonNullability: configBoolean.default(\"true\")\n});\n\nexport type Config = z.infer<typeof configSchema>;\n"],"mappings":";;;AAoBA,IAAY,sDAAL;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGF,MAAM,kBAAkB,EAAE,WAAW,YAAY;AAEjD,MAAM,gBAAgB,EACnB,QAAQ,CACR,MAAM,CACN,WAAU,UACT,CAAC,SACD,MAAM,aAAa,KAAK,WACxB,MAAM,aAAa,KAAK,OACxB,MAAM,aAAa,KAAK,QACxB,UAAU,MACN,QACA,MAAM,aAAa,KAAK,UACtB,MAAM,aAAa,KAAK,OACxB,MAAM,aAAa,KAAK,SACxB,UAAU,MACV,OACA,MACP;AAEH,MAAa,eAAe,EAAE,OAAO;CACnC,OAAO,cAAc,QAAQ,QAAQ;CACrC,UAAU,cAAc,QAAQ,OAAO;CACvC,gBAAgB,cAAc,QAAQ,QAAQ;CAC9C,YAAY,cAAc,QAAQ,QAAQ;CAC1C,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,aAAa;CACpD,aAAa,cAAc,QAAQ,OAAO;CAC1C,0BAA0B,cAAc,QAAQ,QAAQ;CACxD,sBAAsB,EACnB,QAAQ,CACR,QAAQ,OAAO,OAAO,YAAY,CAAC,KAAK,IAAI,CAAC,CAC7C,WAAU,QAAO;AAChB,SAAO,IAAI,MAAM,IAAI,CAAC,KAAI,WAAU,gBAAgB,MAAM,OAAO,MAAM,CAAC,CAAC;GACzE;CAGJ,SAAS,cAAc,QAAQ,OAAO;CACtC,eAAe,cAAc,QAAQ,OAAO,CAAC,GAAG,EAAE,QAAQ,UAAU,CAAC;CACrE,aAAa,EAAE,QAAQ,CAAC,QAAQ,SAAS;CACzC,WAAW,EAAE,KAAK,CAAC,cAAc,YAAY,CAAC,CAAC,QAAQ,YAAY;CACnE,cAAc,cAAc,QAAQ,OAAO;CAC3C,SAAS,EAAE,QAAQ,CAAC,UAAU;CAC9B,uBAAuB,cAAc,QAAQ,OAAO;CACrD,CAAC"}
|
package/dist/helpers.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.mjs","names":["parsedAttributeArgs: Record<string, unknown>"],"sources":["../src/helpers.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 License, and is\n free for commercial and private use. For more information, please visit\n our licensing page.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://stormsoftware.com/projects/stryke/docs\n Contact: https://stormsoftware.com/contact\n License: https://stormsoftware.com/projects/stryke/license\n\n ------------------------------------------------------------------- */\n\n/* eslint-disable ts/no-use-before-define */\n\nimport type {\n DMMF,\n EnvValue,\n GeneratorOptions\n} from \"@prisma/generator-helper\";\nimport { relativePath } from \"@stryke/path/file-path-fns\";\nimport { joinPaths } from \"@stryke/path/join-paths\";\nimport { lowerCaseFirst } from \"@stryke/string-format/lower-case-first\";\nimport type { SourceFile } from \"ts-morph\";\nimport type { Config } from \"./config\";\nimport { project } from \"./project\";\nimport type { Writeable } from \"./types\";\nimport { getPrismaInternals } from \"./utils/get-prisma-internals\";\nimport { generateBarrelFile, populateModelFile } from \"./zod/model-helpers\";\n\nconst getProcedureName = (config: Config) => {\n return config.withShield\n ? \"shieldedProcedure\"\n : config.withMiddleware\n ? \"protectedProcedure\"\n : \"publicProcedure\";\n};\n\nexport const generateCreateRouterImport = ({\n sourceFile,\n config\n}: {\n sourceFile: SourceFile;\n config?: Config;\n}) => {\n const imports = [\"t\"];\n\n if (config) {\n imports.push(getProcedureName(config));\n }\n\n sourceFile.addImportDeclaration({\n moduleSpecifier: \"../trpc\",\n namedImports: imports\n });\n};\n\nexport const generateRPCImport = (sourceFile: SourceFile) => {\n sourceFile.addImportDeclaration({\n moduleSpecifier: \"@trpc/server\",\n namespaceImport: \"trpc\"\n });\n};\n\nexport const generateMiddlewareImport = async (\n sourceFile: SourceFile,\n options: GeneratorOptions\n) => {\n const internals = await getPrismaInternals();\n\n const outputDir = internals.parseEnvValue(\n options.generator.output as EnvValue\n );\n sourceFile.addImportDeclaration({\n moduleSpecifier: relativePath(\n outputDir,\n joinPaths(outputDir, \"middleware\")\n ),\n namedImports: [\"permissions\"]\n });\n};\n\nexport const generateRouterImport = (\n sourceFile: SourceFile,\n modelNamePlural: string,\n modelNameCamelCase: string\n) => {\n sourceFile.addImportDeclaration({\n moduleSpecifier: `./${lowerCaseFirst(modelNameCamelCase)}.router`,\n namedImports: [`${modelNamePlural}Router`]\n });\n};\n\nexport async function generateTRPCExports(\n sourceFile: SourceFile,\n config: Config,\n options: GeneratorOptions,\n outputDir: string\n) {\n if (config.withShield) {\n sourceFile.addImportDeclaration({\n moduleSpecifier: relativePath(\n outputDir,\n joinPaths(\n outputDir,\n typeof config.withShield === \"string\" ? config.withShield : \"shield\"\n )\n ),\n namedImports: [\"permissions\"]\n });\n }\n\n sourceFile.addStatements(\n /* ts */ `import type { Context } from '${relativePath(\n outputDir,\n joinPaths(outputDir, config.contextPath)\n )}';`\n );\n\n if (config.trpcOptions) {\n sourceFile.addStatements(\n /* ts */ `import trpcOptions from '${\n typeof config.trpcOptions === \"string\"\n ? relativePath(outputDir, joinPaths(outputDir, config.trpcOptions))\n : \"./options\"\n }';`\n );\n }\n\n if (config.withNext) {\n sourceFile.addStatements(/* ts */ `import { createContext } from '${relativePath(\n outputDir,\n joinPaths(outputDir, config.contextPath)\n )}';\nimport { initTRPC } from '@trpc/server';\nimport { createTRPCServerActionHandler } from '@stryke/trpc-next/action-handler';\nimport { cookies } from \"next/headers\";`);\n }\n\n sourceFile.addStatements(/* ts */ `\nexport const t = initTRPC.context<Context>().create(${\n config.trpcOptions ? \"trpcOptions\" : \"\"\n });`);\n\n const middlewares = [];\n\n if (config.withMiddleware && typeof config.withMiddleware === \"boolean\") {\n sourceFile.addStatements(/* ts */ `\nexport const globalMiddleware = t.middleware(async ({ ctx, next }) => {\n console.log('inside middleware!')\n return next()\n});`);\n middlewares.push({\n type: \"global\",\n value: /* ts */ `.use(globalMiddleware)`\n });\n }\n\n if (config.withMiddleware && typeof config.withMiddleware === \"string\") {\n sourceFile.addStatements(/* ts */ `\nimport middleware from '${relativePath(\n outputDir,\n joinPaths(\n outputDir,\n typeof config.withMiddleware === \"string\"\n ? config.withMiddleware\n : \"middleware\"\n )\n )}';\n `);\n sourceFile.addStatements(/* ts */ `\nexport const globalMiddleware = t.middleware(middleware);`);\n middlewares.push({\n type: \"global\",\n value: /* ts */ `.use(globalMiddleware)`\n });\n }\n\n if (config.withShield) {\n sourceFile.addStatements(/* ts */ `\nexport const permissionsMiddleware = t.middleware(permissions);\n `);\n\n middlewares.push({\n type: \"shield\",\n value: /* ts */ `\n .use(permissions)`\n });\n }\n\n sourceFile.addStatements(/* ts */ `\n/**\n * Create a server-side caller\n * @see https://trpc.io/docs/server/server-side-calls\n */\nexport const createCallerFactory = t.createCallerFactory;`);\n\n sourceFile.addStatements(/* ts */ `\nexport const publicProcedure = t.procedure; `);\n\n if (middlewares.length > 0) {\n const procName = getProcedureName(config);\n\n middlewares.forEach((middleware, i) => {\n if (i === 0) {\n sourceFile.addStatements(/* ts */ `\nexport const ${procName} = t.procedure`);\n }\n\n sourceFile.addStatements(\n /* ts */ `.use(${\n middleware.type === \"shield\"\n ? \"permissionsMiddleware\"\n : \"globalMiddleware\"\n })`\n );\n });\n }\n\n if (config.withNext) {\n sourceFile.addStatements(/* ts */ `\nexport const createAction: ReturnType<typeof createTRPCServerActionHandler> =\n createTRPCServerActionHandler(cookies, t, createContext);\n`);\n }\n\n sourceFile.formatText({\n indentSize: 2\n });\n}\n\nexport function generateProcedure(\n sourceFile: SourceFile,\n name: string,\n typeName: string,\n modelName: string,\n opType: string,\n baseOpType: string,\n config: Config\n) {\n let input = `input${!config.withZod ? \" as any\" : \"\"}`;\n const nameWithoutModel = name.replace(modelName, \"\");\n if (nameWithoutModel === \"groupBy\" && config.withZod) {\n input =\n \"{ where: input.where, orderBy: input.orderBy, by: input.by, having: input.having, take: input.take, skip: input.skip }\";\n }\n sourceFile.addStatements(/* ts */ `${\n config.showModelNameInProcedure ? name : nameWithoutModel\n }: ${getProcedureName(config)}\n ${config.withZod ? `.input(${lowerCaseFirst(typeName)})` : \"\"}.${getProcedureTypeByOpName(\n baseOpType\n )}(async ({ ctx, input }) => {\n const ${name} = await ctx.prisma.${lowerCaseFirst(\n modelName\n )}.${opType.replace(\"One\", \"\")}(${input});\n return ${name};\n }),`);\n}\n\nexport function generateRouterSchemaImports(\n sourceFile: SourceFile,\n modelName: string,\n modelActions: string[]\n) {\n sourceFile.addStatements(\n /* ts */\n [\n // remove any duplicate import statements\n ...new Set(\n modelActions.map(opName =>\n getRouterSchemaImportByOpName(opName, modelName)\n )\n )\n ].join(\"\\n\")\n );\n}\n\nexport const getRouterSchemaImportByOpName = (\n opName: string,\n modelName: string\n) => {\n const opType = opName.replace(\"OrThrow\", \"\").replace(\"ManyAndReturn\", \"\");\n const inputType = getInputTypeByOpName(opType, modelName);\n\n return inputType\n ? `import { ${lowerCaseFirst(inputType)} } from \"../schemas/${lowerCaseFirst(opType)}${modelName}.schema\"; `\n : \"\";\n};\n\nexport const getInputTypeByOpName = (opName: string, modelName: string) => {\n let inputType;\n switch (opName) {\n case \"findUnique\":\n inputType = `${modelName}FindUniqueSchema`;\n break;\n case \"findFirst\":\n inputType = `${modelName}FindFirstSchema`;\n break;\n case \"findMany\":\n inputType = `${modelName}FindManySchema`;\n break;\n case \"findRaw\":\n inputType = `${modelName}FindRawObjectSchema`;\n break;\n case \"createOne\":\n inputType = `${modelName}CreateOneSchema`;\n break;\n case \"createMany\":\n inputType = `${modelName}CreateManySchema`;\n break;\n case \"createManyAndReturn\":\n inputType = `${modelName}CreateManySchema`;\n break;\n case \"deleteOne\":\n inputType = `${modelName}DeleteOneSchema`;\n break;\n case \"deleteMany\":\n inputType = `${modelName}DeleteManySchema`;\n break;\n case \"updateOne\":\n inputType = `${modelName}UpdateOneSchema`;\n break;\n case \"updateMany\":\n inputType = `${modelName}UpdateManySchema`;\n break;\n case \"updateManyAndReturn\":\n inputType = `${modelName}UpdateManySchema`;\n break;\n case \"upsertOne\":\n inputType = `${modelName}UpsertSchema`;\n break;\n case \"aggregate\":\n inputType = `${modelName}AggregateSchema`;\n break;\n case \"aggregateRaw\":\n inputType = `${modelName}AggregateRawObjectSchema`;\n break;\n case \"groupBy\":\n inputType = `${modelName}GroupBySchema`;\n break;\n default:\n // eslint-disable-next-line no-console\n console.log(\"getInputTypeByOpName: \", { opName, modelName });\n }\n return inputType;\n};\n\nexport const getProcedureTypeByOpName = (opName: string) => {\n let procType;\n switch (opName) {\n case \"findUnique\":\n case \"findFirst\":\n case \"findMany\":\n case \"findRaw\":\n case \"aggregate\":\n case \"aggregateRaw\":\n case \"groupBy\":\n procType = \"query\";\n break;\n case \"createOne\":\n case \"createMany\":\n case \"createManyAndReturn\":\n case \"deleteOne\":\n case \"updateOne\":\n case \"deleteMany\":\n case \"updateMany\":\n case \"updateManyAndReturn\":\n case \"upsertOne\":\n procType = \"mutation\";\n break;\n default:\n // eslint-disable-next-line no-console\n console.log(\"getProcedureTypeByOpName: \", { opName });\n }\n return procType;\n};\n\nexport function resolveModelsComments(\n models: DMMF.Model[],\n hiddenModels: string[]\n) {\n // eslint-disable-next-line regexp/no-obscure-range\n const modelAttributeRegex = /(?:@@Gen\\.)+[A-z]+\\(.+\\)/;\n const attributeNameRegex = /\\.+[A-Z]+\\(+/i;\n const attributeArgsRegex = /\\(+[A-Z]+:.+\\)/i;\n\n for (const model of models) {\n if (model.documentation) {\n const attribute = model.documentation?.match(modelAttributeRegex)?.[0];\n const attributeName = attribute\n ?.match(attributeNameRegex)?.[0]\n ?.slice(1, -1);\n if (attributeName !== \"model\") continue;\n const rawAttributeArgs = attribute\n ?.match(attributeArgsRegex)?.[0]\n ?.slice(1, -1);\n\n const parsedAttributeArgs: Record<string, unknown> = {};\n if (rawAttributeArgs) {\n const rawAttributeArgsParts = rawAttributeArgs\n .split(\":\")\n .map(it => it.trim())\n .map(part => (part.startsWith(\"[\") ? part : part.split(\",\")))\n .flat()\n .map(it => it.trim());\n\n for (let i = 0; i < rawAttributeArgsParts.length; i += 2) {\n const key = rawAttributeArgsParts[i];\n const value = rawAttributeArgsParts[i + 1];\n parsedAttributeArgs[key!] = JSON.parse(value!);\n }\n }\n\n if (parsedAttributeArgs.hide) {\n hiddenModels.push(model.name);\n }\n }\n }\n}\n\nexport const getImports = (\n type: \"trpc\" | \"trpc-shield\" | \"context\",\n newPath?: string\n) => {\n let statement = \"\";\n if (type === \"trpc\") {\n statement = \"import * as trpc from '@trpc/server';\\n\";\n } else if (type === \"trpc-shield\") {\n statement = \"import { shield, allow } from '@stryke/trpc-next/shield';\\n\";\n } else if (type === \"context\") {\n statement = `import type { Context } from '${newPath}';\\n`;\n }\n\n return statement;\n};\n\nexport const wrapWithObject = ({\n shieldItemLines\n}: {\n shieldItemLines: Array<string> | string;\n}) => {\n let wrapped = \"{\";\n wrapped += \"\\n\";\n wrapped += Array.isArray(shieldItemLines)\n ? ` ${shieldItemLines.join(\",\\r\\n\")}`\n : ` ${shieldItemLines}`;\n wrapped += \"\\n\";\n wrapped += \"}\";\n return wrapped;\n};\n\nexport const wrapWithTrpcShieldCall = ({\n shieldObjectTextWrapped\n}: {\n shieldObjectTextWrapped: string;\n}) => {\n let wrapped = \"shield<Context>(\";\n wrapped += \"\\n\";\n wrapped += ` ${shieldObjectTextWrapped}`;\n wrapped += \"\\n\";\n wrapped += \")\";\n return wrapped;\n};\n\nexport const wrapWithExport = ({\n shieldObjectText\n}: {\n shieldObjectText: string;\n}) => {\n return `export const permissions: ReturnType<typeof shield<Context>> = ${shieldObjectText};`;\n};\n\nexport const constructShield = async (\n {\n queries,\n mutations,\n subscriptions\n }: {\n queries: Array<string>;\n mutations: Array<string>;\n subscriptions: Array<string>;\n },\n config: Config,\n options: GeneratorOptions,\n outputDir: string\n) => {\n if (\n queries.length === 0 &&\n mutations.length === 0 &&\n subscriptions.length === 0\n ) {\n return \"\";\n }\n\n let rootItems = \"\";\n if (queries.length > 0) {\n const queryLinesWrapped = `query: ${wrapWithObject({\n shieldItemLines: queries.map(query => `${query}: allow`)\n })},`;\n rootItems += queryLinesWrapped;\n }\n if (mutations.length > 0) {\n const mutationLinesWrapped = `mutation: ${wrapWithObject({\n shieldItemLines: mutations.map(mutation => `${mutation}: allow`)\n })},`;\n rootItems += mutationLinesWrapped;\n }\n\n if (subscriptions.length > 0) {\n const subscriptionLinesWrapped = `subscription: ${wrapWithObject({\n shieldItemLines: subscriptions.map(\n subscription => `${subscription}: allow`\n )\n })},`;\n rootItems += subscriptionLinesWrapped;\n }\n\n if (rootItems.length === 0) {\n return \"\";\n }\n\n let shieldText = getImports(\"trpc-shield\");\n shieldText += getImports(\n \"context\",\n relativePath(outputDir, joinPaths(outputDir, config.contextPath))\n );\n shieldText += \"\\n\\n\";\n shieldText += wrapWithExport({\n shieldObjectText: wrapWithTrpcShieldCall({\n shieldObjectTextWrapped: wrapWithObject({ shieldItemLines: rootItems })\n })\n });\n\n return shieldText;\n};\n\nexport const constructDefaultOptions = (\n config: Config,\n options: GeneratorOptions,\n outputDir: string\n) => {\n return `import { ZodError } from 'zod';${config.withNext ? '\\nimport { transformer } from \"@stryke/trpc-next/shared\";' : \"\"}\nimport type {\n DataTransformerOptions,\n RootConfig\n} from \"@trpc/server/unstable-core-do-not-import\";\nimport type { Context } from \"${relativePath(outputDir, joinPaths(outputDir, config.contextPath))}\";\n\ninterface RuntimeConfigOptions<\n TContext extends object,\n TMeta extends object = object\n> extends Partial<\n Omit<\n RootConfig<{\n ctx: TContext;\n meta: TMeta;\n errorShape: any;\n transformer: any;\n }>,\n \"$types\" | \"transformer\"\n >\n > {\n /**\n * Use a data transformer\n * @see https://trpc.io/docs/v11/data-transformers\n */\n transformer?: DataTransformerOptions;\n}\n\nconst options: RuntimeConfigOptions<Context> = {${config.withNext ? \"\\n transformer,\" : \"\"}\n errorFormatter({ shape, error }) {\n return {\n ...shape,\n data: {\n ...shape.data,\n zodError:\n error.code === \"BAD_REQUEST\" && error.cause instanceof ZodError\n ? error.cause.flatten()\n : null\n }\n };\n }\n};\n\nexport default options;\n`;\n};\n\nexport const constructZodModels = async (\n models: Writeable<DMMF.Model[]>,\n outputPath: string,\n config: Config,\n options: GeneratorOptions\n) => {\n const indexFile = project.createSourceFile(\n `${outputPath}/index.ts`,\n {},\n { overwrite: true }\n );\n\n generateBarrelFile(models, indexFile);\n\n indexFile.formatText({\n indentSize: 2\n });\n\n await Promise.all(\n models.map(async model => {\n const sourceFile = project.createSourceFile(\n `${outputPath}/${lowerCaseFirst(model.name)}.schema.ts`,\n {},\n { overwrite: true }\n );\n\n await populateModelFile(model, sourceFile, config, options);\n\n sourceFile.formatText({\n indentSize: 2\n });\n })\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"helpers.mjs","names":["parsedAttributeArgs: Record<string, unknown>"],"sources":["../src/helpers.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/stryke.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://docs.stormsoftware.com/projects/stryke\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\n/* eslint-disable ts/no-use-before-define */\n\nimport type {\n DMMF,\n EnvValue,\n GeneratorOptions\n} from \"@prisma/generator-helper\";\nimport { relativePath } from \"@stryke/path/file-path-fns\";\nimport { joinPaths } from \"@stryke/path/join-paths\";\nimport { lowerCaseFirst } from \"@stryke/string-format/lower-case-first\";\nimport type { SourceFile } from \"ts-morph\";\nimport type { Config } from \"./config\";\nimport { project } from \"./project\";\nimport type { Writeable } from \"./types\";\nimport { getPrismaInternals } from \"./utils/get-prisma-internals\";\nimport { generateBarrelFile, populateModelFile } from \"./zod/model-helpers\";\n\nconst getProcedureName = (config: Config) => {\n return config.withShield\n ? \"shieldedProcedure\"\n : config.withMiddleware\n ? \"protectedProcedure\"\n : \"publicProcedure\";\n};\n\nexport const generateCreateRouterImport = ({\n sourceFile,\n config\n}: {\n sourceFile: SourceFile;\n config?: Config;\n}) => {\n const imports = [\"t\"];\n\n if (config) {\n imports.push(getProcedureName(config));\n }\n\n sourceFile.addImportDeclaration({\n moduleSpecifier: \"../trpc\",\n namedImports: imports\n });\n};\n\nexport const generateRPCImport = (sourceFile: SourceFile) => {\n sourceFile.addImportDeclaration({\n moduleSpecifier: \"@trpc/server\",\n namespaceImport: \"trpc\"\n });\n};\n\nexport const generateMiddlewareImport = async (\n sourceFile: SourceFile,\n options: GeneratorOptions\n) => {\n const internals = await getPrismaInternals();\n\n const outputDir = internals.parseEnvValue(\n options.generator.output as EnvValue\n );\n sourceFile.addImportDeclaration({\n moduleSpecifier: relativePath(\n outputDir,\n joinPaths(outputDir, \"middleware\")\n ),\n namedImports: [\"permissions\"]\n });\n};\n\nexport const generateRouterImport = (\n sourceFile: SourceFile,\n modelNamePlural: string,\n modelNameCamelCase: string\n) => {\n sourceFile.addImportDeclaration({\n moduleSpecifier: `./${lowerCaseFirst(modelNameCamelCase)}.router`,\n namedImports: [`${modelNamePlural}Router`]\n });\n};\n\nexport async function generateTRPCExports(\n sourceFile: SourceFile,\n config: Config,\n options: GeneratorOptions,\n outputDir: string\n) {\n if (config.withShield) {\n sourceFile.addImportDeclaration({\n moduleSpecifier: relativePath(\n outputDir,\n joinPaths(\n outputDir,\n typeof config.withShield === \"string\" ? config.withShield : \"shield\"\n )\n ),\n namedImports: [\"permissions\"]\n });\n }\n\n sourceFile.addStatements(\n /* ts */ `import type { Context } from '${relativePath(\n outputDir,\n joinPaths(outputDir, config.contextPath)\n )}';`\n );\n\n if (config.trpcOptions) {\n sourceFile.addStatements(\n /* ts */ `import trpcOptions from '${\n typeof config.trpcOptions === \"string\"\n ? relativePath(outputDir, joinPaths(outputDir, config.trpcOptions))\n : \"./options\"\n }';`\n );\n }\n\n if (config.withNext) {\n sourceFile.addStatements(/* ts */ `import { createContext } from '${relativePath(\n outputDir,\n joinPaths(outputDir, config.contextPath)\n )}';\nimport { initTRPC } from '@trpc/server';\nimport { createTRPCServerActionHandler } from '@stryke/trpc-next/action-handler';\nimport { cookies } from \"next/headers\";`);\n }\n\n sourceFile.addStatements(/* ts */ `\nexport const t = initTRPC.context<Context>().create(${\n config.trpcOptions ? \"trpcOptions\" : \"\"\n });`);\n\n const middlewares = [];\n\n if (config.withMiddleware && typeof config.withMiddleware === \"boolean\") {\n sourceFile.addStatements(/* ts */ `\nexport const globalMiddleware = t.middleware(async ({ ctx, next }) => {\n console.log('inside middleware!')\n return next()\n});`);\n middlewares.push({\n type: \"global\",\n value: /* ts */ `.use(globalMiddleware)`\n });\n }\n\n if (config.withMiddleware && typeof config.withMiddleware === \"string\") {\n sourceFile.addStatements(/* ts */ `\nimport middleware from '${relativePath(\n outputDir,\n joinPaths(\n outputDir,\n typeof config.withMiddleware === \"string\"\n ? config.withMiddleware\n : \"middleware\"\n )\n )}';\n `);\n sourceFile.addStatements(/* ts */ `\nexport const globalMiddleware = t.middleware(middleware);`);\n middlewares.push({\n type: \"global\",\n value: /* ts */ `.use(globalMiddleware)`\n });\n }\n\n if (config.withShield) {\n sourceFile.addStatements(/* ts */ `\nexport const permissionsMiddleware = t.middleware(permissions);\n `);\n\n middlewares.push({\n type: \"shield\",\n value: /* ts */ `\n .use(permissions)`\n });\n }\n\n sourceFile.addStatements(/* ts */ `\n/**\n * Create a server-side caller\n * @see https://trpc.io/docs/server/server-side-calls\n */\nexport const createCallerFactory = t.createCallerFactory;`);\n\n sourceFile.addStatements(/* ts */ `\nexport const publicProcedure = t.procedure; `);\n\n if (middlewares.length > 0) {\n const procName = getProcedureName(config);\n\n middlewares.forEach((middleware, i) => {\n if (i === 0) {\n sourceFile.addStatements(/* ts */ `\nexport const ${procName} = t.procedure`);\n }\n\n sourceFile.addStatements(\n /* ts */ `.use(${\n middleware.type === \"shield\"\n ? \"permissionsMiddleware\"\n : \"globalMiddleware\"\n })`\n );\n });\n }\n\n if (config.withNext) {\n sourceFile.addStatements(/* ts */ `\nexport const createAction: ReturnType<typeof createTRPCServerActionHandler> =\n createTRPCServerActionHandler(cookies, t, createContext);\n`);\n }\n\n sourceFile.formatText({\n indentSize: 2\n });\n}\n\nexport function generateProcedure(\n sourceFile: SourceFile,\n name: string,\n typeName: string,\n modelName: string,\n opType: string,\n baseOpType: string,\n config: Config\n) {\n let input = `input${!config.withZod ? \" as any\" : \"\"}`;\n const nameWithoutModel = name.replace(modelName, \"\");\n if (nameWithoutModel === \"groupBy\" && config.withZod) {\n input =\n \"{ where: input.where, orderBy: input.orderBy, by: input.by, having: input.having, take: input.take, skip: input.skip }\";\n }\n sourceFile.addStatements(/* ts */ `${\n config.showModelNameInProcedure ? name : nameWithoutModel\n }: ${getProcedureName(config)}\n ${config.withZod ? `.input(${lowerCaseFirst(typeName)})` : \"\"}.${getProcedureTypeByOpName(\n baseOpType\n )}(async ({ ctx, input }) => {\n const ${name} = await ctx.prisma.${lowerCaseFirst(\n modelName\n )}.${opType.replace(\"One\", \"\")}(${input});\n return ${name};\n }),`);\n}\n\nexport function generateRouterSchemaImports(\n sourceFile: SourceFile,\n modelName: string,\n modelActions: string[]\n) {\n sourceFile.addStatements(\n /* ts */\n [\n // remove any duplicate import statements\n ...new Set(\n modelActions.map(opName =>\n getRouterSchemaImportByOpName(opName, modelName)\n )\n )\n ].join(\"\\n\")\n );\n}\n\nexport const getRouterSchemaImportByOpName = (\n opName: string,\n modelName: string\n) => {\n const opType = opName.replace(\"OrThrow\", \"\").replace(\"ManyAndReturn\", \"\");\n const inputType = getInputTypeByOpName(opType, modelName);\n\n return inputType\n ? `import { ${lowerCaseFirst(inputType)} } from \"../schemas/${lowerCaseFirst(opType)}${modelName}.schema\"; `\n : \"\";\n};\n\nexport const getInputTypeByOpName = (opName: string, modelName: string) => {\n let inputType;\n switch (opName) {\n case \"findUnique\":\n inputType = `${modelName}FindUniqueSchema`;\n break;\n case \"findFirst\":\n inputType = `${modelName}FindFirstSchema`;\n break;\n case \"findMany\":\n inputType = `${modelName}FindManySchema`;\n break;\n case \"findRaw\":\n inputType = `${modelName}FindRawObjectSchema`;\n break;\n case \"createOne\":\n inputType = `${modelName}CreateOneSchema`;\n break;\n case \"createMany\":\n inputType = `${modelName}CreateManySchema`;\n break;\n case \"createManyAndReturn\":\n inputType = `${modelName}CreateManySchema`;\n break;\n case \"deleteOne\":\n inputType = `${modelName}DeleteOneSchema`;\n break;\n case \"deleteMany\":\n inputType = `${modelName}DeleteManySchema`;\n break;\n case \"updateOne\":\n inputType = `${modelName}UpdateOneSchema`;\n break;\n case \"updateMany\":\n inputType = `${modelName}UpdateManySchema`;\n break;\n case \"updateManyAndReturn\":\n inputType = `${modelName}UpdateManySchema`;\n break;\n case \"upsertOne\":\n inputType = `${modelName}UpsertSchema`;\n break;\n case \"aggregate\":\n inputType = `${modelName}AggregateSchema`;\n break;\n case \"aggregateRaw\":\n inputType = `${modelName}AggregateRawObjectSchema`;\n break;\n case \"groupBy\":\n inputType = `${modelName}GroupBySchema`;\n break;\n default:\n // eslint-disable-next-line no-console\n console.log(\"getInputTypeByOpName: \", { opName, modelName });\n }\n return inputType;\n};\n\nexport const getProcedureTypeByOpName = (opName: string) => {\n let procType;\n switch (opName) {\n case \"findUnique\":\n case \"findFirst\":\n case \"findMany\":\n case \"findRaw\":\n case \"aggregate\":\n case \"aggregateRaw\":\n case \"groupBy\":\n procType = \"query\";\n break;\n case \"createOne\":\n case \"createMany\":\n case \"createManyAndReturn\":\n case \"deleteOne\":\n case \"updateOne\":\n case \"deleteMany\":\n case \"updateMany\":\n case \"updateManyAndReturn\":\n case \"upsertOne\":\n procType = \"mutation\";\n break;\n default:\n // eslint-disable-next-line no-console\n console.log(\"getProcedureTypeByOpName: \", { opName });\n }\n return procType;\n};\n\nexport function resolveModelsComments(\n models: DMMF.Model[],\n hiddenModels: string[]\n) {\n // eslint-disable-next-line regexp/no-obscure-range\n const modelAttributeRegex = /(?:@@Gen\\.)+[A-z]+\\(.+\\)/;\n const attributeNameRegex = /\\.+[A-Z]+\\(+/i;\n const attributeArgsRegex = /\\(+[A-Z]+:.+\\)/i;\n\n for (const model of models) {\n if (model.documentation) {\n const attribute = model.documentation?.match(modelAttributeRegex)?.[0];\n const attributeName = attribute\n ?.match(attributeNameRegex)?.[0]\n ?.slice(1, -1);\n if (attributeName !== \"model\") continue;\n const rawAttributeArgs = attribute\n ?.match(attributeArgsRegex)?.[0]\n ?.slice(1, -1);\n\n const parsedAttributeArgs: Record<string, unknown> = {};\n if (rawAttributeArgs) {\n const rawAttributeArgsParts = rawAttributeArgs\n .split(\":\")\n .map(it => it.trim())\n .map(part => (part.startsWith(\"[\") ? part : part.split(\",\")))\n .flat()\n .map(it => it.trim());\n\n for (let i = 0; i < rawAttributeArgsParts.length; i += 2) {\n const key = rawAttributeArgsParts[i];\n const value = rawAttributeArgsParts[i + 1];\n parsedAttributeArgs[key!] = JSON.parse(value!);\n }\n }\n\n if (parsedAttributeArgs.hide) {\n hiddenModels.push(model.name);\n }\n }\n }\n}\n\nexport const getImports = (\n type: \"trpc\" | \"trpc-shield\" | \"context\",\n newPath?: string\n) => {\n let statement = \"\";\n if (type === \"trpc\") {\n statement = \"import * as trpc from '@trpc/server';\\n\";\n } else if (type === \"trpc-shield\") {\n statement = \"import { shield, allow } from '@stryke/trpc-next/shield';\\n\";\n } else if (type === \"context\") {\n statement = `import type { Context } from '${newPath}';\\n`;\n }\n\n return statement;\n};\n\nexport const wrapWithObject = ({\n shieldItemLines\n}: {\n shieldItemLines: Array<string> | string;\n}) => {\n let wrapped = \"{\";\n wrapped += \"\\n\";\n wrapped += Array.isArray(shieldItemLines)\n ? ` ${shieldItemLines.join(\",\\r\\n\")}`\n : ` ${shieldItemLines}`;\n wrapped += \"\\n\";\n wrapped += \"}\";\n return wrapped;\n};\n\nexport const wrapWithTrpcShieldCall = ({\n shieldObjectTextWrapped\n}: {\n shieldObjectTextWrapped: string;\n}) => {\n let wrapped = \"shield<Context>(\";\n wrapped += \"\\n\";\n wrapped += ` ${shieldObjectTextWrapped}`;\n wrapped += \"\\n\";\n wrapped += \")\";\n return wrapped;\n};\n\nexport const wrapWithExport = ({\n shieldObjectText\n}: {\n shieldObjectText: string;\n}) => {\n return `export const permissions: ReturnType<typeof shield<Context>> = ${shieldObjectText};`;\n};\n\nexport const constructShield = async (\n {\n queries,\n mutations,\n subscriptions\n }: {\n queries: Array<string>;\n mutations: Array<string>;\n subscriptions: Array<string>;\n },\n config: Config,\n options: GeneratorOptions,\n outputDir: string\n) => {\n if (\n queries.length === 0 &&\n mutations.length === 0 &&\n subscriptions.length === 0\n ) {\n return \"\";\n }\n\n let rootItems = \"\";\n if (queries.length > 0) {\n const queryLinesWrapped = `query: ${wrapWithObject({\n shieldItemLines: queries.map(query => `${query}: allow`)\n })},`;\n rootItems += queryLinesWrapped;\n }\n if (mutations.length > 0) {\n const mutationLinesWrapped = `mutation: ${wrapWithObject({\n shieldItemLines: mutations.map(mutation => `${mutation}: allow`)\n })},`;\n rootItems += mutationLinesWrapped;\n }\n\n if (subscriptions.length > 0) {\n const subscriptionLinesWrapped = `subscription: ${wrapWithObject({\n shieldItemLines: subscriptions.map(\n subscription => `${subscription}: allow`\n )\n })},`;\n rootItems += subscriptionLinesWrapped;\n }\n\n if (rootItems.length === 0) {\n return \"\";\n }\n\n let shieldText = getImports(\"trpc-shield\");\n shieldText += getImports(\n \"context\",\n relativePath(outputDir, joinPaths(outputDir, config.contextPath))\n );\n shieldText += \"\\n\\n\";\n shieldText += wrapWithExport({\n shieldObjectText: wrapWithTrpcShieldCall({\n shieldObjectTextWrapped: wrapWithObject({ shieldItemLines: rootItems })\n })\n });\n\n return shieldText;\n};\n\nexport const constructDefaultOptions = (\n config: Config,\n options: GeneratorOptions,\n outputDir: string\n) => {\n return `import { ZodError } from 'zod';${config.withNext ? '\\nimport { transformer } from \"@stryke/trpc-next/shared\";' : \"\"}\nimport type {\n DataTransformerOptions,\n RootConfig\n} from \"@trpc/server/unstable-core-do-not-import\";\nimport type { Context } from \"${relativePath(outputDir, joinPaths(outputDir, config.contextPath))}\";\n\ninterface RuntimeConfigOptions<\n TContext extends object,\n TMeta extends object = object\n> extends Partial<\n Omit<\n RootConfig<{\n ctx: TContext;\n meta: TMeta;\n errorShape: any;\n transformer: any;\n }>,\n \"$types\" | \"transformer\"\n >\n > {\n /**\n * Use a data transformer\n * @see https://trpc.io/docs/v11/data-transformers\n */\n transformer?: DataTransformerOptions;\n}\n\nconst options: RuntimeConfigOptions<Context> = {${config.withNext ? \"\\n transformer,\" : \"\"}\n errorFormatter({ shape, error }) {\n return {\n ...shape,\n data: {\n ...shape.data,\n zodError:\n error.code === \"BAD_REQUEST\" && error.cause instanceof ZodError\n ? error.cause.flatten()\n : null\n }\n };\n }\n};\n\nexport default options;\n`;\n};\n\nexport const constructZodModels = async (\n models: Writeable<DMMF.Model[]>,\n outputPath: string,\n config: Config,\n options: GeneratorOptions\n) => {\n const indexFile = project.createSourceFile(\n `${outputPath}/index.ts`,\n {},\n { overwrite: true }\n );\n\n generateBarrelFile(models, indexFile);\n\n indexFile.formatText({\n indentSize: 2\n });\n\n await Promise.all(\n models.map(async model => {\n const sourceFile = project.createSourceFile(\n `${outputPath}/${lowerCaseFirst(model.name)}.schema.ts`,\n {},\n { overwrite: true }\n );\n\n await populateModelFile(model, sourceFile, config, options);\n\n sourceFile.formatText({\n indentSize: 2\n });\n })\n );\n};\n"],"mappings":"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"}
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/stryke.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://docs.stormsoftware.com/projects/stryke\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\n/**\n * The prisma-trpc-generator library used by Storm Software for building NodeJS applications.\n *\n * @remarks\n * A fork of the prisma-trpc-generator code to work in ESM\n *\n * @packageDocumentation\n */\n\nimport { generate } from \"./prisma-generator\";\nimport { getPrismaGeneratorHelper } from \"./utils/get-prisma-internals\";\n\ngetPrismaGeneratorHelper()\n .then(helpers => {\n helpers.generatorHandler({\n onManifest: () => ({\n defaultOutput: \"./generated\",\n prettyName: \"Storm Software - Prisma tRPC Generator\",\n requiresGenerators: [\"prisma-client-js\"]\n }),\n onGenerate: generate\n });\n })\n .catch(reason => {\n // eslint-disable-next-line no-console\n console.error(\n `An error occured while generating prisma tRPC source code: ${reason}`\n );\n });\n"],"mappings":";;;;;;;;;;;;AA8BA,0BAA0B,CACvB,MAAK,YAAW;AACf,SAAQ,iBAAiB;EACvB,mBAAmB;GACjB,eAAe;GACf,YAAY;GACZ,oBAAoB,CAAC,mBAAmB;GACzC;EACD,YAAY;EACb,CAAC;EACF,CACD,OAAM,WAAU;AAEf,SAAQ,MACN,8DAA8D,SAC/D;EACD"}
|
package/dist/project.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.mjs","names":["compilerOptions: CompilerOptions"],"sources":["../src/project.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0
|
|
1
|
+
{"version":3,"file":"project.mjs","names":["compilerOptions: CompilerOptions"],"sources":["../src/project.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/stryke.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://docs.stormsoftware.com/projects/stryke\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport type { CompilerOptions } from \"ts-morph\";\nimport { ModuleKind, Project, ScriptTarget } from \"ts-morph\";\n\nconst compilerOptions: CompilerOptions = {\n target: ScriptTarget.ESNext,\n module: ModuleKind.ESNext,\n emitDecoratorMetadata: true,\n experimentalDecorators: true,\n esModuleInterop: true\n};\n\nexport const project = new Project({\n compilerOptions: {\n ...compilerOptions\n }\n});\n"],"mappings":";;;AAqBA,MAAMA,kBAAmC;CACvC,QAAQ,aAAa;CACrB,QAAQ,WAAW;CACnB,uBAAuB;CACvB,wBAAwB;CACxB,iBAAiB;CAClB;AAED,MAAa,UAAU,IAAI,QAAQ,EACjC,iBAAiB,EACf,GAAG,iBACJ,EACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format-file.mjs","names":[],"sources":["../../src/utils/format-file.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0
|
|
1
|
+
{"version":3,"file":"format-file.mjs","names":[],"sources":["../../src/utils/format-file.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/stryke.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://docs.stormsoftware.com/projects/stryke\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport prettier from \"prettier\";\n\nexport async function formatFile(content: string): Promise<string> {\n const options = await prettier.resolveConfig(process.cwd());\n\n let formatOptions = options;\n if (!options) {\n formatOptions = {\n trailingComma: \"all\",\n tabWidth: 2,\n printWidth: 80,\n bracketSpacing: true,\n semi: true,\n singleQuote: true,\n useTabs: false\n };\n }\n\n const formatted = await prettier.format(content, {\n ...formatOptions,\n parser: \"typescript\"\n });\n\n return formatted;\n}\n"],"mappings":";;;AAoBA,eAAsB,WAAW,SAAkC;CACjE,MAAM,UAAU,MAAM,SAAS,cAAc,QAAQ,KAAK,CAAC;CAE3D,IAAI,gBAAgB;AACpB,KAAI,CAAC,QACH,iBAAgB;EACd,eAAe;EACf,UAAU;EACV,YAAY;EACZ,gBAAgB;EAChB,MAAM;EACN,aAAa;EACb,SAAS;EACV;AAQH,QALkB,MAAM,SAAS,OAAO,SAAS;EAC/C,GAAG;EACH,QAAQ;EACT,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-prisma-internals.mjs","names":[],"sources":["../../src/utils/get-prisma-internals.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0
|
|
1
|
+
{"version":3,"file":"get-prisma-internals.mjs","names":[],"sources":["../../src/utils/get-prisma-internals.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/stryke.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://docs.stormsoftware.com/projects/stryke\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport type { DMMF, EnvValue } from \"@prisma/generator-helper\";\nimport type { Handler } from \"@prisma/generator-helper/dist/generatorHandler\";\nimport type { GetDMMFOptions } from \"@prisma/internals\";\nimport { getJiti } from \"./get-jiti\";\n\nexport async function getPrismaInternals() {\n return getJiti().import<{\n parseEnvValue: (p: EnvValue) => string;\n getDMMF: (options: GetDMMFOptions) => Promise<DMMF.Document>;\n }>(getJiti().esmResolve(\"@prisma/internals\"));\n}\n\nexport async function getPrismaGeneratorHelper() {\n return getJiti().import<{\n generatorHandler: (handler: Handler) => void;\n }>(getJiti().esmResolve(\"@prisma/generator-helper\"));\n}\n"],"mappings":";;;AAuBA,eAAsB,qBAAqB;AACzC,QAAO,SAAS,CAAC,OAGd,SAAS,CAAC,WAAW,oBAAoB,CAAC;;AAG/C,eAAsB,2BAA2B;AAC/C,QAAO,SAAS,CAAC,OAEd,SAAS,CAAC,WAAW,2BAA2B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"write-file-safely.mjs","names":["relativePath"],"sources":["../../src/utils/write-file-safely.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0
|
|
1
|
+
{"version":3,"file":"write-file-safely.mjs","names":["relativePath"],"sources":["../../src/utils/write-file-safely.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/stryke.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://docs.stormsoftware.com/projects/stryke\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { createDirectory } from \"@stryke/fs/helpers\";\nimport { writeFile } from \"@stryke/fs/write-file\";\nimport { correctPath } from \"@stryke/path/correct-path\";\nimport { findFilePath } from \"@stryke/path/file-path-fns\";\nimport path from \"node:path\";\nimport { formatFile } from \"./format-file\";\n\nconst indexExports = new Set<string>();\n\nexport const addIndexExport = (filePath: string) => {\n indexExports.add(filePath);\n};\n\nexport const writeFileSafely = async (\n writeLocation: string,\n content: any,\n addToIndex = true\n) => {\n const [fileContent] = await Promise.all([\n formatFile(content),\n createDirectory(findFilePath(writeLocation))\n ]);\n\n await writeFile(writeLocation, fileContent);\n if (addToIndex) {\n addIndexExport(writeLocation);\n }\n};\n\nexport const writeIndexFile = async (indexPath: string) => {\n const rows = Array.from(indexExports).map(filePath => {\n let relativePath = path.relative(path.dirname(indexPath), filePath);\n if (relativePath.endsWith(\".ts\")) {\n relativePath = relativePath.slice(0, relativePath.lastIndexOf(\".ts\"));\n }\n const normalized = correctPath(relativePath);\n\n return `export * from './${normalized}';`;\n });\n\n rows.push(\"export * from './models';\");\n\n await writeFileSafely(indexPath, rows.join(\"\\n\"), false);\n};\n"],"mappings":";;;;;;;;AAyBA,MAAM,+BAAe,IAAI,KAAa;AAEtC,MAAa,kBAAkB,aAAqB;AAClD,cAAa,IAAI,SAAS;;AAG5B,MAAa,kBAAkB,OAC7B,eACA,SACA,aAAa,SACV;CACH,MAAM,CAAC,eAAe,MAAM,QAAQ,IAAI,CACtC,WAAW,QAAQ,EACnB,gBAAgB,aAAa,cAAc,CAAC,CAC7C,CAAC;AAEF,OAAM,UAAU,eAAe,YAAY;AAC3C,KAAI,WACF,gBAAe,cAAc;;AAIjC,MAAa,iBAAiB,OAAO,cAAsB;CACzD,MAAM,OAAO,MAAM,KAAK,aAAa,CAAC,KAAI,aAAY;EACpD,IAAIA,iBAAe,KAAK,SAAS,KAAK,QAAQ,UAAU,EAAE,SAAS;AACnE,MAAIA,eAAa,SAAS,MAAM,CAC9B,kBAAeA,eAAa,MAAM,GAAGA,eAAa,YAAY,MAAM,CAAC;AAIvE,SAAO,oBAFY,YAAYA,eAAa,CAEN;GACtC;AAEF,MAAK,KAAK,4BAA4B;AAEtC,OAAM,gBAAgB,WAAW,KAAK,KAAK,KAAK,EAAE,MAAM"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregate-helpers.mjs","names":["aggregateOperationSupport: AggregateOperationSupport"],"sources":["../../src/zod/aggregate-helpers.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0
|
|
1
|
+
{"version":3,"file":"aggregate-helpers.mjs","names":["aggregateOperationSupport: AggregateOperationSupport"],"sources":["../../src/zod/aggregate-helpers.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/stryke.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://docs.stormsoftware.com/projects/stryke\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport type { DMMF } from \"@prisma/generator-helper\";\nimport type { AggregateOperationSupport } from \"../types\";\n\nconst isAggregateOutputType = (name: string) =>\n /(?:Count|Avg|Sum|Min|Max)AggregateOutputType$/.test(name);\n\nexport const isAggregateInputType = (name: string) =>\n name.endsWith(\"CountAggregateInput\") ||\n name.endsWith(\"SumAggregateInput\") ||\n name.endsWith(\"AvgAggregateInput\") ||\n name.endsWith(\"MinAggregateInput\") ||\n name.endsWith(\"MaxAggregateInput\");\n\nexport function addMissingInputObjectTypesForAggregate(\n inputObjectTypes: DMMF.InputType[],\n outputObjectTypes: DMMF.OutputType[]\n) {\n const aggregateOutputTypes = outputObjectTypes.filter(({ name }) =>\n isAggregateOutputType(name)\n );\n for (const aggregateOutputType of aggregateOutputTypes) {\n const name = aggregateOutputType.name.replace(/(?:OutputType|Output)$/, \"\");\n inputObjectTypes.push({\n constraints: { maxNumFields: null, minNumFields: null },\n name: `${name}Input`,\n fields: aggregateOutputType.fields.map(field => ({\n name: field.name,\n isNullable: false,\n isRequired: false,\n inputTypes: [\n {\n isList: false,\n type: \"True\",\n location: \"scalar\"\n }\n ]\n }))\n });\n }\n}\n\nexport function resolveZodAggregateOperationSupport(\n inputObjectTypes: DMMF.InputType[]\n) {\n const aggregateOperationSupport: AggregateOperationSupport = {};\n for (const inputType of inputObjectTypes) {\n if (isAggregateInputType(inputType.name)) {\n const name = inputType.name.replace(\"AggregateInput\", \"\");\n if (name.endsWith(\"Count\")) {\n const model = name.replace(\"Count\", \"\");\n aggregateOperationSupport[model] = {\n ...aggregateOperationSupport[model],\n count: true\n };\n } else if (name.endsWith(\"Min\")) {\n const model = name.replace(\"Min\", \"\");\n aggregateOperationSupport[model] = {\n ...aggregateOperationSupport[model],\n min: true\n };\n } else if (name.endsWith(\"Max\")) {\n const model = name.replace(\"Max\", \"\");\n aggregateOperationSupport[model] = {\n ...aggregateOperationSupport[model],\n max: true\n };\n } else if (name.endsWith(\"Sum\")) {\n const model = name.replace(\"Sum\", \"\");\n aggregateOperationSupport[model] = {\n ...aggregateOperationSupport[model],\n sum: true\n };\n } else if (name.endsWith(\"Avg\")) {\n const model = name.replace(\"Avg\", \"\");\n aggregateOperationSupport[model] = {\n ...aggregateOperationSupport[model],\n avg: true\n };\n }\n }\n }\n return aggregateOperationSupport;\n}\n"],"mappings":";AAqBA,MAAM,yBAAyB,SAC7B,gDAAgD,KAAK,KAAK;AAE5D,MAAa,wBAAwB,SACnC,KAAK,SAAS,sBAAsB,IACpC,KAAK,SAAS,oBAAoB,IAClC,KAAK,SAAS,oBAAoB,IAClC,KAAK,SAAS,oBAAoB,IAClC,KAAK,SAAS,oBAAoB;AAEpC,SAAgB,uCACd,kBACA,mBACA;CACA,MAAM,uBAAuB,kBAAkB,QAAQ,EAAE,WACvD,sBAAsB,KAAK,CAC5B;AACD,MAAK,MAAM,uBAAuB,sBAAsB;EACtD,MAAM,OAAO,oBAAoB,KAAK,QAAQ,0BAA0B,GAAG;AAC3E,mBAAiB,KAAK;GACpB,aAAa;IAAE,cAAc;IAAM,cAAc;IAAM;GACvD,MAAM,GAAG,KAAK;GACd,QAAQ,oBAAoB,OAAO,KAAI,WAAU;IAC/C,MAAM,MAAM;IACZ,YAAY;IACZ,YAAY;IACZ,YAAY,CACV;KACE,QAAQ;KACR,MAAM;KACN,UAAU;KACX,CACF;IACF,EAAE;GACJ,CAAC;;;AAIN,SAAgB,oCACd,kBACA;CACA,MAAMA,4BAAuD,EAAE;AAC/D,MAAK,MAAM,aAAa,iBACtB,KAAI,qBAAqB,UAAU,KAAK,EAAE;EACxC,MAAM,OAAO,UAAU,KAAK,QAAQ,kBAAkB,GAAG;AACzD,MAAI,KAAK,SAAS,QAAQ,EAAE;GAC1B,MAAM,QAAQ,KAAK,QAAQ,SAAS,GAAG;AACvC,6BAA0B,SAAS;IACjC,GAAG,0BAA0B;IAC7B,OAAO;IACR;aACQ,KAAK,SAAS,MAAM,EAAE;GAC/B,MAAM,QAAQ,KAAK,QAAQ,OAAO,GAAG;AACrC,6BAA0B,SAAS;IACjC,GAAG,0BAA0B;IAC7B,KAAK;IACN;aACQ,KAAK,SAAS,MAAM,EAAE;GAC/B,MAAM,QAAQ,KAAK,QAAQ,OAAO,GAAG;AACrC,6BAA0B,SAAS;IACjC,GAAG,0BAA0B;IAC7B,KAAK;IACN;aACQ,KAAK,SAAS,MAAM,EAAE;GAC/B,MAAM,QAAQ,KAAK,QAAQ,OAAO,GAAG;AACrC,6BAA0B,SAAS;IACjC,GAAG,0BAA0B;IAC7B,KAAK;IACN;aACQ,KAAK,SAAS,MAAM,EAAE;GAC/B,MAAM,QAAQ,KAAK,QAAQ,OAAO,GAAG;AACrC,6BAA0B,SAAS;IACjC,GAAG,0BAA0B;IAC7B,KAAK;IACN;;;AAIP,QAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comments-helpers.mjs","names":["parsedAttributeArgs: Record<string, unknown>"],"sources":["../../src/zod/comments-helpers.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0
|
|
1
|
+
{"version":3,"file":"comments-helpers.mjs","names":["parsedAttributeArgs: Record<string, unknown>"],"sources":["../../src/zod/comments-helpers.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/stryke.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://docs.stormsoftware.com/projects/stryke\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport type { DMMF } from \"@prisma/generator-helper\";\n\n// eslint-disable-next-line regexp/no-obscure-range\nconst modelAttributeRegex = /(?:@@Gen\\.)+[A-z]+\\(.+\\)/;\nconst attributeNameRegex = /\\.+[A-Z]+\\(+/i;\nconst attributeArgsRegex = /\\(+[A-Z]+:.+\\)/i;\n\nexport function resolveZodModelsComments(\n models: DMMF.Model[],\n modelOperations: DMMF.ModelMapping[],\n enumTypes: { model?: DMMF.SchemaEnum[]; prisma: DMMF.SchemaEnum[] },\n hiddenModels: string[],\n hiddenFields: string[]\n) {\n models = collectHiddenModels(models, hiddenModels);\n collectHiddenFields(models, hiddenModels, hiddenFields);\n hideModelOperations(models, modelOperations);\n hideEnums(enumTypes, hiddenModels);\n}\n\nfunction collectHiddenModels(models: DMMF.Model[], hiddenModels: string[]) {\n return models\n .map(model => {\n if (model.documentation) {\n const attribute = model.documentation?.match(modelAttributeRegex)?.[0];\n const attributeName = attribute\n ?.match(attributeNameRegex)?.[0]\n ?.slice(1, -1);\n if (attributeName !== \"model\") {\n return model;\n }\n\n const rawAttributeArgs = attribute\n ?.match(attributeArgsRegex)?.[0]\n ?.slice(1, -1);\n\n const parsedAttributeArgs: Record<string, unknown> = {};\n if (rawAttributeArgs) {\n const rawAttributeArgsParts = rawAttributeArgs\n .split(\":\")\n .map(it => it.trim())\n .map(part => (part.startsWith(\"[\") ? part : part.split(\",\")))\n .flat()\n .map(it => it.trim());\n\n for (let i = 0; i < rawAttributeArgsParts.length; i += 2) {\n const key = rawAttributeArgsParts[i];\n const value = rawAttributeArgsParts[i + 1];\n parsedAttributeArgs[key!] = JSON.parse(value!);\n }\n }\n if (parsedAttributeArgs.hide) {\n hiddenModels.push(model.name);\n return null as unknown as DMMF.Model;\n }\n }\n\n return model;\n })\n .filter(Boolean);\n}\n\nfunction collectHiddenFields(\n models: DMMF.Model[],\n hiddenModels: string[],\n hiddenFields: string[]\n) {\n models.forEach(model => {\n model.fields.forEach(field => {\n if (hiddenModels.includes(field.type)) {\n hiddenFields.push(field.name);\n if (field.relationFromFields) {\n field.relationFromFields.forEach(item => hiddenFields.push(item));\n }\n }\n });\n });\n}\nfunction hideEnums(\n enumTypes: { model?: DMMF.SchemaEnum[]; prisma: DMMF.SchemaEnum[] },\n hiddenModels: string[]\n) {\n enumTypes.prisma = enumTypes.prisma.filter(\n item => !hiddenModels.find(model => item.name.startsWith(model))\n );\n}\n\nfunction hideModelOperations(\n models: DMMF.Model[],\n modelOperations: DMMF.ModelMapping[]\n) {\n let i = modelOperations.length;\n while (i >= 0) {\n --i;\n const modelOperation = modelOperations[i];\n if (\n modelOperation &&\n !models.find(model => {\n return model.name === modelOperation.model;\n })\n ) {\n modelOperations.splice(i, 1);\n }\n }\n}\n\nexport function hideZodInputObjectTypesAndRelatedFields(\n inputObjectTypes: DMMF.InputType[],\n hiddenModels: string[],\n hiddenFields: string[]\n) {\n let j = inputObjectTypes.length;\n while (j >= 0) {\n --j;\n const inputType = inputObjectTypes[j];\n if (\n inputType &&\n (hiddenModels.includes(inputType?.meta?.source as string) ||\n hiddenModels.find(model => inputType.name.startsWith(model)))\n ) {\n inputObjectTypes.splice(j, 1);\n } else {\n let k = inputType?.fields?.length ?? 0;\n while (k >= 0) {\n --k;\n const field = inputType?.fields?.[k];\n if (field && hiddenFields.includes(field.name)) {\n inputObjectTypes[j]!.fields.slice(k, 1);\n }\n }\n }\n }\n}\n"],"mappings":";AAqBA,MAAM,sBAAsB;AAC5B,MAAM,qBAAqB;AAC3B,MAAM,qBAAqB;AAE3B,SAAgB,yBACd,QACA,iBACA,WACA,cACA,cACA;AACA,UAAS,oBAAoB,QAAQ,aAAa;AAClD,qBAAoB,QAAQ,cAAc,aAAa;AACvD,qBAAoB,QAAQ,gBAAgB;AAC5C,WAAU,WAAW,aAAa;;AAGpC,SAAS,oBAAoB,QAAsB,cAAwB;AACzE,QAAO,OACJ,KAAI,UAAS;AACZ,MAAI,MAAM,eAAe;GACvB,MAAM,YAAY,MAAM,eAAe,MAAM,oBAAoB,GAAG;AAIpE,OAHsB,WAClB,MAAM,mBAAmB,GAAG,IAC5B,MAAM,GAAG,GAAG,KACM,QACpB,QAAO;GAGT,MAAM,mBAAmB,WACrB,MAAM,mBAAmB,GAAG,IAC5B,MAAM,GAAG,GAAG;GAEhB,MAAMA,sBAA+C,EAAE;AACvD,OAAI,kBAAkB;IACpB,MAAM,wBAAwB,iBAC3B,MAAM,IAAI,CACV,KAAI,OAAM,GAAG,MAAM,CAAC,CACpB,KAAI,SAAS,KAAK,WAAW,IAAI,GAAG,OAAO,KAAK,MAAM,IAAI,CAAE,CAC5D,MAAM,CACN,KAAI,OAAM,GAAG,MAAM,CAAC;AAEvB,SAAK,IAAI,IAAI,GAAG,IAAI,sBAAsB,QAAQ,KAAK,GAAG;KACxD,MAAM,MAAM,sBAAsB;KAClC,MAAM,QAAQ,sBAAsB,IAAI;AACxC,yBAAoB,OAAQ,KAAK,MAAM,MAAO;;;AAGlD,OAAI,oBAAoB,MAAM;AAC5B,iBAAa,KAAK,MAAM,KAAK;AAC7B,WAAO;;;AAIX,SAAO;GACP,CACD,OAAO,QAAQ;;AAGpB,SAAS,oBACP,QACA,cACA,cACA;AACA,QAAO,SAAQ,UAAS;AACtB,QAAM,OAAO,SAAQ,UAAS;AAC5B,OAAI,aAAa,SAAS,MAAM,KAAK,EAAE;AACrC,iBAAa,KAAK,MAAM,KAAK;AAC7B,QAAI,MAAM,mBACR,OAAM,mBAAmB,SAAQ,SAAQ,aAAa,KAAK,KAAK,CAAC;;IAGrE;GACF;;AAEJ,SAAS,UACP,WACA,cACA;AACA,WAAU,SAAS,UAAU,OAAO,QAClC,SAAQ,CAAC,aAAa,MAAK,UAAS,KAAK,KAAK,WAAW,MAAM,CAAC,CACjE;;AAGH,SAAS,oBACP,QACA,iBACA;CACA,IAAI,IAAI,gBAAgB;AACxB,QAAO,KAAK,GAAG;AACb,IAAE;EACF,MAAM,iBAAiB,gBAAgB;AACvC,MACE,kBACA,CAAC,OAAO,MAAK,UAAS;AACpB,UAAO,MAAM,SAAS,eAAe;IACrC,CAEF,iBAAgB,OAAO,GAAG,EAAE;;;AAKlC,SAAgB,wCACd,kBACA,cACA,cACA;CACA,IAAI,IAAI,iBAAiB;AACzB,QAAO,KAAK,GAAG;AACb,IAAE;EACF,MAAM,YAAY,iBAAiB;AACnC,MACE,cACC,aAAa,SAAS,WAAW,MAAM,OAAiB,IACvD,aAAa,MAAK,UAAS,UAAU,KAAK,WAAW,MAAM,CAAC,EAE9D,kBAAiB,OAAO,GAAG,EAAE;OACxB;GACL,IAAI,IAAI,WAAW,QAAQ,UAAU;AACrC,UAAO,KAAK,GAAG;AACb,MAAE;IACF,MAAM,QAAQ,WAAW,SAAS;AAClC,QAAI,SAAS,aAAa,SAAS,MAAM,KAAK,CAC5C,kBAAiB,GAAI,OAAO,MAAM,GAAG,EAAE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs-helpers.mjs","names":["lines: string[]"],"sources":["../../src/zod/docs-helpers.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0
|
|
1
|
+
{"version":3,"file":"docs-helpers.mjs","names":["lines: string[]"],"sources":["../../src/zod/docs-helpers.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/stryke.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://docs.stormsoftware.com/projects/stryke\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport type { ArrayTree } from \"parenthesis\";\nimport parenthesis from \"parenthesis\";\nimport { chunk } from \"./model-helpers\";\n\nexport const getJSDocs = (docString?: string) => {\n const lines: string[] = [];\n\n if (docString) {\n const docLines = docString\n .split(\"\\n\")\n .filter(dL => !dL.trimStart().startsWith(\"@zod\"));\n\n if (docLines.length) {\n lines.push(\"/**\");\n docLines.forEach(dL => lines.push(` * ${dL}`));\n lines.push(\" */\");\n }\n }\n\n return lines;\n};\n\nexport const getZodDocElements = (docString: string) =>\n docString\n .split(\"\\n\")\n .filter(line => line.trimStart().startsWith(\"@zod\"))\n .map(line => line.trimStart().slice(4))\n .flatMap(line =>\n // Array.from(line.matchAll(/\\.([^().]+\\(.*?\\))/g), (m) => m.slice(1)).flat()\n chunk(parenthesis.parse(line), 2)\n .slice(0, -1)\n .map(\n ([each, contents]) =>\n `${(each as string).replace(\n /\\)?\\./,\n \"\"\n )}${parenthesis.stringify(contents as ArrayTree)})`\n )\n );\n"],"mappings":";;;;AAsBA,MAAa,aAAa,cAAuB;CAC/C,MAAMA,QAAkB,EAAE;AAE1B,KAAI,WAAW;EACb,MAAM,WAAW,UACd,MAAM,KAAK,CACX,QAAO,OAAM,CAAC,GAAG,WAAW,CAAC,WAAW,OAAO,CAAC;AAEnD,MAAI,SAAS,QAAQ;AACnB,SAAM,KAAK,MAAM;AACjB,YAAS,SAAQ,OAAM,MAAM,KAAK,MAAM,KAAK,CAAC;AAC9C,SAAM,KAAK,MAAM;;;AAIrB,QAAO;;AAGT,MAAa,qBAAqB,cAChC,UACG,MAAM,KAAK,CACX,QAAO,SAAQ,KAAK,WAAW,CAAC,WAAW,OAAO,CAAC,CACnD,KAAI,SAAQ,KAAK,WAAW,CAAC,MAAM,EAAE,CAAC,CACtC,SAAQ,SAEP,MAAM,YAAY,MAAM,KAAK,EAAE,EAAE,CAC9B,MAAM,GAAG,GAAG,CACZ,KACE,CAAC,MAAM,cACN,GAAI,KAAgB,QAClB,SACA,GACD,GAAG,YAAY,UAAU,SAAsB,CAAC,GACpD,CACJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator-helpers.mjs","names":[],"sources":["../../src/zod/generator-helpers.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0
|
|
1
|
+
{"version":3,"file":"generator-helpers.mjs","names":[],"sources":["../../src/zod/generator-helpers.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/stryke.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://docs.stormsoftware.com/projects/stryke\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport type { DMMF } from \"@prisma/generator-helper\";\nimport type { AggregateOperationSupport, Writeable } from \"../types\";\nimport Transformer from \"./transformer\";\n\nexport async function generateZodEnumSchemas(\n prismaSchemaEnum: Writeable<DMMF.SchemaEnum[]>,\n modelSchemaEnum: Writeable<DMMF.SchemaEnum[]>\n) {\n const enumTypes = [...prismaSchemaEnum, ...modelSchemaEnum];\n const enumNames = enumTypes.map(enumItem => enumItem.name);\n Transformer.enumNames = enumNames ?? [];\n const transformer = new Transformer({\n enumTypes\n });\n await transformer.generateEnumSchemas();\n}\n\nexport async function generateZodObjectSchemas(\n inputObjectTypes: Writeable<DMMF.InputType[]>\n) {\n for (let i = 0; i < inputObjectTypes.length; i += 1) {\n const fields = inputObjectTypes[i]?.fields;\n const name = inputObjectTypes[i]?.name;\n const transformer = new Transformer({ name, fields });\n await transformer.generateObjectSchema();\n }\n}\n\nexport async function generateZodModelSchemas(\n models: Writeable<DMMF.Model[]>,\n modelOperations: Writeable<DMMF.ModelMapping[]>,\n aggregateOperationSupport: AggregateOperationSupport\n) {\n const transformer = new Transformer({\n models,\n modelOperations,\n aggregateOperationSupport\n });\n await transformer.generateModelSchemas();\n}\n\nexport async function generateZodIndex() {\n await Transformer.generateIndex();\n}\n"],"mappings":";;;AAsBA,eAAsB,uBACpB,kBACA,iBACA;CACA,MAAM,YAAY,CAAC,GAAG,kBAAkB,GAAG,gBAAgB;AAE3D,aAAY,YADM,UAAU,KAAI,aAAY,SAAS,KAAK,IACrB,EAAE;AAIvC,OAHoB,IAAI,YAAY,EAClC,WACD,CAAC,CACgB,qBAAqB;;AAGzC,eAAsB,yBACpB,kBACA;AACA,MAAK,IAAI,IAAI,GAAG,IAAI,iBAAiB,QAAQ,KAAK,GAAG;EACnD,MAAM,SAAS,iBAAiB,IAAI;EACpC,MAAM,OAAO,iBAAiB,IAAI;AAElC,QADoB,IAAI,YAAY;GAAE;GAAM;GAAQ,CAAC,CACnC,sBAAsB;;;AAI5C,eAAsB,wBACpB,QACA,iBACA,2BACA;AAMA,OALoB,IAAI,YAAY;EAClC;EACA;EACA;EACD,CAAC,CACgB,sBAAsB;;AAG1C,eAAsB,mBAAmB;AACvC,OAAM,YAAY,eAAe"}
|
package/dist/zod/helpers.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.mjs","names":[],"sources":["../../src/zod/helpers.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0
|
|
1
|
+
{"version":3,"file":"helpers.mjs","names":[],"sources":["../../src/zod/helpers.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/stryke.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://docs.stormsoftware.com/projects/stryke\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport type { ConnectorType, DMMF } from \"@prisma/generator-helper\";\nimport type { Writeable } from \"../types\";\nimport { addMissingInputObjectTypesForAggregate } from \"./aggregate-helpers\";\nimport { addMissingInputObjectTypesForInclude } from \"./include-helpers\";\nimport { addMissingInputObjectTypesForModelArgs } from \"./modelArgs-helpers\";\nimport { addMissingInputObjectTypesForMongoDbRawOpsAndQueries } from \"./mongodb-helpers\";\nimport { addMissingInputObjectTypesForSelect } from \"./select-helpers\";\nimport Transformer from \"./transformer\";\nimport { changeOptionalToRequiredFields } from \"./whereUniqueInput-helpers\";\n\ninterface AddMissingInputObjectTypeOptions {\n isGenerateSelect: boolean;\n isGenerateInclude: boolean;\n}\n\nexport function addMissingZodInputObjectTypes(\n inputObjectTypes: DMMF.InputType[],\n outputObjectTypes: DMMF.OutputType[],\n models: DMMF.Model[],\n modelOperations: DMMF.ModelMapping[],\n dataSourceProvider: ConnectorType,\n options: AddMissingInputObjectTypeOptions\n) {\n // TODO: remove once Prisma fix this issue: https://github.com/prisma/prisma/issues/14900\n if (dataSourceProvider === \"mongodb\") {\n addMissingInputObjectTypesForMongoDbRawOpsAndQueries(\n modelOperations,\n outputObjectTypes,\n inputObjectTypes\n );\n }\n addMissingInputObjectTypesForAggregate(inputObjectTypes, outputObjectTypes);\n if (options.isGenerateSelect) {\n addMissingInputObjectTypesForSelect(\n inputObjectTypes,\n outputObjectTypes,\n models\n );\n Transformer.setIsGenerateSelect(true);\n }\n if (options.isGenerateSelect || options.isGenerateInclude) {\n addMissingInputObjectTypesForModelArgs(\n inputObjectTypes,\n models,\n options.isGenerateSelect,\n options.isGenerateInclude\n );\n }\n if (options.isGenerateInclude) {\n addMissingInputObjectTypesForInclude(\n inputObjectTypes,\n models,\n options.isGenerateSelect\n );\n Transformer.setIsGenerateInclude(true);\n }\n\n changeOptionalToRequiredFields(\n inputObjectTypes as Writeable<DMMF.InputType[]>\n );\n}\n"],"mappings":";;;;;;;;;AAiCA,SAAgB,8BACd,kBACA,mBACA,QACA,iBACA,oBACA,SACA;AAEA,KAAI,uBAAuB,UACzB,sDACE,iBACA,mBACA,iBACD;AAEH,wCAAuC,kBAAkB,kBAAkB;AAC3E,KAAI,QAAQ,kBAAkB;AAC5B,sCACE,kBACA,mBACA,OACD;AACD,cAAY,oBAAoB,KAAK;;AAEvC,KAAI,QAAQ,oBAAoB,QAAQ,kBACtC,wCACE,kBACA,QACA,QAAQ,kBACR,QAAQ,kBACT;AAEH,KAAI,QAAQ,mBAAmB;AAC7B,uCACE,kBACA,QACA,QAAQ,iBACT;AACD,cAAY,qBAAqB,KAAK;;AAGxC,gCACE,iBACD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"include-helpers.mjs","names":["modelIncludeInputObjectTypes: DMMF.InputType[]","fields: DMMF.SchemaArg[]","field: DMMF.SchemaArg","inputTypes: SchemaArgInputTypes","_countField: DMMF.SchemaArg","modelIncludeInputObjectType: DMMF.InputType"],"sources":["../../src/zod/include-helpers.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0
|
|
1
|
+
{"version":3,"file":"include-helpers.mjs","names":["modelIncludeInputObjectTypes: DMMF.InputType[]","fields: DMMF.SchemaArg[]","field: DMMF.SchemaArg","inputTypes: SchemaArgInputTypes","_countField: DMMF.SchemaArg","modelIncludeInputObjectType: DMMF.InputType"],"sources":["../../src/zod/include-helpers.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/stryke.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://docs.stormsoftware.com/projects/stryke\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport type { DMMF } from \"@prisma/generator-helper\";\nimport type { SchemaArgInputTypes } from \"../types\";\nimport {\n checkIsModelRelationField,\n checkModelHasManyModelRelation,\n checkModelHasModelRelation\n} from \"./model-helpers\";\n\nexport function addMissingInputObjectTypesForInclude(\n inputObjectTypes: DMMF.InputType[],\n models: DMMF.Model[],\n isGenerateSelect: boolean\n) {\n // generate input object types necessary to support ModelInclude with relation support\n const generatedIncludeInputObjectTypes = generateModelIncludeInputObjectTypes(\n models,\n isGenerateSelect\n );\n\n for (const includeInputObjectType of generatedIncludeInputObjectTypes) {\n inputObjectTypes.push(includeInputObjectType);\n }\n}\n\nfunction generateModelIncludeInputObjectTypes(\n models: DMMF.Model[],\n isGenerateSelect: boolean\n) {\n const modelIncludeInputObjectTypes: DMMF.InputType[] = [];\n for (const model of models) {\n const { name: modelName, fields: modelFields } = model;\n const fields: DMMF.SchemaArg[] = [];\n\n for (const modelField of modelFields) {\n const { name: modelFieldName, isList, type } = modelField;\n\n const isRelationField = checkIsModelRelationField(modelField);\n\n if (isRelationField) {\n const field: DMMF.SchemaArg = {\n name: modelFieldName,\n isRequired: false,\n isNullable: false,\n inputTypes: [\n { isList: false, type: \"Boolean\", location: \"scalar\" },\n {\n isList: false,\n type: isList ? `${type}FindManyArgs` : `${type}DefaultArgs`,\n location: \"inputObjectTypes\",\n namespace: \"prisma\"\n }\n ]\n };\n fields.push(field);\n }\n }\n\n /**\n * include is not generated for models that do not have a relation with any other models continue onto the next model\n */\n const hasRelationToAnotherModel = checkModelHasModelRelation(model);\n if (!hasRelationToAnotherModel) {\n continue;\n }\n\n const hasManyRelationToAnotherModel = checkModelHasManyModelRelation(model);\n\n const shouldAddCountField = hasManyRelationToAnotherModel;\n if (shouldAddCountField) {\n const inputTypes: SchemaArgInputTypes = [\n { isList: false, type: \"Boolean\", location: \"scalar\" }\n ];\n if (isGenerateSelect) {\n inputTypes.push({\n isList: false,\n type: `${modelName}CountOutputTypeDefaultArgs`,\n location: \"inputObjectTypes\",\n namespace: \"prisma\"\n });\n }\n const _countField: DMMF.SchemaArg = {\n name: \"_count\",\n isRequired: false,\n isNullable: false,\n inputTypes\n };\n fields.push(_countField);\n }\n\n const modelIncludeInputObjectType: DMMF.InputType = {\n name: `${modelName}Include`,\n constraints: {\n maxNumFields: null,\n minNumFields: null\n },\n fields\n };\n modelIncludeInputObjectTypes.push(modelIncludeInputObjectType);\n }\n return modelIncludeInputObjectTypes;\n}\n"],"mappings":";;;AA0BA,SAAgB,qCACd,kBACA,QACA,kBACA;CAEA,MAAM,mCAAmC,qCACvC,QACA,iBACD;AAED,MAAK,MAAM,0BAA0B,iCACnC,kBAAiB,KAAK,uBAAuB;;AAIjD,SAAS,qCACP,QACA,kBACA;CACA,MAAMA,+BAAiD,EAAE;AACzD,MAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,EAAE,MAAM,WAAW,QAAQ,gBAAgB;EACjD,MAAMC,SAA2B,EAAE;AAEnC,OAAK,MAAM,cAAc,aAAa;GACpC,MAAM,EAAE,MAAM,gBAAgB,QAAQ,SAAS;AAI/C,OAFwB,0BAA0B,WAAW,EAExC;IACnB,MAAMC,QAAwB;KAC5B,MAAM;KACN,YAAY;KACZ,YAAY;KACZ,YAAY,CACV;MAAE,QAAQ;MAAO,MAAM;MAAW,UAAU;MAAU,EACtD;MACE,QAAQ;MACR,MAAM,SAAS,GAAG,KAAK,gBAAgB,GAAG,KAAK;MAC/C,UAAU;MACV,WAAW;MACZ,CACF;KACF;AACD,WAAO,KAAK,MAAM;;;AAQtB,MAAI,CAD8B,2BAA2B,MAAM,CAEjE;AAMF,MAHsC,+BAA+B,MAAM,EAGlD;GACvB,MAAMC,aAAkC,CACtC;IAAE,QAAQ;IAAO,MAAM;IAAW,UAAU;IAAU,CACvD;AACD,OAAI,iBACF,YAAW,KAAK;IACd,QAAQ;IACR,MAAM,GAAG,UAAU;IACnB,UAAU;IACV,WAAW;IACZ,CAAC;GAEJ,MAAMC,cAA8B;IAClC,MAAM;IACN,YAAY;IACZ,YAAY;IACZ;IACD;AACD,UAAO,KAAK,YAAY;;EAG1B,MAAMC,8BAA8C;GAClD,MAAM,GAAG,UAAU;GACnB,aAAa;IACX,cAAc;IACd,cAAc;IACf;GACD;GACD;AACD,+BAA6B,KAAK,4BAA4B;;AAEhE,QAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-helpers.mjs","names":["importList: ImportDeclarationStructure[]","extraModifiers: string[]"],"sources":["../../src/zod/model-helpers.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 License, and is\n free for commercial and private use. For more information, please visit\n our licensing page.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://stormsoftware.com/projects/stryke/docs\n Contact: https://stormsoftware.com/contact\n License: https://stormsoftware.com/projects/stryke/license\n\n ------------------------------------------------------------------- */\n\nimport type {\n DMMF,\n EnvValue,\n GeneratorOptions\n} from \"@prisma/generator-helper\";\nimport { lowerCaseFirst } from \"@stryke/string-format/lower-case-first\";\nimport path from \"node:path\";\nimport type {\n CodeBlockWriter,\n ImportDeclarationStructure,\n SourceFile\n} from \"ts-morph\";\nimport { StructureKind, VariableDeclarationKind } from \"ts-morph\";\nimport type { Config } from \"../config\";\nimport { getPrismaInternals } from \"../utils/get-prisma-internals\";\nimport { getJSDocs, getZodDocElements } from \"./docs-helpers\";\n\nexport function checkModelHasModelRelation(model: DMMF.Model) {\n const { fields: modelFields } = model;\n for (const modelField of modelFields) {\n const isRelationField = checkIsModelRelationField(modelField);\n if (isRelationField) {\n return true;\n }\n }\n return false;\n}\n\nexport function checkModelHasManyModelRelation(model: DMMF.Model) {\n const { fields: modelFields } = model;\n for (const modelField of modelFields) {\n const isManyRelationField = checkIsManyModelRelationField(modelField);\n if (isManyRelationField) {\n return true;\n }\n }\n return false;\n}\n\nexport function checkIsModelRelationField(modelField: DMMF.Field) {\n const { kind, relationName } = modelField;\n\n return kind === \"object\" && !!relationName;\n}\n\nexport function checkIsManyModelRelationField(modelField: DMMF.Field) {\n return checkIsModelRelationField(modelField) && modelField.isList;\n}\n\nexport function findModelByName(models: DMMF.Model[], modelName: string) {\n return models.find(({ name }) => name === modelName);\n}\n\nexport const writeArray = (\n writer: CodeBlockWriter,\n array: string[],\n newLine = true\n) => array.forEach(line => writer.write(line).conditionalNewLine(newLine));\n\nexport const useModelNames = ({\n modelCase,\n modelSuffix,\n relationModel\n}: Config) => {\n const formatModelName = (name: string, prefix = \"\") => {\n if (modelCase === \"camelCase\") {\n name = name.slice(0, 1).toLowerCase() + name.slice(1);\n }\n return `${prefix}${name}${modelSuffix}`;\n };\n\n return {\n modelName: (name: string) =>\n formatModelName(name, relationModel === \"default\" ? \"_\" : \"\"),\n relatedModelName: (\n name: string | DMMF.SchemaEnum | DMMF.OutputType | DMMF.SchemaArg\n ) =>\n formatModelName(\n relationModel === \"default\"\n ? name.toString()\n : `Related${name.toString()}`\n )\n };\n};\n\nexport const dotSlash = (input: string) => {\n const converted = input\n .replace(/^\\\\\\\\\\?\\\\/, \"\")\n .replace(/\\\\/g, \"/\")\n .replace(/\\/{2,}/g, \"/\");\n\n if (converted.includes(`/node_modules/`))\n return converted.split(`/node_modules/`).slice(-1)[0];\n\n if (converted.startsWith(`../`)) return converted;\n\n return `./${converted}`;\n};\n\nexport const chunk = <T extends any[]>(input: T, size: number): T[] => {\n return input.reduce((arr, item, idx) => {\n return idx % size === 0\n ? [...arr, [item]]\n : [...(arr as T).slice(0, -1), [...(arr as T).slice(-1)[0], item]];\n }, []);\n};\n\nexport const needsRelatedModel = (model: DMMF.Model, config: Config) =>\n model.fields.some(field => field.kind === \"object\") &&\n config.relationModel !== false;\n\nexport const writeImportsForModel = async (\n model: DMMF.Model,\n sourceFile: SourceFile,\n config: Config,\n options: GeneratorOptions\n) => {\n const internals = await getPrismaInternals();\n\n const outputPath = internals.parseEnvValue(\n options.generator.output as EnvValue\n );\n\n const { relatedModelName } = useModelNames(config);\n const importList: ImportDeclarationStructure[] = [\n {\n kind: StructureKind.ImportDeclaration,\n namespaceImport: \"z\",\n moduleSpecifier: \"zod\"\n }\n ];\n\n if (config.imports) {\n importList.push({\n kind: StructureKind.ImportDeclaration,\n namespaceImport: \"imports\",\n moduleSpecifier: dotSlash(\n path.relative(\n outputPath,\n path.resolve(path.dirname(options.schemaPath), config.imports)\n )\n )!\n });\n }\n\n if (config.useDecimalJs && model.fields.some(f => f.type === \"Decimal\")) {\n importList.push({\n kind: StructureKind.ImportDeclaration,\n namedImports: [\"Decimal\"],\n moduleSpecifier: \"decimal.js\"\n });\n }\n\n const enumFields = model.fields.filter(f => f.kind === \"enum\");\n const relationFields = model.fields.filter(f => f.kind === \"object\");\n\n const clientPath = options.otherGenerators.find(\n each => each.provider.value === \"prisma-client-js\"\n )!.output!.value!;\n\n const relativePath = path.relative(outputPath, clientPath);\n\n if (enumFields.length > 0) {\n importList.push({\n kind: StructureKind.ImportDeclaration,\n isTypeOnly: enumFields.length === 0,\n moduleSpecifier: dotSlash(relativePath)!,\n namedImports: enumFields.map(f => f.type)\n });\n }\n\n if (config.relationModel !== false && relationFields.length > 0) {\n const filteredFields = relationFields.filter(f => f.type !== model.name);\n\n if (filteredFields.length > 0) {\n importList.push({\n kind: StructureKind.ImportDeclaration,\n moduleSpecifier: \"./index\",\n namedImports: Array.from(\n new Set(\n filteredFields.flatMap(f => [`${f.type}`, relatedModelName(f.type)])\n )\n )\n });\n }\n }\n\n sourceFile.addImportDeclarations(importList);\n};\n\nexport const computeCustomSchema = (docString: string) => {\n return getZodDocElements(docString)\n .find(modifier => modifier.startsWith(\"custom(\"))\n ?.slice(7)\n .slice(0, -1);\n};\n\nexport const computeModifiers = (docString: string) => {\n return getZodDocElements(docString).filter(\n each => !each.startsWith(\"custom(\")\n );\n};\n\nexport const getZodConstructor = (\n field: DMMF.Field,\n getRelatedModelName = (\n name: string | DMMF.SchemaEnum | DMMF.OutputType | DMMF.SchemaArg\n ) => name.toString()\n) => {\n let zodType = \"z.unknown()\";\n const extraModifiers: string[] = [\"\"];\n if (field.kind === \"scalar\") {\n switch (field.type) {\n case \"String\":\n zodType = \"z.string()\";\n break;\n case \"Int\":\n zodType = \"z.number()\";\n extraModifiers.push(\"int()\");\n break;\n case \"BigInt\":\n zodType = \"z.bigint()\";\n break;\n case \"DateTime\":\n zodType = \"z.date()\";\n break;\n case \"Float\":\n zodType = \"z.number()\";\n break;\n case \"Decimal\":\n zodType = \"z.number()\";\n break;\n case \"Json\":\n zodType = \"jsonSchema\";\n break;\n case \"Boolean\":\n zodType = \"z.boolean()\";\n break;\n // TODO: Proper type for bytes fields\n case \"Bytes\":\n zodType = \"z.unknown()\";\n break;\n }\n } else if (field.kind === \"enum\") {\n zodType = `z.nativeEnum(${field.type})`;\n } else if (field.kind === \"object\") {\n zodType = getRelatedModelName(field.type);\n }\n\n if (field.isList) extraModifiers.push(\"array()\");\n if (field.documentation) {\n zodType = computeCustomSchema(field.documentation) ?? zodType;\n extraModifiers.push(...computeModifiers(field.documentation));\n }\n if (!field.isRequired && field.type !== \"Json\")\n extraModifiers.push(\"nullish()\");\n // if (field.hasDefaultValue) extraModifiers.push('optional()')\n\n return `${zodType}${extraModifiers.join(\".\")}`;\n};\n\nexport const writeTypeSpecificSchemas = (\n model: DMMF.Model,\n sourceFile: SourceFile,\n config: Config\n) => {\n if (model.fields.some(f => f.type === \"Json\")) {\n sourceFile.addStatements(writer => {\n writer.newLine();\n writeArray(writer, [\n \"// Helper schema for JSON fields\",\n `type Literal = boolean | number | string${\n config.prismaJsonNullability ? \"\" : \"| null\"\n }`,\n \"type Json = Literal | { [key: string]: Json } | Json[]\",\n `const literalSchema = z.union([z.string(), z.number(), z.boolean()${\n config.prismaJsonNullability ? \"\" : \", z.null()\"\n }])`,\n \"const jsonSchema: z.ZodSchema<Json> = z.lazy(() => z.union([literalSchema, z.array(jsonSchema), z.record(jsonSchema)]))\"\n ]);\n });\n }\n\n if (config.useDecimalJs && model.fields.some(f => f.type === \"Decimal\")) {\n sourceFile.addStatements(writer => {\n writer.newLine();\n writeArray(writer, [\n \"// Helper schema for Decimal fields\",\n \"z\",\n \".instanceof(Decimal)\",\n \".or(z.string())\",\n \".or(z.number())\",\n \".refine((value) => {\",\n \" try {\",\n \" return new Decimal(value);\",\n \" } catch (error) {\",\n \" return false;\",\n \" }\",\n \"})\",\n \".transform((value) => new Decimal(value));\"\n ]);\n });\n }\n};\n\nexport const generateSchemaForModel = (\n model: DMMF.Model,\n sourceFile: SourceFile,\n config: Config\n) => {\n const { modelName } = useModelNames(config);\n\n sourceFile.addVariableStatement({\n declarationKind: VariableDeclarationKind.Const,\n isExported: true,\n leadingTrivia: writer => writer.blankLineIfLastNot(),\n declarations: [\n {\n name: modelName(model.name),\n initializer(writer) {\n writer\n .write(\"z.object(\")\n .inlineBlock(() => {\n model.fields\n .filter(f => f.kind !== \"object\")\n .forEach(field => {\n writeArray(writer, getJSDocs(field.documentation));\n writer\n .write(`${field.name}: ${getZodConstructor(field)}`)\n .write(\",\")\n .newLine();\n });\n })\n .write(\")\");\n }\n }\n ]\n });\n};\n\nexport const generateRelatedSchemaForModel = (\n model: DMMF.Model,\n sourceFile: SourceFile,\n config: Config\n) => {\n const { modelName, relatedModelName } = useModelNames(config);\n\n const relationFields = model.fields.filter(f => f.kind === \"object\");\n\n sourceFile.addInterface({\n name: `${model.name}`,\n isExported: true,\n extends: [`z.infer<typeof ${modelName(model.name)}>`],\n properties: relationFields.map(f => ({\n hasQuestionToken: !f.isRequired,\n name: f.name,\n type: `${f.type}${f.isList ? \"[]\" : \"\"}${!f.isRequired ? \" | null\" : \"\"}`\n }))\n });\n\n sourceFile.addStatements(writer =>\n writeArray(writer, [\n \"\",\n \"/**\",\n ` * ${relatedModelName(\n model.name\n )} contains all relations on your model in addition to the scalars`,\n \" *\",\n \" * NOTE: Lazy required in case of potential circular dependencies within schema\",\n \" */\"\n ])\n );\n\n sourceFile.addVariableStatement({\n declarationKind: VariableDeclarationKind.Const,\n isExported: true,\n declarations: [\n {\n name: relatedModelName(model.name),\n type: `z.ZodSchema<${model.name}>`,\n initializer(writer) {\n writer\n .write(`z.lazy(() => ${modelName(model.name)}.extend(`)\n .inlineBlock(() => {\n relationFields.forEach(field => {\n writeArray(writer, getJSDocs(field.documentation));\n\n writer\n .write(\n `${field.name}: ${getZodConstructor(\n field,\n relatedModelName\n )}`\n )\n .write(\",\")\n .newLine();\n });\n })\n .write(\"))\");\n }\n }\n ]\n });\n};\n\nexport const populateModelFile = async (\n model: DMMF.Model,\n sourceFile: SourceFile,\n config: Config,\n options: GeneratorOptions\n) => {\n await writeImportsForModel(model, sourceFile, config, options);\n writeTypeSpecificSchemas(model, sourceFile, config);\n generateSchemaForModel(model, sourceFile, config);\n if (needsRelatedModel(model, config))\n generateRelatedSchemaForModel(model, sourceFile, config);\n};\n\nexport const generateBarrelFile = (\n models: DMMF.Model[],\n indexFile: SourceFile\n) => {\n models.forEach(model =>\n indexFile.addExportDeclaration({\n moduleSpecifier: `./${lowerCaseFirst(model.name)}.schema`\n })\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"model-helpers.mjs","names":["importList: ImportDeclarationStructure[]","extraModifiers: string[]"],"sources":["../../src/zod/model-helpers.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/stryke.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://docs.stormsoftware.com/projects/stryke\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport type {\n DMMF,\n EnvValue,\n GeneratorOptions\n} from \"@prisma/generator-helper\";\nimport { lowerCaseFirst } from \"@stryke/string-format/lower-case-first\";\nimport path from \"node:path\";\nimport type {\n CodeBlockWriter,\n ImportDeclarationStructure,\n SourceFile\n} from \"ts-morph\";\nimport { StructureKind, VariableDeclarationKind } from \"ts-morph\";\nimport type { Config } from \"../config\";\nimport { getPrismaInternals } from \"../utils/get-prisma-internals\";\nimport { getJSDocs, getZodDocElements } from \"./docs-helpers\";\n\nexport function checkModelHasModelRelation(model: DMMF.Model) {\n const { fields: modelFields } = model;\n for (const modelField of modelFields) {\n const isRelationField = checkIsModelRelationField(modelField);\n if (isRelationField) {\n return true;\n }\n }\n return false;\n}\n\nexport function checkModelHasManyModelRelation(model: DMMF.Model) {\n const { fields: modelFields } = model;\n for (const modelField of modelFields) {\n const isManyRelationField = checkIsManyModelRelationField(modelField);\n if (isManyRelationField) {\n return true;\n }\n }\n return false;\n}\n\nexport function checkIsModelRelationField(modelField: DMMF.Field) {\n const { kind, relationName } = modelField;\n\n return kind === \"object\" && !!relationName;\n}\n\nexport function checkIsManyModelRelationField(modelField: DMMF.Field) {\n return checkIsModelRelationField(modelField) && modelField.isList;\n}\n\nexport function findModelByName(models: DMMF.Model[], modelName: string) {\n return models.find(({ name }) => name === modelName);\n}\n\nexport const writeArray = (\n writer: CodeBlockWriter,\n array: string[],\n newLine = true\n) => array.forEach(line => writer.write(line).conditionalNewLine(newLine));\n\nexport const useModelNames = ({\n modelCase,\n modelSuffix,\n relationModel\n}: Config) => {\n const formatModelName = (name: string, prefix = \"\") => {\n if (modelCase === \"camelCase\") {\n name = name.slice(0, 1).toLowerCase() + name.slice(1);\n }\n return `${prefix}${name}${modelSuffix}`;\n };\n\n return {\n modelName: (name: string) =>\n formatModelName(name, relationModel === \"default\" ? \"_\" : \"\"),\n relatedModelName: (\n name: string | DMMF.SchemaEnum | DMMF.OutputType | DMMF.SchemaArg\n ) =>\n formatModelName(\n relationModel === \"default\"\n ? name.toString()\n : `Related${name.toString()}`\n )\n };\n};\n\nexport const dotSlash = (input: string) => {\n const converted = input\n .replace(/^\\\\\\\\\\?\\\\/, \"\")\n .replace(/\\\\/g, \"/\")\n .replace(/\\/{2,}/g, \"/\");\n\n if (converted.includes(`/node_modules/`))\n return converted.split(`/node_modules/`).slice(-1)[0];\n\n if (converted.startsWith(`../`)) return converted;\n\n return `./${converted}`;\n};\n\nexport const chunk = <T extends any[]>(input: T, size: number): T[] => {\n return input.reduce((arr, item, idx) => {\n return idx % size === 0\n ? [...arr, [item]]\n : [...(arr as T).slice(0, -1), [...(arr as T).slice(-1)[0], item]];\n }, []);\n};\n\nexport const needsRelatedModel = (model: DMMF.Model, config: Config) =>\n model.fields.some(field => field.kind === \"object\") &&\n config.relationModel !== false;\n\nexport const writeImportsForModel = async (\n model: DMMF.Model,\n sourceFile: SourceFile,\n config: Config,\n options: GeneratorOptions\n) => {\n const internals = await getPrismaInternals();\n\n const outputPath = internals.parseEnvValue(\n options.generator.output as EnvValue\n );\n\n const { relatedModelName } = useModelNames(config);\n const importList: ImportDeclarationStructure[] = [\n {\n kind: StructureKind.ImportDeclaration,\n namespaceImport: \"z\",\n moduleSpecifier: \"zod\"\n }\n ];\n\n if (config.imports) {\n importList.push({\n kind: StructureKind.ImportDeclaration,\n namespaceImport: \"imports\",\n moduleSpecifier: dotSlash(\n path.relative(\n outputPath,\n path.resolve(path.dirname(options.schemaPath), config.imports)\n )\n )!\n });\n }\n\n if (config.useDecimalJs && model.fields.some(f => f.type === \"Decimal\")) {\n importList.push({\n kind: StructureKind.ImportDeclaration,\n namedImports: [\"Decimal\"],\n moduleSpecifier: \"decimal.js\"\n });\n }\n\n const enumFields = model.fields.filter(f => f.kind === \"enum\");\n const relationFields = model.fields.filter(f => f.kind === \"object\");\n\n const clientPath = options.otherGenerators.find(\n each => each.provider.value === \"prisma-client-js\"\n )!.output!.value!;\n\n const relativePath = path.relative(outputPath, clientPath);\n\n if (enumFields.length > 0) {\n importList.push({\n kind: StructureKind.ImportDeclaration,\n isTypeOnly: enumFields.length === 0,\n moduleSpecifier: dotSlash(relativePath)!,\n namedImports: enumFields.map(f => f.type)\n });\n }\n\n if (config.relationModel !== false && relationFields.length > 0) {\n const filteredFields = relationFields.filter(f => f.type !== model.name);\n\n if (filteredFields.length > 0) {\n importList.push({\n kind: StructureKind.ImportDeclaration,\n moduleSpecifier: \"./index\",\n namedImports: Array.from(\n new Set(\n filteredFields.flatMap(f => [`${f.type}`, relatedModelName(f.type)])\n )\n )\n });\n }\n }\n\n sourceFile.addImportDeclarations(importList);\n};\n\nexport const computeCustomSchema = (docString: string) => {\n return getZodDocElements(docString)\n .find(modifier => modifier.startsWith(\"custom(\"))\n ?.slice(7)\n .slice(0, -1);\n};\n\nexport const computeModifiers = (docString: string) => {\n return getZodDocElements(docString).filter(\n each => !each.startsWith(\"custom(\")\n );\n};\n\nexport const getZodConstructor = (\n field: DMMF.Field,\n getRelatedModelName = (\n name: string | DMMF.SchemaEnum | DMMF.OutputType | DMMF.SchemaArg\n ) => name.toString()\n) => {\n let zodType = \"z.unknown()\";\n const extraModifiers: string[] = [\"\"];\n if (field.kind === \"scalar\") {\n switch (field.type) {\n case \"String\":\n zodType = \"z.string()\";\n break;\n case \"Int\":\n zodType = \"z.number()\";\n extraModifiers.push(\"int()\");\n break;\n case \"BigInt\":\n zodType = \"z.bigint()\";\n break;\n case \"DateTime\":\n zodType = \"z.date()\";\n break;\n case \"Float\":\n zodType = \"z.number()\";\n break;\n case \"Decimal\":\n zodType = \"z.number()\";\n break;\n case \"Json\":\n zodType = \"jsonSchema\";\n break;\n case \"Boolean\":\n zodType = \"z.boolean()\";\n break;\n // TODO: Proper type for bytes fields\n case \"Bytes\":\n zodType = \"z.unknown()\";\n break;\n }\n } else if (field.kind === \"enum\") {\n zodType = `z.nativeEnum(${field.type})`;\n } else if (field.kind === \"object\") {\n zodType = getRelatedModelName(field.type);\n }\n\n if (field.isList) extraModifiers.push(\"array()\");\n if (field.documentation) {\n zodType = computeCustomSchema(field.documentation) ?? zodType;\n extraModifiers.push(...computeModifiers(field.documentation));\n }\n if (!field.isRequired && field.type !== \"Json\")\n extraModifiers.push(\"nullish()\");\n // if (field.hasDefaultValue) extraModifiers.push('optional()')\n\n return `${zodType}${extraModifiers.join(\".\")}`;\n};\n\nexport const writeTypeSpecificSchemas = (\n model: DMMF.Model,\n sourceFile: SourceFile,\n config: Config\n) => {\n if (model.fields.some(f => f.type === \"Json\")) {\n sourceFile.addStatements(writer => {\n writer.newLine();\n writeArray(writer, [\n \"// Helper schema for JSON fields\",\n `type Literal = boolean | number | string${\n config.prismaJsonNullability ? \"\" : \"| null\"\n }`,\n \"type Json = Literal | { [key: string]: Json } | Json[]\",\n `const literalSchema = z.union([z.string(), z.number(), z.boolean()${\n config.prismaJsonNullability ? \"\" : \", z.null()\"\n }])`,\n \"const jsonSchema: z.ZodSchema<Json> = z.lazy(() => z.union([literalSchema, z.array(jsonSchema), z.record(jsonSchema)]))\"\n ]);\n });\n }\n\n if (config.useDecimalJs && model.fields.some(f => f.type === \"Decimal\")) {\n sourceFile.addStatements(writer => {\n writer.newLine();\n writeArray(writer, [\n \"// Helper schema for Decimal fields\",\n \"z\",\n \".instanceof(Decimal)\",\n \".or(z.string())\",\n \".or(z.number())\",\n \".refine((value) => {\",\n \" try {\",\n \" return new Decimal(value);\",\n \" } catch (error) {\",\n \" return false;\",\n \" }\",\n \"})\",\n \".transform((value) => new Decimal(value));\"\n ]);\n });\n }\n};\n\nexport const generateSchemaForModel = (\n model: DMMF.Model,\n sourceFile: SourceFile,\n config: Config\n) => {\n const { modelName } = useModelNames(config);\n\n sourceFile.addVariableStatement({\n declarationKind: VariableDeclarationKind.Const,\n isExported: true,\n leadingTrivia: writer => writer.blankLineIfLastNot(),\n declarations: [\n {\n name: modelName(model.name),\n initializer(writer) {\n writer\n .write(\"z.object(\")\n .inlineBlock(() => {\n model.fields\n .filter(f => f.kind !== \"object\")\n .forEach(field => {\n writeArray(writer, getJSDocs(field.documentation));\n writer\n .write(`${field.name}: ${getZodConstructor(field)}`)\n .write(\",\")\n .newLine();\n });\n })\n .write(\")\");\n }\n }\n ]\n });\n};\n\nexport const generateRelatedSchemaForModel = (\n model: DMMF.Model,\n sourceFile: SourceFile,\n config: Config\n) => {\n const { modelName, relatedModelName } = useModelNames(config);\n\n const relationFields = model.fields.filter(f => f.kind === \"object\");\n\n sourceFile.addInterface({\n name: `${model.name}`,\n isExported: true,\n extends: [`z.infer<typeof ${modelName(model.name)}>`],\n properties: relationFields.map(f => ({\n hasQuestionToken: !f.isRequired,\n name: f.name,\n type: `${f.type}${f.isList ? \"[]\" : \"\"}${!f.isRequired ? \" | null\" : \"\"}`\n }))\n });\n\n sourceFile.addStatements(writer =>\n writeArray(writer, [\n \"\",\n \"/**\",\n ` * ${relatedModelName(\n model.name\n )} contains all relations on your model in addition to the scalars`,\n \" *\",\n \" * NOTE: Lazy required in case of potential circular dependencies within schema\",\n \" */\"\n ])\n );\n\n sourceFile.addVariableStatement({\n declarationKind: VariableDeclarationKind.Const,\n isExported: true,\n declarations: [\n {\n name: relatedModelName(model.name),\n type: `z.ZodSchema<${model.name}>`,\n initializer(writer) {\n writer\n .write(`z.lazy(() => ${modelName(model.name)}.extend(`)\n .inlineBlock(() => {\n relationFields.forEach(field => {\n writeArray(writer, getJSDocs(field.documentation));\n\n writer\n .write(\n `${field.name}: ${getZodConstructor(\n field,\n relatedModelName\n )}`\n )\n .write(\",\")\n .newLine();\n });\n })\n .write(\"))\");\n }\n }\n ]\n });\n};\n\nexport const populateModelFile = async (\n model: DMMF.Model,\n sourceFile: SourceFile,\n config: Config,\n options: GeneratorOptions\n) => {\n await writeImportsForModel(model, sourceFile, config, options);\n writeTypeSpecificSchemas(model, sourceFile, config);\n generateSchemaForModel(model, sourceFile, config);\n if (needsRelatedModel(model, config))\n generateRelatedSchemaForModel(model, sourceFile, config);\n};\n\nexport const generateBarrelFile = (\n models: DMMF.Model[],\n indexFile: SourceFile\n) => {\n models.forEach(model =>\n indexFile.addExportDeclaration({\n moduleSpecifier: `./${lowerCaseFirst(model.name)}.schema`\n })\n );\n};\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modelArgs-helpers.mjs","names":["modelArgsInputObjectTypes: DMMF.InputType[]","fields: DMMF.SchemaArg[]","selectField: DMMF.SchemaArg","includeField: DMMF.SchemaArg","modelArgsInputObjectType: DMMF.InputType"],"sources":["../../src/zod/modelArgs-helpers.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0
|
|
1
|
+
{"version":3,"file":"modelArgs-helpers.mjs","names":["modelArgsInputObjectTypes: DMMF.InputType[]","fields: DMMF.SchemaArg[]","selectField: DMMF.SchemaArg","includeField: DMMF.SchemaArg","modelArgsInputObjectType: DMMF.InputType"],"sources":["../../src/zod/modelArgs-helpers.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/stryke.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://docs.stormsoftware.com/projects/stryke\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport type { DMMF } from \"@prisma/generator-helper\";\nimport { checkModelHasModelRelation } from \"./model-helpers\";\n\nexport function addMissingInputObjectTypesForModelArgs(\n inputObjectTypes: DMMF.InputType[],\n models: DMMF.Model[],\n isGenerateSelect: boolean,\n isGenerateInclude: boolean\n) {\n const modelArgsInputObjectTypes = generateModelArgsInputObjectTypes(\n models,\n isGenerateSelect,\n isGenerateInclude\n );\n\n for (const modelArgsInputObjectType of modelArgsInputObjectTypes) {\n inputObjectTypes.push(modelArgsInputObjectType);\n }\n}\nfunction generateModelArgsInputObjectTypes(\n models: DMMF.Model[],\n isGenerateSelect: boolean,\n isGenerateInclude: boolean\n) {\n const modelArgsInputObjectTypes: DMMF.InputType[] = [];\n for (const model of models) {\n const { name: modelName } = model;\n const fields: DMMF.SchemaArg[] = [];\n\n if (isGenerateSelect) {\n const selectField: DMMF.SchemaArg = {\n name: \"select\",\n isRequired: false,\n isNullable: false,\n inputTypes: [\n {\n isList: false,\n type: `${modelName}Select`,\n location: \"inputObjectTypes\",\n namespace: \"prisma\"\n }\n ]\n };\n fields.push(selectField);\n }\n\n const hasRelationToAnotherModel = checkModelHasModelRelation(model);\n\n if (isGenerateInclude && hasRelationToAnotherModel) {\n const includeField: DMMF.SchemaArg = {\n name: \"include\",\n isRequired: false,\n isNullable: false,\n inputTypes: [\n {\n isList: false,\n type: `${modelName}Include`,\n location: \"inputObjectTypes\",\n namespace: \"prisma\"\n }\n ]\n };\n fields.push(includeField);\n }\n\n const modelArgsInputObjectType: DMMF.InputType = {\n name: `${modelName}DefaultArgs`,\n constraints: {\n maxNumFields: null,\n minNumFields: null\n },\n fields\n };\n modelArgsInputObjectTypes.push(modelArgsInputObjectType);\n }\n\n return modelArgsInputObjectTypes;\n}\n"],"mappings":";;;AAqBA,SAAgB,uCACd,kBACA,QACA,kBACA,mBACA;CACA,MAAM,4BAA4B,kCAChC,QACA,kBACA,kBACD;AAED,MAAK,MAAM,4BAA4B,0BACrC,kBAAiB,KAAK,yBAAyB;;AAGnD,SAAS,kCACP,QACA,kBACA,mBACA;CACA,MAAMA,4BAA8C,EAAE;AACtD,MAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,EAAE,MAAM,cAAc;EAC5B,MAAMC,SAA2B,EAAE;AAEnC,MAAI,kBAAkB;GACpB,MAAMC,cAA8B;IAClC,MAAM;IACN,YAAY;IACZ,YAAY;IACZ,YAAY,CACV;KACE,QAAQ;KACR,MAAM,GAAG,UAAU;KACnB,UAAU;KACV,WAAW;KACZ,CACF;IACF;AACD,UAAO,KAAK,YAAY;;EAG1B,MAAM,4BAA4B,2BAA2B,MAAM;AAEnE,MAAI,qBAAqB,2BAA2B;GAClD,MAAMC,eAA+B;IACnC,MAAM;IACN,YAAY;IACZ,YAAY;IACZ,YAAY,CACV;KACE,QAAQ;KACR,MAAM,GAAG,UAAU;KACnB,UAAU;KACV,WAAW;KACZ,CACF;IACF;AACD,UAAO,KAAK,aAAa;;EAG3B,MAAMC,2BAA2C;GAC/C,MAAM,GAAG,UAAU;GACnB,aAAa;IACX,cAAc;IACd,cAAc;IACf;GACD;GACD;AACD,4BAA0B,KAAK,yBAAyB;;AAG1D,QAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mongodb-helpers.mjs","names":["rawOpsMap: { [name: string]: string }"],"sources":["../../src/zod/mongodb-helpers.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0
|
|
1
|
+
{"version":3,"file":"mongodb-helpers.mjs","names":["rawOpsMap: { [name: string]: string }"],"sources":["../../src/zod/mongodb-helpers.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/stryke.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://docs.stormsoftware.com/projects/stryke\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport type { DMMF } from \"@prisma/generator-helper\";\nimport Transformer from \"./transformer\";\n\nexport function addMissingInputObjectTypesForMongoDbRawOpsAndQueries(\n modelOperations: DMMF.ModelMapping[],\n outputObjectTypes: DMMF.OutputType[],\n inputObjectTypes: DMMF.InputType[]\n) {\n const rawOpsMap = resolveMongoDbRawOperations(modelOperations);\n Transformer.rawOpsMap = rawOpsMap ?? {};\n\n const mongoDbRawQueryInputObjectTypes =\n resolveMongoDbRawQueryInputObjectTypes(outputObjectTypes);\n for (const mongoDbRawQueryInputType of mongoDbRawQueryInputObjectTypes) {\n inputObjectTypes.push(mongoDbRawQueryInputType);\n }\n}\n\nfunction resolveMongoDbRawOperations(modelOperations: DMMF.ModelMapping[]) {\n const rawOpsMap: { [name: string]: string } = {};\n const rawOpsNames = [\n ...new Set(\n modelOperations.reduce<string[]>((result, current) => {\n const keys = Object.keys(current);\n keys?.forEach(key => {\n if (key.includes(\"Raw\")) {\n result.push(key);\n }\n });\n return result;\n }, [])\n )\n ];\n\n const modelNames = modelOperations.map(item => item.model);\n\n rawOpsNames.forEach(opName => {\n modelNames.forEach(modelName => {\n const isFind = opName === \"findRaw\";\n const opWithModel = `${opName.replace(\"Raw\", \"\")}${modelName}Raw`;\n rawOpsMap[opWithModel] = isFind\n ? `${modelName}FindRawArgs`\n : `${modelName}AggregateRawArgs`;\n });\n });\n\n return rawOpsMap;\n}\n\nfunction resolveMongoDbRawQueryInputObjectTypes(\n outputObjectTypes: DMMF.OutputType[]\n) {\n const mongoDbRawQueries = getMongoDbRawQueries(outputObjectTypes);\n const mongoDbRawQueryInputObjectTypes = mongoDbRawQueries.map(item => ({\n name: item.name,\n constraints: {\n maxNumFields: null,\n minNumFields: null\n },\n fields: item.args.map(arg => ({\n name: arg.name,\n isRequired: arg.isRequired,\n isNullable: arg.isNullable,\n inputTypes: arg.inputTypes\n }))\n }));\n\n return mongoDbRawQueryInputObjectTypes;\n}\n\nfunction getMongoDbRawQueries(outputObjectTypes: DMMF.OutputType[]) {\n const queryOutputTypes = outputObjectTypes.filter(\n item => item.name === \"Query\"\n );\n\n const mongodbRawQueries =\n queryOutputTypes?.[0]!.fields.filter(field => field.name.includes(\"Raw\")) ??\n [];\n\n return mongodbRawQueries;\n}\n\nexport const isMongodbRawOp = (name: string) =>\n /find[\\s\\S]*?Raw/.test(name) || /aggregate[\\s\\S]*?Raw/.test(name);\n"],"mappings":";;;AAqBA,SAAgB,qDACd,iBACA,mBACA,kBACA;AAEA,aAAY,YADM,4BAA4B,gBAAgB,IACzB,EAAE;CAEvC,MAAM,kCACJ,uCAAuC,kBAAkB;AAC3D,MAAK,MAAM,4BAA4B,gCACrC,kBAAiB,KAAK,yBAAyB;;AAInD,SAAS,4BAA4B,iBAAsC;CACzE,MAAMA,YAAwC,EAAE;CAChD,MAAM,cAAc,CAClB,GAAG,IAAI,IACL,gBAAgB,QAAkB,QAAQ,YAAY;AAEpD,EADa,OAAO,KAAK,QAAQ,EAC3B,SAAQ,QAAO;AACnB,OAAI,IAAI,SAAS,MAAM,CACrB,QAAO,KAAK,IAAI;IAElB;AACF,SAAO;IACN,EAAE,CAAC,CACP,CACF;CAED,MAAM,aAAa,gBAAgB,KAAI,SAAQ,KAAK,MAAM;AAE1D,aAAY,SAAQ,WAAU;AAC5B,aAAW,SAAQ,cAAa;GAC9B,MAAM,SAAS,WAAW;GAC1B,MAAM,cAAc,GAAG,OAAO,QAAQ,OAAO,GAAG,GAAG,UAAU;AAC7D,aAAU,eAAe,SACrB,GAAG,UAAU,eACb,GAAG,UAAU;IACjB;GACF;AAEF,QAAO;;AAGT,SAAS,uCACP,mBACA;AAgBA,QAf0B,qBAAqB,kBAAkB,CACP,KAAI,UAAS;EACrE,MAAM,KAAK;EACX,aAAa;GACX,cAAc;GACd,cAAc;GACf;EACD,QAAQ,KAAK,KAAK,KAAI,SAAQ;GAC5B,MAAM,IAAI;GACV,YAAY,IAAI;GAChB,YAAY,IAAI;GAChB,YAAY,IAAI;GACjB,EAAE;EACJ,EAAE;;AAKL,SAAS,qBAAqB,mBAAsC;AASlE,QARyB,kBAAkB,QACzC,SAAQ,KAAK,SAAS,QACvB,GAGoB,GAAI,OAAO,QAAO,UAAS,MAAM,KAAK,SAAS,MAAM,CAAC,IACzE,EAAE;;AAKN,MAAa,kBAAkB,SAC7B,kBAAkB,KAAK,KAAK,IAAI,uBAAuB,KAAK,KAAK"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select-helpers.mjs","names":["modelCountOutputTypeSelectInputObjectTypes: DMMF.InputType[]","modelCountOutputTypeSelectInputObjectType: DMMF.InputType","modelCountOutputTypeArgsInputObjectTypes: DMMF.InputType[]","modelCountOutputTypeArgsInputObjectType: DMMF.InputType","modelSelectInputObjectTypes: DMMF.InputType[]","fields: DMMF.SchemaArg[]","field: Writeable<DMMF.SchemaArg>","schemaArgInputType: ArrayValues<SchemaArgInputTypes>","_countField: DMMF.SchemaArg","modelSelectInputObjectType: DMMF.InputType"],"sources":["../../src/zod/select-helpers.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0
|
|
1
|
+
{"version":3,"file":"select-helpers.mjs","names":["modelCountOutputTypeSelectInputObjectTypes: DMMF.InputType[]","modelCountOutputTypeSelectInputObjectType: DMMF.InputType","modelCountOutputTypeArgsInputObjectTypes: DMMF.InputType[]","modelCountOutputTypeArgsInputObjectType: DMMF.InputType","modelSelectInputObjectTypes: DMMF.InputType[]","fields: DMMF.SchemaArg[]","field: Writeable<DMMF.SchemaArg>","schemaArgInputType: ArrayValues<SchemaArgInputTypes>","_countField: DMMF.SchemaArg","modelSelectInputObjectType: DMMF.InputType"],"sources":["../../src/zod/select-helpers.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/stryke.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://docs.stormsoftware.com/projects/stryke\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport type { DMMF } from \"@prisma/generator-helper\";\nimport type { ArrayValues } from \"@stryke/types/array\";\nimport type { SchemaArgInputTypes, Writeable } from \"../types\";\nimport {\n checkIsModelRelationField,\n checkModelHasManyModelRelation\n} from \"./model-helpers\";\n\nexport function addMissingInputObjectTypesForSelect(\n inputObjectTypes: DMMF.InputType[],\n outputObjectTypes: DMMF.OutputType[],\n models: DMMF.Model[]\n) {\n // generate input object types necessary to support ModelSelect._count\n const modelCountOutputTypes = getModelCountOutputTypes(outputObjectTypes);\n const modelCountOutputTypeSelectInputObjectTypes =\n generateModelCountOutputTypeSelectInputObjectTypes(modelCountOutputTypes);\n const modelCountOutputTypeArgsInputObjectTypes =\n generateModelCountOutputTypeArgsInputObjectTypes(modelCountOutputTypes);\n\n const modelSelectInputObjectTypes =\n generateModelSelectInputObjectTypes(models);\n\n const generatedInputObjectTypes = [\n modelCountOutputTypeSelectInputObjectTypes,\n modelCountOutputTypeArgsInputObjectTypes,\n modelSelectInputObjectTypes\n ].flat();\n\n for (const inputObjectType of generatedInputObjectTypes) {\n inputObjectTypes.push(inputObjectType);\n }\n}\n\nfunction getModelCountOutputTypes(outputObjectTypes: DMMF.OutputType[]) {\n return outputObjectTypes.filter(({ name }) =>\n name.includes(\"CountOutputType\")\n );\n}\n\nfunction generateModelCountOutputTypeSelectInputObjectTypes(\n modelCountOutputTypes: DMMF.OutputType[]\n) {\n const modelCountOutputTypeSelectInputObjectTypes: DMMF.InputType[] = [];\n for (const modelCountOutputType of modelCountOutputTypes) {\n const {\n name: modelCountOutputTypeName,\n fields: modelCountOutputTypeFields\n } = modelCountOutputType;\n const modelCountOutputTypeSelectInputObjectType: DMMF.InputType = {\n name: `${modelCountOutputTypeName}Select`,\n constraints: {\n maxNumFields: null,\n minNumFields: null\n },\n fields: modelCountOutputTypeFields.map(({ name }) => ({\n name,\n isRequired: false,\n isNullable: false,\n inputTypes: [\n {\n isList: false,\n type: `Boolean`,\n location: \"scalar\"\n }\n ]\n }))\n };\n modelCountOutputTypeSelectInputObjectTypes.push(\n modelCountOutputTypeSelectInputObjectType\n );\n }\n\n return modelCountOutputTypeSelectInputObjectTypes;\n}\n\nfunction generateModelCountOutputTypeArgsInputObjectTypes(\n modelCountOutputTypes: DMMF.OutputType[]\n) {\n const modelCountOutputTypeArgsInputObjectTypes: DMMF.InputType[] = [];\n for (const modelCountOutputType of modelCountOutputTypes) {\n const { name: modelCountOutputTypeName } = modelCountOutputType;\n const modelCountOutputTypeArgsInputObjectType: DMMF.InputType = {\n name: `${modelCountOutputTypeName}DefaultArgs`,\n constraints: {\n maxNumFields: null,\n minNumFields: null\n },\n fields: [\n {\n name: \"select\",\n isRequired: false,\n isNullable: false,\n inputTypes: [\n {\n isList: false,\n type: `${modelCountOutputTypeName}Select`,\n location: \"inputObjectTypes\",\n namespace: \"prisma\"\n }\n ]\n }\n ]\n };\n modelCountOutputTypeArgsInputObjectTypes.push(\n modelCountOutputTypeArgsInputObjectType\n );\n }\n\n return modelCountOutputTypeArgsInputObjectTypes;\n}\n\nfunction generateModelSelectInputObjectTypes(models: DMMF.Model[]) {\n const modelSelectInputObjectTypes: DMMF.InputType[] = [];\n for (const model of models) {\n const { name: modelName, fields: modelFields } = model;\n const fields: DMMF.SchemaArg[] = [];\n\n for (const modelField of modelFields) {\n const { name: modelFieldName, isList, type } = modelField;\n\n const isRelationField = checkIsModelRelationField(modelField);\n\n const field: Writeable<DMMF.SchemaArg> = {\n name: modelFieldName,\n isRequired: false,\n isNullable: false,\n inputTypes: [\n { isList: false, type: \"Boolean\", location: \"scalar\" }\n ] as Writeable<DMMF.SchemaArg[\"inputTypes\"]>\n };\n\n if (isRelationField) {\n const schemaArgInputType: ArrayValues<SchemaArgInputTypes> = {\n isList: false,\n type: isList ? `${type}FindManyArgs` : `${type}DefaultArgs`,\n location: \"inputObjectTypes\",\n namespace: \"prisma\"\n };\n field.inputTypes.push(schemaArgInputType);\n }\n\n fields.push(field);\n }\n\n const hasManyRelationToAnotherModel = checkModelHasManyModelRelation(model);\n\n const shouldAddCountField = hasManyRelationToAnotherModel;\n if (shouldAddCountField) {\n const _countField: DMMF.SchemaArg = {\n name: \"_count\",\n isRequired: false,\n isNullable: false,\n inputTypes: [\n { isList: false, type: \"Boolean\", location: \"scalar\" },\n {\n isList: false,\n type: `${modelName}CountOutputTypeDefaultArgs`,\n location: \"inputObjectTypes\",\n namespace: \"prisma\"\n }\n ]\n };\n fields.push(_countField);\n }\n\n const modelSelectInputObjectType: DMMF.InputType = {\n name: `${modelName}Select`,\n constraints: {\n maxNumFields: null,\n minNumFields: null\n },\n fields\n };\n modelSelectInputObjectTypes.push(modelSelectInputObjectType);\n }\n\n return modelSelectInputObjectTypes;\n}\n"],"mappings":";;;AA0BA,SAAgB,oCACd,kBACA,mBACA,QACA;CAEA,MAAM,wBAAwB,yBAAyB,kBAAkB;CASzE,MAAM,4BAA4B;EAPhC,mDAAmD,sBAAsB;EAEzE,iDAAiD,sBAAsB;EAGvE,oCAAoC,OAAO;EAM5C,CAAC,MAAM;AAER,MAAK,MAAM,mBAAmB,0BAC5B,kBAAiB,KAAK,gBAAgB;;AAI1C,SAAS,yBAAyB,mBAAsC;AACtE,QAAO,kBAAkB,QAAQ,EAAE,WACjC,KAAK,SAAS,kBAAkB,CACjC;;AAGH,SAAS,mDACP,uBACA;CACA,MAAMA,6CAA+D,EAAE;AACvE,MAAK,MAAM,wBAAwB,uBAAuB;EACxD,MAAM,EACJ,MAAM,0BACN,QAAQ,+BACN;EACJ,MAAMC,4CAA4D;GAChE,MAAM,GAAG,yBAAyB;GAClC,aAAa;IACX,cAAc;IACd,cAAc;IACf;GACD,QAAQ,2BAA2B,KAAK,EAAE,YAAY;IACpD;IACA,YAAY;IACZ,YAAY;IACZ,YAAY,CACV;KACE,QAAQ;KACR,MAAM;KACN,UAAU;KACX,CACF;IACF,EAAE;GACJ;AACD,6CAA2C,KACzC,0CACD;;AAGH,QAAO;;AAGT,SAAS,iDACP,uBACA;CACA,MAAMC,2CAA6D,EAAE;AACrE,MAAK,MAAM,wBAAwB,uBAAuB;EACxD,MAAM,EAAE,MAAM,6BAA6B;EAC3C,MAAMC,0CAA0D;GAC9D,MAAM,GAAG,yBAAyB;GAClC,aAAa;IACX,cAAc;IACd,cAAc;IACf;GACD,QAAQ,CACN;IACE,MAAM;IACN,YAAY;IACZ,YAAY;IACZ,YAAY,CACV;KACE,QAAQ;KACR,MAAM,GAAG,yBAAyB;KAClC,UAAU;KACV,WAAW;KACZ,CACF;IACF,CACF;GACF;AACD,2CAAyC,KACvC,wCACD;;AAGH,QAAO;;AAGT,SAAS,oCAAoC,QAAsB;CACjE,MAAMC,8BAAgD,EAAE;AACxD,MAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,EAAE,MAAM,WAAW,QAAQ,gBAAgB;EACjD,MAAMC,SAA2B,EAAE;AAEnC,OAAK,MAAM,cAAc,aAAa;GACpC,MAAM,EAAE,MAAM,gBAAgB,QAAQ,SAAS;GAE/C,MAAM,kBAAkB,0BAA0B,WAAW;GAE7D,MAAMC,QAAmC;IACvC,MAAM;IACN,YAAY;IACZ,YAAY;IACZ,YAAY,CACV;KAAE,QAAQ;KAAO,MAAM;KAAW,UAAU;KAAU,CACvD;IACF;AAED,OAAI,iBAAiB;IACnB,MAAMC,qBAAuD;KAC3D,QAAQ;KACR,MAAM,SAAS,GAAG,KAAK,gBAAgB,GAAG,KAAK;KAC/C,UAAU;KACV,WAAW;KACZ;AACD,UAAM,WAAW,KAAK,mBAAmB;;AAG3C,UAAO,KAAK,MAAM;;AAMpB,MAHsC,+BAA+B,MAAM,EAGlD;GACvB,MAAMC,cAA8B;IAClC,MAAM;IACN,YAAY;IACZ,YAAY;IACZ,YAAY,CACV;KAAE,QAAQ;KAAO,MAAM;KAAW,UAAU;KAAU,EACtD;KACE,QAAQ;KACR,MAAM,GAAG,UAAU;KACnB,UAAU;KACV,WAAW;KACZ,CACF;IACF;AACD,UAAO,KAAK,YAAY;;EAG1B,MAAMC,6BAA6C;GACjD,MAAM,GAAG,UAAU;GACnB,aAAa;IACX,cAAc;IACd,cAAc;IACf;GACD;GACD;AACD,8BAA4B,KAAK,2BAA2B;;AAG9D,QAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transformer.mjs","names":["line: string","prismaClientImportPath: string","modelQueryTypeSuffixToQueryName: Record<string, string>"],"sources":["../../src/zod/transformer.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 License, and is\n free for commercial and private use. For more information, please visit\n our licensing page.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://stormsoftware.com/projects/stryke/docs\n Contact: https://stormsoftware.com/contact\n License: https://stormsoftware.com/projects/stryke/license\n\n ------------------------------------------------------------------- */\n\nimport type {\n ConnectorType,\n DMMF as PrismaDMMF\n} from \"@prisma/generator-helper\";\nimport { lowerCaseFirst } from \"@stryke/string-format/lower-case-first\";\nimport { upperCaseFirst } from \"@stryke/string-format/upper-case-first\";\nimport path from \"node:path\";\nimport type {\n AggregateOperationSupport,\n TransformerParams,\n Writeable\n} from \"../types\";\nimport { writeFileSafely, writeIndexFile } from \"../utils/write-file-safely\";\nimport { isAggregateInputType } from \"./aggregate-helpers\";\nimport { checkModelHasModelRelation, findModelByName } from \"./model-helpers\";\nimport { isMongodbRawOp } from \"./mongodb-helpers\";\n\nexport default class Transformer {\n name: string;\n\n fields: Writeable<PrismaDMMF.SchemaArg[]>;\n\n schemaImports = new Set<string>();\n\n models: Writeable<PrismaDMMF.Model[]>;\n\n modelOperations: Writeable<PrismaDMMF.ModelMapping[]>;\n\n aggregateOperationSupport: AggregateOperationSupport;\n\n enumTypes: Writeable<PrismaDMMF.SchemaEnum[]>;\n\n static enumNames: string[] = [];\n\n static rawOpsMap: { [name: string]: string } = {};\n\n static provider: ConnectorType;\n\n static previewFeatures: string[] | undefined;\n\n private static outputPath: string = \"./generated\";\n\n private hasJson = false;\n\n private static prismaClientOutputPath: string = \"@prisma/client\";\n\n private static isCustomPrismaClientOutputPath: boolean = false;\n\n private static isGenerateSelect: boolean = true;\n\n private static isGenerateInclude: boolean = true;\n\n constructor(params: Writeable<TransformerParams>) {\n this.name = params.name ?? \"\";\n this.fields = params.fields ?? [];\n this.models = params.models ?? [];\n this.modelOperations = params.modelOperations ?? [];\n this.aggregateOperationSupport = params.aggregateOperationSupport ?? {};\n this.enumTypes = params.enumTypes ?? [];\n }\n\n static setOutputPath(outPath: string) {\n this.outputPath = outPath;\n }\n\n static setIsGenerateSelect(isGenerateSelect: boolean) {\n this.isGenerateSelect = isGenerateSelect;\n }\n\n static setIsGenerateInclude(isGenerateInclude: boolean) {\n this.isGenerateInclude = isGenerateInclude;\n }\n\n static getOutputPath() {\n return this.outputPath;\n }\n\n static setPrismaClientOutputPath(prismaClientCustomPath: string) {\n this.prismaClientOutputPath = prismaClientCustomPath;\n this.isCustomPrismaClientOutputPath =\n prismaClientCustomPath !== \"@prisma/client\";\n }\n\n static async generateIndex() {\n const indexPath = path.join(Transformer.outputPath, \"schemas/index.ts\");\n await writeIndexFile(indexPath);\n }\n\n async generateEnumSchemas() {\n for (const enumType of this.enumTypes) {\n const { name, values } = enumType;\n\n await writeFileSafely(\n path.join(\n Transformer.outputPath,\n `schemas/enums/${lowerCaseFirst(name)}.schema.ts`\n ),\n `${this.generateImportZodStatement()}\\n${this.generateExportSchemaStatement(\n `${lowerCaseFirst(name)}`,\n `z.enum(${JSON.stringify(values)})`\n )}`\n );\n }\n }\n\n generateImportZodStatement() {\n return \"import { z } from 'zod';\\n\";\n }\n\n generateExportSchemaStatement(name: string, schema: string) {\n return `export const ${lowerCaseFirst(name)}Schema = ${schema}`;\n }\n\n async generateObjectSchema() {\n const zodObjectSchemaFields = this.generateObjectSchemaFields();\n const objectSchema = this.prepareObjectSchema(zodObjectSchemaFields);\n const objectSchemaName = this.resolveObjectSchemaName();\n\n await writeFileSafely(\n path.join(\n Transformer.outputPath,\n `schemas/objects/${lowerCaseFirst(objectSchemaName)}.schema.ts`\n ),\n objectSchema\n );\n }\n\n generateObjectSchemaFields() {\n const zodObjectSchemaFields = this.fields\n .map(field => this.generateObjectSchemaField(field))\n .flatMap(item => item)\n .map(item => {\n const [zodStringWithMainType, field, skipValidators] = item;\n\n const value = skipValidators\n ? zodStringWithMainType\n : this.generateFieldValidators(zodStringWithMainType, field);\n\n return value.trim();\n });\n\n return zodObjectSchemaFields;\n }\n\n generateObjectSchemaField(\n field: PrismaDMMF.SchemaArg\n ): [string, PrismaDMMF.SchemaArg, boolean][] {\n const lines = field.inputTypes;\n\n if (lines.length === 0) {\n return [];\n }\n\n let alternatives = lines.reduce<string[]>((result, inputType) => {\n if (inputType.type === \"String\") {\n result.push(this.wrapWithZodValidators(\"z.string()\", field));\n } else if (\n inputType.type === \"Int\" ||\n inputType.type === \"Float\" ||\n inputType.type === \"Decimal\"\n ) {\n result.push(this.wrapWithZodValidators(\"z.number()\", field));\n } else if (inputType.type === \"BigInt\") {\n result.push(this.wrapWithZodValidators(\"z.bigint()\", field));\n } else if (inputType.type === \"Boolean\") {\n result.push(this.wrapWithZodValidators(\"z.boolean()\", field));\n } else if (inputType.type === \"DateTime\") {\n result.push(this.wrapWithZodValidators(\"z.coerce.date()\", field));\n } else if (inputType.type === \"Json\") {\n this.hasJson = true;\n\n result.push(this.wrapWithZodValidators(\"jsonSchema\", field));\n } else if (inputType.type === \"True\") {\n result.push(this.wrapWithZodValidators(\"z.literal(true)\", field));\n } else if (inputType.type === \"Bytes\") {\n result.push(this.wrapWithZodValidators(\"z.instanceof(Buffer)\", field));\n } else if (!inputType.type.endsWith(\"FieldRefInput\")) {\n const isEnum = inputType.location === \"enumTypes\";\n\n if (inputType.namespace === \"prisma\" || isEnum) {\n if (\n inputType.type !== this.name &&\n typeof inputType.type === \"string\"\n ) {\n this.addSchemaImport(inputType.type);\n }\n\n result.push(\n this.generatePrismaStringLine(field, inputType, lines.length)\n );\n }\n }\n\n return result;\n }, []);\n\n if (alternatives.length === 0) {\n return [];\n }\n\n if (alternatives.length > 1) {\n alternatives = alternatives.map(alter =>\n alter.replace(\".optional()\", \"\")\n );\n }\n\n const fieldName = alternatives.some(alt => alt.includes(\":\"))\n ? \"\"\n : ` ${field.name}:`;\n\n const opt = !field.isRequired ? \".optional()\" : \"\";\n\n let resString =\n alternatives.length === 1\n ? alternatives.join(\",\\r\\n\")\n : `z.union([${alternatives.join(\",\\r\\n\")}])${opt}`;\n\n if (field.isNullable) {\n resString += \".nullable()\";\n }\n\n return [[` ${fieldName} ${resString} `, field, true]];\n }\n\n wrapWithZodValidators(mainValidator: string, field: PrismaDMMF.SchemaArg) {\n let line: string = \"\";\n line = mainValidator;\n\n if (field.inputTypes.some(inputType => inputType.isList)) {\n line += \".array()\";\n }\n\n if (!field.isRequired) {\n line += \".optional()\";\n }\n\n return line;\n }\n\n addSchemaImport(name: string) {\n this.schemaImports.add(name);\n }\n\n generatePrismaStringLine(\n field: PrismaDMMF.SchemaArg,\n inputType: PrismaDMMF.InputTypeRef,\n inputsLength: number\n ) {\n // if (field.inputTypes.length === 0 || !field.inputTypes[0]) {\n // return \"\";\n // }\n\n // const inputType = field.inputTypes[0];\n\n const isEnum = inputType.location === \"enumTypes\";\n\n const inputTypeString = inputType.type;\n const { isModelQueryType, modelName, queryName } =\n this.checkIsModelQueryType(inputTypeString);\n\n const objectSchemaLine = isModelQueryType\n ? this.resolveModelQuerySchemaName(modelName!, queryName!)\n : `${inputTypeString}ObjectSchema`;\n const enumSchemaLine = `${inputTypeString}Schema`;\n\n const schema =\n inputType.type === this.name\n ? objectSchemaLine\n : isEnum\n ? enumSchemaLine\n : objectSchemaLine;\n const arr = inputType.isList ? \".array()\" : \"\";\n const opt = !field.isRequired ? \".optional()\" : \"\";\n\n return inputsLength === 1\n ? ` ${field.name}: z.lazy(() => ${lowerCaseFirst(schema)})${arr}${opt}`\n : `z.lazy(() => ${lowerCaseFirst(schema)})${arr}${opt}`;\n }\n\n generateFieldValidators(\n zodStringWithMainType: string,\n field: PrismaDMMF.SchemaArg\n ) {\n const { isRequired, isNullable } = field;\n\n if (!isRequired) {\n zodStringWithMainType += \".optional()\";\n }\n\n if (isNullable) {\n zodStringWithMainType += \".nullable()\";\n }\n\n return zodStringWithMainType;\n }\n\n prepareObjectSchema(zodObjectSchemaFields: string[]) {\n const objectSchema = `${this.generateExportObjectSchemaStatement(\n this.addFinalWrappers({ zodStringFields: zodObjectSchemaFields })\n )}\\n`;\n\n const prismaImportStatement = this.generateImportPrismaStatement();\n\n const json = this.generateJsonSchemaImplementation();\n\n return `${this.generateObjectSchemaImportStatements()}${prismaImportStatement}${json}${objectSchema}`;\n }\n\n generateExportObjectSchemaStatement(schema: string) {\n let name = this.name;\n let exportName = this.name;\n if (Transformer.provider === \"mongodb\") {\n if (isMongodbRawOp(name)) {\n name = Transformer.rawOpsMap[name]!;\n exportName = name.replace(\"Args\", \"\");\n }\n }\n\n if (isAggregateInputType(name)) {\n name = `${name}Type`;\n }\n const end = `export const ${lowerCaseFirst(exportName)}ObjectSchema = schema`;\n\n return `const schema: z.ZodType<Prisma.${name}> = ${schema};\\n\\n ${end}`;\n }\n\n addFinalWrappers({ zodStringFields }: { zodStringFields: string[] }) {\n const fields = [...zodStringFields];\n\n return `${this.wrapWithZodObject(fields)}.strict()`;\n }\n\n generateImportPrismaStatement() {\n let prismaClientImportPath: string;\n if (Transformer.isCustomPrismaClientOutputPath) {\n /**\n * If a custom location was designated for the prisma client, we need to figure out the\n * relative path from \\{outputPath\\}/schemas/objects to \\{prismaClientCustomPath\\}\n */\n const fromPath = path.join(Transformer.outputPath, \"schemas\", \"objects\");\n const toPath = Transformer.prismaClientOutputPath;\n const relativePathFromOutputToPrismaClient = path\n .relative(fromPath, toPath)\n .split(path.sep)\n .join(path.posix.sep);\n prismaClientImportPath = relativePathFromOutputToPrismaClient;\n } else {\n /**\n * If the default output path for prisma client (\\@prisma/client) is being used, we can import from it directly\n * without having to resolve a relative path\n */\n prismaClientImportPath = Transformer.prismaClientOutputPath;\n }\n return `import type { Prisma } from '${prismaClientImportPath}';\\n\\n`;\n }\n\n generateJsonSchemaImplementation() {\n let jsonSchemaImplementation = \"\";\n\n if (this.hasJson) {\n jsonSchemaImplementation += `\\n`;\n jsonSchemaImplementation += `const literalSchema = z.union([z.string(), z.number(), z.boolean()]);\\n`;\n jsonSchemaImplementation += `const jsonSchema: z.ZodType<Prisma.InputJsonValue> = z.lazy(() =>\\n`;\n jsonSchemaImplementation += ` z.union([literalSchema, z.array(jsonSchema.nullable()), z.record(jsonSchema.nullable())])\\n`;\n jsonSchemaImplementation += `);\\n\\n`;\n }\n\n return jsonSchemaImplementation;\n }\n\n generateObjectSchemaImportStatements() {\n let generatedImports = this.generateImportZodStatement();\n generatedImports += this.generateSchemaImports();\n generatedImports += \"\\n\\n\";\n return generatedImports;\n }\n\n generateSchemaImports() {\n return [...this.schemaImports]\n .map(name => {\n const { isModelQueryType, modelName, queryName } =\n this.checkIsModelQueryType(name);\n if (isModelQueryType) {\n return `import { ${this.resolveModelQuerySchemaName(\n modelName!,\n queryName!\n )} } from '../${queryName}${modelName}.schema'`;\n } else if (Transformer.enumNames.includes(name)) {\n return `import { ${lowerCaseFirst(name)}Schema } from '../enums/${lowerCaseFirst(name)}.schema'`;\n } else {\n return `import { ${lowerCaseFirst(name)}ObjectSchema } from './${lowerCaseFirst(name)}.schema'`;\n }\n })\n .join(\";\\r\\n\");\n }\n\n checkIsModelQueryType(type: string) {\n const modelQueryTypeSuffixToQueryName: Record<string, string> = {\n FindManyArgs: \"findMany\"\n };\n for (const modelQueryType of [\"FindManyArgs\"]) {\n if (type.includes(modelQueryType)) {\n const modelQueryTypeSuffixIndex = type.indexOf(modelQueryType);\n\n return {\n isModelQueryType: true,\n modelName: type.substring(0, modelQueryTypeSuffixIndex),\n queryName: modelQueryTypeSuffixToQueryName[modelQueryType]\n };\n }\n }\n return { isModelQueryType: false };\n }\n\n resolveModelQuerySchemaName(modelName: string, queryName: string) {\n const modelNameUncapitalized = lowerCaseFirst(modelName);\n const queryNameCapitalized = upperCaseFirst(queryName);\n\n return `${modelNameUncapitalized}${queryNameCapitalized}Schema`;\n }\n\n wrapWithZodUnion(zodStringFields: string[]) {\n let wrapped = \"\";\n\n wrapped += \"z.union([\";\n wrapped += \"\\n\";\n wrapped += ` ${zodStringFields.join(\",\")}`;\n wrapped += \"\\n\";\n wrapped += \"])\";\n return wrapped;\n }\n\n wrapWithZodObject(zodStringFields: string | string[]) {\n let wrapped = \"\";\n\n wrapped += \"z.object({\";\n wrapped += \"\\n\";\n wrapped += ` ${typeof zodStringFields === \"string\" ? zodStringFields : zodStringFields.join(\",\\n \")}`;\n wrapped += \"\\n\";\n wrapped += \"})\";\n return wrapped;\n }\n\n resolveObjectSchemaName() {\n let name = this.name;\n let exportName = this.name;\n if (isMongodbRawOp(name)) {\n name = Transformer.rawOpsMap[name]!;\n exportName = name.replace(\"Args\", \"\");\n }\n\n return lowerCaseFirst(exportName);\n }\n\n async generateModelSchemas() {\n for (const modelOperation of this.modelOperations) {\n const {\n findUnique,\n findFirst,\n findMany,\n // @ts-ignore\n createOne,\n createMany,\n createManyAndReturn,\n // @ts-ignore\n deleteOne,\n // @ts-ignore\n updateOne,\n deleteMany,\n updateMany,\n updateManyAndReturn,\n // @ts-ignore\n upsertOne,\n aggregate,\n groupBy\n } = modelOperation;\n\n const model = findModelByName(this.models, modelOperation.model)!;\n const modelName = lowerCaseFirst(modelOperation.model)!;\n\n const {\n selectImport,\n includeImport,\n selectZodSchemaLine,\n includeZodSchemaLine,\n selectZodSchemaLineLazy,\n includeZodSchemaLineLazy\n } = this.resolveSelectIncludeImportAndZodSchemaLine(model);\n\n const { orderByImport, orderByZodSchemaLine } =\n this.resolveOrderByWithRelationImportAndZodSchemaLine(model);\n\n if (findUnique) {\n const imports = [\n selectImport,\n includeImport,\n `import { ${modelName}WhereUniqueInputObjectSchema } from './objects/${modelName}WhereUniqueInput.schema'`\n ];\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${findUnique}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}FindUnique`,\n `z.object({ ${selectZodSchemaLine} ${includeZodSchemaLine} where: ${modelName}WhereUniqueInputObjectSchema })`\n )}`\n );\n }\n\n if (findFirst) {\n const imports = [\n selectImport,\n includeImport,\n orderByImport,\n `import { ${modelName}WhereInputObjectSchema } from './objects/${modelName}WhereInput.schema'`,\n `import { ${modelName}WhereUniqueInputObjectSchema } from './objects/${modelName}WhereUniqueInput.schema'`,\n `import { ${modelName}ScalarFieldEnumSchema } from './enums/${modelName}ScalarFieldEnum.schema'`\n ];\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${findFirst}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}FindFirst`,\n `z.object({ ${selectZodSchemaLine} ${includeZodSchemaLine} ${orderByZodSchemaLine} where: ${modelName}WhereInputObjectSchema.optional(), cursor: ${modelName}WhereUniqueInputObjectSchema.optional(), take: z.number().optional(), skip: z.number().optional(), distinct: z.array(${modelName}ScalarFieldEnumSchema).optional() })`\n )}`\n );\n }\n\n if (findMany) {\n const imports = [\n selectImport,\n includeImport,\n orderByImport,\n `import { ${modelName}WhereInputObjectSchema } from './objects/${modelName}WhereInput.schema'`,\n `import { ${modelName}WhereUniqueInputObjectSchema } from './objects/${modelName}WhereUniqueInput.schema'`,\n `import { ${modelName}ScalarFieldEnumSchema } from './enums/${modelName}ScalarFieldEnum.schema'`\n ];\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${findMany}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}FindMany`,\n `z.object({ ${selectZodSchemaLineLazy} ${includeZodSchemaLineLazy} ${orderByZodSchemaLine} where: ${modelName}WhereInputObjectSchema.optional(), cursor: ${modelName}WhereUniqueInputObjectSchema.optional(), take: z.number().optional(), skip: z.number().optional(), distinct: z.array(${modelName}ScalarFieldEnumSchema).optional() })`\n )}`\n );\n }\n\n if (createOne) {\n const imports = [\n selectImport,\n includeImport,\n `import { ${modelName}CreateInputObjectSchema } from './objects/${modelName}CreateInput.schema'`,\n `import { ${modelName}UncheckedCreateInputObjectSchema } from './objects/${modelName}UncheckedCreateInput.schema'`\n ];\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${createOne}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}CreateOne`,\n `z.object({ ${selectZodSchemaLine} ${includeZodSchemaLine} data: z.union([${modelName}CreateInputObjectSchema, ${modelName}UncheckedCreateInputObjectSchema]) })`\n )}`\n );\n }\n\n if (createMany) {\n const imports = [\n `import { ${modelName}CreateManyInputObjectSchema } from './objects/${modelName}CreateManyInput.schema'`\n ];\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${createMany}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}CreateMany`,\n `z.object({ data: z.union([ ${modelName}CreateManyInputObjectSchema, z.array(${modelName}CreateManyInputObjectSchema) ]), ${\n Transformer.provider === \"mongodb\" ||\n Transformer.provider === \"sqlserver\"\n ? \"\"\n : \"skipDuplicates: z.boolean().optional()\"\n } })`\n )}`\n );\n }\n\n if (createManyAndReturn) {\n const imports = [\n `import { ${modelName}CreateManyAndReturnInputObjectSchema } from './objects/${modelName}CreateManyAndReturnInput.schema'`\n ];\n await writeFileSafely(\n path.join(\n Transformer.outputPath,\n `schemas/${createManyAndReturn}.schema.ts`\n ),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}CreateManyAndReturn`,\n `z.object({ data: z.union([ ${modelName}CreateManyAndReturnInputObjectSchema, z.array(${modelName}CreateManyAndReturnInputObjectSchema) ]), ${\n Transformer.provider === \"mongodb\" ||\n Transformer.provider === \"sqlserver\"\n ? \"\"\n : \"skipDuplicates: z.boolean().optional()\"\n } })`\n )}`\n );\n }\n\n if (deleteOne) {\n const imports = [\n selectImport,\n includeImport,\n `import { ${modelName}WhereUniqueInputObjectSchema } from './objects/${modelName}WhereUniqueInput.schema'`\n ];\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${deleteOne}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}DeleteOne`,\n `z.object({ ${selectZodSchemaLine} ${includeZodSchemaLine} where: ${modelName}WhereUniqueInputObjectSchema })`\n )}`\n );\n }\n\n if (deleteMany) {\n const imports = [\n `import { ${modelName}WhereInputObjectSchema } from './objects/${modelName}WhereInput.schema'`\n ];\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${deleteMany}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}DeleteMany`,\n `z.object({ where: ${modelName}WhereInputObjectSchema.optional() })`\n )}`\n );\n }\n\n if (updateOne) {\n const imports = [\n selectImport,\n includeImport,\n `import { ${modelName}UpdateInputObjectSchema } from './objects/${modelName}UpdateInput.schema'`,\n `import { ${modelName}UncheckedUpdateInputObjectSchema } from './objects/${modelName}UncheckedUpdateInput.schema'`,\n `import { ${modelName}WhereUniqueInputObjectSchema } from './objects/${modelName}WhereUniqueInput.schema'`\n ];\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${updateOne}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}UpdateOne`,\n `z.object({ ${selectZodSchemaLine} ${includeZodSchemaLine} data: z.union([${modelName}UpdateInputObjectSchema, ${modelName}UncheckedUpdateInputObjectSchema]), where: ${modelName}WhereUniqueInputObjectSchema })`\n )}`\n );\n }\n\n if (updateMany) {\n const imports = [\n `import { ${modelName}UpdateManyMutationInputObjectSchema } from './objects/${modelName}UpdateManyMutationInput.schema'`,\n `import { ${modelName}WhereInputObjectSchema } from './objects/${modelName}WhereInput.schema'`\n ];\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${updateMany}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}UpdateMany`,\n `z.object({ data: ${modelName}UpdateManyMutationInputObjectSchema, where: ${modelName}WhereInputObjectSchema.optional() })`\n )}`\n );\n }\n\n if (updateManyAndReturn) {\n const imports = [\n `import { ${modelName}UpdateManyAndReturnInputObjectSchema } from './objects/${modelName}UpdateManyAndReturnInput.schema'`\n ];\n await writeFileSafely(\n path.join(\n Transformer.outputPath,\n `schemas/${updateManyAndReturn}.schema.ts`\n ),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}UpdateManyAndReturn`,\n `z.object({ data: z.union([ ${modelName}UpdateManyAndReturnInputObjectSchema, z.array(${modelName}UpdateManyAndReturnInputObjectSchema) ]), ${\n Transformer.provider === \"mongodb\" ||\n Transformer.provider === \"sqlserver\"\n ? \"\"\n : \"skipDuplicates: z.boolean().optional()\"\n } })`\n )}`\n );\n }\n\n if (upsertOne) {\n const imports = [\n selectImport,\n includeImport,\n `import { ${modelName}WhereUniqueInputObjectSchema } from './objects/${modelName}WhereUniqueInput.schema'`,\n `import { ${modelName}CreateInputObjectSchema } from './objects/${modelName}CreateInput.schema'`,\n `import { ${modelName}UncheckedCreateInputObjectSchema } from './objects/${modelName}UncheckedCreateInput.schema'`,\n `import { ${modelName}UpdateInputObjectSchema } from './objects/${modelName}UpdateInput.schema'`,\n `import { ${modelName}UncheckedUpdateInputObjectSchema } from './objects/${modelName}UncheckedUpdateInput.schema'`\n ];\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${upsertOne}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}Upsert`,\n `z.object({ ${selectZodSchemaLine} ${includeZodSchemaLine} where: ${modelName}WhereUniqueInputObjectSchema, create: z.union([ ${modelName}CreateInputObjectSchema, ${modelName}UncheckedCreateInputObjectSchema ]), update: z.union([ ${modelName}UpdateInputObjectSchema, ${modelName}UncheckedUpdateInputObjectSchema ]) })`\n )}`\n );\n }\n\n if (aggregate) {\n const imports = [\n orderByImport,\n `import { ${modelName}WhereInputObjectSchema } from './objects/${modelName}WhereInput.schema'`,\n `import { ${modelName}WhereUniqueInputObjectSchema } from './objects/${modelName}WhereUniqueInput.schema'`\n ];\n const aggregateOperations = [];\n if (this.aggregateOperationSupport[modelName]) {\n if (this.aggregateOperationSupport[modelName].count) {\n imports.push(\n `import { ${modelName}CountAggregateInputObjectSchema } from './objects/${modelName}CountAggregateInput.schema'`\n );\n aggregateOperations.push(\n `_count: z.union([ z.literal(true), ${modelName}CountAggregateInputObjectSchema ]).optional()`\n );\n }\n if (this.aggregateOperationSupport[modelName].min) {\n imports.push(\n `import { ${modelName}MinAggregateInputObjectSchema } from './objects/${modelName}MinAggregateInput.schema'`\n );\n aggregateOperations.push(\n `_min: ${modelName}MinAggregateInputObjectSchema.optional()`\n );\n }\n if (this.aggregateOperationSupport[modelName].max) {\n imports.push(\n `import { ${modelName}MaxAggregateInputObjectSchema } from './objects/${modelName}MaxAggregateInput.schema'`\n );\n aggregateOperations.push(\n `_max: ${modelName}MaxAggregateInputObjectSchema.optional()`\n );\n }\n if (this.aggregateOperationSupport[modelName].avg) {\n imports.push(\n `import { ${modelName}AvgAggregateInputObjectSchema } from './objects/${modelName}AvgAggregateInput.schema'`\n );\n aggregateOperations.push(\n `_avg: ${modelName}AvgAggregateInputObjectSchema.optional()`\n );\n }\n if (this.aggregateOperationSupport[modelName].sum) {\n imports.push(\n `import { ${modelName}SumAggregateInputObjectSchema } from './objects/${modelName}SumAggregateInput.schema'`\n );\n aggregateOperations.push(\n `_sum: ${modelName}SumAggregateInputObjectSchema.optional()`\n );\n }\n }\n\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${aggregate}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}Aggregate`,\n `z.object({ ${orderByZodSchemaLine} where: ${modelName}WhereInputObjectSchema.optional(), cursor: ${modelName}WhereUniqueInputObjectSchema.optional(), take: z.number().optional(), skip: z.number().optional(), ${aggregateOperations.join(\n \", \"\n )} })`\n )}`\n );\n }\n\n if (groupBy) {\n const imports = [\n `import { ${modelName}WhereInputObjectSchema } from './objects/${modelName}WhereInput.schema'`,\n `import { ${modelName}OrderByWithAggregationInputObjectSchema } from './objects/${modelName}OrderByWithAggregationInput.schema'`,\n `import { ${modelName}ScalarWhereWithAggregatesInputObjectSchema } from './objects/${modelName}ScalarWhereWithAggregatesInput.schema'`,\n `import { ${modelName}ScalarFieldEnumSchema } from './enums/${modelName}ScalarFieldEnum.schema'`\n ];\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${groupBy}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}GroupBy`,\n `z.object({ where: ${modelName}WhereInputObjectSchema.optional(), orderBy: z.union([${modelName}OrderByWithAggregationInputObjectSchema, ${modelName}OrderByWithAggregationInputObjectSchema.array()]).optional(), having: ${modelName}ScalarWhereWithAggregatesInputObjectSchema.optional(), take: z.number().optional(), skip: z.number().optional(), by: z.array(${modelName}ScalarFieldEnumSchema) })`\n )}`\n );\n }\n }\n }\n\n generateImportStatements(imports: (string | undefined)[]) {\n let generatedImports = this.generateImportZodStatement();\n generatedImports +=\n imports?.filter(importItem => !!importItem).join(\";\\r\\n\") ?? \"\";\n generatedImports += \"\\n\\n\";\n return generatedImports;\n }\n\n resolveSelectIncludeImportAndZodSchemaLine(model: PrismaDMMF.Model) {\n const { name: modelName } = model;\n\n const hasRelationToAnotherModel = checkModelHasModelRelation(model);\n\n const selectImport = Transformer.isGenerateSelect\n ? `import { ${lowerCaseFirst(modelName)}SelectObjectSchema } from './objects/${lowerCaseFirst(modelName)}Select.schema'`\n : \"\";\n\n const includeImport =\n Transformer.isGenerateInclude && hasRelationToAnotherModel\n ? `import { ${lowerCaseFirst(modelName)}IncludeObjectSchema } from './objects/${lowerCaseFirst(modelName)}Include.schema'`\n : \"\";\n\n let selectZodSchemaLine = \"\";\n let includeZodSchemaLine = \"\";\n let selectZodSchemaLineLazy = \"\";\n let includeZodSchemaLineLazy = \"\";\n\n if (Transformer.isGenerateSelect) {\n const zodSelectObjectSchema = `${lowerCaseFirst(modelName)}SelectObjectSchema.optional()`;\n selectZodSchemaLine = `select: ${zodSelectObjectSchema},`;\n selectZodSchemaLineLazy = `select: z.lazy(() => ${zodSelectObjectSchema}),`;\n }\n\n if (Transformer.isGenerateInclude && hasRelationToAnotherModel) {\n const zodIncludeObjectSchema = `${lowerCaseFirst(modelName)}IncludeObjectSchema.optional()`;\n includeZodSchemaLine = `include: ${zodIncludeObjectSchema},`;\n includeZodSchemaLineLazy = `include: z.lazy(() => ${zodIncludeObjectSchema}),`;\n }\n\n return {\n selectImport,\n includeImport,\n selectZodSchemaLine,\n includeZodSchemaLine,\n selectZodSchemaLineLazy,\n includeZodSchemaLineLazy\n };\n }\n\n resolveOrderByWithRelationImportAndZodSchemaLine(model: PrismaDMMF.Model) {\n const { name: modelName } = model;\n let modelOrderBy = \"\";\n\n if (\n [\"postgresql\", \"mysql\"].includes(Transformer.provider) &&\n Transformer.previewFeatures?.includes(\"fullTextSearch\")\n ) {\n modelOrderBy = `${lowerCaseFirst(modelName)}OrderByWithRelationAndSearchRelevanceInput`;\n } else {\n modelOrderBy = `${lowerCaseFirst(modelName)}OrderByWithRelationInput`;\n }\n\n const orderByImport = `import { ${modelOrderBy}ObjectSchema } from './objects/${modelOrderBy}.schema'`;\n const orderByZodSchemaLine = `orderBy: z.union([${modelOrderBy}ObjectSchema, ${modelOrderBy}ObjectSchema.array()]).optional(),`;\n\n return { orderByImport, orderByZodSchemaLine };\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transformer.mjs","names":["line: string","prismaClientImportPath: string","modelQueryTypeSuffixToQueryName: Record<string, string>"],"sources":["../../src/zod/transformer.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/stryke.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://docs.stormsoftware.com/projects/stryke\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport type {\n ConnectorType,\n DMMF as PrismaDMMF\n} from \"@prisma/generator-helper\";\nimport { lowerCaseFirst } from \"@stryke/string-format/lower-case-first\";\nimport { upperCaseFirst } from \"@stryke/string-format/upper-case-first\";\nimport path from \"node:path\";\nimport type {\n AggregateOperationSupport,\n TransformerParams,\n Writeable\n} from \"../types\";\nimport { writeFileSafely, writeIndexFile } from \"../utils/write-file-safely\";\nimport { isAggregateInputType } from \"./aggregate-helpers\";\nimport { checkModelHasModelRelation, findModelByName } from \"./model-helpers\";\nimport { isMongodbRawOp } from \"./mongodb-helpers\";\n\nexport default class Transformer {\n name: string;\n\n fields: Writeable<PrismaDMMF.SchemaArg[]>;\n\n schemaImports = new Set<string>();\n\n models: Writeable<PrismaDMMF.Model[]>;\n\n modelOperations: Writeable<PrismaDMMF.ModelMapping[]>;\n\n aggregateOperationSupport: AggregateOperationSupport;\n\n enumTypes: Writeable<PrismaDMMF.SchemaEnum[]>;\n\n static enumNames: string[] = [];\n\n static rawOpsMap: { [name: string]: string } = {};\n\n static provider: ConnectorType;\n\n static previewFeatures: string[] | undefined;\n\n private static outputPath: string = \"./generated\";\n\n private hasJson = false;\n\n private static prismaClientOutputPath: string = \"@prisma/client\";\n\n private static isCustomPrismaClientOutputPath: boolean = false;\n\n private static isGenerateSelect: boolean = true;\n\n private static isGenerateInclude: boolean = true;\n\n constructor(params: Writeable<TransformerParams>) {\n this.name = params.name ?? \"\";\n this.fields = params.fields ?? [];\n this.models = params.models ?? [];\n this.modelOperations = params.modelOperations ?? [];\n this.aggregateOperationSupport = params.aggregateOperationSupport ?? {};\n this.enumTypes = params.enumTypes ?? [];\n }\n\n static setOutputPath(outPath: string) {\n this.outputPath = outPath;\n }\n\n static setIsGenerateSelect(isGenerateSelect: boolean) {\n this.isGenerateSelect = isGenerateSelect;\n }\n\n static setIsGenerateInclude(isGenerateInclude: boolean) {\n this.isGenerateInclude = isGenerateInclude;\n }\n\n static getOutputPath() {\n return this.outputPath;\n }\n\n static setPrismaClientOutputPath(prismaClientCustomPath: string) {\n this.prismaClientOutputPath = prismaClientCustomPath;\n this.isCustomPrismaClientOutputPath =\n prismaClientCustomPath !== \"@prisma/client\";\n }\n\n static async generateIndex() {\n const indexPath = path.join(Transformer.outputPath, \"schemas/index.ts\");\n await writeIndexFile(indexPath);\n }\n\n async generateEnumSchemas() {\n for (const enumType of this.enumTypes) {\n const { name, values } = enumType;\n\n await writeFileSafely(\n path.join(\n Transformer.outputPath,\n `schemas/enums/${lowerCaseFirst(name)}.schema.ts`\n ),\n `${this.generateImportZodStatement()}\\n${this.generateExportSchemaStatement(\n `${lowerCaseFirst(name)}`,\n `z.enum(${JSON.stringify(values)})`\n )}`\n );\n }\n }\n\n generateImportZodStatement() {\n return \"import { z } from 'zod';\\n\";\n }\n\n generateExportSchemaStatement(name: string, schema: string) {\n return `export const ${lowerCaseFirst(name)}Schema = ${schema}`;\n }\n\n async generateObjectSchema() {\n const zodObjectSchemaFields = this.generateObjectSchemaFields();\n const objectSchema = this.prepareObjectSchema(zodObjectSchemaFields);\n const objectSchemaName = this.resolveObjectSchemaName();\n\n await writeFileSafely(\n path.join(\n Transformer.outputPath,\n `schemas/objects/${lowerCaseFirst(objectSchemaName)}.schema.ts`\n ),\n objectSchema\n );\n }\n\n generateObjectSchemaFields() {\n const zodObjectSchemaFields = this.fields\n .map(field => this.generateObjectSchemaField(field))\n .flatMap(item => item)\n .map(item => {\n const [zodStringWithMainType, field, skipValidators] = item;\n\n const value = skipValidators\n ? zodStringWithMainType\n : this.generateFieldValidators(zodStringWithMainType, field);\n\n return value.trim();\n });\n\n return zodObjectSchemaFields;\n }\n\n generateObjectSchemaField(\n field: PrismaDMMF.SchemaArg\n ): [string, PrismaDMMF.SchemaArg, boolean][] {\n const lines = field.inputTypes;\n\n if (lines.length === 0) {\n return [];\n }\n\n let alternatives = lines.reduce<string[]>((result, inputType) => {\n if (inputType.type === \"String\") {\n result.push(this.wrapWithZodValidators(\"z.string()\", field));\n } else if (\n inputType.type === \"Int\" ||\n inputType.type === \"Float\" ||\n inputType.type === \"Decimal\"\n ) {\n result.push(this.wrapWithZodValidators(\"z.number()\", field));\n } else if (inputType.type === \"BigInt\") {\n result.push(this.wrapWithZodValidators(\"z.bigint()\", field));\n } else if (inputType.type === \"Boolean\") {\n result.push(this.wrapWithZodValidators(\"z.boolean()\", field));\n } else if (inputType.type === \"DateTime\") {\n result.push(this.wrapWithZodValidators(\"z.coerce.date()\", field));\n } else if (inputType.type === \"Json\") {\n this.hasJson = true;\n\n result.push(this.wrapWithZodValidators(\"jsonSchema\", field));\n } else if (inputType.type === \"True\") {\n result.push(this.wrapWithZodValidators(\"z.literal(true)\", field));\n } else if (inputType.type === \"Bytes\") {\n result.push(this.wrapWithZodValidators(\"z.instanceof(Buffer)\", field));\n } else if (!inputType.type.endsWith(\"FieldRefInput\")) {\n const isEnum = inputType.location === \"enumTypes\";\n\n if (inputType.namespace === \"prisma\" || isEnum) {\n if (\n inputType.type !== this.name &&\n typeof inputType.type === \"string\"\n ) {\n this.addSchemaImport(inputType.type);\n }\n\n result.push(\n this.generatePrismaStringLine(field, inputType, lines.length)\n );\n }\n }\n\n return result;\n }, []);\n\n if (alternatives.length === 0) {\n return [];\n }\n\n if (alternatives.length > 1) {\n alternatives = alternatives.map(alter =>\n alter.replace(\".optional()\", \"\")\n );\n }\n\n const fieldName = alternatives.some(alt => alt.includes(\":\"))\n ? \"\"\n : ` ${field.name}:`;\n\n const opt = !field.isRequired ? \".optional()\" : \"\";\n\n let resString =\n alternatives.length === 1\n ? alternatives.join(\",\\r\\n\")\n : `z.union([${alternatives.join(\",\\r\\n\")}])${opt}`;\n\n if (field.isNullable) {\n resString += \".nullable()\";\n }\n\n return [[` ${fieldName} ${resString} `, field, true]];\n }\n\n wrapWithZodValidators(mainValidator: string, field: PrismaDMMF.SchemaArg) {\n let line: string = \"\";\n line = mainValidator;\n\n if (field.inputTypes.some(inputType => inputType.isList)) {\n line += \".array()\";\n }\n\n if (!field.isRequired) {\n line += \".optional()\";\n }\n\n return line;\n }\n\n addSchemaImport(name: string) {\n this.schemaImports.add(name);\n }\n\n generatePrismaStringLine(\n field: PrismaDMMF.SchemaArg,\n inputType: PrismaDMMF.InputTypeRef,\n inputsLength: number\n ) {\n // if (field.inputTypes.length === 0 || !field.inputTypes[0]) {\n // return \"\";\n // }\n\n // const inputType = field.inputTypes[0];\n\n const isEnum = inputType.location === \"enumTypes\";\n\n const inputTypeString = inputType.type;\n const { isModelQueryType, modelName, queryName } =\n this.checkIsModelQueryType(inputTypeString);\n\n const objectSchemaLine = isModelQueryType\n ? this.resolveModelQuerySchemaName(modelName!, queryName!)\n : `${inputTypeString}ObjectSchema`;\n const enumSchemaLine = `${inputTypeString}Schema`;\n\n const schema =\n inputType.type === this.name\n ? objectSchemaLine\n : isEnum\n ? enumSchemaLine\n : objectSchemaLine;\n const arr = inputType.isList ? \".array()\" : \"\";\n const opt = !field.isRequired ? \".optional()\" : \"\";\n\n return inputsLength === 1\n ? ` ${field.name}: z.lazy(() => ${lowerCaseFirst(schema)})${arr}${opt}`\n : `z.lazy(() => ${lowerCaseFirst(schema)})${arr}${opt}`;\n }\n\n generateFieldValidators(\n zodStringWithMainType: string,\n field: PrismaDMMF.SchemaArg\n ) {\n const { isRequired, isNullable } = field;\n\n if (!isRequired) {\n zodStringWithMainType += \".optional()\";\n }\n\n if (isNullable) {\n zodStringWithMainType += \".nullable()\";\n }\n\n return zodStringWithMainType;\n }\n\n prepareObjectSchema(zodObjectSchemaFields: string[]) {\n const objectSchema = `${this.generateExportObjectSchemaStatement(\n this.addFinalWrappers({ zodStringFields: zodObjectSchemaFields })\n )}\\n`;\n\n const prismaImportStatement = this.generateImportPrismaStatement();\n\n const json = this.generateJsonSchemaImplementation();\n\n return `${this.generateObjectSchemaImportStatements()}${prismaImportStatement}${json}${objectSchema}`;\n }\n\n generateExportObjectSchemaStatement(schema: string) {\n let name = this.name;\n let exportName = this.name;\n if (Transformer.provider === \"mongodb\") {\n if (isMongodbRawOp(name)) {\n name = Transformer.rawOpsMap[name]!;\n exportName = name.replace(\"Args\", \"\");\n }\n }\n\n if (isAggregateInputType(name)) {\n name = `${name}Type`;\n }\n const end = `export const ${lowerCaseFirst(exportName)}ObjectSchema = schema`;\n\n return `const schema: z.ZodType<Prisma.${name}> = ${schema};\\n\\n ${end}`;\n }\n\n addFinalWrappers({ zodStringFields }: { zodStringFields: string[] }) {\n const fields = [...zodStringFields];\n\n return `${this.wrapWithZodObject(fields)}.strict()`;\n }\n\n generateImportPrismaStatement() {\n let prismaClientImportPath: string;\n if (Transformer.isCustomPrismaClientOutputPath) {\n /**\n * If a custom location was designated for the prisma client, we need to figure out the\n * relative path from \\{outputPath\\}/schemas/objects to \\{prismaClientCustomPath\\}\n */\n const fromPath = path.join(Transformer.outputPath, \"schemas\", \"objects\");\n const toPath = Transformer.prismaClientOutputPath;\n const relativePathFromOutputToPrismaClient = path\n .relative(fromPath, toPath)\n .split(path.sep)\n .join(path.posix.sep);\n prismaClientImportPath = relativePathFromOutputToPrismaClient;\n } else {\n /**\n * If the default output path for prisma client (\\@prisma/client) is being used, we can import from it directly\n * without having to resolve a relative path\n */\n prismaClientImportPath = Transformer.prismaClientOutputPath;\n }\n return `import type { Prisma } from '${prismaClientImportPath}';\\n\\n`;\n }\n\n generateJsonSchemaImplementation() {\n let jsonSchemaImplementation = \"\";\n\n if (this.hasJson) {\n jsonSchemaImplementation += `\\n`;\n jsonSchemaImplementation += `const literalSchema = z.union([z.string(), z.number(), z.boolean()]);\\n`;\n jsonSchemaImplementation += `const jsonSchema: z.ZodType<Prisma.InputJsonValue> = z.lazy(() =>\\n`;\n jsonSchemaImplementation += ` z.union([literalSchema, z.array(jsonSchema.nullable()), z.record(jsonSchema.nullable())])\\n`;\n jsonSchemaImplementation += `);\\n\\n`;\n }\n\n return jsonSchemaImplementation;\n }\n\n generateObjectSchemaImportStatements() {\n let generatedImports = this.generateImportZodStatement();\n generatedImports += this.generateSchemaImports();\n generatedImports += \"\\n\\n\";\n return generatedImports;\n }\n\n generateSchemaImports() {\n return [...this.schemaImports]\n .map(name => {\n const { isModelQueryType, modelName, queryName } =\n this.checkIsModelQueryType(name);\n if (isModelQueryType) {\n return `import { ${this.resolveModelQuerySchemaName(\n modelName!,\n queryName!\n )} } from '../${queryName}${modelName}.schema'`;\n } else if (Transformer.enumNames.includes(name)) {\n return `import { ${lowerCaseFirst(name)}Schema } from '../enums/${lowerCaseFirst(name)}.schema'`;\n } else {\n return `import { ${lowerCaseFirst(name)}ObjectSchema } from './${lowerCaseFirst(name)}.schema'`;\n }\n })\n .join(\";\\r\\n\");\n }\n\n checkIsModelQueryType(type: string) {\n const modelQueryTypeSuffixToQueryName: Record<string, string> = {\n FindManyArgs: \"findMany\"\n };\n for (const modelQueryType of [\"FindManyArgs\"]) {\n if (type.includes(modelQueryType)) {\n const modelQueryTypeSuffixIndex = type.indexOf(modelQueryType);\n\n return {\n isModelQueryType: true,\n modelName: type.substring(0, modelQueryTypeSuffixIndex),\n queryName: modelQueryTypeSuffixToQueryName[modelQueryType]\n };\n }\n }\n return { isModelQueryType: false };\n }\n\n resolveModelQuerySchemaName(modelName: string, queryName: string) {\n const modelNameUncapitalized = lowerCaseFirst(modelName);\n const queryNameCapitalized = upperCaseFirst(queryName);\n\n return `${modelNameUncapitalized}${queryNameCapitalized}Schema`;\n }\n\n wrapWithZodUnion(zodStringFields: string[]) {\n let wrapped = \"\";\n\n wrapped += \"z.union([\";\n wrapped += \"\\n\";\n wrapped += ` ${zodStringFields.join(\",\")}`;\n wrapped += \"\\n\";\n wrapped += \"])\";\n return wrapped;\n }\n\n wrapWithZodObject(zodStringFields: string | string[]) {\n let wrapped = \"\";\n\n wrapped += \"z.object({\";\n wrapped += \"\\n\";\n wrapped += ` ${typeof zodStringFields === \"string\" ? zodStringFields : zodStringFields.join(\",\\n \")}`;\n wrapped += \"\\n\";\n wrapped += \"})\";\n return wrapped;\n }\n\n resolveObjectSchemaName() {\n let name = this.name;\n let exportName = this.name;\n if (isMongodbRawOp(name)) {\n name = Transformer.rawOpsMap[name]!;\n exportName = name.replace(\"Args\", \"\");\n }\n\n return lowerCaseFirst(exportName);\n }\n\n async generateModelSchemas() {\n for (const modelOperation of this.modelOperations) {\n const {\n findUnique,\n findFirst,\n findMany,\n // @ts-ignore\n createOne,\n createMany,\n createManyAndReturn,\n // @ts-ignore\n deleteOne,\n // @ts-ignore\n updateOne,\n deleteMany,\n updateMany,\n updateManyAndReturn,\n // @ts-ignore\n upsertOne,\n aggregate,\n groupBy\n } = modelOperation;\n\n const model = findModelByName(this.models, modelOperation.model)!;\n const modelName = lowerCaseFirst(modelOperation.model);\n\n const {\n selectImport,\n includeImport,\n selectZodSchemaLine,\n includeZodSchemaLine,\n selectZodSchemaLineLazy,\n includeZodSchemaLineLazy\n } = this.resolveSelectIncludeImportAndZodSchemaLine(model);\n\n const { orderByImport, orderByZodSchemaLine } =\n this.resolveOrderByWithRelationImportAndZodSchemaLine(model);\n\n if (findUnique) {\n const imports = [\n selectImport,\n includeImport,\n `import { ${modelName}WhereUniqueInputObjectSchema } from './objects/${modelName}WhereUniqueInput.schema'`\n ];\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${findUnique}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}FindUnique`,\n `z.object({ ${selectZodSchemaLine} ${includeZodSchemaLine} where: ${modelName}WhereUniqueInputObjectSchema })`\n )}`\n );\n }\n\n if (findFirst) {\n const imports = [\n selectImport,\n includeImport,\n orderByImport,\n `import { ${modelName}WhereInputObjectSchema } from './objects/${modelName}WhereInput.schema'`,\n `import { ${modelName}WhereUniqueInputObjectSchema } from './objects/${modelName}WhereUniqueInput.schema'`,\n `import { ${modelName}ScalarFieldEnumSchema } from './enums/${modelName}ScalarFieldEnum.schema'`\n ];\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${findFirst}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}FindFirst`,\n `z.object({ ${selectZodSchemaLine} ${includeZodSchemaLine} ${orderByZodSchemaLine} where: ${modelName}WhereInputObjectSchema.optional(), cursor: ${modelName}WhereUniqueInputObjectSchema.optional(), take: z.number().optional(), skip: z.number().optional(), distinct: z.array(${modelName}ScalarFieldEnumSchema).optional() })`\n )}`\n );\n }\n\n if (findMany) {\n const imports = [\n selectImport,\n includeImport,\n orderByImport,\n `import { ${modelName}WhereInputObjectSchema } from './objects/${modelName}WhereInput.schema'`,\n `import { ${modelName}WhereUniqueInputObjectSchema } from './objects/${modelName}WhereUniqueInput.schema'`,\n `import { ${modelName}ScalarFieldEnumSchema } from './enums/${modelName}ScalarFieldEnum.schema'`\n ];\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${findMany}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}FindMany`,\n `z.object({ ${selectZodSchemaLineLazy} ${includeZodSchemaLineLazy} ${orderByZodSchemaLine} where: ${modelName}WhereInputObjectSchema.optional(), cursor: ${modelName}WhereUniqueInputObjectSchema.optional(), take: z.number().optional(), skip: z.number().optional(), distinct: z.array(${modelName}ScalarFieldEnumSchema).optional() })`\n )}`\n );\n }\n\n if (createOne) {\n const imports = [\n selectImport,\n includeImport,\n `import { ${modelName}CreateInputObjectSchema } from './objects/${modelName}CreateInput.schema'`,\n `import { ${modelName}UncheckedCreateInputObjectSchema } from './objects/${modelName}UncheckedCreateInput.schema'`\n ];\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${createOne}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}CreateOne`,\n `z.object({ ${selectZodSchemaLine} ${includeZodSchemaLine} data: z.union([${modelName}CreateInputObjectSchema, ${modelName}UncheckedCreateInputObjectSchema]) })`\n )}`\n );\n }\n\n if (createMany) {\n const imports = [\n `import { ${modelName}CreateManyInputObjectSchema } from './objects/${modelName}CreateManyInput.schema'`\n ];\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${createMany}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}CreateMany`,\n `z.object({ data: z.union([ ${modelName}CreateManyInputObjectSchema, z.array(${modelName}CreateManyInputObjectSchema) ]), ${\n Transformer.provider === \"mongodb\" ||\n Transformer.provider === \"sqlserver\"\n ? \"\"\n : \"skipDuplicates: z.boolean().optional()\"\n } })`\n )}`\n );\n }\n\n if (createManyAndReturn) {\n const imports = [\n `import { ${modelName}CreateManyAndReturnInputObjectSchema } from './objects/${modelName}CreateManyAndReturnInput.schema'`\n ];\n await writeFileSafely(\n path.join(\n Transformer.outputPath,\n `schemas/${createManyAndReturn}.schema.ts`\n ),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}CreateManyAndReturn`,\n `z.object({ data: z.union([ ${modelName}CreateManyAndReturnInputObjectSchema, z.array(${modelName}CreateManyAndReturnInputObjectSchema) ]), ${\n Transformer.provider === \"mongodb\" ||\n Transformer.provider === \"sqlserver\"\n ? \"\"\n : \"skipDuplicates: z.boolean().optional()\"\n } })`\n )}`\n );\n }\n\n if (deleteOne) {\n const imports = [\n selectImport,\n includeImport,\n `import { ${modelName}WhereUniqueInputObjectSchema } from './objects/${modelName}WhereUniqueInput.schema'`\n ];\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${deleteOne}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}DeleteOne`,\n `z.object({ ${selectZodSchemaLine} ${includeZodSchemaLine} where: ${modelName}WhereUniqueInputObjectSchema })`\n )}`\n );\n }\n\n if (deleteMany) {\n const imports = [\n `import { ${modelName}WhereInputObjectSchema } from './objects/${modelName}WhereInput.schema'`\n ];\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${deleteMany}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}DeleteMany`,\n `z.object({ where: ${modelName}WhereInputObjectSchema.optional() })`\n )}`\n );\n }\n\n if (updateOne) {\n const imports = [\n selectImport,\n includeImport,\n `import { ${modelName}UpdateInputObjectSchema } from './objects/${modelName}UpdateInput.schema'`,\n `import { ${modelName}UncheckedUpdateInputObjectSchema } from './objects/${modelName}UncheckedUpdateInput.schema'`,\n `import { ${modelName}WhereUniqueInputObjectSchema } from './objects/${modelName}WhereUniqueInput.schema'`\n ];\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${updateOne}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}UpdateOne`,\n `z.object({ ${selectZodSchemaLine} ${includeZodSchemaLine} data: z.union([${modelName}UpdateInputObjectSchema, ${modelName}UncheckedUpdateInputObjectSchema]), where: ${modelName}WhereUniqueInputObjectSchema })`\n )}`\n );\n }\n\n if (updateMany) {\n const imports = [\n `import { ${modelName}UpdateManyMutationInputObjectSchema } from './objects/${modelName}UpdateManyMutationInput.schema'`,\n `import { ${modelName}WhereInputObjectSchema } from './objects/${modelName}WhereInput.schema'`\n ];\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${updateMany}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}UpdateMany`,\n `z.object({ data: ${modelName}UpdateManyMutationInputObjectSchema, where: ${modelName}WhereInputObjectSchema.optional() })`\n )}`\n );\n }\n\n if (updateManyAndReturn) {\n const imports = [\n `import { ${modelName}UpdateManyAndReturnInputObjectSchema } from './objects/${modelName}UpdateManyAndReturnInput.schema'`\n ];\n await writeFileSafely(\n path.join(\n Transformer.outputPath,\n `schemas/${updateManyAndReturn}.schema.ts`\n ),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}UpdateManyAndReturn`,\n `z.object({ data: z.union([ ${modelName}UpdateManyAndReturnInputObjectSchema, z.array(${modelName}UpdateManyAndReturnInputObjectSchema) ]), ${\n Transformer.provider === \"mongodb\" ||\n Transformer.provider === \"sqlserver\"\n ? \"\"\n : \"skipDuplicates: z.boolean().optional()\"\n } })`\n )}`\n );\n }\n\n if (upsertOne) {\n const imports = [\n selectImport,\n includeImport,\n `import { ${modelName}WhereUniqueInputObjectSchema } from './objects/${modelName}WhereUniqueInput.schema'`,\n `import { ${modelName}CreateInputObjectSchema } from './objects/${modelName}CreateInput.schema'`,\n `import { ${modelName}UncheckedCreateInputObjectSchema } from './objects/${modelName}UncheckedCreateInput.schema'`,\n `import { ${modelName}UpdateInputObjectSchema } from './objects/${modelName}UpdateInput.schema'`,\n `import { ${modelName}UncheckedUpdateInputObjectSchema } from './objects/${modelName}UncheckedUpdateInput.schema'`\n ];\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${upsertOne}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}Upsert`,\n `z.object({ ${selectZodSchemaLine} ${includeZodSchemaLine} where: ${modelName}WhereUniqueInputObjectSchema, create: z.union([ ${modelName}CreateInputObjectSchema, ${modelName}UncheckedCreateInputObjectSchema ]), update: z.union([ ${modelName}UpdateInputObjectSchema, ${modelName}UncheckedUpdateInputObjectSchema ]) })`\n )}`\n );\n }\n\n if (aggregate) {\n const imports = [\n orderByImport,\n `import { ${modelName}WhereInputObjectSchema } from './objects/${modelName}WhereInput.schema'`,\n `import { ${modelName}WhereUniqueInputObjectSchema } from './objects/${modelName}WhereUniqueInput.schema'`\n ];\n const aggregateOperations = [];\n if (this.aggregateOperationSupport[modelName]) {\n if (this.aggregateOperationSupport[modelName].count) {\n imports.push(\n `import { ${modelName}CountAggregateInputObjectSchema } from './objects/${modelName}CountAggregateInput.schema'`\n );\n aggregateOperations.push(\n `_count: z.union([ z.literal(true), ${modelName}CountAggregateInputObjectSchema ]).optional()`\n );\n }\n if (this.aggregateOperationSupport[modelName].min) {\n imports.push(\n `import { ${modelName}MinAggregateInputObjectSchema } from './objects/${modelName}MinAggregateInput.schema'`\n );\n aggregateOperations.push(\n `_min: ${modelName}MinAggregateInputObjectSchema.optional()`\n );\n }\n if (this.aggregateOperationSupport[modelName].max) {\n imports.push(\n `import { ${modelName}MaxAggregateInputObjectSchema } from './objects/${modelName}MaxAggregateInput.schema'`\n );\n aggregateOperations.push(\n `_max: ${modelName}MaxAggregateInputObjectSchema.optional()`\n );\n }\n if (this.aggregateOperationSupport[modelName].avg) {\n imports.push(\n `import { ${modelName}AvgAggregateInputObjectSchema } from './objects/${modelName}AvgAggregateInput.schema'`\n );\n aggregateOperations.push(\n `_avg: ${modelName}AvgAggregateInputObjectSchema.optional()`\n );\n }\n if (this.aggregateOperationSupport[modelName].sum) {\n imports.push(\n `import { ${modelName}SumAggregateInputObjectSchema } from './objects/${modelName}SumAggregateInput.schema'`\n );\n aggregateOperations.push(\n `_sum: ${modelName}SumAggregateInputObjectSchema.optional()`\n );\n }\n }\n\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${aggregate}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}Aggregate`,\n `z.object({ ${orderByZodSchemaLine} where: ${modelName}WhereInputObjectSchema.optional(), cursor: ${modelName}WhereUniqueInputObjectSchema.optional(), take: z.number().optional(), skip: z.number().optional(), ${aggregateOperations.join(\n \", \"\n )} })`\n )}`\n );\n }\n\n if (groupBy) {\n const imports = [\n `import { ${modelName}WhereInputObjectSchema } from './objects/${modelName}WhereInput.schema'`,\n `import { ${modelName}OrderByWithAggregationInputObjectSchema } from './objects/${modelName}OrderByWithAggregationInput.schema'`,\n `import { ${modelName}ScalarWhereWithAggregatesInputObjectSchema } from './objects/${modelName}ScalarWhereWithAggregatesInput.schema'`,\n `import { ${modelName}ScalarFieldEnumSchema } from './enums/${modelName}ScalarFieldEnum.schema'`\n ];\n await writeFileSafely(\n path.join(Transformer.outputPath, `schemas/${groupBy}.schema.ts`),\n `${this.generateImportStatements(\n imports\n )}${this.generateExportSchemaStatement(\n `${modelName}GroupBy`,\n `z.object({ where: ${modelName}WhereInputObjectSchema.optional(), orderBy: z.union([${modelName}OrderByWithAggregationInputObjectSchema, ${modelName}OrderByWithAggregationInputObjectSchema.array()]).optional(), having: ${modelName}ScalarWhereWithAggregatesInputObjectSchema.optional(), take: z.number().optional(), skip: z.number().optional(), by: z.array(${modelName}ScalarFieldEnumSchema) })`\n )}`\n );\n }\n }\n }\n\n generateImportStatements(imports: (string | undefined)[]) {\n let generatedImports = this.generateImportZodStatement();\n generatedImports +=\n imports?.filter(importItem => !!importItem).join(\";\\r\\n\") ?? \"\";\n generatedImports += \"\\n\\n\";\n return generatedImports;\n }\n\n resolveSelectIncludeImportAndZodSchemaLine(model: PrismaDMMF.Model) {\n const { name: modelName } = model;\n\n const hasRelationToAnotherModel = checkModelHasModelRelation(model);\n\n const selectImport = Transformer.isGenerateSelect\n ? `import { ${lowerCaseFirst(modelName)}SelectObjectSchema } from './objects/${lowerCaseFirst(modelName)}Select.schema'`\n : \"\";\n\n const includeImport =\n Transformer.isGenerateInclude && hasRelationToAnotherModel\n ? `import { ${lowerCaseFirst(modelName)}IncludeObjectSchema } from './objects/${lowerCaseFirst(modelName)}Include.schema'`\n : \"\";\n\n let selectZodSchemaLine = \"\";\n let includeZodSchemaLine = \"\";\n let selectZodSchemaLineLazy = \"\";\n let includeZodSchemaLineLazy = \"\";\n\n if (Transformer.isGenerateSelect) {\n const zodSelectObjectSchema = `${lowerCaseFirst(modelName)}SelectObjectSchema.optional()`;\n selectZodSchemaLine = `select: ${zodSelectObjectSchema},`;\n selectZodSchemaLineLazy = `select: z.lazy(() => ${zodSelectObjectSchema}),`;\n }\n\n if (Transformer.isGenerateInclude && hasRelationToAnotherModel) {\n const zodIncludeObjectSchema = `${lowerCaseFirst(modelName)}IncludeObjectSchema.optional()`;\n includeZodSchemaLine = `include: ${zodIncludeObjectSchema},`;\n includeZodSchemaLineLazy = `include: z.lazy(() => ${zodIncludeObjectSchema}),`;\n }\n\n return {\n selectImport,\n includeImport,\n selectZodSchemaLine,\n includeZodSchemaLine,\n selectZodSchemaLineLazy,\n includeZodSchemaLineLazy\n };\n }\n\n resolveOrderByWithRelationImportAndZodSchemaLine(model: PrismaDMMF.Model) {\n const { name: modelName } = model;\n let modelOrderBy = \"\";\n\n if (\n [\"postgresql\", \"mysql\"].includes(Transformer.provider) &&\n Transformer.previewFeatures?.includes(\"fullTextSearch\")\n ) {\n modelOrderBy = `${lowerCaseFirst(modelName)}OrderByWithRelationAndSearchRelevanceInput`;\n } else {\n modelOrderBy = `${lowerCaseFirst(modelName)}OrderByWithRelationInput`;\n }\n\n const orderByImport = `import { ${modelOrderBy}ObjectSchema } from './objects/${modelOrderBy}.schema'`;\n const orderByZodSchemaLine = `orderBy: z.union([${modelOrderBy}ObjectSchema, ${modelOrderBy}ObjectSchema.array()]).optional(),`;\n\n return { orderByImport, orderByZodSchemaLine };\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whereUniqueInput-helpers.mjs","names":[],"sources":["../../src/zod/whereUniqueInput-helpers.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0
|
|
1
|
+
{"version":3,"file":"whereUniqueInput-helpers.mjs","names":[],"sources":["../../src/zod/whereUniqueInput-helpers.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/stryke.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://docs.stormsoftware.com/projects/stryke\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport type { DMMF } from \"@prisma/generator-helper\";\nimport type { ArrayValues } from \"@stryke/types/array\";\nimport type { Writeable } from \"../types\";\n\nexport function changeOptionalToRequiredFields(\n inputObjectTypes: Writeable<DMMF.InputType[]>\n) {\n inputObjectTypes.map((item: Writeable<DMMF.InputType>) => {\n if (\n item.name.includes(\"WhereUniqueInput\") &&\n // eslint-disable-next-line ts/no-non-null-asserted-optional-chain\n item.constraints.fields?.length! > 0\n ) {\n item.fields = item.fields.map(\n (subItem: Writeable<ArrayValues<DMMF.InputType[\"fields\"]>>) => {\n if (item.constraints.fields?.includes(subItem.name)) {\n subItem.isRequired = true;\n return subItem;\n }\n return subItem;\n }\n );\n }\n return item;\n });\n}\n"],"mappings":";AAsBA,SAAgB,+BACd,kBACA;AACA,kBAAiB,KAAK,SAAoC;AACxD,MACE,KAAK,KAAK,SAAS,mBAAmB,IAEtC,KAAK,YAAY,QAAQ,SAAU,EAEnC,MAAK,SAAS,KAAK,OAAO,KACvB,YAA8D;AAC7D,OAAI,KAAK,YAAY,QAAQ,SAAS,QAAQ,KAAK,EAAE;AACnD,YAAQ,aAAa;AACrB,WAAO;;AAET,UAAO;IAEV;AAEH,SAAO;GACP"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stryke/prisma-trpc-generator",
|
|
3
|
-
"version": "0.13.
|
|
3
|
+
"version": "0.13.81",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "A fork of the prisma-trpc-generator code to work in ESM with Prisma v6.",
|
|
6
6
|
"keywords": [
|
|
@@ -66,8 +66,8 @@
|
|
|
66
66
|
"dependencies": {
|
|
67
67
|
"@prisma/generator-helper": "^6.19.2",
|
|
68
68
|
"@prisma/internals": "^6.19.2",
|
|
69
|
-
"@stryke/fs": "^0.33.
|
|
70
|
-
"@stryke/path": "^0.27.
|
|
69
|
+
"@stryke/fs": "^0.33.64",
|
|
70
|
+
"@stryke/path": "^0.27.3",
|
|
71
71
|
"esbuild": "^0.25.12",
|
|
72
72
|
"jiti": "^2.6.1",
|
|
73
73
|
"parenthesis": "^3.1.8",
|
|
@@ -81,5 +81,5 @@
|
|
|
81
81
|
"tsdown": "^0.17.2"
|
|
82
82
|
},
|
|
83
83
|
"publishConfig": { "access": "public" },
|
|
84
|
-
"gitHead": "
|
|
84
|
+
"gitHead": "ad0acb8f9d34c16300a0901dd4db448756480415"
|
|
85
85
|
}
|