@stryke/prisma-trpc-generator
Version:
A fork of the prisma-trpc-generator code to work in ESM with Prisma v6.
1 lines • 6.7 kB
Source Map (JSON)
{"version":3,"file":"comments-helpers.mjs","names":[],"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,MAAM,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"}