{"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"}