@wavemaker-ai/react-codegen 1.0.0-rc.647684 → 12.0.0-rc.335
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/command.js +52 -7
- package/command.js.map +1 -1
- package/dist/transpiler/index.d.mts +42 -1
- package/dist/transpiler/index.mjs +682 -90
- package/dist/transpiler/index.mjs.map +1 -1
- package/dist/transpiler/wm-styles.css +10 -20
- package/index.js +7 -0
- package/index.js.map +1 -1
- package/package-lock.json +102 -102
- package/package.json +1 -1
- package/src/app.generator.js +223 -35
- package/src/app.generator.js.map +1 -1
- package/src/handlebar-helpers.js +32 -0
- package/src/handlebar-helpers.js.map +1 -1
- package/src/increment-builder.js +32 -2
- package/src/increment-builder.js.map +1 -1
- package/src/profiles/profile.js +2 -0
- package/src/profiles/profile.js.map +1 -1
- package/src/profiles/web-preview.profile.js +4 -0
- package/src/profiles/web-preview.profile.js.map +1 -1
- package/src/services/designtime-collector.js +235 -0
- package/src/services/designtime-collector.js.map +1 -0
- package/src/services/doc-normalizer.js +185 -0
- package/src/services/doc-normalizer.js.map +1 -0
- package/src/services/method-emitter.js +367 -0
- package/src/services/method-emitter.js.map +1 -0
- package/src/services/model-emitter.js +281 -0
- package/src/services/model-emitter.js.map +1 -0
- package/src/services/schema-to-ts.js +50 -0
- package/src/services/schema-to-ts.js.map +1 -0
- package/src/services/service.generator.js +223 -0
- package/src/services/service.generator.js.map +1 -0
- package/src/transpile/bind.ex.transformer.js +4 -1
- package/src/transpile/bind.ex.transformer.js.map +1 -1
- package/src/transpile/components/container/accordion.transformer.js +4 -4
- package/src/transpile/components/container/accordion.transformer.js.map +1 -1
- package/src/transpile/components/container/tabs.transformer.js +4 -2
- package/src/transpile/components/container/tabs.transformer.js.map +1 -1
- package/src/transpile/components/data/list/list-transformer.js +7 -2
- package/src/transpile/components/data/list/list-transformer.js.map +1 -1
- package/src/transpile/components/data/table/table.transformer.js +14 -20
- package/src/transpile/components/data/table/table.transformer.js.map +1 -1
- package/src/transpile/components/data/table/utils.js +90 -0
- package/src/transpile/components/data/table/utils.js.map +1 -1
- package/src/transpile/components/dialogs/dialog-actions.transformer.js +4 -6
- package/src/transpile/components/dialogs/dialog-actions.transformer.js.map +1 -1
- package/src/transpile/components/dialogs/dialog.transformer.js +14 -3
- package/src/transpile/components/dialogs/dialog.transformer.js.map +1 -1
- package/src/transpile/components/layout/layout-region-factory.js +8 -2
- package/src/transpile/components/layout/layout-region-factory.js.map +1 -1
- package/src/transpile/components/nav/nav.transformer.js +3 -5
- package/src/transpile/components/nav/nav.transformer.js.map +1 -1
- package/src/transpile/components/utils.js +11 -5
- package/src/transpile/components/utils.js.map +1 -1
- package/src/transpile/transpile.js +62 -21
- package/src/transpile/transpile.js.map +1 -1
- package/src/transpile/variables-template-source.js +2 -2
- package/src/transpile/variables-template-source.js.map +1 -1
- package/src/utils.browser.js +51 -6
- package/src/utils.browser.js.map +1 -1
- package/src/variables/variable.transformer.js +623 -12
- package/src/variables/variable.transformer.js.map +1 -1
- package/templates/project/app/client.layout.tsx +7 -7
- package/templates/project/app/components.css +10 -0
- package/templates/project/app/widgetInlineStylesOverride.css +0 -20
- package/templates/project/package.json +6 -5
- package/templates/project/services/base.service.ts +361 -0
- package/templates/service/service-class.hbs +19 -0
- package/templates/variables.template +67 -1
package/src/handlebar-helpers.js
CHANGED
|
@@ -19,6 +19,17 @@ const registerHelpers = () => {
|
|
|
19
19
|
return options.inverse(scope || this);
|
|
20
20
|
}
|
|
21
21
|
});
|
|
22
|
+
handlebars_1.default.registerHelper("ifEqualsAny", (arg1, values, scope, options) => {
|
|
23
|
+
if (Array.isArray(values) && values.includes(arg1)) {
|
|
24
|
+
return options && options.fn(scope || this);
|
|
25
|
+
}
|
|
26
|
+
else if (options && options.inverse) {
|
|
27
|
+
return options.inverse(scope || this);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
handlebars_1.default.registerHelper("array", function (...args) {
|
|
31
|
+
return args.slice(0, -1); // remove Handlebars' options object at the end
|
|
32
|
+
});
|
|
22
33
|
handlebars_1.default.registerHelper("surroundWithCurlyBraces", (text) => `{${text}}`);
|
|
23
34
|
handlebars_1.default.registerHelper("ifNotEmpty", (arg1, scope, options) => {
|
|
24
35
|
if ((0, lodash_1.isNumber)(arg1) && !(0, lodash_1.isUndefined)(arg1)) {
|
|
@@ -45,6 +56,27 @@ const registerHelpers = () => {
|
|
|
45
56
|
return str.toLowerCase();
|
|
46
57
|
return str;
|
|
47
58
|
});
|
|
59
|
+
handlebars_1.default.registerHelper("onlyUniqueEntries", function (context, options) {
|
|
60
|
+
// Use a symbol key to avoid name collisions
|
|
61
|
+
const PRINTED_KEY = "__printed_serviceFiles__";
|
|
62
|
+
// Ensure the printed set exists on root
|
|
63
|
+
const root = options.data.root;
|
|
64
|
+
root[PRINTED_KEY] = root[PRINTED_KEY] || new Set();
|
|
65
|
+
// Dedupe on the LOCAL import name, not the bare class name. Since services are generated one
|
|
66
|
+
// folder per backend service, the same class name legitimately exists in several services
|
|
67
|
+
// (e.g. `ManageEntityLockService` in CategoryManagement, catalogmanagement AND
|
|
68
|
+
// PricePointManagement — 11 such collisions in one real project). Keying on `serviceFile`
|
|
69
|
+
// treated those as duplicates and emitted only the FIRST import, so the other services'
|
|
70
|
+
// call sites referenced an undefined identifier ("Cannot find name
|
|
71
|
+
// 'catalogmanagementManageEntityLockService'"). `serviceInstanceName` is service-qualified and
|
|
72
|
+
// is exactly the identifier the import binds, so one entry per distinct import is emitted.
|
|
73
|
+
const value = context.serviceInstanceName || context.serviceFile;
|
|
74
|
+
if (value && !root[PRINTED_KEY].has(value)) {
|
|
75
|
+
root[PRINTED_KEY].add(value);
|
|
76
|
+
return options.fn(context); // Render block
|
|
77
|
+
}
|
|
78
|
+
return ""; // Skip duplicate
|
|
79
|
+
});
|
|
48
80
|
handlebars_1.default.registerHelper("quoteKeyIfHyphen", serialize_variables_1.quoteKeyIfHyphen);
|
|
49
81
|
};
|
|
50
82
|
exports.default = registerHelpers;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlebar-helpers.js","sourceRoot":"","sources":["../../src/handlebar-helpers.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"handlebar-helpers.js","sourceRoot":"","sources":["../../src/handlebar-helpers.ts"],"names":[],"mappings":"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"}
|
package/src/increment-builder.js
CHANGED
|
@@ -5,14 +5,44 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.IncrementalBuilder = void 0;
|
|
7
7
|
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
8
9
|
class IncrementalBuilder {
|
|
9
|
-
|
|
10
|
+
/**
|
|
11
|
+
* `modifiedFiles` lets the caller state what changed instead of having it
|
|
12
|
+
* discovered.
|
|
13
|
+
*
|
|
14
|
+
* The mtime scan is the fallback, not the only source: a caller that already
|
|
15
|
+
* knows which file was saved -- the studio tells the preview builder on every
|
|
16
|
+
* save -- can hand the list over and skip walking the tree.
|
|
17
|
+
*
|
|
18
|
+
* The paths are normalised and anything outside `projectSrc` is dropped, since
|
|
19
|
+
* every predicate below answers by matching a prefix of projectSrc.
|
|
20
|
+
*
|
|
21
|
+
* Passing an empty array is NOT the same as passing nothing: it means "these
|
|
22
|
+
* are the changes, and there are none". Callers that mean "find out for me"
|
|
23
|
+
* must omit the argument.
|
|
24
|
+
*/
|
|
25
|
+
constructor(projectSrc, lastBuildTime, modifiedFiles) {
|
|
10
26
|
this.projectSrc = projectSrc;
|
|
11
27
|
this.modifiledFiles = [];
|
|
12
|
-
this.modifiledFiles =
|
|
28
|
+
this.modifiledFiles = modifiedFiles
|
|
29
|
+
? this.normalise(modifiedFiles)
|
|
30
|
+
: this.scanForModifiedSourceFiles(projectSrc, lastBuildTime);
|
|
13
31
|
console.log("Files Modified:");
|
|
14
32
|
console.log(this.modifiledFiles.join("\n"));
|
|
15
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Caller-supplied paths in the shape the scan would have produced: absolute,
|
|
36
|
+
* forward-slashed, and under projectSrc. isModified() compares with
|
|
37
|
+
* startsWith, so a relative or oddly separated path would silently match
|
|
38
|
+
* nothing.
|
|
39
|
+
*/
|
|
40
|
+
normalise(files) {
|
|
41
|
+
const root = path_1.default.resolve(this.projectSrc).split(path_1.default.sep).join("/");
|
|
42
|
+
return files
|
|
43
|
+
.map(f => path_1.default.resolve(this.projectSrc, f).split(path_1.default.sep).join("/"))
|
|
44
|
+
.filter(f => f === root || f.startsWith(`${root}/`));
|
|
45
|
+
}
|
|
16
46
|
scanForModifiedSourceFiles(path, after) {
|
|
17
47
|
const lstat = fs_extra_1.default.lstatSync(path);
|
|
18
48
|
const result = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"increment-builder.js","sourceRoot":"","sources":["../../src/increment-builder.ts"],"names":[],"mappings":";;;;;;AAAA,wDAA0B;
|
|
1
|
+
{"version":3,"file":"increment-builder.js","sourceRoot":"","sources":["../../src/increment-builder.ts"],"names":[],"mappings":"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"}
|
package/src/profiles/profile.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../../src/profiles/profile.ts"],"names":[],"mappings":";;;AAAA,mCAAkC;
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../../src/profiles/profile.ts"],"names":[],"mappings":";;;AAAA,mCAAkC;AAkClC;;GAEG;AACH,MAAM,cAAc,GAAG;IACrB,WAAW,EAAE,KAAK;IAClB,qBAAqB,EAAE,IAAI;IAC3B,kBAAkB,EAAE,IAAI;IACxB,aAAa,EAAE,IAAI;IACnB,aAAa,EAAE,IAAI;IACnB,gBAAgB,EAAE,IAAI;IACtB,eAAe,EAAE,IAAI;IACrB,eAAe,EAAE,KAAK;IACtB,gBAAgB,EAAE,IAAI;IACtB,cAAc,EAAE,QAAQ;CACd,CAAC;AAEb,MAAM,OAAO,GAAG;IACd,GAAG,cAAc;CACP,CAAC;AAEN,MAAM,UAAU,GAAG,CAAC,CAAU,EAAE,EAAE,CAAC,IAAA,iBAAQ,EAAC,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;AAAlE,QAAA,UAAU,cAAwD;AAE/E,kBAAe,OAAO,CAAC"}
|
|
@@ -7,6 +7,10 @@ const profile_1 = __importDefault(require("./profile"));
|
|
|
7
7
|
exports.default = {
|
|
8
8
|
...profile_1.default,
|
|
9
9
|
generateWeb: true,
|
|
10
|
+
// The preview builder owns the WMX pipeline end to end.
|
|
11
|
+
generateWmxComponents: false,
|
|
12
|
+
// Nothing loads the generated app in a preview, so pages generate flat.
|
|
13
|
+
groupPagesByLayout: false,
|
|
10
14
|
linkNodeModules: true,
|
|
11
15
|
copyResources: false,
|
|
12
16
|
useLocalMetadata: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-preview.profile.js","sourceRoot":"","sources":["../../../src/profiles/web-preview.profile.ts"],"names":[],"mappings":";;;;;AAAA,wDAA+D;AAE/D,kBAAe;IACb,GAAG,iBAAc;IACjB,WAAW,EAAE,IAAI;IACjB,eAAe,EAAE,IAAI;IACrB,aAAa,EAAE,KAAK;IACpB,gBAAgB,EAAE,KAAK;IACvB,cAAc,EAAE,KAAK;CACX,CAAC"}
|
|
1
|
+
{"version":3,"file":"web-preview.profile.js","sourceRoot":"","sources":["../../../src/profiles/web-preview.profile.ts"],"names":[],"mappings":";;;;;AAAA,wDAA+D;AAE/D,kBAAe;IACb,GAAG,iBAAc;IACjB,WAAW,EAAE,IAAI;IACjB,wDAAwD;IACxD,qBAAqB,EAAE,KAAK;IAC5B,wEAAwE;IACxE,kBAAkB,EAAE,KAAK;IACzB,eAAe,EAAE,IAAI;IACrB,aAAa,EAAE,KAAK;IACpB,gBAAgB,EAAE,KAAK;IACvB,cAAc,EAAE,KAAK;CACX,CAAC"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.collectDesigntimeDocs = collectDesigntimeDocs;
|
|
7
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const SERVICE_TYPE_MAPPING = {
|
|
10
|
+
DataService: serviceName => `${serviceName}_API.json`,
|
|
11
|
+
SecurityServiceType: serviceName => `${serviceName}_API.json`,
|
|
12
|
+
JavaService: serviceName => `${serviceName}_API.json`,
|
|
13
|
+
SoapService: serviceName => `${serviceName}_API.json`,
|
|
14
|
+
RestService: serviceName => `${serviceName}_API_REST_SERVICE.json`,
|
|
15
|
+
OpenAPIService: serviceName => `${serviceName}_API_REST_SERVICE.json`,
|
|
16
|
+
WebSocketService: serviceName => `${serviceName}_API_WEBSOCKET_SERVICE.json`,
|
|
17
|
+
};
|
|
18
|
+
function readServiceInfo(servicePath) {
|
|
19
|
+
const p = path_1.default.join(servicePath, "designtime", "service-info.json");
|
|
20
|
+
try {
|
|
21
|
+
if (!fs_extra_1.default.existsSync(p))
|
|
22
|
+
return null;
|
|
23
|
+
return JSON.parse(fs_extra_1.default.readFileSync(p, "utf8"));
|
|
24
|
+
}
|
|
25
|
+
catch (_a) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function getServiceDirectories(servicesFolder) {
|
|
30
|
+
return fs_extra_1.default
|
|
31
|
+
.readdirSync(servicesFolder, { withFileTypes: true })
|
|
32
|
+
.filter(d => d.isDirectory())
|
|
33
|
+
.map(d => ({ name: d.name, path: path_1.default.join(servicesFolder, d.name) }));
|
|
34
|
+
}
|
|
35
|
+
function readJsonSafe(filePath) {
|
|
36
|
+
try {
|
|
37
|
+
return JSON.parse(fs_extra_1.default.readFileSync(filePath, "utf8"));
|
|
38
|
+
}
|
|
39
|
+
catch (_a) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function collectFromServiceFolder(servicesFolder, out, opts = {}) {
|
|
44
|
+
if (!fs_extra_1.default.existsSync(servicesFolder)) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const { namePrefix = "", isPrefab = false, prefabName } = opts;
|
|
48
|
+
getServiceDirectories(servicesFolder).forEach(service => {
|
|
49
|
+
const serviceInfo = readServiceInfo(service.path);
|
|
50
|
+
if (!serviceInfo || !serviceInfo.type) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const getFileName = SERVICE_TYPE_MAPPING[serviceInfo.type];
|
|
54
|
+
if (!getFileName) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const swaggerFilePath = path_1.default.join(service.path, "designtime", getFileName(service.name));
|
|
58
|
+
if (!fs_extra_1.default.existsSync(swaggerFilePath)) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const doc = readJsonSafe(swaggerFilePath);
|
|
62
|
+
if (!doc) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
out.push({
|
|
66
|
+
qualifiedName: namePrefix + service.name,
|
|
67
|
+
serviceName: service.name,
|
|
68
|
+
namePrefix,
|
|
69
|
+
isPrefab,
|
|
70
|
+
prefabName,
|
|
71
|
+
doc,
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
function operationIdsOf(doc) {
|
|
76
|
+
return Object.values(doc.paths || {}).flatMap((pathItem) => Object.values(pathItem)
|
|
77
|
+
.map((op) => op && op.operationId)
|
|
78
|
+
.filter(Boolean));
|
|
79
|
+
}
|
|
80
|
+
/** Prefab REST/OpenAPI connectors are described as standalone "<serviceId>_apiTarget.json" docs. */
|
|
81
|
+
function collectPrefabConnectors(prefabName, prefabPath, out) {
|
|
82
|
+
const configDir = path_1.default.join(prefabPath, "config");
|
|
83
|
+
if (!fs_extra_1.default.existsSync(configDir)) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const namePrefix = `${prefabName}__`;
|
|
87
|
+
const alreadyCollectedOpIds = new Set(out.filter(d => d.namePrefix === namePrefix).flatMap(d => operationIdsOf(d.doc)));
|
|
88
|
+
fs_extra_1.default.readdirSync(configDir)
|
|
89
|
+
.filter(f => f.endsWith("_apiTarget.json"))
|
|
90
|
+
.forEach(file => {
|
|
91
|
+
const doc = readJsonSafe(path_1.default.join(configDir, file));
|
|
92
|
+
if (!doc)
|
|
93
|
+
return;
|
|
94
|
+
const opIds = operationIdsOf(doc);
|
|
95
|
+
if (opIds.some(id => alreadyCollectedOpIds.has(id))) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
opIds.forEach(id => alreadyCollectedOpIds.add(id));
|
|
99
|
+
out.push({
|
|
100
|
+
qualifiedName: namePrefix + file,
|
|
101
|
+
serviceName: file.replace(/_apiTarget\.json$/, ""),
|
|
102
|
+
namePrefix,
|
|
103
|
+
isPrefab: true,
|
|
104
|
+
prefabName,
|
|
105
|
+
doc,
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
function wmTypeToSwaggerType(type) {
|
|
110
|
+
switch (type) {
|
|
111
|
+
case "int":
|
|
112
|
+
case "long":
|
|
113
|
+
case "integer":
|
|
114
|
+
case "java.lang.Integer":
|
|
115
|
+
case "java.lang.Long":
|
|
116
|
+
case "java.lang.Short":
|
|
117
|
+
return { type: "integer" };
|
|
118
|
+
case "boolean":
|
|
119
|
+
case "java.lang.Boolean":
|
|
120
|
+
return { type: "boolean" };
|
|
121
|
+
case "double":
|
|
122
|
+
case "float":
|
|
123
|
+
case "number":
|
|
124
|
+
case "java.lang.Double":
|
|
125
|
+
case "java.lang.Float":
|
|
126
|
+
return { type: "number" };
|
|
127
|
+
case "string":
|
|
128
|
+
case "java.lang.String":
|
|
129
|
+
return { type: "string" };
|
|
130
|
+
case "file":
|
|
131
|
+
return { type: "file" };
|
|
132
|
+
default:
|
|
133
|
+
return { type: "object" };
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/** Prefab JavaService/DataService/SecurityService operations described only as designtime metadata. */
|
|
137
|
+
function mergePrefabServiceDefinitions(prefabName, prefabPath, out) {
|
|
138
|
+
const serviceDefsDir = path_1.default.join(prefabPath, "config", "prefab-servicedefs");
|
|
139
|
+
if (!fs_extra_1.default.existsSync(serviceDefsDir)) {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
const namePrefix = `${prefabName}__`;
|
|
143
|
+
const byServiceName = new Map();
|
|
144
|
+
out.filter(d => d.namePrefix === namePrefix).forEach(d => byServiceName.set(d.serviceName, d));
|
|
145
|
+
fs_extra_1.default.readdirSync(serviceDefsDir)
|
|
146
|
+
.filter(f => f.endsWith("-service-definitions.json"))
|
|
147
|
+
.forEach(file => {
|
|
148
|
+
const definitions = readJsonSafe(path_1.default.join(serviceDefsDir, file));
|
|
149
|
+
if (!definitions)
|
|
150
|
+
return;
|
|
151
|
+
Object.entries(definitions).forEach(([operationId, operation]) => {
|
|
152
|
+
const serviceName = operation.service;
|
|
153
|
+
if (!serviceName)
|
|
154
|
+
return;
|
|
155
|
+
let entry = byServiceName.get(serviceName);
|
|
156
|
+
if (!entry) {
|
|
157
|
+
entry = {
|
|
158
|
+
qualifiedName: `${namePrefix}${serviceName}`,
|
|
159
|
+
serviceName,
|
|
160
|
+
namePrefix,
|
|
161
|
+
isPrefab: true,
|
|
162
|
+
prefabName,
|
|
163
|
+
doc: {
|
|
164
|
+
swagger: "2.0",
|
|
165
|
+
info: { title: "Service Swagger Documentation", "x-WM-SERVICE_TYPE": "JavaService" },
|
|
166
|
+
basePath: "/",
|
|
167
|
+
schemes: ["https", "http"],
|
|
168
|
+
paths: {},
|
|
169
|
+
definitions: {},
|
|
170
|
+
},
|
|
171
|
+
};
|
|
172
|
+
byServiceName.set(serviceName, entry);
|
|
173
|
+
out.push(entry);
|
|
174
|
+
}
|
|
175
|
+
const info = operation.wmServiceOperationInfo || {};
|
|
176
|
+
const method = (info.httpMethod || info.methodType || "get").toLowerCase();
|
|
177
|
+
const relativePath = info.relativePath || "";
|
|
178
|
+
const completePath = relativePath.startsWith("/") ? relativePath : `/${relativePath}`;
|
|
179
|
+
if (!relativePath) {
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
const existing = entry.doc.paths[completePath];
|
|
183
|
+
if (existing && existing[method]) {
|
|
184
|
+
return; // already present
|
|
185
|
+
}
|
|
186
|
+
entry.doc.paths[completePath] = {
|
|
187
|
+
...existing,
|
|
188
|
+
[method]: {
|
|
189
|
+
tags: [operation.controller].filter(Boolean),
|
|
190
|
+
operationId,
|
|
191
|
+
parameters: (info.parameters || []).map((param) => ({
|
|
192
|
+
name: param.name,
|
|
193
|
+
in: param.parameterType || "query",
|
|
194
|
+
required: !!param.required,
|
|
195
|
+
...wmTypeToSwaggerType(param.type),
|
|
196
|
+
})),
|
|
197
|
+
responses: {
|
|
198
|
+
200: { description: "Success", schema: wmTypeToSwaggerType(operation.type) },
|
|
199
|
+
},
|
|
200
|
+
},
|
|
201
|
+
};
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
function getPrefabDirectories(webappPath) {
|
|
206
|
+
if (!webappPath)
|
|
207
|
+
return [];
|
|
208
|
+
const prefabsDir = path_1.default.join(webappPath, "WEB-INF", "prefabs");
|
|
209
|
+
if (!fs_extra_1.default.existsSync(prefabsDir))
|
|
210
|
+
return [];
|
|
211
|
+
return fs_extra_1.default
|
|
212
|
+
.readdirSync(prefabsDir, { withFileTypes: true })
|
|
213
|
+
.filter(d => d.isDirectory())
|
|
214
|
+
.map(d => ({ name: d.name, path: path_1.default.join(prefabsDir, d.name) }));
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Collects every service's designtime doc — root app's `servicesFolder`, plus each prefab's own
|
|
218
|
+
* services/connectors/servicedefs found under `webappPath/WEB-INF/prefabs/<name>` — in memory.
|
|
219
|
+
* One doc per backend service; never merged together.
|
|
220
|
+
*/
|
|
221
|
+
function collectDesigntimeDocs(servicesFolder, webappPath = "") {
|
|
222
|
+
const out = [];
|
|
223
|
+
collectFromServiceFolder(servicesFolder, out);
|
|
224
|
+
getPrefabDirectories(webappPath).forEach(prefab => {
|
|
225
|
+
collectFromServiceFolder(path_1.default.join(prefab.path, "services"), out, {
|
|
226
|
+
namePrefix: `${prefab.name}__`,
|
|
227
|
+
isPrefab: true,
|
|
228
|
+
prefabName: prefab.name,
|
|
229
|
+
});
|
|
230
|
+
collectPrefabConnectors(prefab.name, prefab.path, out);
|
|
231
|
+
mergePrefabServiceDefinitions(prefab.name, prefab.path, out);
|
|
232
|
+
});
|
|
233
|
+
return out;
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=designtime-collector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"designtime-collector.js","sourceRoot":"","sources":["../../../src/services/designtime-collector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Per-document cleanup + tag grouping for one collected designtime doc (Swagger 2 shape).
|
|
4
|
+
* Unlike the old swagger-builder.js, this never merges across documents — it only cleans up
|
|
5
|
+
* one doc's own tags/operationIds and groups its own paths by tag, ready for one generated
|
|
6
|
+
* service class per tag.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.normalizeTagName = normalizeTagName;
|
|
10
|
+
exports.deriveMethodName = deriveMethodName;
|
|
11
|
+
exports.normalizeDoc = normalizeDoc;
|
|
12
|
+
const schema_to_ts_1 = require("./schema-to-ts");
|
|
13
|
+
/** Raw operationId plus every form reachable by repeatedly stripping one `${prefix}_` layer. */
|
|
14
|
+
function computeOperationIdAliases(rawOperationId, prefixCandidates) {
|
|
15
|
+
const aliases = new Set([rawOperationId]);
|
|
16
|
+
const queue = [rawOperationId];
|
|
17
|
+
while (queue.length) {
|
|
18
|
+
const current = queue.shift();
|
|
19
|
+
for (const prefix of prefixCandidates) {
|
|
20
|
+
if (!prefix || !current.startsWith(`${prefix}_`))
|
|
21
|
+
continue;
|
|
22
|
+
const stripped = current.slice(prefix.length + 1);
|
|
23
|
+
if (stripped && !aliases.has(stripped)) {
|
|
24
|
+
aliases.add(stripped);
|
|
25
|
+
queue.push(stripped);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return Array.from(aliases);
|
|
30
|
+
}
|
|
31
|
+
const HTTP_METHOD_PRIORITY = {
|
|
32
|
+
get: 0,
|
|
33
|
+
post: 1,
|
|
34
|
+
put: 2,
|
|
35
|
+
patch: 3,
|
|
36
|
+
delete: 4,
|
|
37
|
+
options: 5,
|
|
38
|
+
head: 6,
|
|
39
|
+
};
|
|
40
|
+
function toCamelCaseIdentifier(name) {
|
|
41
|
+
if (typeof name !== "string" || !/[^a-zA-Z0-9]/.test(name))
|
|
42
|
+
return name;
|
|
43
|
+
const words = name.split(/[^a-zA-Z0-9]+/).filter(Boolean);
|
|
44
|
+
if (!words.length)
|
|
45
|
+
return name;
|
|
46
|
+
let result = words.map((w, i) => (i === 0 ? w : w.charAt(0).toUpperCase() + w.slice(1))).join("");
|
|
47
|
+
if (/^[0-9]/.test(result))
|
|
48
|
+
result = "_" + result;
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
/** Strips a trailing "Controller" suffix, then a trailing "Service" suffix (the class emitter re-adds "Service" exactly once). */
|
|
52
|
+
function normalizeTagName(tagName) {
|
|
53
|
+
let name = tagName;
|
|
54
|
+
if (name.endsWith("Controller")) {
|
|
55
|
+
name = name.slice(0, -"Controller".length) || tagName;
|
|
56
|
+
}
|
|
57
|
+
if (name.endsWith("Service")) {
|
|
58
|
+
name = name.slice(0, -"Service".length) || name;
|
|
59
|
+
}
|
|
60
|
+
return name;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Reduces a raw operationId (e.g. "hrdbSwagger_DepartmentController_exportDepartments") to the
|
|
64
|
+
* bare action name ("exportDepartments").
|
|
65
|
+
*
|
|
66
|
+
* Two WM conventions: prefixes stack (so stripping repeats), and the SAME segment can appear
|
|
67
|
+
* doubled ("X_X_removeCategory"). A doubled prefix is collapsed to ONE copy rather than stripped,
|
|
68
|
+
* because a plain "X_removeCategory" sibling in the same tag would otherwise collide with it.
|
|
69
|
+
*/
|
|
70
|
+
function deriveMethodName(rawOperationId, prefixCandidates) {
|
|
71
|
+
if (!rawOperationId)
|
|
72
|
+
return "";
|
|
73
|
+
for (const prefix of prefixCandidates) {
|
|
74
|
+
if (!prefix)
|
|
75
|
+
continue;
|
|
76
|
+
const doubled = `${prefix}_${prefix}_`;
|
|
77
|
+
if (rawOperationId.startsWith(doubled)) {
|
|
78
|
+
return toCamelCaseIdentifier(rawOperationId.slice(prefix.length + 1));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
let operationId = rawOperationId;
|
|
82
|
+
let strippedSomething = true;
|
|
83
|
+
while (strippedSomething) {
|
|
84
|
+
strippedSomething = false;
|
|
85
|
+
for (const prefix of prefixCandidates) {
|
|
86
|
+
if (prefix && operationId.startsWith(`${prefix}_`)) {
|
|
87
|
+
operationId = operationId.slice(prefix.length + 1);
|
|
88
|
+
strippedSomething = true;
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return toCamelCaseIdentifier(operationId);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Whether an OpenAPIService doc's operations should split per tag or lump into one class named
|
|
97
|
+
* after the service. Docs re-exposing a real backend have meaningful per-entity tags and should
|
|
98
|
+
* split; lightweight wrappers tag everything the same (often "default"), where splitting would
|
|
99
|
+
* only rename the single class. Decided from the doc's own tag count.
|
|
100
|
+
*/
|
|
101
|
+
function hasMultipleDistinctTags(doc, serviceId) {
|
|
102
|
+
const distinctTags = new Set();
|
|
103
|
+
Object.values(doc.paths || {}).forEach(methods => {
|
|
104
|
+
Object.values(methods).forEach(operation => {
|
|
105
|
+
if (operation && typeof operation === "object") {
|
|
106
|
+
distinctTags.add((operation.tags && operation.tags[0]) || serviceId);
|
|
107
|
+
if (distinctTags.size > 1)
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
return distinctTags.size > 1;
|
|
113
|
+
}
|
|
114
|
+
function normalizeDoc(doc, serviceName) {
|
|
115
|
+
const info = doc.info || {};
|
|
116
|
+
const serviceType = info["x-WM-SERVICE_TYPE"];
|
|
117
|
+
const serviceId = info["x-WM-SERVICE_ID"] || serviceName;
|
|
118
|
+
const proxyWeb = info["x-WM-USE_PROXY_FOR_WEB"] !== false;
|
|
119
|
+
const splitOpenApiServiceByTag = serviceType === "OpenAPIService" && hasMultipleDistinctTags(doc, serviceId);
|
|
120
|
+
// tag -> methodName -> chosen operation. A Map (not a plain array) so a same-named GET/POST
|
|
121
|
+
// pair for one logical action (WM's "fall back to POST when the query string is too long for
|
|
122
|
+
// GET" convention) can be deduped/replaced in place instead of both surviving into the output.
|
|
123
|
+
const byTag = new Map();
|
|
124
|
+
Object.entries(doc.paths || {}).forEach(([pathTemplate, methods]) => {
|
|
125
|
+
const orderedMethods = Object.entries(methods).sort(([a], [b]) => { var _a, _b; return ((_a = HTTP_METHOD_PRIORITY[a]) !== null && _a !== void 0 ? _a : 99) - ((_b = HTTP_METHOD_PRIORITY[b]) !== null && _b !== void 0 ? _b : 99); });
|
|
126
|
+
orderedMethods.forEach(([httpMethod, operation]) => {
|
|
127
|
+
if (!operation || typeof operation !== "object")
|
|
128
|
+
return;
|
|
129
|
+
let tag;
|
|
130
|
+
let rawTag;
|
|
131
|
+
if (serviceType === "OpenAPIService" && !splitOpenApiServiceByTag) {
|
|
132
|
+
rawTag = serviceId;
|
|
133
|
+
tag = serviceId.endsWith("Service") ? serviceId.slice(0, -"Service".length) : serviceId;
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
rawTag = (operation.tags && operation.tags[0]) || serviceId;
|
|
137
|
+
tag = normalizeTagName(rawTag);
|
|
138
|
+
}
|
|
139
|
+
// Real tags are often not valid identifiers ("Manage - Category"), and this drives a class
|
|
140
|
+
// name — variable.transformer's resolveServiceTag() must sanitize the same way.
|
|
141
|
+
tag = (0, schema_to_ts_1.toPascalCase)(tag);
|
|
142
|
+
// A lumped OpenAPIService doc groups by service id, but its operationIds still commonly bake
|
|
143
|
+
// the per-op tag on as an extra layer — include it as a stripping candidate for method names.
|
|
144
|
+
const opRawTag = operation.tags && operation.tags[0];
|
|
145
|
+
const opTag = opRawTag ? normalizeTagName(opRawTag) : undefined;
|
|
146
|
+
const prefixCandidates = [rawTag, tag, serviceId, opRawTag, opTag].filter(Boolean);
|
|
147
|
+
const rawOperationId = operation.operationId || "";
|
|
148
|
+
const methodName = deriveMethodName(rawOperationId, prefixCandidates);
|
|
149
|
+
const entry = {
|
|
150
|
+
pathTemplate,
|
|
151
|
+
httpMethod,
|
|
152
|
+
operation: { ...operation, operationId: methodName },
|
|
153
|
+
rawOperationId,
|
|
154
|
+
operationIdAliases: computeOperationIdAliases(rawOperationId, prefixCandidates),
|
|
155
|
+
};
|
|
156
|
+
if (!byTag.has(tag)) {
|
|
157
|
+
byTag.set(tag, new Map());
|
|
158
|
+
}
|
|
159
|
+
const tagMethods = byTag.get(tag);
|
|
160
|
+
const existing = tagMethods.get(methodName);
|
|
161
|
+
if (existing) {
|
|
162
|
+
// Same method name from another verb (WM emits a GET and POST twin for one action).
|
|
163
|
+
// Methods are visited GET-first, so prefer POST only for export-style actions.
|
|
164
|
+
if (/^export/i.test(methodName) &&
|
|
165
|
+
httpMethod === "post" &&
|
|
166
|
+
existing.httpMethod !== "post") {
|
|
167
|
+
tagMethods.set(methodName, entry);
|
|
168
|
+
}
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
tagMethods.set(methodName, entry);
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
const operationsByTag = new Map();
|
|
175
|
+
byTag.forEach((methods, tag) => operationsByTag.set(tag, Array.from(methods.values())));
|
|
176
|
+
return {
|
|
177
|
+
basePath: doc.basePath || "",
|
|
178
|
+
host: doc.host,
|
|
179
|
+
schemes: doc.schemes,
|
|
180
|
+
proxyWeb,
|
|
181
|
+
definitions: doc.definitions || {},
|
|
182
|
+
operationsByTag,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=doc-normalizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doc-normalizer.js","sourceRoot":"","sources":["../../../src/services/doc-normalizer.ts"],"names":[],"mappings":"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"}
|