@carlonicora/nextjs-jsonapi 1.49.0 → 1.50.0
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/scripts/generate-web-module/generator.d.ts.map +1 -1
- package/dist/scripts/generate-web-module/generator.js +42 -33
- package/dist/scripts/generate-web-module/generator.js.map +1 -1
- package/dist/scripts/generate-web-module/transformers/relationship-resolver.d.ts.map +1 -1
- package/dist/scripts/generate-web-module/transformers/relationship-resolver.js +8 -6
- package/dist/scripts/generate-web-module/transformers/relationship-resolver.js.map +1 -1
- package/dist/scripts/generate-web-module/types/json-schema.interface.d.ts +2 -0
- package/dist/scripts/generate-web-module/types/json-schema.interface.d.ts.map +1 -1
- package/dist/scripts/generate-web-module/types/template-data.interface.d.ts +2 -0
- package/dist/scripts/generate-web-module/types/template-data.interface.d.ts.map +1 -1
- package/dist/scripts/generate-web-module/validators/json-schema-validator.d.ts +1 -1
- package/dist/scripts/generate-web-module/validators/json-schema-validator.d.ts.map +1 -1
- package/dist/scripts/generate-web-module/validators/json-schema-validator.js +74 -25
- package/dist/scripts/generate-web-module/validators/json-schema-validator.js.map +1 -1
- package/package.json +1 -1
- package/scripts/generate-web-module/generator.ts +48 -37
- package/scripts/generate-web-module/transformers/relationship-resolver.ts +8 -6
- package/scripts/generate-web-module/types/json-schema.interface.ts +2 -0
- package/scripts/generate-web-module/types/template-data.interface.ts +2 -0
- package/scripts/generate-web-module/validators/json-schema-validator.ts +79 -27
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../../scripts/generate-web-module/generator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA8BH,OAAO,EAAuC,wBAAwB,EAAwB,MAAM,SAAS,CAAC;AAI9G;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../../scripts/generate-web-module/generator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA8BH,OAAO,EAAuC,wBAAwB,EAAwB,MAAM,SAAS,CAAC;AAI9G;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC,CA0F3F;AAkPD,eAAe,iBAAiB,CAAC"}
|
|
@@ -75,47 +75,56 @@ async function generateWebModule(options) {
|
|
|
75
75
|
console.info("\n⚠️ Validation warnings (non-blocking):");
|
|
76
76
|
validation.warnings.forEach((w) => console.info(` - ${w}`));
|
|
77
77
|
}
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
const templateData = buildTemplateData(schema);
|
|
83
|
-
console.info(` Module: ${templateData.names.pascalCase}`);
|
|
84
|
-
console.info(` Target: ${templateData.targetDir}`);
|
|
85
|
-
console.info(` Extends Content: ${templateData.extendsContent}`);
|
|
86
|
-
console.info(` Fields: ${templateData.fields.length}`);
|
|
87
|
-
console.info(` Relationships: ${templateData.relationships.length}`);
|
|
88
|
-
// Step 3: Generate all files
|
|
89
|
-
console.info("\n📝 Generating files...");
|
|
90
|
-
const files = generateAllFiles(templateData, schema);
|
|
91
|
-
console.info(` Generated ${files.length} file templates`);
|
|
92
|
-
// Step 4: Determine web base path
|
|
78
|
+
const schemas = validation.data;
|
|
79
|
+
const total = schemas.length;
|
|
80
|
+
console.info(` ✅ ${total} schema(s) valid`);
|
|
81
|
+
// Determine web base path once
|
|
93
82
|
const webBasePath = findWebBasePath(jsonPath);
|
|
94
83
|
if (!webBasePath) {
|
|
95
84
|
console.error("\n❌ Could not determine web app base path");
|
|
96
85
|
return false;
|
|
97
86
|
}
|
|
98
87
|
console.info(` Web base path: ${webBasePath}`);
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
console.info(`
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
console.info(
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
88
|
+
for (let i = 0; i < total; i++) {
|
|
89
|
+
const schema = schemas[i];
|
|
90
|
+
console.info(`\n📦 Processing module ${i + 1}/${total}: ${schema.moduleName}`);
|
|
91
|
+
console.info(`${"─".repeat(50)}`);
|
|
92
|
+
// Step 2: Build template data
|
|
93
|
+
console.info("🔨 Building template data...");
|
|
94
|
+
const templateData = buildTemplateData(schema);
|
|
95
|
+
console.info(` Module: ${templateData.names.pascalCase}`);
|
|
96
|
+
console.info(` Target: ${templateData.targetDir}`);
|
|
97
|
+
console.info(` Extends Content: ${templateData.extendsContent}`);
|
|
98
|
+
console.info(` Fields: ${templateData.fields.length}`);
|
|
99
|
+
console.info(` Relationships: ${templateData.relationships.length}`);
|
|
100
|
+
// Step 3: Generate all files
|
|
101
|
+
console.info("\n📝 Generating files...");
|
|
102
|
+
const files = generateAllFiles(templateData, schema);
|
|
103
|
+
console.info(` Generated ${files.length} file templates`);
|
|
104
|
+
// Step 5: Write files
|
|
105
|
+
console.info("\n💾 Writing files...");
|
|
106
|
+
const results = (0, utils_1.writeFiles)(files, { dryRun, force });
|
|
107
|
+
(0, utils_1.printResults)(results);
|
|
108
|
+
// Step 6: Update Bootstrapper (unless --no-register)
|
|
109
|
+
if (!noRegister) {
|
|
110
|
+
console.info("\n🔧 Updating Bootstrapper.ts...");
|
|
111
|
+
const bootstrapResult = (0, utils_1.updateBootstrapper)(templateData, webBasePath, dryRun);
|
|
112
|
+
console.info(` ${bootstrapResult.success ? "✅" : "❌"} ${bootstrapResult.message}`);
|
|
113
|
+
}
|
|
114
|
+
// Step 7: Update i18n for all languages (unless --no-register)
|
|
115
|
+
if (!noRegister) {
|
|
116
|
+
const languages = schema.languages || ["en"];
|
|
117
|
+
console.info(`\n🌐 Updating i18n for ${languages.length} language(s)...`);
|
|
118
|
+
for (const language of languages) {
|
|
119
|
+
const i18nResult = (0, utils_1.updateI18n)(templateData, webBasePath, language, dryRun);
|
|
120
|
+
console.info(` ${i18nResult.success ? "✅" : "❌"} ${i18nResult.message}`);
|
|
121
|
+
}
|
|
116
122
|
}
|
|
123
|
+
console.info(`\n✅ ${schema.moduleName} generation complete!`);
|
|
117
124
|
}
|
|
118
|
-
|
|
125
|
+
// Final summary
|
|
126
|
+
console.info(`\n${"═".repeat(50)}`);
|
|
127
|
+
console.info(`✅ All done! ${total} module(s) generated successfully.`);
|
|
119
128
|
if (dryRun) {
|
|
120
129
|
console.info("\n📝 This was a dry run. No files were actually written.");
|
|
121
130
|
console.info(" Remove --dry-run to generate files.");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../scripts/generate-web-module/generator.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCH,
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../scripts/generate-web-module/generator.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCH,8CA0FC;AAhID,uCAAyB;AACzB,2CAA6B;AAC7B,2CAmBqB;AACrB,8DAA+E;AAC/E,kEAAiE;AACjE,oEAAuF;AACvF,sEAA8E;AAC9E,oEAAsE;AACtE,gFAAoG;AAEpG,mCAAmF;AACnF,8EAAwF;AAExF;;;;;GAKG;AACI,KAAK,UAAU,iBAAiB,CAAC,OAAiC;IACvE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,UAAU,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAEhF,OAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAC/C,OAAO,CAAC,IAAI,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,IAAI,CAAC,eAAe,MAAM,EAAE,CAAC,CAAC;IACtC,OAAO,CAAC,IAAI,CAAC,aAAa,KAAK,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,IAAI,CAAC,mBAAmB,UAAU,EAAE,CAAC,CAAC;IAE9C,+BAA+B;IAC/B,OAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,IAAA,wCAAgB,EAAC,QAAQ,CAAC,CAAC;IAE9C,IAAI,CAAC,IAAA,wCAAgB,EAAC,UAAU,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACxC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QAC1D,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,IAAK,CAAC;IACjC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,QAAQ,KAAK,kBAAkB,CAAC,CAAC;IAE9C,+BAA+B;IAC/B,MAAM,WAAW,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC3D,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,qBAAqB,WAAW,EAAE,CAAC,CAAC;IAEjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,IAAI,KAAK,KAAK,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QAC/E,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAElC,8BAA8B;QAC9B,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC7C,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,cAAc,YAAY,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,cAAc,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,uBAAuB,YAAY,CAAC,cAAc,EAAE,CAAC,CAAC;QACnE,OAAO,CAAC,IAAI,CAAC,cAAc,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,qBAAqB,YAAY,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;QAEvE,6BAA6B;QAC7B,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,gBAAgB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,MAAM,iBAAiB,CAAC,CAAC;QAE5D,sBAAsB;QACtB,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QACrD,IAAA,oBAAY,EAAC,OAAO,CAAC,CAAC;QAEtB,qDAAqD;QACrD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YACjD,MAAM,eAAe,GAAG,IAAA,0BAAkB,EAAC,YAAY,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;YAC9E,OAAO,CAAC,IAAI,CAAC,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACvF,CAAC;QAED,+DAA+D;QAC/D,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,0BAA0B,SAAS,CAAC,MAAM,iBAAiB,CAAC,CAAC;YAC1E,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,MAAM,UAAU,GAAG,IAAA,kBAAU,EAAC,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAC3E,OAAO,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,OAAO,MAAM,CAAC,UAAU,uBAAuB,CAAC,CAAC;IAChE,CAAC;IAED,gBAAgB;IAChB,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,IAAI,CAAC,eAAe,KAAK,oCAAoC,CAAC,CAAC;IAEvE,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;QACzE,OAAO,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,MAA4B;IACrD,MAAM,KAAK,GAAG,IAAA,iCAAc,EAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IACrE,sFAAsF;IACtF,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IACnC,qEAAqE;IACrE,qFAAqF;IACrF,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC;IAC3F,MAAM,cAAc,GAAG,IAAA,sCAAoB,EAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;IAElF,aAAa;IACb,MAAM,SAAS,GAAG,IAAA,wBAAS,EAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAE5D,sFAAsF;IACtF,MAAM,eAAe,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtF,MAAM,MAAM,GAAG,IAAA,oCAAqB,EAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IAEjE,wBAAwB;IACxB,MAAM,aAAa,GAAG,IAAA,4CAAoB,EAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACjE,MAAM,0BAA0B,GAAG,IAAA,8CAAsB,EAAC,aAAa,CAAC,CAAC;IAEzE,gBAAgB;IAChB,MAAM,OAAO,GAAG,IAAA,uCAAqB,EAAC,aAAa,EAAE,cAAc,CAAC,CAAC;IAErE,qBAAqB;IACrB,MAAM,QAAQ,GAAG,IAAA,iCAAgB,EAAC,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;IAEhE,0BAA0B;IAC1B,MAAM,eAAe,GAAG,oBAAoB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAErE,OAAO;QACL,KAAK;QACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,QAAQ,EAAE,MAAM,CAAC,YAAY;QAC7B,SAAS;QACT,eAAe;QACf,cAAc;QACd,MAAM,EAAE,SAAS,EAAE,2CAA2C;QAC9D,aAAa;QACb,QAAQ;QACR,OAAO;QACP,eAAe;QACf,0BAA0B;KAC3B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,MAA4B,EAAE,cAAuB;IACjF,MAAM,UAAU,GAAa,CAAC,GAAG,IAAA,8BAAW,EAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAErE,2BAA2B;IAC3B,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAExB,kCAAkC;IAClC,IAAI,cAAc,EAAE,CAAC;QACnB,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAED,6CAA6C;IAC7C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QAC1B,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9F,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,2BAA2B;IAC3B,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAE1C,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,IAA0B,EAAE,MAA4B;IAChF,MAAM,KAAK,GAAoB,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,IAAA,gCAAc,EAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC;IAExD,uBAAuB;IACvB,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,KAAK,CAAC,SAAS;QACrB,OAAO,EAAE,IAAA,qCAAyB,EAAC,IAAI,CAAC;QACxC,IAAI,EAAE,MAAM;KACb,CAAC,CAAC;IAEH,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,KAAK,CAAC,KAAK;QACjB,OAAO,EAAE,IAAA,iCAAqB,EAAC,IAAI,CAAC;QACpC,IAAI,EAAE,MAAM;KACb,CAAC,CAAC;IAEH,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,KAAK,CAAC,OAAO;QACnB,OAAO,EAAE,IAAA,mCAAuB,EAAC,IAAI,CAAC;QACtC,IAAI,EAAE,MAAM;KACb,CAAC,CAAC;IAEH,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,KAAK,CAAC,MAAM;QAClB,OAAO,EAAE,IAAA,kCAAsB,EAAC,IAAI,CAAC;QACrC,IAAI,EAAE,MAAM;KACb,CAAC,CAAC;IAEH,4BAA4B;IAC5B,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,KAAK,CAAC,MAAM;QAClB,OAAO,EAAE,IAAA,kCAAsB,EAAC,IAAI,CAAC;QACrC,IAAI,EAAE,WAAW;KAClB,CAAC,CAAC;IAEH,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,KAAK,CAAC,OAAO;QACnB,OAAO,EAAE,IAAA,mCAAuB,EAAC,IAAI,CAAC;QACtC,IAAI,EAAE,WAAW;KAClB,CAAC,CAAC;IAEH,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,KAAK,CAAC,QAAQ;QACpB,OAAO,EAAE,IAAA,oCAAwB,EAAC,IAAI,CAAC;QACvC,IAAI,EAAE,WAAW;KAClB,CAAC,CAAC;IAEH,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,KAAK,CAAC,aAAa;QACzB,OAAO,EAAE,IAAA,yCAA6B,EAAC,IAAI,CAAC;QAC5C,IAAI,EAAE,WAAW;KAClB,CAAC,CAAC;IAEH,iCAAiC;IACjC,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,IAAA,gCAAoB,EAAC,IAAI,CAAC;QACnC,IAAI,EAAE,WAAW;KAClB,CAAC,CAAC;IAEH,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,KAAK,CAAC,OAAO;QACnB,OAAO,EAAE,IAAA,mCAAuB,EAAC,IAAI,CAAC;QACtC,IAAI,EAAE,WAAW;KAClB,CAAC,CAAC;IAEH,uDAAuD;IACvD,MAAM,eAAe,GAAG,IAAA,mCAAuB,EAAC,IAAI,CAAC,CAAC;IACtD,IAAI,eAAe,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,KAAK,CAAC,OAAO;YACnB,OAAO,EAAE,eAAe;YACxB,IAAI,EAAE,WAAW;SAClB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,KAAK,CAAC,SAAS;QACrB,OAAO,EAAE,IAAA,qCAAyB,EAAC,IAAI,CAAC;QACxC,IAAI,EAAE,WAAW;KAClB,CAAC,CAAC;IAEH,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,KAAK,CAAC,aAAa;QACzB,OAAO,EAAE,IAAA,yCAA6B,EAAC,IAAI,CAAC;QAC5C,IAAI,EAAE,WAAW;KAClB,CAAC,CAAC;IAEH,4BAA4B;IAC5B,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,KAAK,CAAC,OAAO;QACnB,OAAO,EAAE,IAAA,mCAAuB,EAAC,IAAI,CAAC;QACtC,IAAI,EAAE,SAAS;KAChB,CAAC,CAAC;IAEH,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,KAAK,CAAC,SAAS;QACrB,OAAO,EAAE,IAAA,qCAAyB,EAAC,IAAI,CAAC;QACxC,IAAI,EAAE,MAAM;KACb,CAAC,CAAC;IAEH,kBAAkB;IAClB,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,KAAK,CAAC,MAAM;QAClB,OAAO,EAAE,IAAA,kCAAsB,EAAC,IAAI,CAAC;QACrC,IAAI,EAAE,QAAQ;KACf,CAAC,CAAC;IAEH,kBAAkB;IAClB,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,KAAK,CAAC,QAAQ;QACpB,OAAO,EAAE,IAAA,oCAAwB,EAAC,IAAI,CAAC;QACvC,IAAI,EAAE,MAAM;KACb,CAAC,CAAC;IAEH,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,KAAK,CAAC,UAAU;QACtB,OAAO,EAAE,IAAA,sCAA0B,EAAC,IAAI,CAAC;QACzC,IAAI,EAAE,MAAM;KACb,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,QAAgB;IACvC,6DAA6D;IAC7D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,sCAAsC;IACtC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC;QAC9C,OAAO,GAAG,CAAC;IACb,CAAC;IAED,4CAA4C;IAC5C,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC;QACpD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC;IAED,8BAA8B;IAC9B,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACxC,6CAA6C;QAC7C,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC;gBAClD,OAAO,OAAO,CAAC;YACjB,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACrC,IAAI,MAAM,KAAK,OAAO;gBAAE,MAAM;YAC9B,OAAO,GAAG,MAAM,CAAC;QACnB,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,kBAAe,iBAAiB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relationship-resolver.d.ts","sourceRoot":"","sources":["../../../../scripts/generate-web-module/transformers/relationship-resolver.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAiB,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAKlH;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,2CAA2C,CAAC;AACtF,eAAO,MAAM,uBAAuB,qCAAqC,CAAC;AAE1E;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,0BAA0B,GAAG,oBAAoB,
|
|
1
|
+
{"version":3,"file":"relationship-resolver.d.ts","sourceRoot":"","sources":["../../../../scripts/generate-web-module/transformers/relationship-resolver.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAiB,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAKlH;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,2CAA2C,CAAC;AACtF,eAAO,MAAM,uBAAuB,qCAAqC,CAAC;AAE1E;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,0BAA0B,GAAG,oBAAoB,CAwFzF;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,0BAA0B,EAAE,GAAG,oBAAoB,EAAE,CAExG;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAO/D;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,aAAa,EAAE,oBAAoB,EAAE,GAAG,yBAAyB,EAAE,CAUzG;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,CAalF;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAyB5F;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAoBjG;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,oBAAoB,GAAG,MAAM,CAMnE"}
|
|
@@ -43,7 +43,7 @@ function isFoundationImport(directory) {
|
|
|
43
43
|
*/
|
|
44
44
|
function resolveRelationship(rel) {
|
|
45
45
|
const isAuthor = rel.variant === field_mapping_types_1.AUTHOR_VARIANT;
|
|
46
|
-
const effectiveName = rel.variant || rel.name;
|
|
46
|
+
const effectiveName = rel.alias || rel.variant || rel.name;
|
|
47
47
|
const effectiveNameLower = (0, name_transformer_1.toCamelCase)(effectiveName);
|
|
48
48
|
const modelKebab = (0, name_transformer_1.toKebabCase)(rel.name);
|
|
49
49
|
// Form field ID
|
|
@@ -60,13 +60,14 @@ function resolveRelationship(rel) {
|
|
|
60
60
|
// Selector component name
|
|
61
61
|
// Foundation components use MultiSelect, generated modules use MultiSelector
|
|
62
62
|
let selectorComponent;
|
|
63
|
+
const selectorBaseName = rel.alias || rel.name;
|
|
63
64
|
if (rel.single) {
|
|
64
|
-
selectorComponent = `${
|
|
65
|
+
selectorComponent = `${selectorBaseName}Selector`;
|
|
65
66
|
}
|
|
66
67
|
else {
|
|
67
68
|
selectorComponent = isFoundationImport(rel.directory)
|
|
68
|
-
? `${
|
|
69
|
-
: `${
|
|
69
|
+
? `${selectorBaseName}MultiSelect`
|
|
70
|
+
: `${selectorBaseName}MultiSelector`;
|
|
70
71
|
}
|
|
71
72
|
// Zod schema
|
|
72
73
|
let zodSchema;
|
|
@@ -108,6 +109,7 @@ function resolveRelationship(rel) {
|
|
|
108
109
|
return {
|
|
109
110
|
name: rel.name,
|
|
110
111
|
variant: rel.variant,
|
|
112
|
+
alias: rel.alias,
|
|
111
113
|
directory: rel.directory,
|
|
112
114
|
single: rel.single,
|
|
113
115
|
nullable: rel.nullable,
|
|
@@ -157,7 +159,7 @@ function mapDirectoryToWebPath(directory) {
|
|
|
157
159
|
*/
|
|
158
160
|
function generateServiceMethods(relationships) {
|
|
159
161
|
return relationships.map((rel) => {
|
|
160
|
-
const effectiveName = rel.variant || rel.name;
|
|
162
|
+
const effectiveName = rel.alias || rel.variant || rel.name;
|
|
161
163
|
return {
|
|
162
164
|
methodName: `findManyBy${(0, name_transformer_1.toPascalCase)(effectiveName)}`,
|
|
163
165
|
paramName: `${(0, name_transformer_1.toCamelCase)(effectiveName)}Id`,
|
|
@@ -226,7 +228,7 @@ function getRelationshipFormJsx(rel, moduleName) {
|
|
|
226
228
|
* @returns Expression for default value
|
|
227
229
|
*/
|
|
228
230
|
function getDefaultValueExpression(rel, modelVarName) {
|
|
229
|
-
const propertyName = rel.variant ? (0, name_transformer_1.toCamelCase)(rel.variant) : (0, name_transformer_1.toCamelCase)(rel.name);
|
|
231
|
+
const propertyName = rel.alias ? (0, name_transformer_1.toCamelCase)(rel.alias) : rel.variant ? (0, name_transformer_1.toCamelCase)(rel.variant) : (0, name_transformer_1.toCamelCase)(rel.name);
|
|
230
232
|
const pluralPropertyName = (0, name_transformer_1.pluralize)(propertyName);
|
|
231
233
|
if (rel.single) {
|
|
232
234
|
if (rel.variant === field_mapping_types_1.AUTHOR_VARIANT) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relationship-resolver.js","sourceRoot":"","sources":["../../../../scripts/generate-web-module/transformers/relationship-resolver.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAsBH,gDAEC;AAQD,
|
|
1
|
+
{"version":3,"file":"relationship-resolver.js","sourceRoot":"","sources":["../../../../scripts/generate-web-module/transformers/relationship-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,8 @@ export interface JsonFieldDefinition {
|
|
|
19
19
|
export interface JsonRelationshipDefinition {
|
|
20
20
|
name: string;
|
|
21
21
|
variant?: string;
|
|
22
|
+
/** PascalCase alias for disambiguation when multiple relationships target the same entity (e.g., "DestinedPerson") */
|
|
23
|
+
alias?: string;
|
|
22
24
|
directory: string;
|
|
23
25
|
single: boolean;
|
|
24
26
|
relationshipName: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-schema.interface.d.ts","sourceRoot":"","sources":["../../../../scripts/generate-web-module/types/json-schema.interface.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,mBAAmB,EAAE,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,aAAa,EAAE,0BAA0B,EAAE,CAAC;IAC5C,oGAAoG;IACpG,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B"}
|
|
1
|
+
{"version":3,"file":"json-schema.interface.d.ts","sourceRoot":"","sources":["../../../../scripts/generate-web-module/types/json-schema.interface.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sHAAsH;IACtH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,mBAAmB,EAAE,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,aAAa,EAAE,0BAA0B,EAAE,CAAC;IAC5C,oGAAoG;IACpG,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B"}
|
|
@@ -39,6 +39,8 @@ export type FormComponentType = "FormInput" | "FormTextarea" | "BlockNoteEditor"
|
|
|
39
39
|
export interface FrontendRelationship {
|
|
40
40
|
name: string;
|
|
41
41
|
variant?: string;
|
|
42
|
+
/** PascalCase alias for disambiguation when multiple relationships target the same entity */
|
|
43
|
+
alias?: string;
|
|
42
44
|
directory: string;
|
|
43
45
|
single: boolean;
|
|
44
46
|
nullable: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-data.interface.d.ts","sourceRoot":"","sources":["../../../../scripts/generate-web-module/types/template-data.interface.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,iBAAiB,CAAC;IACjC,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,GACzB,WAAW,GACX,cAAc,GACd,iBAAiB,GACjB,UAAU,GACV,YAAY,GACZ,iBAAiB,CAAC;AAEtB;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IAEtB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CACZ,MAAM,EACN;QACE,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;KACf,CACF,CAAC;IACF,aAAa,EAAE,MAAM,CACnB,MAAM,EACN;QACE,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CACb,MAAM,EACN;YACE,KAAK,EAAE,MAAM,CAAC;YACd,WAAW,EAAE,MAAM,CAAC;YACpB,KAAK,EAAE,MAAM,CAAC;SACf,CACF,CAAC;KACH,CACF,CAAC;IACF,IAAI,EAAE;QACJ,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAE/B,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB,SAAS,EAAE,MAAM,EAAE,CAAC;IAEpB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IAEnC,KAAK,EAAE,cAAc,CAAC;IAGtB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,uGAAuG;IACvG,eAAe,EAAE,MAAM,CAAC;IAGxB,cAAc,EAAE,OAAO,CAAC;IAGxB,MAAM,EAAE,aAAa,EAAE,CAAC;IAGxB,aAAa,EAAE,oBAAoB,EAAE,CAAC;IAGtC,QAAQ,EAAE,UAAU,CAAC;IAGrB,OAAO,EAAE,gBAAgB,CAAC;IAG1B,eAAe,EAAE,MAAM,EAAE,CAAC;IAG1B,0BAA0B,EAAE,yBAAyB,EAAE,CAAC;CACzD;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,eAAe,CAAC;CACvF"}
|
|
1
|
+
{"version":3,"file":"template-data.interface.d.ts","sourceRoot":"","sources":["../../../../scripts/generate-web-module/types/template-data.interface.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,7 +28,7 @@ export declare function formatValidationErrors(errors: ValidationError[]): strin
|
|
|
28
28
|
* Validation result interface
|
|
29
29
|
*/
|
|
30
30
|
export interface ValidationResult {
|
|
31
|
-
data: JsonModuleDefinition | null;
|
|
31
|
+
data: JsonModuleDefinition[] | null;
|
|
32
32
|
errors: string[];
|
|
33
33
|
warnings: string[];
|
|
34
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-schema-validator.d.ts","sourceRoot":"","sources":["../../../../scripts/generate-web-module/validators/json-schema-validator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAEtE,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;CAC/B;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,GAAG,GAAG,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"json-schema-validator.d.ts","sourceRoot":"","sources":["../../../../scripts/generate-web-module/validators/json-schema-validator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAEtE,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;CAC/B;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,GAAG,GAAG,eAAe,EAAE,CAoNjE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,CA6BxE;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,oBAAoB,EAAE,GAAG,IAAI,CAAC;IACpC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAkEnE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAElE"}
|
|
@@ -160,6 +160,51 @@ function validateJsonSchema(schema) {
|
|
|
160
160
|
severity: "warning",
|
|
161
161
|
});
|
|
162
162
|
}
|
|
163
|
+
// Validate alias format if provided (must be PascalCase)
|
|
164
|
+
if (rel.alias && !/^[A-Z][a-zA-Z0-9]*$/.test(rel.alias)) {
|
|
165
|
+
errors.push({
|
|
166
|
+
field: `relationships[${index}].alias`,
|
|
167
|
+
message: 'Alias must be PascalCase (e.g., "DestinedTo", "ReceivedBy")',
|
|
168
|
+
severity: "error",
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
// Check for duplicate relationship targets without alias
|
|
173
|
+
const nameCount = new Map();
|
|
174
|
+
schema.relationships.forEach((rel, index) => {
|
|
175
|
+
const name = rel.name;
|
|
176
|
+
if (!nameCount.has(name)) {
|
|
177
|
+
nameCount.set(name, []);
|
|
178
|
+
}
|
|
179
|
+
nameCount.get(name).push(index);
|
|
180
|
+
});
|
|
181
|
+
for (const [name, indices] of nameCount.entries()) {
|
|
182
|
+
if (indices.length > 1) {
|
|
183
|
+
for (const idx of indices) {
|
|
184
|
+
const rel = schema.relationships[idx];
|
|
185
|
+
if (!rel.alias) {
|
|
186
|
+
errors.push({
|
|
187
|
+
field: `relationships[${idx}].alias`,
|
|
188
|
+
message: `Relationship to "${name}" appears ${indices.length} times. All instances must have an "alias" field to avoid key collisions. Example: "alias": "DestinedTo"`,
|
|
189
|
+
severity: "error",
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
// Check for duplicate aliases
|
|
196
|
+
const aliasSet = new Set();
|
|
197
|
+
schema.relationships.forEach((rel, index) => {
|
|
198
|
+
if (rel.alias) {
|
|
199
|
+
if (aliasSet.has(rel.alias)) {
|
|
200
|
+
errors.push({
|
|
201
|
+
field: `relationships[${index}].alias`,
|
|
202
|
+
message: `Duplicate alias "${rel.alias}". Each alias must be unique.`,
|
|
203
|
+
severity: "error",
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
aliasSet.add(rel.alias);
|
|
207
|
+
}
|
|
163
208
|
});
|
|
164
209
|
}
|
|
165
210
|
return errors;
|
|
@@ -230,32 +275,36 @@ function parseAndValidate(filePath) {
|
|
|
230
275
|
result.errors.push(`Invalid JSON: ${e.message}`);
|
|
231
276
|
return result;
|
|
232
277
|
}
|
|
233
|
-
//
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
}
|
|
239
|
-
if (schema.length > 1) {
|
|
240
|
-
result.warnings.push(`JSON file contains ${schema.length} definitions. Only processing the first one.`);
|
|
241
|
-
}
|
|
242
|
-
schema = schema[0];
|
|
278
|
+
// Normalize to array
|
|
279
|
+
const schemas = Array.isArray(schema) ? schema : [schema];
|
|
280
|
+
if (schemas.length === 0) {
|
|
281
|
+
result.errors.push("JSON array is empty");
|
|
282
|
+
return result;
|
|
243
283
|
}
|
|
244
|
-
// Validate
|
|
245
|
-
const
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
const
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
284
|
+
// Validate each definition
|
|
285
|
+
const validSchemas = [];
|
|
286
|
+
for (let i = 0; i < schemas.length; i++) {
|
|
287
|
+
const item = schemas[i];
|
|
288
|
+
const prefix = schemas.length > 1 ? `[${i}] ` : "";
|
|
289
|
+
const validationErrors = validateJsonSchema(item);
|
|
290
|
+
let hasErrors = false;
|
|
291
|
+
validationErrors.forEach((ve) => {
|
|
292
|
+
const msg = `${prefix}${ve.field}: ${ve.message}`;
|
|
293
|
+
if (ve.severity === "error") {
|
|
294
|
+
result.errors.push(msg);
|
|
295
|
+
hasErrors = true;
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
result.warnings.push(msg);
|
|
299
|
+
}
|
|
300
|
+
});
|
|
301
|
+
if (!hasErrors) {
|
|
302
|
+
validSchemas.push(item);
|
|
254
303
|
}
|
|
255
|
-
}
|
|
256
|
-
// Only set data if
|
|
257
|
-
if (result.errors.length === 0) {
|
|
258
|
-
result.data =
|
|
304
|
+
}
|
|
305
|
+
// Only set data if at least one schema passed validation
|
|
306
|
+
if (result.errors.length === 0 && validSchemas.length > 0) {
|
|
307
|
+
result.data = validSchemas;
|
|
259
308
|
}
|
|
260
309
|
return result;
|
|
261
310
|
}
|
|
@@ -263,6 +312,6 @@ function parseAndValidate(filePath) {
|
|
|
263
312
|
* Check if validation result passed (no errors)
|
|
264
313
|
*/
|
|
265
314
|
function validationPassed(result) {
|
|
266
|
-
return result.errors.length === 0 && result.data !== null;
|
|
315
|
+
return result.errors.length === 0 && result.data !== null && result.data.length > 0;
|
|
267
316
|
}
|
|
268
317
|
//# sourceMappingURL=json-schema-validator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-schema-validator.js","sourceRoot":"","sources":["../../../../scripts/generate-web-module/validators/json-schema-validator.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAgBH,
|
|
1
|
+
{"version":3,"file":"json-schema-validator.js","sourceRoot":"","sources":["../../../../scripts/generate-web-module/validators/json-schema-validator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -66,24 +66,11 @@ export async function generateWebModule(options: GenerateWebModuleOptions): Prom
|
|
|
66
66
|
validation.warnings.forEach((w) => console.info(` - ${w}`));
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
const templateData = buildTemplateData(schema);
|
|
75
|
-
console.info(` Module: ${templateData.names.pascalCase}`);
|
|
76
|
-
console.info(` Target: ${templateData.targetDir}`);
|
|
77
|
-
console.info(` Extends Content: ${templateData.extendsContent}`);
|
|
78
|
-
console.info(` Fields: ${templateData.fields.length}`);
|
|
79
|
-
console.info(` Relationships: ${templateData.relationships.length}`);
|
|
80
|
-
|
|
81
|
-
// Step 3: Generate all files
|
|
82
|
-
console.info("\n📝 Generating files...");
|
|
83
|
-
const files = generateAllFiles(templateData, schema);
|
|
84
|
-
console.info(` Generated ${files.length} file templates`);
|
|
85
|
-
|
|
86
|
-
// Step 4: Determine web base path
|
|
69
|
+
const schemas = validation.data!;
|
|
70
|
+
const total = schemas.length;
|
|
71
|
+
console.info(` ✅ ${total} schema(s) valid`);
|
|
72
|
+
|
|
73
|
+
// Determine web base path once
|
|
87
74
|
const webBasePath = findWebBasePath(jsonPath);
|
|
88
75
|
if (!webBasePath) {
|
|
89
76
|
console.error("\n❌ Could not determine web app base path");
|
|
@@ -91,29 +78,53 @@ export async function generateWebModule(options: GenerateWebModuleOptions): Prom
|
|
|
91
78
|
}
|
|
92
79
|
console.info(` Web base path: ${webBasePath}`);
|
|
93
80
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
console.info(`
|
|
104
|
-
|
|
81
|
+
for (let i = 0; i < total; i++) {
|
|
82
|
+
const schema = schemas[i];
|
|
83
|
+
console.info(`\n📦 Processing module ${i + 1}/${total}: ${schema.moduleName}`);
|
|
84
|
+
console.info(`${"─".repeat(50)}`);
|
|
85
|
+
|
|
86
|
+
// Step 2: Build template data
|
|
87
|
+
console.info("🔨 Building template data...");
|
|
88
|
+
const templateData = buildTemplateData(schema);
|
|
89
|
+
console.info(` Module: ${templateData.names.pascalCase}`);
|
|
90
|
+
console.info(` Target: ${templateData.targetDir}`);
|
|
91
|
+
console.info(` Extends Content: ${templateData.extendsContent}`);
|
|
92
|
+
console.info(` Fields: ${templateData.fields.length}`);
|
|
93
|
+
console.info(` Relationships: ${templateData.relationships.length}`);
|
|
94
|
+
|
|
95
|
+
// Step 3: Generate all files
|
|
96
|
+
console.info("\n📝 Generating files...");
|
|
97
|
+
const files = generateAllFiles(templateData, schema);
|
|
98
|
+
console.info(` Generated ${files.length} file templates`);
|
|
99
|
+
|
|
100
|
+
// Step 5: Write files
|
|
101
|
+
console.info("\n💾 Writing files...");
|
|
102
|
+
const results = writeFiles(files, { dryRun, force });
|
|
103
|
+
printResults(results);
|
|
104
|
+
|
|
105
|
+
// Step 6: Update Bootstrapper (unless --no-register)
|
|
106
|
+
if (!noRegister) {
|
|
107
|
+
console.info("\n🔧 Updating Bootstrapper.ts...");
|
|
108
|
+
const bootstrapResult = updateBootstrapper(templateData, webBasePath, dryRun);
|
|
109
|
+
console.info(` ${bootstrapResult.success ? "✅" : "❌"} ${bootstrapResult.message}`);
|
|
110
|
+
}
|
|
105
111
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
112
|
+
// Step 7: Update i18n for all languages (unless --no-register)
|
|
113
|
+
if (!noRegister) {
|
|
114
|
+
const languages = schema.languages || ["en"];
|
|
115
|
+
console.info(`\n🌐 Updating i18n for ${languages.length} language(s)...`);
|
|
116
|
+
for (const language of languages) {
|
|
117
|
+
const i18nResult = updateI18n(templateData, webBasePath, language, dryRun);
|
|
118
|
+
console.info(` ${i18nResult.success ? "✅" : "❌"} ${i18nResult.message}`);
|
|
119
|
+
}
|
|
113
120
|
}
|
|
121
|
+
|
|
122
|
+
console.info(`\n✅ ${schema.moduleName} generation complete!`);
|
|
114
123
|
}
|
|
115
124
|
|
|
116
|
-
|
|
125
|
+
// Final summary
|
|
126
|
+
console.info(`\n${"═".repeat(50)}`);
|
|
127
|
+
console.info(`✅ All done! ${total} module(s) generated successfully.`);
|
|
117
128
|
|
|
118
129
|
if (dryRun) {
|
|
119
130
|
console.info("\n📝 This was a dry run. No files were actually written.");
|
|
@@ -37,7 +37,7 @@ export function isFoundationImport(directory: string): boolean {
|
|
|
37
37
|
*/
|
|
38
38
|
export function resolveRelationship(rel: JsonRelationshipDefinition): FrontendRelationship {
|
|
39
39
|
const isAuthor = rel.variant === AUTHOR_VARIANT;
|
|
40
|
-
const effectiveName = rel.variant || rel.name;
|
|
40
|
+
const effectiveName = rel.alias || rel.variant || rel.name;
|
|
41
41
|
const effectiveNameLower = toCamelCase(effectiveName);
|
|
42
42
|
const modelKebab = toKebabCase(rel.name);
|
|
43
43
|
|
|
@@ -56,12 +56,13 @@ export function resolveRelationship(rel: JsonRelationshipDefinition): FrontendRe
|
|
|
56
56
|
// Selector component name
|
|
57
57
|
// Foundation components use MultiSelect, generated modules use MultiSelector
|
|
58
58
|
let selectorComponent: string;
|
|
59
|
+
const selectorBaseName = rel.alias || rel.name;
|
|
59
60
|
if (rel.single) {
|
|
60
|
-
selectorComponent = `${
|
|
61
|
+
selectorComponent = `${selectorBaseName}Selector`;
|
|
61
62
|
} else {
|
|
62
63
|
selectorComponent = isFoundationImport(rel.directory)
|
|
63
|
-
? `${
|
|
64
|
-
: `${
|
|
64
|
+
? `${selectorBaseName}MultiSelect`
|
|
65
|
+
: `${selectorBaseName}MultiSelector`;
|
|
65
66
|
}
|
|
66
67
|
|
|
67
68
|
// Zod schema
|
|
@@ -105,6 +106,7 @@ export function resolveRelationship(rel: JsonRelationshipDefinition): FrontendRe
|
|
|
105
106
|
return {
|
|
106
107
|
name: rel.name,
|
|
107
108
|
variant: rel.variant,
|
|
109
|
+
alias: rel.alias,
|
|
108
110
|
directory: rel.directory,
|
|
109
111
|
single: rel.single,
|
|
110
112
|
nullable: rel.nullable,
|
|
@@ -157,7 +159,7 @@ export function mapDirectoryToWebPath(directory: string): string {
|
|
|
157
159
|
*/
|
|
158
160
|
export function generateServiceMethods(relationships: FrontendRelationship[]): RelationshipServiceMethod[] {
|
|
159
161
|
return relationships.map((rel) => {
|
|
160
|
-
const effectiveName = rel.variant || rel.name;
|
|
162
|
+
const effectiveName = rel.alias || rel.variant || rel.name;
|
|
161
163
|
return {
|
|
162
164
|
methodName: `findManyBy${toPascalCase(effectiveName)}`,
|
|
163
165
|
paramName: `${toCamelCase(effectiveName)}Id`,
|
|
@@ -230,7 +232,7 @@ export function getRelationshipFormJsx(rel: FrontendRelationship, moduleName: st
|
|
|
230
232
|
* @returns Expression for default value
|
|
231
233
|
*/
|
|
232
234
|
export function getDefaultValueExpression(rel: FrontendRelationship, modelVarName: string): string {
|
|
233
|
-
const propertyName = rel.variant ? toCamelCase(rel.variant) : toCamelCase(rel.name);
|
|
235
|
+
const propertyName = rel.alias ? toCamelCase(rel.alias) : rel.variant ? toCamelCase(rel.variant) : toCamelCase(rel.name);
|
|
234
236
|
const pluralPropertyName = pluralize(propertyName);
|
|
235
237
|
|
|
236
238
|
if (rel.single) {
|
|
@@ -21,6 +21,8 @@ export interface JsonFieldDefinition {
|
|
|
21
21
|
export interface JsonRelationshipDefinition {
|
|
22
22
|
name: string;
|
|
23
23
|
variant?: string;
|
|
24
|
+
/** PascalCase alias for disambiguation when multiple relationships target the same entity (e.g., "DestinedPerson") */
|
|
25
|
+
alias?: string;
|
|
24
26
|
directory: string;
|
|
25
27
|
single: boolean;
|
|
26
28
|
relationshipName: string; // Backend-specific, ignored in frontend
|
|
@@ -49,6 +49,8 @@ export type FormComponentType =
|
|
|
49
49
|
export interface FrontendRelationship {
|
|
50
50
|
name: string; // e.g., "User"
|
|
51
51
|
variant?: string; // e.g., "Author"
|
|
52
|
+
/** PascalCase alias for disambiguation when multiple relationships target the same entity */
|
|
53
|
+
alias?: string;
|
|
52
54
|
directory: string; // e.g., "foundations"
|
|
53
55
|
single: boolean;
|
|
54
56
|
nullable: boolean;
|
|
@@ -178,6 +178,55 @@ export function validateJsonSchema(schema: any): ValidationError[] {
|
|
|
178
178
|
severity: "warning",
|
|
179
179
|
});
|
|
180
180
|
}
|
|
181
|
+
|
|
182
|
+
// Validate alias format if provided (must be PascalCase)
|
|
183
|
+
if (rel.alias && !/^[A-Z][a-zA-Z0-9]*$/.test(rel.alias)) {
|
|
184
|
+
errors.push({
|
|
185
|
+
field: `relationships[${index}].alias`,
|
|
186
|
+
message: 'Alias must be PascalCase (e.g., "DestinedTo", "ReceivedBy")',
|
|
187
|
+
severity: "error",
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
// Check for duplicate relationship targets without alias
|
|
193
|
+
const nameCount = new Map<string, number[]>();
|
|
194
|
+
schema.relationships.forEach((rel: any, index: number) => {
|
|
195
|
+
const name = rel.name;
|
|
196
|
+
if (!nameCount.has(name)) {
|
|
197
|
+
nameCount.set(name, []);
|
|
198
|
+
}
|
|
199
|
+
nameCount.get(name)!.push(index);
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
for (const [name, indices] of nameCount.entries()) {
|
|
203
|
+
if (indices.length > 1) {
|
|
204
|
+
for (const idx of indices) {
|
|
205
|
+
const rel = schema.relationships[idx];
|
|
206
|
+
if (!rel.alias) {
|
|
207
|
+
errors.push({
|
|
208
|
+
field: `relationships[${idx}].alias`,
|
|
209
|
+
message: `Relationship to "${name}" appears ${indices.length} times. All instances must have an "alias" field to avoid key collisions. Example: "alias": "DestinedTo"`,
|
|
210
|
+
severity: "error",
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// Check for duplicate aliases
|
|
218
|
+
const aliasSet = new Set<string>();
|
|
219
|
+
schema.relationships.forEach((rel: any, index: number) => {
|
|
220
|
+
if (rel.alias) {
|
|
221
|
+
if (aliasSet.has(rel.alias)) {
|
|
222
|
+
errors.push({
|
|
223
|
+
field: `relationships[${index}].alias`,
|
|
224
|
+
message: `Duplicate alias "${rel.alias}". Each alias must be unique.`,
|
|
225
|
+
severity: "error",
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
aliasSet.add(rel.alias);
|
|
229
|
+
}
|
|
181
230
|
});
|
|
182
231
|
}
|
|
183
232
|
|
|
@@ -225,7 +274,7 @@ export function formatValidationErrors(errors: ValidationError[]): string {
|
|
|
225
274
|
* Validation result interface
|
|
226
275
|
*/
|
|
227
276
|
export interface ValidationResult {
|
|
228
|
-
data: JsonModuleDefinition | null;
|
|
277
|
+
data: JsonModuleDefinition[] | null;
|
|
229
278
|
errors: string[];
|
|
230
279
|
warnings: string[];
|
|
231
280
|
}
|
|
@@ -266,36 +315,39 @@ export function parseAndValidate(filePath: string): ValidationResult {
|
|
|
266
315
|
return result;
|
|
267
316
|
}
|
|
268
317
|
|
|
269
|
-
//
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
}
|
|
275
|
-
if (schema.length > 1) {
|
|
276
|
-
result.warnings.push(
|
|
277
|
-
`JSON file contains ${schema.length} definitions. Only processing the first one.`
|
|
278
|
-
);
|
|
279
|
-
}
|
|
280
|
-
schema = schema[0];
|
|
318
|
+
// Normalize to array
|
|
319
|
+
const schemas: any[] = Array.isArray(schema) ? schema : [schema];
|
|
320
|
+
if (schemas.length === 0) {
|
|
321
|
+
result.errors.push("JSON array is empty");
|
|
322
|
+
return result;
|
|
281
323
|
}
|
|
282
324
|
|
|
283
|
-
// Validate
|
|
284
|
-
const
|
|
325
|
+
// Validate each definition
|
|
326
|
+
const validSchemas: JsonModuleDefinition[] = [];
|
|
327
|
+
for (let i = 0; i < schemas.length; i++) {
|
|
328
|
+
const item = schemas[i];
|
|
329
|
+
const prefix = schemas.length > 1 ? `[${i}] ` : "";
|
|
330
|
+
const validationErrors = validateJsonSchema(item);
|
|
331
|
+
|
|
332
|
+
let hasErrors = false;
|
|
333
|
+
validationErrors.forEach((ve) => {
|
|
334
|
+
const msg = `${prefix}${ve.field}: ${ve.message}`;
|
|
335
|
+
if (ve.severity === "error") {
|
|
336
|
+
result.errors.push(msg);
|
|
337
|
+
hasErrors = true;
|
|
338
|
+
} else {
|
|
339
|
+
result.warnings.push(msg);
|
|
340
|
+
}
|
|
341
|
+
});
|
|
285
342
|
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
const msg = `${ve.field}: ${ve.message}`;
|
|
289
|
-
if (ve.severity === "error") {
|
|
290
|
-
result.errors.push(msg);
|
|
291
|
-
} else {
|
|
292
|
-
result.warnings.push(msg);
|
|
343
|
+
if (!hasErrors) {
|
|
344
|
+
validSchemas.push(item as JsonModuleDefinition);
|
|
293
345
|
}
|
|
294
|
-
}
|
|
346
|
+
}
|
|
295
347
|
|
|
296
|
-
// Only set data if
|
|
297
|
-
if (result.errors.length === 0) {
|
|
298
|
-
result.data =
|
|
348
|
+
// Only set data if at least one schema passed validation
|
|
349
|
+
if (result.errors.length === 0 && validSchemas.length > 0) {
|
|
350
|
+
result.data = validSchemas;
|
|
299
351
|
}
|
|
300
352
|
|
|
301
353
|
return result;
|
|
@@ -305,5 +357,5 @@ export function parseAndValidate(filePath: string): ValidationResult {
|
|
|
305
357
|
* Check if validation result passed (no errors)
|
|
306
358
|
*/
|
|
307
359
|
export function validationPassed(result: ValidationResult): boolean {
|
|
308
|
-
return result.errors.length === 0 && result.data !== null;
|
|
360
|
+
return result.errors.length === 0 && result.data !== null && result.data.length > 0;
|
|
309
361
|
}
|