@carlonicora/nextjs-jsonapi 1.2.0 → 1.3.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 +15 -0
- package/dist/scripts/generate-web-module/generator.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/generator.js +320 -0
- package/dist/scripts/generate-web-module/generator.js.map +1 -0
- package/dist/scripts/generate-web-module/index.d.ts +16 -0
- package/dist/scripts/generate-web-module/index.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/index.js +80 -0
- package/dist/scripts/generate-web-module/index.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/container.template.d.ts +14 -0
- package/dist/scripts/generate-web-module/templates/components/container.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/container.template.js +124 -0
- package/dist/scripts/generate-web-module/templates/components/container.template.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/content.template.d.ts +15 -0
- package/dist/scripts/generate-web-module/templates/components/content.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/content.template.js +39 -0
- package/dist/scripts/generate-web-module/templates/components/content.template.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/deleter.template.d.ts +14 -0
- package/dist/scripts/generate-web-module/templates/components/deleter.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/deleter.template.js +51 -0
- package/dist/scripts/generate-web-module/templates/components/deleter.template.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/details.template.d.ts +14 -0
- package/dist/scripts/generate-web-module/templates/components/details.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/details.template.js +109 -0
- package/dist/scripts/generate-web-module/templates/components/details.template.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/editor.template.d.ts +14 -0
- package/dist/scripts/generate-web-module/templates/components/editor.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/editor.template.js +459 -0
- package/dist/scripts/generate-web-module/templates/components/editor.template.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/index.d.ts +15 -0
- package/dist/scripts/generate-web-module/templates/components/index.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/index.js +29 -0
- package/dist/scripts/generate-web-module/templates/components/index.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/list-container.template.d.ts +14 -0
- package/dist/scripts/generate-web-module/templates/components/list-container.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/list-container.template.js +30 -0
- package/dist/scripts/generate-web-module/templates/components/list-container.template.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/list.template.d.ts +14 -0
- package/dist/scripts/generate-web-module/templates/components/list.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/list.template.js +84 -0
- package/dist/scripts/generate-web-module/templates/components/list.template.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/multi-selector.template.d.ts +14 -0
- package/dist/scripts/generate-web-module/templates/components/multi-selector.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/multi-selector.template.js +184 -0
- package/dist/scripts/generate-web-module/templates/components/multi-selector.template.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/selector.template.d.ts +14 -0
- package/dist/scripts/generate-web-module/templates/components/selector.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/components/selector.template.js +199 -0
- package/dist/scripts/generate-web-module/templates/components/selector.template.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/context.template.d.ts +14 -0
- package/dist/scripts/generate-web-module/templates/context.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/context.template.js +121 -0
- package/dist/scripts/generate-web-module/templates/context.template.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/data/fields.template.d.ts +14 -0
- package/dist/scripts/generate-web-module/templates/data/fields.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/data/fields.template.js +55 -0
- package/dist/scripts/generate-web-module/templates/data/fields.template.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/data/index.d.ts +10 -0
- package/dist/scripts/generate-web-module/templates/data/index.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/data/index.js +26 -0
- package/dist/scripts/generate-web-module/templates/data/index.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/data/interface.template.d.ts +14 -0
- package/dist/scripts/generate-web-module/templates/data/interface.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/data/interface.template.js +116 -0
- package/dist/scripts/generate-web-module/templates/data/interface.template.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/data/model.template.d.ts +14 -0
- package/dist/scripts/generate-web-module/templates/data/model.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/data/model.template.js +274 -0
- package/dist/scripts/generate-web-module/templates/data/model.template.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/data/service.template.d.ts +14 -0
- package/dist/scripts/generate-web-module/templates/data/service.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/data/service.template.js +168 -0
- package/dist/scripts/generate-web-module/templates/data/service.template.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/index.d.ts +12 -0
- package/dist/scripts/generate-web-module/templates/index.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/index.js +37 -0
- package/dist/scripts/generate-web-module/templates/index.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/module.template.d.ts +14 -0
- package/dist/scripts/generate-web-module/templates/module.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/module.template.js +64 -0
- package/dist/scripts/generate-web-module/templates/module.template.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/pages/detail-page.template.d.ts +14 -0
- package/dist/scripts/generate-web-module/templates/pages/detail-page.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/pages/detail-page.template.js +65 -0
- package/dist/scripts/generate-web-module/templates/pages/detail-page.template.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/pages/index.d.ts +8 -0
- package/dist/scripts/generate-web-module/templates/pages/index.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/pages/index.js +13 -0
- package/dist/scripts/generate-web-module/templates/pages/index.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/pages/list-page.template.d.ts +14 -0
- package/dist/scripts/generate-web-module/templates/pages/list-page.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/pages/list-page.template.js +37 -0
- package/dist/scripts/generate-web-module/templates/pages/list-page.template.js.map +1 -0
- package/dist/scripts/generate-web-module/templates/table-hook.template.d.ts +14 -0
- package/dist/scripts/generate-web-module/templates/table-hook.template.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/templates/table-hook.template.js +174 -0
- package/dist/scripts/generate-web-module/templates/table-hook.template.js.map +1 -0
- package/dist/scripts/generate-web-module/transformers/field-mapper.d.ts +55 -0
- package/dist/scripts/generate-web-module/transformers/field-mapper.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/transformers/field-mapper.js +179 -0
- package/dist/scripts/generate-web-module/transformers/field-mapper.js.map +1 -0
- package/dist/scripts/generate-web-module/transformers/i18n-generator.d.ts +78 -0
- package/dist/scripts/generate-web-module/transformers/i18n-generator.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/transformers/i18n-generator.js +182 -0
- package/dist/scripts/generate-web-module/transformers/i18n-generator.js.map +1 -0
- package/dist/scripts/generate-web-module/transformers/import-resolver.d.ts +106 -0
- package/dist/scripts/generate-web-module/transformers/import-resolver.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/transformers/import-resolver.js +193 -0
- package/dist/scripts/generate-web-module/transformers/import-resolver.js.map +1 -0
- package/dist/scripts/generate-web-module/transformers/index.d.ts +12 -0
- package/dist/scripts/generate-web-module/transformers/index.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/transformers/index.js +28 -0
- package/dist/scripts/generate-web-module/transformers/index.js.map +1 -0
- package/dist/scripts/generate-web-module/transformers/name-transformer.d.ts +60 -0
- package/dist/scripts/generate-web-module/transformers/name-transformer.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/transformers/name-transformer.js +115 -0
- package/dist/scripts/generate-web-module/transformers/name-transformer.js.map +1 -0
- package/dist/scripts/generate-web-module/transformers/parent-detector.d.ts +57 -0
- package/dist/scripts/generate-web-module/transformers/parent-detector.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/transformers/parent-detector.js +88 -0
- package/dist/scripts/generate-web-module/transformers/parent-detector.js.map +1 -0
- package/dist/scripts/generate-web-module/transformers/relationship-resolver.d.ts +68 -0
- package/dist/scripts/generate-web-module/transformers/relationship-resolver.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/transformers/relationship-resolver.js +219 -0
- package/dist/scripts/generate-web-module/transformers/relationship-resolver.js.map +1 -0
- package/dist/scripts/generate-web-module/types/field-mapping.types.d.ts +68 -0
- package/dist/scripts/generate-web-module/types/field-mapping.types.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/types/field-mapping.types.js +129 -0
- package/dist/scripts/generate-web-module/types/field-mapping.types.js.map +1 -0
- package/dist/scripts/generate-web-module/types/index.d.ts +9 -0
- package/dist/scripts/generate-web-module/types/index.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/types/index.js +25 -0
- package/dist/scripts/generate-web-module/types/index.js.map +1 -0
- package/dist/scripts/generate-web-module/types/json-schema.interface.d.ts +40 -0
- package/dist/scripts/generate-web-module/types/json-schema.interface.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/types/json-schema.interface.js +10 -0
- package/dist/scripts/generate-web-module/types/json-schema.interface.js.map +1 -0
- package/dist/scripts/generate-web-module/types/template-data.interface.d.ts +128 -0
- package/dist/scripts/generate-web-module/types/template-data.interface.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/types/template-data.interface.js +9 -0
- package/dist/scripts/generate-web-module/types/template-data.interface.js.map +1 -0
- package/dist/scripts/generate-web-module/utils/bootstrapper-updater.d.ts +29 -0
- package/dist/scripts/generate-web-module/utils/bootstrapper-updater.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/utils/bootstrapper-updater.js +153 -0
- package/dist/scripts/generate-web-module/utils/bootstrapper-updater.js.map +1 -0
- package/dist/scripts/generate-web-module/utils/file-writer.d.ts +38 -0
- package/dist/scripts/generate-web-module/utils/file-writer.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/utils/file-writer.js +126 -0
- package/dist/scripts/generate-web-module/utils/file-writer.js.map +1 -0
- package/dist/scripts/generate-web-module/utils/i18n-updater.d.ts +28 -0
- package/dist/scripts/generate-web-module/utils/i18n-updater.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/utils/i18n-updater.js +122 -0
- package/dist/scripts/generate-web-module/utils/i18n-updater.js.map +1 -0
- package/dist/scripts/generate-web-module/utils/index.d.ts +9 -0
- package/dist/scripts/generate-web-module/utils/index.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/utils/index.js +20 -0
- package/dist/scripts/generate-web-module/utils/index.js.map +1 -0
- package/dist/scripts/generate-web-module/validators/json-schema-validator.d.ts +46 -0
- package/dist/scripts/generate-web-module/validators/json-schema-validator.d.ts.map +1 -0
- package/dist/scripts/generate-web-module/validators/json-schema-validator.js +265 -0
- package/dist/scripts/generate-web-module/validators/json-schema-validator.js.map +1 -0
- package/package.json +27 -21
- package/scripts/generate-web-module/generator.ts +363 -0
- package/scripts/generate-web-module/index.ts +49 -0
- package/scripts/generate-web-module/templates/components/container.template.ts +129 -0
- package/scripts/generate-web-module/templates/components/content.template.ts +40 -0
- package/scripts/generate-web-module/templates/components/deleter.template.ts +51 -0
- package/scripts/generate-web-module/templates/components/details.template.ts +115 -0
- package/scripts/generate-web-module/templates/components/editor.template.ts +495 -0
- package/scripts/generate-web-module/templates/components/index.ts +18 -0
- package/scripts/generate-web-module/templates/components/list-container.template.ts +30 -0
- package/scripts/generate-web-module/templates/components/list.template.ts +91 -0
- package/scripts/generate-web-module/templates/components/multi-selector.template.ts +184 -0
- package/scripts/generate-web-module/templates/components/selector.template.ts +199 -0
- package/scripts/generate-web-module/templates/context.template.ts +121 -0
- package/scripts/generate-web-module/templates/data/fields.template.ts +64 -0
- package/scripts/generate-web-module/templates/data/index.ts +10 -0
- package/scripts/generate-web-module/templates/data/interface.template.ts +136 -0
- package/scripts/generate-web-module/templates/data/model.template.ts +327 -0
- package/scripts/generate-web-module/templates/data/service.template.ts +185 -0
- package/scripts/generate-web-module/templates/index.ts +34 -0
- package/scripts/generate-web-module/templates/module.template.ts +69 -0
- package/scripts/generate-web-module/templates/pages/detail-page.template.ts +65 -0
- package/scripts/generate-web-module/templates/pages/index.ts +8 -0
- package/scripts/generate-web-module/templates/pages/list-page.template.ts +37 -0
- package/scripts/generate-web-module/templates/table-hook.template.ts +182 -0
- package/scripts/generate-web-module/transformers/field-mapper.ts +201 -0
- package/scripts/generate-web-module/transformers/i18n-generator.ts +199 -0
- package/scripts/generate-web-module/transformers/import-resolver.ts +250 -0
- package/scripts/generate-web-module/transformers/index.ts +12 -0
- package/scripts/generate-web-module/transformers/name-transformer.ts +115 -0
- package/scripts/generate-web-module/transformers/parent-detector.ts +87 -0
- package/scripts/generate-web-module/transformers/relationship-resolver.ts +221 -0
- package/scripts/generate-web-module/tsconfig.json +24 -0
- package/scripts/generate-web-module/types/field-mapping.types.ts +141 -0
- package/scripts/generate-web-module/types/index.ts +9 -0
- package/scripts/generate-web-module/types/json-schema.interface.ts +42 -0
- package/scripts/generate-web-module/types/template-data.interface.ts +164 -0
- package/scripts/generate-web-module/utils/bootstrapper-updater.ts +145 -0
- package/scripts/generate-web-module/utils/file-writer.ts +115 -0
- package/scripts/generate-web-module/utils/i18n-updater.ts +108 -0
- package/scripts/generate-web-module/utils/index.ts +9 -0
- package/scripts/generate-web-module/validators/json-schema-validator.ts +306 -0
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* File Writer Utility
|
|
4
|
+
*
|
|
5
|
+
* Handles file writing with conflict detection and directory creation.
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.writeFile = writeFile;
|
|
42
|
+
exports.writeFiles = writeFiles;
|
|
43
|
+
exports.printResults = printResults;
|
|
44
|
+
const fs = __importStar(require("fs"));
|
|
45
|
+
const path = __importStar(require("path"));
|
|
46
|
+
/**
|
|
47
|
+
* Write a single file to disk
|
|
48
|
+
*
|
|
49
|
+
* @param file - Generated file data
|
|
50
|
+
* @param options - Write options
|
|
51
|
+
* @returns Write result
|
|
52
|
+
*/
|
|
53
|
+
function writeFile(file, options = {}) {
|
|
54
|
+
const { dryRun = false, force = false } = options;
|
|
55
|
+
const existed = fs.existsSync(file.path);
|
|
56
|
+
if (dryRun) {
|
|
57
|
+
return {
|
|
58
|
+
path: file.path,
|
|
59
|
+
status: "dry-run",
|
|
60
|
+
existed,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
// Check if file exists and we're not forcing
|
|
64
|
+
if (existed && !force) {
|
|
65
|
+
return {
|
|
66
|
+
path: file.path,
|
|
67
|
+
status: "skipped",
|
|
68
|
+
existed: true,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
// Create directory if needed
|
|
72
|
+
const dir = path.dirname(file.path);
|
|
73
|
+
if (!fs.existsSync(dir)) {
|
|
74
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
75
|
+
}
|
|
76
|
+
// Write the file
|
|
77
|
+
fs.writeFileSync(file.path, file.content, "utf-8");
|
|
78
|
+
return {
|
|
79
|
+
path: file.path,
|
|
80
|
+
status: existed ? "updated" : "created",
|
|
81
|
+
existed,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Write multiple files to disk
|
|
86
|
+
*
|
|
87
|
+
* @param files - Array of generated files
|
|
88
|
+
* @param options - Write options
|
|
89
|
+
* @returns Array of write results
|
|
90
|
+
*/
|
|
91
|
+
function writeFiles(files, options = {}) {
|
|
92
|
+
return files.map((file) => writeFile(file, options));
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Print write results to console
|
|
96
|
+
*
|
|
97
|
+
* @param results - Array of write results
|
|
98
|
+
*/
|
|
99
|
+
function printResults(results) {
|
|
100
|
+
const grouped = {
|
|
101
|
+
created: results.filter((r) => r.status === "created"),
|
|
102
|
+
updated: results.filter((r) => r.status === "updated"),
|
|
103
|
+
skipped: results.filter((r) => r.status === "skipped"),
|
|
104
|
+
dryRun: results.filter((r) => r.status === "dry-run"),
|
|
105
|
+
};
|
|
106
|
+
if (grouped.dryRun.length > 0) {
|
|
107
|
+
console.log("\n📋 DRY RUN - Files that would be created:");
|
|
108
|
+
grouped.dryRun.forEach((r) => {
|
|
109
|
+
console.log(` ${r.existed ? "🔄" : "✨"} ${r.path}`);
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
if (grouped.created.length > 0) {
|
|
113
|
+
console.log("\n✨ Created files:");
|
|
114
|
+
grouped.created.forEach((r) => console.log(` ${r.path}`));
|
|
115
|
+
}
|
|
116
|
+
if (grouped.updated.length > 0) {
|
|
117
|
+
console.log("\n🔄 Updated files:");
|
|
118
|
+
grouped.updated.forEach((r) => console.log(` ${r.path}`));
|
|
119
|
+
}
|
|
120
|
+
if (grouped.skipped.length > 0) {
|
|
121
|
+
console.log("\n⏭️ Skipped (already exist, use --force to overwrite):");
|
|
122
|
+
grouped.skipped.forEach((r) => console.log(` ${r.path}`));
|
|
123
|
+
}
|
|
124
|
+
console.log(`\nTotal: ${results.length} files (${grouped.created.length} created, ${grouped.updated.length} updated, ${grouped.skipped.length} skipped)`);
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=file-writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-writer.js","sourceRoot":"","sources":["../../../../scripts/generate-web-module/utils/file-writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* i18n Updater
|
|
3
|
+
*
|
|
4
|
+
* Updates the messages/en.json file with new module translations.
|
|
5
|
+
*/
|
|
6
|
+
import { FrontendTemplateData } from "../types/template-data.interface";
|
|
7
|
+
export interface I18nUpdateResult {
|
|
8
|
+
success: boolean;
|
|
9
|
+
message: string;
|
|
10
|
+
alreadyExists?: boolean;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Update messages/en.json with new module translations
|
|
14
|
+
*
|
|
15
|
+
* @param data - Frontend template data
|
|
16
|
+
* @param webBasePath - Base path to web app
|
|
17
|
+
* @param dryRun - Whether to perform a dry run
|
|
18
|
+
* @returns Update result
|
|
19
|
+
*/
|
|
20
|
+
export declare function updateI18n(data: FrontendTemplateData, webBasePath: string, dryRun?: boolean): I18nUpdateResult;
|
|
21
|
+
/**
|
|
22
|
+
* Preview the i18n messages that would be added
|
|
23
|
+
*
|
|
24
|
+
* @param data - Frontend template data
|
|
25
|
+
* @returns Preview of messages
|
|
26
|
+
*/
|
|
27
|
+
export declare function previewI18nMessages(data: FrontendTemplateData): string;
|
|
28
|
+
//# sourceMappingURL=i18n-updater.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n-updater.d.ts","sourceRoot":"","sources":["../../../../scripts/generate-web-module/utils/i18n-updater.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAKxE,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,oBAAoB,EAC1B,WAAW,EAAE,MAAM,EACnB,MAAM,GAAE,OAAe,GACtB,gBAAgB,CAkElB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,oBAAoB,GAAG,MAAM,CAGtE"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* i18n Updater
|
|
4
|
+
*
|
|
5
|
+
* Updates the messages/en.json file with new module translations.
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.updateI18n = updateI18n;
|
|
42
|
+
exports.previewI18nMessages = previewI18nMessages;
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
const i18n_generator_1 = require("../transformers/i18n-generator");
|
|
45
|
+
const MESSAGES_PATH = "apps/web/messages/en.json";
|
|
46
|
+
/**
|
|
47
|
+
* Update messages/en.json with new module translations
|
|
48
|
+
*
|
|
49
|
+
* @param data - Frontend template data
|
|
50
|
+
* @param webBasePath - Base path to web app
|
|
51
|
+
* @param dryRun - Whether to perform a dry run
|
|
52
|
+
* @returns Update result
|
|
53
|
+
*/
|
|
54
|
+
function updateI18n(data, webBasePath, dryRun = false) {
|
|
55
|
+
const { names, i18nKeys } = data;
|
|
56
|
+
const messagesPath = `${webBasePath}/${MESSAGES_PATH}`;
|
|
57
|
+
// Check if file exists
|
|
58
|
+
if (!fs.existsSync(messagesPath)) {
|
|
59
|
+
return {
|
|
60
|
+
success: false,
|
|
61
|
+
message: `Messages file not found at ${messagesPath}`,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
const content = fs.readFileSync(messagesPath, "utf-8");
|
|
65
|
+
let messages;
|
|
66
|
+
try {
|
|
67
|
+
messages = JSON.parse(content);
|
|
68
|
+
}
|
|
69
|
+
catch (e) {
|
|
70
|
+
return {
|
|
71
|
+
success: false,
|
|
72
|
+
message: `Failed to parse messages/en.json: ${e}`,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
// Check if module already exists in features
|
|
76
|
+
if (messages.features && messages.features[names.camelCase]) {
|
|
77
|
+
return {
|
|
78
|
+
success: true,
|
|
79
|
+
message: `Module ${names.camelCase} already exists in messages/en.json`,
|
|
80
|
+
alreadyExists: true,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
// Build the i18n messages for this module
|
|
84
|
+
const moduleMessages = (0, i18n_generator_1.buildI18nMessages)(i18nKeys);
|
|
85
|
+
// Add to features section
|
|
86
|
+
if (!messages.features) {
|
|
87
|
+
messages.features = {};
|
|
88
|
+
}
|
|
89
|
+
messages.features[names.camelCase] = moduleMessages.features[i18nKeys.moduleName];
|
|
90
|
+
// Add to types section (if not exists)
|
|
91
|
+
if (!messages.types) {
|
|
92
|
+
messages.types = {};
|
|
93
|
+
}
|
|
94
|
+
const typesKey = Object.keys(moduleMessages.types)[0];
|
|
95
|
+
if (typesKey && !messages.types[names.pluralCamel]) {
|
|
96
|
+
messages.types[names.pluralCamel] = moduleMessages.types[typesKey];
|
|
97
|
+
}
|
|
98
|
+
if (dryRun) {
|
|
99
|
+
return {
|
|
100
|
+
success: true,
|
|
101
|
+
message: `[DRY RUN] Would update messages/en.json with ${names.camelCase} translations`,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
// Write updated content with proper formatting
|
|
105
|
+
const updatedContent = JSON.stringify(messages, null, 2);
|
|
106
|
+
fs.writeFileSync(messagesPath, updatedContent, "utf-8");
|
|
107
|
+
return {
|
|
108
|
+
success: true,
|
|
109
|
+
message: `Updated messages/en.json with ${names.camelCase} translations`,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Preview the i18n messages that would be added
|
|
114
|
+
*
|
|
115
|
+
* @param data - Frontend template data
|
|
116
|
+
* @returns Preview of messages
|
|
117
|
+
*/
|
|
118
|
+
function previewI18nMessages(data) {
|
|
119
|
+
const moduleMessages = (0, i18n_generator_1.buildI18nMessages)(data.i18nKeys);
|
|
120
|
+
return JSON.stringify(moduleMessages, null, 2);
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=i18n-updater.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n-updater.js","sourceRoot":"","sources":["../../../../scripts/generate-web-module/utils/i18n-updater.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utils Index
|
|
3
|
+
*
|
|
4
|
+
* Exports all utility functions.
|
|
5
|
+
*/
|
|
6
|
+
export { writeFile, writeFiles, printResults, type WriteOptions, type WriteResult } from "./file-writer";
|
|
7
|
+
export { updateBootstrapper, generateImportStatement, generateModuleEntry, type BootstrapperUpdateResult } from "./bootstrapper-updater";
|
|
8
|
+
export { updateI18n, previewI18nMessages, type I18nUpdateResult } from "./i18n-updater";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../scripts/generate-web-module/utils/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AACzG,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACzI,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Utils Index
|
|
4
|
+
*
|
|
5
|
+
* Exports all utility functions.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.previewI18nMessages = exports.updateI18n = exports.generateModuleEntry = exports.generateImportStatement = exports.updateBootstrapper = exports.printResults = exports.writeFiles = exports.writeFile = void 0;
|
|
9
|
+
var file_writer_1 = require("./file-writer");
|
|
10
|
+
Object.defineProperty(exports, "writeFile", { enumerable: true, get: function () { return file_writer_1.writeFile; } });
|
|
11
|
+
Object.defineProperty(exports, "writeFiles", { enumerable: true, get: function () { return file_writer_1.writeFiles; } });
|
|
12
|
+
Object.defineProperty(exports, "printResults", { enumerable: true, get: function () { return file_writer_1.printResults; } });
|
|
13
|
+
var bootstrapper_updater_1 = require("./bootstrapper-updater");
|
|
14
|
+
Object.defineProperty(exports, "updateBootstrapper", { enumerable: true, get: function () { return bootstrapper_updater_1.updateBootstrapper; } });
|
|
15
|
+
Object.defineProperty(exports, "generateImportStatement", { enumerable: true, get: function () { return bootstrapper_updater_1.generateImportStatement; } });
|
|
16
|
+
Object.defineProperty(exports, "generateModuleEntry", { enumerable: true, get: function () { return bootstrapper_updater_1.generateModuleEntry; } });
|
|
17
|
+
var i18n_updater_1 = require("./i18n-updater");
|
|
18
|
+
Object.defineProperty(exports, "updateI18n", { enumerable: true, get: function () { return i18n_updater_1.updateI18n; } });
|
|
19
|
+
Object.defineProperty(exports, "previewI18nMessages", { enumerable: true, get: function () { return i18n_updater_1.previewI18nMessages; } });
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../scripts/generate-web-module/utils/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,6CAAyG;AAAhG,wGAAA,SAAS,OAAA;AAAE,yGAAA,UAAU,OAAA;AAAE,2GAAA,YAAY,OAAA;AAC5C,+DAAyI;AAAhI,0HAAA,kBAAkB,OAAA;AAAE,+HAAA,uBAAuB,OAAA;AAAE,2HAAA,mBAAmB,OAAA;AACzE,+CAAwF;AAA/E,0GAAA,UAAU,OAAA;AAAE,mHAAA,mBAAmB,OAAA"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON Schema Validator
|
|
3
|
+
*
|
|
4
|
+
* Validates JSON module definition files for the frontend generator.
|
|
5
|
+
* Note: Backend-specific fields (toNode, relationshipName) are warnings, not errors.
|
|
6
|
+
*/
|
|
7
|
+
import { JsonModuleDefinition } from "../types/json-schema.interface";
|
|
8
|
+
export interface ValidationError {
|
|
9
|
+
field: string;
|
|
10
|
+
message: string;
|
|
11
|
+
severity: "error" | "warning";
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Validate JSON module definition for frontend generation
|
|
15
|
+
*
|
|
16
|
+
* @param schema - JSON module definition
|
|
17
|
+
* @returns Array of validation errors (empty if valid)
|
|
18
|
+
*/
|
|
19
|
+
export declare function validateJsonSchema(schema: any): ValidationError[];
|
|
20
|
+
/**
|
|
21
|
+
* Format validation errors for display
|
|
22
|
+
*
|
|
23
|
+
* @param errors - Validation errors
|
|
24
|
+
* @returns Formatted error message
|
|
25
|
+
*/
|
|
26
|
+
export declare function formatValidationErrors(errors: ValidationError[]): string;
|
|
27
|
+
/**
|
|
28
|
+
* Validation result interface
|
|
29
|
+
*/
|
|
30
|
+
export interface ValidationResult {
|
|
31
|
+
data: JsonModuleDefinition | null;
|
|
32
|
+
errors: string[];
|
|
33
|
+
warnings: string[];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Validate and parse JSON file from path
|
|
37
|
+
*
|
|
38
|
+
* @param filePath - Path to JSON file
|
|
39
|
+
* @returns Validation result with data, errors, and warnings
|
|
40
|
+
*/
|
|
41
|
+
export declare function parseAndValidate(filePath: string): ValidationResult;
|
|
42
|
+
/**
|
|
43
|
+
* Check if validation result passed (no errors)
|
|
44
|
+
*/
|
|
45
|
+
export declare function validationPassed(result: ValidationResult): boolean;
|
|
46
|
+
//# sourceMappingURL=json-schema-validator.d.ts.map
|
|
@@ -0,0 +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,CAgKjE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,CA6BxE;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAClC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CA+DnE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAElE"}
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* JSON Schema Validator
|
|
4
|
+
*
|
|
5
|
+
* Validates JSON module definition files for the frontend generator.
|
|
6
|
+
* Note: Backend-specific fields (toNode, relationshipName) are warnings, not errors.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.validateJsonSchema = validateJsonSchema;
|
|
10
|
+
exports.formatValidationErrors = formatValidationErrors;
|
|
11
|
+
exports.parseAndValidate = parseAndValidate;
|
|
12
|
+
exports.validationPassed = validationPassed;
|
|
13
|
+
/**
|
|
14
|
+
* Validate JSON module definition for frontend generation
|
|
15
|
+
*
|
|
16
|
+
* @param schema - JSON module definition
|
|
17
|
+
* @returns Array of validation errors (empty if valid)
|
|
18
|
+
*/
|
|
19
|
+
function validateJsonSchema(schema) {
|
|
20
|
+
const errors = [];
|
|
21
|
+
// Required fields
|
|
22
|
+
const required = ["moduleName", "endpointName", "targetDir"];
|
|
23
|
+
for (const field of required) {
|
|
24
|
+
if (!schema[field]) {
|
|
25
|
+
errors.push({
|
|
26
|
+
field,
|
|
27
|
+
message: `${field} is required`,
|
|
28
|
+
severity: "error",
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// Module name format (PascalCase)
|
|
33
|
+
if (schema.moduleName && !/^[A-Z][a-zA-Z0-9]*$/.test(schema.moduleName)) {
|
|
34
|
+
errors.push({
|
|
35
|
+
field: "moduleName",
|
|
36
|
+
message: 'Must be PascalCase (e.g., "Comment", "Discussion")',
|
|
37
|
+
severity: "error",
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
// Endpoint format (kebab-case plural)
|
|
41
|
+
if (schema.endpointName && !/^[a-z][a-z0-9-]*$/.test(schema.endpointName)) {
|
|
42
|
+
errors.push({
|
|
43
|
+
field: "endpointName",
|
|
44
|
+
message: 'Must be kebab-case (e.g., "comments", "discussions")',
|
|
45
|
+
severity: "error",
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
// Target directory validation
|
|
49
|
+
if (schema.targetDir && !["features", "foundations"].includes(schema.targetDir)) {
|
|
50
|
+
errors.push({
|
|
51
|
+
field: "targetDir",
|
|
52
|
+
message: 'Must be either "features" or "foundations"',
|
|
53
|
+
severity: "error",
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
// Module ID validation (required for frontend)
|
|
57
|
+
if (!schema.moduleId) {
|
|
58
|
+
errors.push({
|
|
59
|
+
field: "moduleId",
|
|
60
|
+
message: "moduleId is required for frontend module registration",
|
|
61
|
+
severity: "error",
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
else if (!/^[a-f0-9-]{36}$/i.test(schema.moduleId)) {
|
|
65
|
+
errors.push({
|
|
66
|
+
field: "moduleId",
|
|
67
|
+
message: "moduleId must be a valid UUID",
|
|
68
|
+
severity: "warning",
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
// Fields validation
|
|
72
|
+
if (schema.fields && Array.isArray(schema.fields)) {
|
|
73
|
+
schema.fields.forEach((field, index) => {
|
|
74
|
+
if (!field.name) {
|
|
75
|
+
errors.push({
|
|
76
|
+
field: `fields[${index}].name`,
|
|
77
|
+
message: "Field name is required",
|
|
78
|
+
severity: "error",
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
if (!field.type) {
|
|
82
|
+
errors.push({
|
|
83
|
+
field: `fields[${index}].type`,
|
|
84
|
+
message: "Field type is required",
|
|
85
|
+
severity: "error",
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
if (field.nullable === undefined) {
|
|
89
|
+
errors.push({
|
|
90
|
+
field: `fields[${index}].nullable`,
|
|
91
|
+
message: "Field nullable flag is required",
|
|
92
|
+
severity: "error",
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
// Validate known types
|
|
96
|
+
const validTypes = ["string", "number", "boolean", "date", "any"];
|
|
97
|
+
if (field.type && !validTypes.includes(field.type)) {
|
|
98
|
+
errors.push({
|
|
99
|
+
field: `fields[${index}].type`,
|
|
100
|
+
message: `Unknown type "${field.type}". Valid types: ${validTypes.join(", ")}`,
|
|
101
|
+
severity: "warning",
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
// Relationships validation
|
|
107
|
+
if (schema.relationships && Array.isArray(schema.relationships)) {
|
|
108
|
+
schema.relationships.forEach((rel, index) => {
|
|
109
|
+
if (!rel.name) {
|
|
110
|
+
errors.push({
|
|
111
|
+
field: `relationships[${index}].name`,
|
|
112
|
+
message: "Relationship name is required",
|
|
113
|
+
severity: "error",
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
if (!rel.directory) {
|
|
117
|
+
errors.push({
|
|
118
|
+
field: `relationships[${index}].directory`,
|
|
119
|
+
message: "Relationship directory is required",
|
|
120
|
+
severity: "error",
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
// Directory should be features or foundations
|
|
124
|
+
if (rel.directory && !["features", "foundations"].includes(rel.directory)) {
|
|
125
|
+
errors.push({
|
|
126
|
+
field: `relationships[${index}].directory`,
|
|
127
|
+
message: 'Relationship directory should be "features" or "foundations"',
|
|
128
|
+
severity: "warning",
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
if (rel.single === undefined) {
|
|
132
|
+
errors.push({
|
|
133
|
+
field: `relationships[${index}].single`,
|
|
134
|
+
message: "Relationship single flag is required",
|
|
135
|
+
severity: "error",
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
if (rel.nullable === undefined) {
|
|
139
|
+
errors.push({
|
|
140
|
+
field: `relationships[${index}].nullable`,
|
|
141
|
+
message: "Relationship nullable flag is required",
|
|
142
|
+
severity: "error",
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
// Backend-specific fields are warnings only (not used in frontend)
|
|
146
|
+
if (!rel.relationshipName) {
|
|
147
|
+
errors.push({
|
|
148
|
+
field: `relationships[${index}].relationshipName`,
|
|
149
|
+
message: "relationshipName missing (backend-specific, not used in frontend)",
|
|
150
|
+
severity: "warning",
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
if (rel.toNode === undefined) {
|
|
154
|
+
errors.push({
|
|
155
|
+
field: `relationships[${index}].toNode`,
|
|
156
|
+
message: "toNode missing (backend-specific, not used in frontend)",
|
|
157
|
+
severity: "warning",
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
return errors;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Format validation errors for display
|
|
166
|
+
*
|
|
167
|
+
* @param errors - Validation errors
|
|
168
|
+
* @returns Formatted error message
|
|
169
|
+
*/
|
|
170
|
+
function formatValidationErrors(errors) {
|
|
171
|
+
if (errors.length === 0) {
|
|
172
|
+
return "No validation errors";
|
|
173
|
+
}
|
|
174
|
+
const errorCount = errors.filter((e) => e.severity === "error").length;
|
|
175
|
+
const warningCount = errors.filter((e) => e.severity === "warning").length;
|
|
176
|
+
const lines = [];
|
|
177
|
+
if (errorCount > 0) {
|
|
178
|
+
lines.push(`\n❌ ${errorCount} error(s):`);
|
|
179
|
+
errors
|
|
180
|
+
.filter((e) => e.severity === "error")
|
|
181
|
+
.forEach((error) => {
|
|
182
|
+
lines.push(` • ${error.field}: ${error.message}`);
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
if (warningCount > 0) {
|
|
186
|
+
lines.push(`\n⚠️ ${warningCount} warning(s):`);
|
|
187
|
+
errors
|
|
188
|
+
.filter((e) => e.severity === "warning")
|
|
189
|
+
.forEach((error) => {
|
|
190
|
+
lines.push(` • ${error.field}: ${error.message}`);
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
return lines.join("\n");
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Validate and parse JSON file from path
|
|
197
|
+
*
|
|
198
|
+
* @param filePath - Path to JSON file
|
|
199
|
+
* @returns Validation result with data, errors, and warnings
|
|
200
|
+
*/
|
|
201
|
+
function parseAndValidate(filePath) {
|
|
202
|
+
const result = {
|
|
203
|
+
data: null,
|
|
204
|
+
errors: [],
|
|
205
|
+
warnings: [],
|
|
206
|
+
};
|
|
207
|
+
// Read file
|
|
208
|
+
let content;
|
|
209
|
+
try {
|
|
210
|
+
const fs = require("fs");
|
|
211
|
+
if (!fs.existsSync(filePath)) {
|
|
212
|
+
result.errors.push(`File not found: ${filePath}`);
|
|
213
|
+
return result;
|
|
214
|
+
}
|
|
215
|
+
content = fs.readFileSync(filePath, "utf-8");
|
|
216
|
+
}
|
|
217
|
+
catch (e) {
|
|
218
|
+
result.errors.push(`Failed to read file: ${e.message}`);
|
|
219
|
+
return result;
|
|
220
|
+
}
|
|
221
|
+
// Parse JSON
|
|
222
|
+
let schema;
|
|
223
|
+
try {
|
|
224
|
+
schema = JSON.parse(content);
|
|
225
|
+
}
|
|
226
|
+
catch (e) {
|
|
227
|
+
result.errors.push(`Invalid JSON: ${e.message}`);
|
|
228
|
+
return result;
|
|
229
|
+
}
|
|
230
|
+
// Handle array format (for bulk import compatibility)
|
|
231
|
+
if (Array.isArray(schema)) {
|
|
232
|
+
if (schema.length === 0) {
|
|
233
|
+
result.errors.push("JSON array is empty");
|
|
234
|
+
return result;
|
|
235
|
+
}
|
|
236
|
+
if (schema.length > 1) {
|
|
237
|
+
result.warnings.push(`JSON file contains ${schema.length} definitions. Only processing the first one.`);
|
|
238
|
+
}
|
|
239
|
+
schema = schema[0];
|
|
240
|
+
}
|
|
241
|
+
// Validate
|
|
242
|
+
const validationErrors = validateJsonSchema(schema);
|
|
243
|
+
// Separate errors and warnings
|
|
244
|
+
validationErrors.forEach((ve) => {
|
|
245
|
+
const msg = `${ve.field}: ${ve.message}`;
|
|
246
|
+
if (ve.severity === "error") {
|
|
247
|
+
result.errors.push(msg);
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
result.warnings.push(msg);
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
// Only set data if validation passed
|
|
254
|
+
if (result.errors.length === 0) {
|
|
255
|
+
result.data = schema;
|
|
256
|
+
}
|
|
257
|
+
return result;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Check if validation result passed (no errors)
|
|
261
|
+
*/
|
|
262
|
+
function validationPassed(result) {
|
|
263
|
+
return result.errors.length === 0 && result.data !== null;
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=json-schema-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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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"}
|