@innovixx/prisma-typed-json-generator 0.0.2 → 0.0.3
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/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -50,7 +50,7 @@ export function extractCommentedTypes(schemaContent) {
|
|
|
50
50
|
return typeObjects;
|
|
51
51
|
}
|
|
52
52
|
export async function writeTypesFile(typeObjects, clientDir) {
|
|
53
|
-
let typeFileContent = '// This file is auto-generated by prisma-typed-json-generator\n\n';
|
|
53
|
+
let typeFileContent = '// This file is auto-generated by @innovixx/prisma-typed-json-generator\n\n';
|
|
54
54
|
for (const [typeName, fields] of Object.entries(typeObjects)) {
|
|
55
55
|
typeFileContent += `export type ${typeName} = {\n`;
|
|
56
56
|
for (const [field, type] of Object.entries(fields)) {
|
|
@@ -100,7 +100,7 @@ generatorHandler({
|
|
|
100
100
|
const jsonTypeAnnotations = extractJsonTypeAnnotations(schemaContent);
|
|
101
101
|
for (const [modelField, typeName] of Object.entries(jsonTypeAnnotations)) {
|
|
102
102
|
const [model, field] = modelField.split('.');
|
|
103
|
-
const payloadBlockRegex = new RegExp(`export type \\$${model}Payload<[^=]+=[^>]+> = {([\\s\\S]*?)
|
|
103
|
+
const payloadBlockRegex = new RegExp(`export type \\$${model}Payload<[^=]+=[^>]+> = \\{([\\s\\S]*?)\\n\\}`, 'g');
|
|
104
104
|
indexDtsContent = indexDtsContent.replace(payloadBlockRegex, (block) => {
|
|
105
105
|
const lines = block.split('\n');
|
|
106
106
|
let inScalars = false;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,SAAS,0BAA0B,CAAC,aAAqB;IACxD,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,2CAA2C,CAAC;IAC/D,IAAI,UAAU,CAAC;IACf,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC/D,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC3B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,MAAM,UAAU,GAAG,8CAA8C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7E,IAAI,UAAU,EAAE,CAAC;gBAChB,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBAChC,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBAC/B,MAAM,CAAC,GAAG,SAAS,IAAI,SAAS,EAAE,CAAC,GAAG,QAAQ,CAAC;YAChD,CAAC;QACF,CAAC;IACF,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AACD,OAAO,eAAqC,MAAM,0BAA0B,CAAC;AAC7E,OAAO,SAAS,MAAM,mBAAmB,CAAA;AACzC,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AACvD,OAAO,EAAE,MAAM,IAAI,CAAA;AAGnB,MAAM,UAAU,qBAAqB,CAAC,aAAqB;IAC1D,MAAM,mBAAmB,GAAa,EAAE,CAAC;IACzC,MAAM,cAAc,GAAG,iDAAiD,CAAC;IACzE,IAAI,KAAK,CAAC;IACV,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC9D,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IACD,MAAM,WAAW,GAA2C,EAAE,CAAC;IAC/D,KAAK,MAAM,KAAK,IAAI,mBAAmB,EAAE,CAAC;QACzC,MAAM,WAAW,GAAG,yCAAyC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1E,IAAI,CAAC,WAAW;YAAE,SAAS;QAC3B,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACpD,IAAI,CAAC,OAAO;gBAAE,SAAS;YACvB,MAAM,UAAU,GAAG,0CAA0C,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5E,IAAI,UAAU,EAAE,CAAC;gBAChB,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YACvC,CAAC;QACF,CAAC;QACD,WAAW,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;IAChC,CAAC;IACD,OAAO,WAAW,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CACnC,WAAmD,EACnD,SAAiB;IAEjB,IAAI,eAAe,GAAG,mEAAmE,CAAC;IAC1F,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9D,eAAe,IAAI,eAAe,QAAQ,QAAQ,CAAC;QACnD,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACpD,IAAI,MAAM,GAAG,IAAI;iBACf,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC;iBAC9B,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC;iBAC3B,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC;iBAC7B,OAAO,CAAC,YAAY,EAAE,SAAS,CAAC;iBAChC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC;iBACzB,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC;iBACzB,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACzB,eAAe,IAAI,KAAK,KAAK,KAAK,MAAM,KAAK,CAAC;QAC/C,CAAC;QACD,eAAe,IAAI,OAAO,CAAC;IAC5B,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;IAChE,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;IAClE,OAAO,UAAU,CAAC;AACnB,CAAC;AAED,MAAM,EAAE,gBAAgB,EAAE,GAAG,eAAe,CAAC;AAC7C,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;AAE7B,gBAAgB,CAAC;IAChB,UAAU;QACT,OAAO;YACN,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,aAAa,EAAE,cAAc;YAC7B,UAAU,EAAE,6BAA6B;SACzC,CAAA;IACF,CAAC;IACD,UAAU,EAAE,KAAK,EAAE,OAAyB,EAAE,EAAE;QAC/C,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAA;QAExD,MAAM,kBAAkB,GAAG,OAAO,CAAC,SAAS,CAAC,cAAc,CAAA;QAE3D,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAA;QAChF,IAAI,CAAC,eAAe;YAAE,MAAM,IAAI,KAAK,CAAC,qGAAqG,CAAC,CAAC;QAE7I,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,EAAE,KAAK,CAAA;QAElD,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;QAC9E,MAAM,WAAW,GAAG,qBAAqB,CAAC,aAAa,CAAC,CAAC;QAEzD,IAAI,YAAY,EAAE,CAAC;YAClB,MAAM,cAAc,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,YAAY,EAAE,CAAC;YAClB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;YAC3D,IAAI,eAAe,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACxE,IAAI,OAAO,GAAG,KAAK,CAAC;YAEpB,MAAM,mBAAmB,GAAG,0BAA0B,CAAC,aAAa,CAAC,CAAC;YACtE,KAAK,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBAC1E,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC7C,MAAM,iBAAiB,GAAG,IAAI,MAAM,CAAC,kBAAkB,KAAK,0CAA0C,EAAE,GAAG,CAAC,CAAC;gBAC7G,eAAe,GAAG,eAAe,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,EAAE;oBACtE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAChC,IAAI,SAAS,GAAG,KAAK,CAAC;oBACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBACvC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,yCAAyC,CAAC;4BAAE,SAAS,GAAG,IAAI,CAAC;wBACnF,IAAI,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,KAAK,oBAAoB,CAAC,EAAE,CAAC;4BAClE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,mBAAmB,QAAQ,EAAE,CAAC,CAAC;4BAC/E,OAAO,GAAG,IAAI,CAAC;wBAChB,CAAC;wBACD,IAAI,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;4BAAE,SAAS,GAAG,KAAK,CAAC;oBAC/E,CAAC;oBACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACzB,CAAC,CAAC,CAAC;YACJ,CAAC;YACD,IAAI,OAAO,EAAE,CAAC;gBACb,MAAM,UAAU,GAAG,yDAAyD,CAAC;gBAC7E,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC3C,eAAe,GAAG,eAAe,CAAC,OAAO,CAAC,iBAAiB,EAAE,KAAK,UAAU,IAAI,CAAC,CAAC;gBACnF,CAAC;gBACD,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,YAAY,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;YACrE,CAAC;QACF,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAA;IAC7D,CAAC;CACD,CAAC,CAAA","sourcesContent":["function extractJsonTypeAnnotations(schemaContent: string): Record<string, string> {\n\tconst result: Record<string, string> = {};\n\tconst modelRegex = /model\\s+([A-Za-z0-9_]+)\\s*\\{([\\s\\S]*?)\\}/g;\n\tlet modelMatch;\n\twhile ((modelMatch = modelRegex.exec(schemaContent)) !== null) {\n\t\tconst modelName = modelMatch[1];\n\t\tconst body = modelMatch[2];\n\t\tfor (const line of body.split('\\n')) {\n\t\t\tconst fieldMatch = /^\\s*([A-Za-z0-9_]+)\\s+Json.*@type\\(([^)]+)\\)/.exec(line);\n\t\t\tif (fieldMatch) {\n\t\t\t\tconst fieldName = fieldMatch[1];\n\t\t\t\tconst typeName = fieldMatch[2];\n\t\t\t\tresult[`${modelName}.${fieldName}`] = typeName;\n\t\t\t}\n\t\t}\n\t}\n\treturn result;\n}\nimport generatorHelper, { GeneratorOptions } from '@prisma/generator-helper';\nimport internals from '@prisma/internals'\nimport path from 'path'\nimport pkg from '../package.json' with { type: \"json\" }\nimport fs from 'fs'\n\n\nexport function extractCommentedTypes(schemaContent: string): Record<string, Record<string, string>> {\n\tconst commentedTypeBlocks: string[] = [];\n\tconst typeBlockRegex = /\\/\\/\\s*type\\s+([A-Za-z0-9_]+)\\s*\\{([\\s\\S]*?)\\}/g;\n\tlet match;\n\twhile ((match = typeBlockRegex.exec(schemaContent)) !== null) {\n\t\tcommentedTypeBlocks.push(match[0]);\n\t}\n\tconst typeObjects: Record<string, Record<string, string>> = {};\n\tfor (const block of commentedTypeBlocks) {\n\t\tconst headerMatch = /type\\s+([A-Za-z0-9_]+)\\s*\\{([\\s\\S]*?)\\}/.exec(block);\n\t\tif (!headerMatch) continue;\n\t\tconst typeName = headerMatch[1];\n\t\tconst body = headerMatch[2];\n\t\tconst fields: Record<string, string> = {};\n\t\tfor (const line of body.split('\\n')) {\n\t\t\tconst cleaned = line.replace(/^\\s*\\/\\//, '').trim();\n\t\t\tif (!cleaned) continue;\n\t\t\tconst fieldMatch = /^([A-Za-z0-9_]+)\\s+([A-Za-z0-9_\\[\\]?]+)$/.exec(cleaned);\n\t\t\tif (fieldMatch) {\n\t\t\t\tfields[fieldMatch[1]] = fieldMatch[2];\n\t\t\t}\n\t\t}\n\t\ttypeObjects[typeName] = fields;\n\t}\n\treturn typeObjects;\n}\n\nexport async function writeTypesFile(\n\ttypeObjects: Record<string, Record<string, string>>,\n\tclientDir: string\n) {\n\tlet typeFileContent = '// This file is auto-generated by prisma-typed-json-generator\\n\\n';\n\tfor (const [typeName, fields] of Object.entries(typeObjects)) {\n\t\ttypeFileContent += `export type ${typeName} = {\\n`;\n\t\tfor (const [field, type] of Object.entries(fields)) {\n\t\t\tlet tsType = type\n\t\t\t\t.replace(/^string$/i, 'string')\n\t\t\t\t.replace(/^int$/i, 'number')\n\t\t\t\t.replace(/^float$/i, 'number')\n\t\t\t\t.replace(/^boolean$/i, 'boolean')\n\t\t\t\t.replace(/^json$/i, 'any')\n\t\t\t\t.replace(/\\?$/, ' | null')\n\t\t\t\t.replace(/\\[\\]$/, '[]');\n\t\t\ttypeFileContent += ` ${field}: ${tsType};\\n`;\n\t\t}\n\t\ttypeFileContent += '}\\n\\n';\n\t}\n\tconst outputPath = path.join(clientDir, 'prisma-json.types.ts');\n\tawait fs.promises.mkdir(clientDir, { recursive: true });\n\tawait fs.promises.writeFile(outputPath, typeFileContent, 'utf-8');\n\treturn outputPath;\n}\n\nconst { generatorHandler } = generatorHelper;\nconst { logger } = internals;\n\ngeneratorHandler({\n\tonManifest() {\n\t\treturn {\n\t\t\tversion: pkg.version,\n\t\t\tdefaultOutput: '../generated',\n\t\t\tprettyName: \"prisma-typed-json-generator\",\n\t\t}\n\t},\n\tonGenerate: async (options: GeneratorOptions) => {\n\t\tlogger.info(`prisma-typed-json-generator:Generating...`)\n\n\t\tconst schemaFileLocation = options.generator.sourceFilePath\n\n\t\tconst clientGenerator = options.otherGenerators.find((g) => g.name === 'client')\n\t\tif (!clientGenerator) throw new Error('Prisma Client generator not found. Please ensure that generator Client is specified in your schema.');\n\n\t\tconst clientOutput = clientGenerator.output?.value\n\n\t\tconst schemaContent = await fs.promises.readFile(schemaFileLocation, 'utf-8');\n\t\tconst typeObjects = extractCommentedTypes(schemaContent);\n\n\t\tif (clientOutput) {\n\t\t\tawait writeTypesFile(typeObjects, clientOutput);\n\t\t}\n\n\t\tif (clientOutput) {\n\t\t\tconst indexDtsPath = path.join(clientOutput, 'index.d.ts');\n\t\t\tlet indexDtsContent = await fs.promises.readFile(indexDtsPath, 'utf-8');\n\t\t\tlet updated = false;\n\n\t\t\tconst jsonTypeAnnotations = extractJsonTypeAnnotations(schemaContent);\n\t\t\tfor (const [modelField, typeName] of Object.entries(jsonTypeAnnotations)) {\n\t\t\t\tconst [model, field] = modelField.split('.');\n\t\t\t\tconst payloadBlockRegex = new RegExp(`export type \\\\$${model}Payload<[^=]+=[^>]+> = {([\\\\s\\\\S]*?)}\\\\n`, 'g');\n\t\t\t\tindexDtsContent = indexDtsContent.replace(payloadBlockRegex, (block) => {\n\t\t\t\t\tconst lines = block.split('\\n');\n\t\t\t\t\tlet inScalars = false;\n\t\t\t\t\tfor (let i = 0; i < lines.length; i++) {\n\t\t\t\t\t\tif (lines[i].includes('scalars: $Extensions.GetPayloadResult<{')) inScalars = true;\n\t\t\t\t\t\tif (inScalars && lines[i].includes(`${field}: Prisma.JsonValue`)) {\n\t\t\t\t\t\t\tlines[i] = lines[i].replace('Prisma.JsonValue', `PrismaJsonTypes.${typeName}`);\n\t\t\t\t\t\t\tupdated = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (inScalars && lines[i].includes('}, ExtArgs[\"result\"]')) inScalars = false;\n\t\t\t\t\t}\n\t\t\t\t\treturn lines.join('\\n');\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (updated) {\n\t\t\t\tconst importLine = `import * as PrismaJsonTypes from './prisma-json.types';`;\n\t\t\t\tif (!indexDtsContent.includes(importLine)) {\n\t\t\t\t\tindexDtsContent = indexDtsContent.replace(/(import .*?;\\n)/, `$1${importLine}\\n`);\n\t\t\t\t}\n\t\t\t\tawait fs.promises.writeFile(indexDtsPath, indexDtsContent, 'utf-8');\n\t\t\t}\n\t\t}\n\n\t\tlogger.info(`prisma-typed-json-generator:Generating...Done`)\n\t},\n})\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["function extractJsonTypeAnnotations(schemaContent: string): Record<string, string> {\n\tconst result: Record<string, string> = {};\n\tconst modelRegex = /model\\s+([A-Za-z0-9_]+)\\s*\\{([\\s\\S]*?)\\}/g;\n\tlet modelMatch;\n\twhile ((modelMatch = modelRegex.exec(schemaContent)) !== null) {\n\t\tconst modelName = modelMatch[1];\n\t\tconst body = modelMatch[2];\n\t\tfor (const line of body.split('\\n')) {\n\t\t\tconst fieldMatch = /^\\s*([A-Za-z0-9_]+)\\s+Json.*@type\\(([^)]+)\\)/.exec(line);\n\t\t\tif (fieldMatch) {\n\t\t\t\tconst fieldName = fieldMatch[1];\n\t\t\t\tconst typeName = fieldMatch[2];\n\t\t\t\tresult[`${modelName}.${fieldName}`] = typeName;\n\t\t\t}\n\t\t}\n\t}\n\treturn result;\n}\nimport generatorHelper, { GeneratorOptions } from '@prisma/generator-helper';\nimport internals from '@prisma/internals'\nimport path from 'path'\nimport pkg from '../package.json' with { type: \"json\" }\nimport fs from 'fs'\n\n\nexport function extractCommentedTypes(schemaContent: string): Record<string, Record<string, string>> {\n\tconst commentedTypeBlocks: string[] = [];\n\tconst typeBlockRegex = /\\/\\/\\s*type\\s+([A-Za-z0-9_]+)\\s*\\{([\\s\\S]*?)\\}/g;\n\tlet match;\n\twhile ((match = typeBlockRegex.exec(schemaContent)) !== null) {\n\t\tcommentedTypeBlocks.push(match[0]);\n\t}\n\tconst typeObjects: Record<string, Record<string, string>> = {};\n\tfor (const block of commentedTypeBlocks) {\n\t\tconst headerMatch = /type\\s+([A-Za-z0-9_]+)\\s*\\{([\\s\\S]*?)\\}/.exec(block);\n\t\tif (!headerMatch) continue;\n\t\tconst typeName = headerMatch[1];\n\t\tconst body = headerMatch[2];\n\t\tconst fields: Record<string, string> = {};\n\t\tfor (const line of body.split('\\n')) {\n\t\t\tconst cleaned = line.replace(/^\\s*\\/\\//, '').trim();\n\t\t\tif (!cleaned) continue;\n\t\t\tconst fieldMatch = /^([A-Za-z0-9_]+)\\s+([A-Za-z0-9_\\[\\]?]+)$/.exec(cleaned);\n\t\t\tif (fieldMatch) {\n\t\t\t\tfields[fieldMatch[1]] = fieldMatch[2];\n\t\t\t}\n\t\t}\n\t\ttypeObjects[typeName] = fields;\n\t}\n\treturn typeObjects;\n}\n\nexport async function writeTypesFile(\n\ttypeObjects: Record<string, Record<string, string>>,\n\tclientDir: string\n) {\n\tlet typeFileContent = '// This file is auto-generated by @innovixx/prisma-typed-json-generator\\n\\n';\n\tfor (const [typeName, fields] of Object.entries(typeObjects)) {\n\t\ttypeFileContent += `export type ${typeName} = {\\n`;\n\t\tfor (const [field, type] of Object.entries(fields)) {\n\t\t\tlet tsType = type\n\t\t\t\t.replace(/^string$/i, 'string')\n\t\t\t\t.replace(/^int$/i, 'number')\n\t\t\t\t.replace(/^float$/i, 'number')\n\t\t\t\t.replace(/^boolean$/i, 'boolean')\n\t\t\t\t.replace(/^json$/i, 'any')\n\t\t\t\t.replace(/\\?$/, ' | null')\n\t\t\t\t.replace(/\\[\\]$/, '[]');\n\t\t\ttypeFileContent += ` ${field}: ${tsType};\\n`;\n\t\t}\n\t\ttypeFileContent += '}\\n\\n';\n\t}\n\tconst outputPath = path.join(clientDir, 'prisma-json.types.ts');\n\tawait fs.promises.mkdir(clientDir, { recursive: true });\n\tawait fs.promises.writeFile(outputPath, typeFileContent, 'utf-8');\n\treturn outputPath;\n}\n\nconst { generatorHandler } = generatorHelper;\nconst { logger } = internals;\n\ngeneratorHandler({\n\tonManifest() {\n\t\treturn {\n\t\t\tversion: pkg.version,\n\t\t\tdefaultOutput: '../generated',\n\t\t\tprettyName: \"prisma-typed-json-generator\",\n\t\t}\n\t},\n\tonGenerate: async (options: GeneratorOptions) => {\n\t\tlogger.info(`prisma-typed-json-generator:Generating...`)\n\n\t\tconst schemaFileLocation = options.generator.sourceFilePath\n\n\t\tconst clientGenerator = options.otherGenerators.find((g) => g.name === 'client')\n\t\tif (!clientGenerator) throw new Error('Prisma Client generator not found. Please ensure that generator Client is specified in your schema.');\n\n\t\tconst clientOutput = clientGenerator.output?.value\n\n\t\tconst schemaContent = await fs.promises.readFile(schemaFileLocation, 'utf-8');\n\t\tconst typeObjects = extractCommentedTypes(schemaContent);\n\n\t\tif (clientOutput) {\n\t\t\tawait writeTypesFile(typeObjects, clientOutput);\n\t\t}\n\n\t\tif (clientOutput) {\n\t\t\tconst indexDtsPath = path.join(clientOutput, 'index.d.ts');\n\t\t\tlet indexDtsContent = await fs.promises.readFile(indexDtsPath, 'utf-8');\n\t\t\tlet updated = false;\n\n\t\t\tconst jsonTypeAnnotations = extractJsonTypeAnnotations(schemaContent);\n\t\t\tfor (const [modelField, typeName] of Object.entries(jsonTypeAnnotations)) {\n\t\t\t\tconst [model, field] = modelField.split('.');\n\t\t\t\tconst payloadBlockRegex = new RegExp(`export type \\\\$${model}Payload<[^=]+=[^>]+> = \\\\{([\\\\s\\\\S]*?)\\\\n\\\\}`, 'g');\n\t\t\t\tindexDtsContent = indexDtsContent.replace(payloadBlockRegex, (block) => {\n\t\t\t\t\tconst lines = block.split('\\n');\n\t\t\t\t\tlet inScalars = false;\n\t\t\t\t\tfor (let i = 0; i < lines.length; i++) {\n\t\t\t\t\t\tif (lines[i].includes('scalars: $Extensions.GetPayloadResult<{')) inScalars = true;\n\t\t\t\t\t\tif (inScalars && lines[i].includes(`${field}: Prisma.JsonValue`)) {\n\t\t\t\t\t\t\tlines[i] = lines[i].replace('Prisma.JsonValue', `PrismaJsonTypes.${typeName}`);\n\t\t\t\t\t\t\tupdated = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (inScalars && lines[i].includes('}, ExtArgs[\"result\"]')) inScalars = false;\n\t\t\t\t\t}\n\t\t\t\t\treturn lines.join('\\n');\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (updated) {\n\t\t\t\tconst importLine = `import * as PrismaJsonTypes from './prisma-json.types';`;\n\t\t\t\tif (!indexDtsContent.includes(importLine)) {\n\t\t\t\t\tindexDtsContent = indexDtsContent.replace(/(import .*?;\\n)/, `$1${importLine}\\n`);\n\t\t\t\t}\n\t\t\t\tawait fs.promises.writeFile(indexDtsPath, indexDtsContent, 'utf-8');\n\t\t\t}\n\t\t}\n\n\t\tlogger.info(`prisma-typed-json-generator:Generating...Done`)\n\t},\n})\n"]}
|