prismadoc 1.0.30 → 1.0.32
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/main.js +44 -10
- package/package.json +1 -1
package/dist/main.js
CHANGED
|
@@ -23,13 +23,16 @@ export class DocGen {
|
|
|
23
23
|
// fieldFile!: DocGenFile;
|
|
24
24
|
externalIndexExports = [];
|
|
25
25
|
async init() {
|
|
26
|
-
|
|
26
|
+
const prismaDataModel = await PrismaUtils.readPrismaFolderDatamodel(PRISMA_DIR);
|
|
27
|
+
const { datamodel } = await getDMMF({ datamodel: prismaDataModel });
|
|
28
|
+
console.log("starting2");
|
|
29
|
+
// Busca e processa schemas externos (precisa do schema principal para resolver tipos)
|
|
27
30
|
const externalSchemas = await PrismaUtils.fetchExternalSchemas(config.externalPrismaSchemas);
|
|
31
|
+
const mainModelNames = new Set(datamodel.models.map((m) => m.name));
|
|
32
|
+
const mainEnumNames = new Set(datamodel.enums.map((e) => e.name));
|
|
28
33
|
for (const external of externalSchemas) {
|
|
29
|
-
await this.processExternalSchema(external.name, external.prismaSchema);
|
|
34
|
+
await this.processExternalSchema(external.name, external.prismaSchema, prismaDataModel, mainModelNames, mainEnumNames);
|
|
30
35
|
}
|
|
31
|
-
const prismaDataModel = await PrismaUtils.readPrismaFolderDatamodel(PRISMA_DIR);
|
|
32
|
-
const { datamodel } = await getDMMF({ datamodel: prismaDataModel });
|
|
33
36
|
const fieldSet = new Set();
|
|
34
37
|
for (const model of datamodel.models) {
|
|
35
38
|
for (const field of model.fields) {
|
|
@@ -42,13 +45,44 @@ export class DocGen {
|
|
|
42
45
|
});
|
|
43
46
|
this.build();
|
|
44
47
|
}
|
|
45
|
-
|
|
46
|
-
|
|
48
|
+
/**
|
|
49
|
+
* Tenta getDMMF e, se falhar por tipos não encontrados, remove os campos
|
|
50
|
+
* que referenciam esses tipos e retenta.
|
|
51
|
+
*/
|
|
52
|
+
async getDMMFSafe(schema) {
|
|
53
|
+
try {
|
|
54
|
+
return await getDMMF({ datamodel: schema });
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
const message = err?.message ?? "";
|
|
58
|
+
const missingTypes = [...message.matchAll(/Type "(\w+)" is neither a built-in type/g)].map((m) => m[1]);
|
|
59
|
+
if (missingTypes.length === 0)
|
|
60
|
+
throw err;
|
|
61
|
+
const uniqueTypes = [...new Set(missingTypes)];
|
|
62
|
+
console.log(`⚠️ Removendo campos com tipos externos: ${uniqueTypes.join(", ")}`);
|
|
63
|
+
// Remove linhas que referenciam os tipos desconhecidos
|
|
64
|
+
const typePattern = uniqueTypes.join("|");
|
|
65
|
+
const re = new RegExp(`^\\s+\\w+\\s+(${typePattern})[\\s\\[\\]\\?].*$`, "gm");
|
|
66
|
+
const cleaned = schema.replaceAll(re, "");
|
|
67
|
+
return await getDMMF({ datamodel: cleaned });
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
async processExternalSchema(name, prismaSchema, mainPrismaDataModel, mainModelNames, mainEnumNames) {
|
|
71
|
+
// Remove blocos datasource/generator do schema externo para evitar duplicatas
|
|
72
|
+
const cleanedExternal = prismaSchema
|
|
73
|
+
.replaceAll(/datasource\s+\w+\s*\{[^}]*\}/g, "")
|
|
74
|
+
.replaceAll(/generator\s+\w+\s*\{[^}]*\}/g, "");
|
|
75
|
+
// Combina com o schema principal para que o Prisma resolva todos os tipos
|
|
76
|
+
const combined = mainPrismaDataModel + "\n" + cleanedExternal;
|
|
77
|
+
const { datamodel } = await this.getDMMFSafe(combined);
|
|
47
78
|
const servicePrefix = Helper.toKebab(name);
|
|
48
79
|
const serviceIndexExports = [];
|
|
80
|
+
// Filtra apenas models e enums do schema externo (ignora os do principal)
|
|
81
|
+
const externalModels = datamodel.models.filter((m) => !mainModelNames.has(m.name));
|
|
82
|
+
const externalEnums = datamodel.enums.filter((e) => !mainEnumNames.has(e.name));
|
|
49
83
|
// Gerar enums.ts com os enums do schema externo
|
|
50
|
-
if (
|
|
51
|
-
const enumDeclarations =
|
|
84
|
+
if (externalEnums.length > 0) {
|
|
85
|
+
const enumDeclarations = externalEnums
|
|
52
86
|
.map((e) => {
|
|
53
87
|
const values = e.values.map((v) => ` ${v.name} = '${v.name}'`).join(",\n");
|
|
54
88
|
return `export enum ${e.name} {\n${values}\n}`;
|
|
@@ -62,7 +96,7 @@ export class DocGen {
|
|
|
62
96
|
});
|
|
63
97
|
enumFile.save();
|
|
64
98
|
}
|
|
65
|
-
for (const model of
|
|
99
|
+
for (const model of externalModels) {
|
|
66
100
|
const docModel = new DocGenModel(model, servicePrefix);
|
|
67
101
|
serviceIndexExports.push(...docModel.exports);
|
|
68
102
|
docModel.save();
|
|
@@ -77,7 +111,7 @@ export class DocGen {
|
|
|
77
111
|
// Export no index principal: export * as DG_TRANSACTION from './transaction/index'
|
|
78
112
|
const aliasName = `DG_${name.toUpperCase()}`;
|
|
79
113
|
this.externalIndexExports.push(`export * as ${aliasName} from './${servicePrefix}/index'`);
|
|
80
|
-
console.log(`📦 Gerados ${
|
|
114
|
+
console.log(`📦 Gerados ${externalModels.length} models para '${name}'.`);
|
|
81
115
|
}
|
|
82
116
|
build() {
|
|
83
117
|
this.generic.build();
|