@ldsg/utils 0.3.38 → 0.3.41
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.
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { HandlerResourceSettings } from "@ldsg/handler";
|
|
2
|
+
import { ResourceRecords } from "@ldsg/types";
|
|
3
|
+
export interface GenerateAppIndexTsParams {
|
|
4
|
+
/**
|
|
5
|
+
* Handler 资源记录
|
|
6
|
+
*/
|
|
7
|
+
handlerResourceRecords: ResourceRecords<HandlerResourceSettings>;
|
|
8
|
+
/**
|
|
9
|
+
* 根据 handler id 生成其在 app 入口文件中的相对导入路径
|
|
10
|
+
* - FLAT: `../<id>`
|
|
11
|
+
* - NESTED: `./handlers/<id>`
|
|
12
|
+
*/
|
|
13
|
+
getHandlerImportPath: (handlerId: string) => string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* 生成应用入口文件(app/index.ts)
|
|
17
|
+
*
|
|
18
|
+
* 将 handler 引入 app 并放入相应 handler 资源中:
|
|
19
|
+
* 1. 静态 import 每个 handler 模块
|
|
20
|
+
* 2. 把模块导出的 handler 注入到对应 handler 资源记录的 settings.handler
|
|
21
|
+
* 使运行时无需通过 require(moduleId) 动态加载 handler 模块
|
|
22
|
+
*/
|
|
23
|
+
export declare const generateAppIndexTs: (params: GenerateAppIndexTsParams) => string;
|
package/dist/fetch-app-data.d.ts
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import { AppData, ResourceRecords } from "@ldsg/types";
|
|
2
2
|
export interface LoadAppResourceRecordsParams {
|
|
3
3
|
appDataUri?: string;
|
|
4
|
-
|
|
5
|
-
apaasAppDataExpression?: string;
|
|
4
|
+
appDataExpression?: string;
|
|
6
5
|
}
|
|
7
6
|
export interface LoadAppResourceRecordsRes {
|
|
8
7
|
resourceRecords: ResourceRecords;
|
|
9
|
-
sourceType: "apaas" | "runtime";
|
|
10
8
|
}
|
|
11
9
|
export declare const loadAppResourceRecords: (params: LoadAppResourceRecordsParams) => Promise<LoadAppResourceRecordsRes>;
|
|
12
10
|
export interface FetchAppDataParams {
|
package/dist/index.cjs
CHANGED
|
@@ -40,6 +40,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
40
40
|
instantiateServices: ()=>instantiateServices,
|
|
41
41
|
RUSH_JSON_PATH: ()=>RUSH_JSON_PATH,
|
|
42
42
|
addFileToZipFolder: ()=>addFileToZipFolder,
|
|
43
|
+
generateAppIndexTs: ()=>generateAppIndexTs,
|
|
43
44
|
getTreeResourceRecords: ()=>getTreeResourceRecords,
|
|
44
45
|
zipAppData: ()=>zipAppData,
|
|
45
46
|
fetchAppData: ()=>fetchAppData,
|
|
@@ -111,7 +112,6 @@ function syncRushProjects(rushJsonPath, generatedProjects) {
|
|
|
111
112
|
spaces: 2
|
|
112
113
|
});
|
|
113
114
|
}
|
|
114
|
-
const apaas_constants_namespaceObject = require("@ldsg/apaas-constants");
|
|
115
115
|
const constants_namespaceObject = require("@ldsg/constants");
|
|
116
116
|
const external_jszip_namespaceObject = require("jszip");
|
|
117
117
|
var external_jszip_default = /*#__PURE__*/ __webpack_require__.n(external_jszip_namespaceObject);
|
|
@@ -126,6 +126,66 @@ const addFileToZipFolder = (params)=>{
|
|
|
126
126
|
const { folder, path, data } = params;
|
|
127
127
|
folder.file(path, external_lodash_default().isObject(data) ? JSON.stringify(data, null, 2) : data);
|
|
128
128
|
};
|
|
129
|
+
const normalizeHandlerAlias = (handlerId)=>handlerId.replace(/[^a-zA-Z0-9_$]/g, "_");
|
|
130
|
+
const generateAppIndexTs = (params)=>{
|
|
131
|
+
const { handlerResourceRecords, getHandlerImportPath } = params;
|
|
132
|
+
const handlerImports = handlerResourceRecords.map((resourceRecord)=>{
|
|
133
|
+
const { id } = resourceRecord;
|
|
134
|
+
const alias = `handlerModule_${normalizeHandlerAlias(id)}`;
|
|
135
|
+
const handlerImportPath = id;
|
|
136
|
+
return `import * as ${alias} from "${handlerImportPath}";`;
|
|
137
|
+
});
|
|
138
|
+
const handlerModulesEntries = handlerResourceRecords.map((resourceRecord)=>{
|
|
139
|
+
const { id } = resourceRecord;
|
|
140
|
+
const alias = `handlerModule_${normalizeHandlerAlias(id)}`;
|
|
141
|
+
return ` ${JSON.stringify(id)}: ${alias},`;
|
|
142
|
+
});
|
|
143
|
+
const res = `import { createApp } from "@ldsg/create-app";
|
|
144
|
+
import MANIFEST_JSON from "./manifest.json" with { type: "json" };
|
|
145
|
+
${handlerImports.length ? `${handlerImports.join("\n")}\n` : ""}const { resourceRecords } = MANIFEST_JSON as any;
|
|
146
|
+
|
|
147
|
+
const handlerModules: Record<string, any> = {
|
|
148
|
+
${handlerModulesEntries.join("\n")}
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* 将 handler 引入 app 并放入相应 handler 资源中
|
|
153
|
+
* 使运行时无需通过 require(moduleId) 动态加载 handler 模块
|
|
154
|
+
*/
|
|
155
|
+
const wiredResourceRecords = (resourceRecords as any[]).map((resourceRecord: any) => {
|
|
156
|
+
const { kind, id, settings } = resourceRecord;
|
|
157
|
+
|
|
158
|
+
if (kind === "handler" && handlerModules[id]) {
|
|
159
|
+
return {
|
|
160
|
+
...resourceRecord,
|
|
161
|
+
settings: {
|
|
162
|
+
...settings,
|
|
163
|
+
handler: handlerModules[id].handler,
|
|
164
|
+
},
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
return resourceRecord;
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
const start = async () => {
|
|
172
|
+
const app = await createApp({
|
|
173
|
+
resourceRecords: wiredResourceRecords,
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
const port = process.env.PORT || "3253";
|
|
177
|
+
|
|
178
|
+
app.listen(port, () => {
|
|
179
|
+
console.log(\`App listening on http://localhost:\${port}\`);
|
|
180
|
+
|
|
181
|
+
console.log(\`GraphQL listening on http://localhost:\${port}/graphql\`);
|
|
182
|
+
});
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
start();
|
|
186
|
+
`;
|
|
187
|
+
return res;
|
|
188
|
+
};
|
|
129
189
|
const getHandlerPackageJson = (params)=>{
|
|
130
190
|
const { moduleName, dependencies, reuseMainAppDependencies, packageJson } = params;
|
|
131
191
|
external_lodash_default().set(packageJson, "name", moduleName);
|
|
@@ -144,7 +204,7 @@ const zipAppData = async (params)=>{
|
|
|
144
204
|
const rootZip = new (external_jszip_default())();
|
|
145
205
|
const handlerResourceRecords = resourceRecords.filter((resourceRecord)=>{
|
|
146
206
|
const { kind } = resourceRecord;
|
|
147
|
-
return
|
|
207
|
+
return "handler" === kind;
|
|
148
208
|
});
|
|
149
209
|
let appModuleFolder;
|
|
150
210
|
let handlerModuleParentFolder;
|
|
@@ -168,6 +228,15 @@ const zipAppData = async (params)=>{
|
|
|
168
228
|
case "manifest.json":
|
|
169
229
|
data = external_lodash_default().pick(params, "resourceRecords");
|
|
170
230
|
break;
|
|
231
|
+
case "index.ts":
|
|
232
|
+
data = generateAppIndexTs({
|
|
233
|
+
handlerResourceRecords,
|
|
234
|
+
getHandlerImportPath: (handlerId)=>{
|
|
235
|
+
if (layout === constants_ZipAppDataLayout.FLAT) return `../${handlerId}`;
|
|
236
|
+
return `./${DEFAULT_HANDLER_MODULE_PARENT_DIR_NAME}/${handlerId}`;
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
break;
|
|
171
240
|
case ".env":
|
|
172
241
|
if (environmentVariables) data = external_lodash_default().toPairs(environmentVariables).map((value)=>value.join("=")).join("\n");
|
|
173
242
|
break;
|
|
@@ -267,29 +336,12 @@ const readSourceData = async (uri)=>{
|
|
|
267
336
|
return external_fs_extra_default().readJson(external_path_default().resolve(process.cwd(), uri));
|
|
268
337
|
};
|
|
269
338
|
const loadAppResourceRecords = async (params)=>{
|
|
270
|
-
const { appDataUri,
|
|
271
|
-
if (
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
const exp = external_jsonata_default()(expression);
|
|
275
|
-
const appData = await exp.evaluate(rawData);
|
|
276
|
-
const { resourceRecords } = appData;
|
|
277
|
-
const apaasRecords = resourceRecords.map((record)=>({
|
|
278
|
-
id: record.id,
|
|
279
|
-
kind: record.kind,
|
|
280
|
-
parentId: record.parentId ?? null,
|
|
281
|
-
settings: record.settings ?? {}
|
|
282
|
-
}));
|
|
283
|
-
return {
|
|
284
|
-
resourceRecords: apaasRecords,
|
|
285
|
-
sourceType: "apaas"
|
|
286
|
-
};
|
|
287
|
-
}
|
|
288
|
-
if (!appDataUri) throw new Error("Missing appDataUri or apaasAppDataUri");
|
|
289
|
-
const appData = await readSourceData(appDataUri);
|
|
339
|
+
const { appDataUri, appDataExpression } = params;
|
|
340
|
+
if (!appDataUri) throw new Error("Missing appDataUri");
|
|
341
|
+
const rawData = await readSourceData(appDataUri);
|
|
342
|
+
const appData = appDataExpression ? await external_jsonata_default()(appDataExpression).evaluate(rawData) : rawData;
|
|
290
343
|
return {
|
|
291
|
-
resourceRecords: appData.resourceRecords
|
|
292
|
-
sourceType: "runtime"
|
|
344
|
+
resourceRecords: appData.resourceRecords
|
|
293
345
|
};
|
|
294
346
|
};
|
|
295
347
|
const fetchAppData = async (params)=>{
|
|
@@ -405,6 +457,7 @@ exports.extendAppData = __webpack_exports__.extendAppData;
|
|
|
405
457
|
exports.extendAppDataWithPath = __webpack_exports__.extendAppDataWithPath;
|
|
406
458
|
exports.fetchAppData = __webpack_exports__.fetchAppData;
|
|
407
459
|
exports.generate = __webpack_exports__.generate;
|
|
460
|
+
exports.generateAppIndexTs = __webpack_exports__.generateAppIndexTs;
|
|
408
461
|
exports.generateByAppData = __webpack_exports__.generateByAppData;
|
|
409
462
|
exports.getAppData = __webpack_exports__.getAppData;
|
|
410
463
|
exports.getHandlerPackageJson = __webpack_exports__.getHandlerPackageJson;
|
|
@@ -427,6 +480,7 @@ for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
|
427
480
|
"extendAppDataWithPath",
|
|
428
481
|
"fetchAppData",
|
|
429
482
|
"generate",
|
|
483
|
+
"generateAppIndexTs",
|
|
430
484
|
"generateByAppData",
|
|
431
485
|
"getAppData",
|
|
432
486
|
"getHandlerPackageJson",
|
package/dist/index.js
CHANGED
|
@@ -2,7 +2,6 @@ import { Service } from "@ldsg/core";
|
|
|
2
2
|
import fs_extra from "fs-extra";
|
|
3
3
|
import lodash from "lodash";
|
|
4
4
|
import path_0 from "path";
|
|
5
|
-
import { ApaasResourceKind } from "@ldsg/apaas-constants";
|
|
6
5
|
import { FILES_IN_APP_TEMPLATE_MODULE, FILES_IN_HANDLER_TEMPLATE_MODULE } from "@ldsg/constants";
|
|
7
6
|
import jszip from "jszip";
|
|
8
7
|
import axios from "axios";
|
|
@@ -68,6 +67,66 @@ const addFileToZipFolder = (params)=>{
|
|
|
68
67
|
const { folder, path, data } = params;
|
|
69
68
|
folder.file(path, lodash.isObject(data) ? JSON.stringify(data, null, 2) : data);
|
|
70
69
|
};
|
|
70
|
+
const normalizeHandlerAlias = (handlerId)=>handlerId.replace(/[^a-zA-Z0-9_$]/g, "_");
|
|
71
|
+
const generateAppIndexTs = (params)=>{
|
|
72
|
+
const { handlerResourceRecords, getHandlerImportPath } = params;
|
|
73
|
+
const handlerImports = handlerResourceRecords.map((resourceRecord)=>{
|
|
74
|
+
const { id } = resourceRecord;
|
|
75
|
+
const alias = `handlerModule_${normalizeHandlerAlias(id)}`;
|
|
76
|
+
const handlerImportPath = id;
|
|
77
|
+
return `import * as ${alias} from "${handlerImportPath}";`;
|
|
78
|
+
});
|
|
79
|
+
const handlerModulesEntries = handlerResourceRecords.map((resourceRecord)=>{
|
|
80
|
+
const { id } = resourceRecord;
|
|
81
|
+
const alias = `handlerModule_${normalizeHandlerAlias(id)}`;
|
|
82
|
+
return ` ${JSON.stringify(id)}: ${alias},`;
|
|
83
|
+
});
|
|
84
|
+
const res = `import { createApp } from "@ldsg/create-app";
|
|
85
|
+
import MANIFEST_JSON from "./manifest.json" with { type: "json" };
|
|
86
|
+
${handlerImports.length ? `${handlerImports.join("\n")}\n` : ""}const { resourceRecords } = MANIFEST_JSON as any;
|
|
87
|
+
|
|
88
|
+
const handlerModules: Record<string, any> = {
|
|
89
|
+
${handlerModulesEntries.join("\n")}
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* 将 handler 引入 app 并放入相应 handler 资源中
|
|
94
|
+
* 使运行时无需通过 require(moduleId) 动态加载 handler 模块
|
|
95
|
+
*/
|
|
96
|
+
const wiredResourceRecords = (resourceRecords as any[]).map((resourceRecord: any) => {
|
|
97
|
+
const { kind, id, settings } = resourceRecord;
|
|
98
|
+
|
|
99
|
+
if (kind === "handler" && handlerModules[id]) {
|
|
100
|
+
return {
|
|
101
|
+
...resourceRecord,
|
|
102
|
+
settings: {
|
|
103
|
+
...settings,
|
|
104
|
+
handler: handlerModules[id].handler,
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return resourceRecord;
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
const start = async () => {
|
|
113
|
+
const app = await createApp({
|
|
114
|
+
resourceRecords: wiredResourceRecords,
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
const port = process.env.PORT || "3253";
|
|
118
|
+
|
|
119
|
+
app.listen(port, () => {
|
|
120
|
+
console.log(\`App listening on http://localhost:\${port}\`);
|
|
121
|
+
|
|
122
|
+
console.log(\`GraphQL listening on http://localhost:\${port}/graphql\`);
|
|
123
|
+
});
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
start();
|
|
127
|
+
`;
|
|
128
|
+
return res;
|
|
129
|
+
};
|
|
71
130
|
const getHandlerPackageJson = (params)=>{
|
|
72
131
|
const { moduleName, dependencies, reuseMainAppDependencies, packageJson } = params;
|
|
73
132
|
lodash.set(packageJson, "name", moduleName);
|
|
@@ -86,7 +145,7 @@ const zipAppData = async (params)=>{
|
|
|
86
145
|
const rootZip = new jszip();
|
|
87
146
|
const handlerResourceRecords = resourceRecords.filter((resourceRecord)=>{
|
|
88
147
|
const { kind } = resourceRecord;
|
|
89
|
-
return
|
|
148
|
+
return "handler" === kind;
|
|
90
149
|
});
|
|
91
150
|
let appModuleFolder;
|
|
92
151
|
let handlerModuleParentFolder;
|
|
@@ -110,6 +169,15 @@ const zipAppData = async (params)=>{
|
|
|
110
169
|
case "manifest.json":
|
|
111
170
|
data = lodash.pick(params, "resourceRecords");
|
|
112
171
|
break;
|
|
172
|
+
case "index.ts":
|
|
173
|
+
data = generateAppIndexTs({
|
|
174
|
+
handlerResourceRecords,
|
|
175
|
+
getHandlerImportPath: (handlerId)=>{
|
|
176
|
+
if (layout === constants_ZipAppDataLayout.FLAT) return `../${handlerId}`;
|
|
177
|
+
return `./${DEFAULT_HANDLER_MODULE_PARENT_DIR_NAME}/${handlerId}`;
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
break;
|
|
113
181
|
case ".env":
|
|
114
182
|
if (environmentVariables) data = lodash.toPairs(environmentVariables).map((value)=>value.join("=")).join("\n");
|
|
115
183
|
break;
|
|
@@ -205,29 +273,12 @@ const readSourceData = async (uri)=>{
|
|
|
205
273
|
return fs_extra.readJson(path_0.resolve(process.cwd(), uri));
|
|
206
274
|
};
|
|
207
275
|
const loadAppResourceRecords = async (params)=>{
|
|
208
|
-
const { appDataUri,
|
|
209
|
-
if (
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
const exp = jsonata(expression);
|
|
213
|
-
const appData = await exp.evaluate(rawData);
|
|
214
|
-
const { resourceRecords } = appData;
|
|
215
|
-
const apaasRecords = resourceRecords.map((record)=>({
|
|
216
|
-
id: record.id,
|
|
217
|
-
kind: record.kind,
|
|
218
|
-
parentId: record.parentId ?? null,
|
|
219
|
-
settings: record.settings ?? {}
|
|
220
|
-
}));
|
|
221
|
-
return {
|
|
222
|
-
resourceRecords: apaasRecords,
|
|
223
|
-
sourceType: "apaas"
|
|
224
|
-
};
|
|
225
|
-
}
|
|
226
|
-
if (!appDataUri) throw new Error("Missing appDataUri or apaasAppDataUri");
|
|
227
|
-
const appData = await readSourceData(appDataUri);
|
|
276
|
+
const { appDataUri, appDataExpression } = params;
|
|
277
|
+
if (!appDataUri) throw new Error("Missing appDataUri");
|
|
278
|
+
const rawData = await readSourceData(appDataUri);
|
|
279
|
+
const appData = appDataExpression ? await jsonata(appDataExpression).evaluate(rawData) : rawData;
|
|
228
280
|
return {
|
|
229
|
-
resourceRecords: appData.resourceRecords
|
|
230
|
-
sourceType: "runtime"
|
|
281
|
+
resourceRecords: appData.resourceRecords
|
|
231
282
|
};
|
|
232
283
|
};
|
|
233
284
|
const fetchAppData = async (params)=>{
|
|
@@ -332,4 +383,4 @@ const replaceResourceIds = (params)=>{
|
|
|
332
383
|
return res;
|
|
333
384
|
};
|
|
334
385
|
var __webpack_exports__DEFAULT_APP_MODULE_DIR_NAME = "app";
|
|
335
|
-
export { DEFAULT_APP_MODULE_HANDLER_DEPENDENCY_VERSION_TEMPLATE, DEFAULT_HANDLER_MODULE_PARENT_DIR_NAME, RUSH_JSON_PATH, constants_ZipAppDataLayout as ZipAppDataLayout, addFileToZipFolder, extendAppData, extendAppDataWithPath, fetchAppData, generate, generateByAppData, getAppData, getHandlerPackageJson, getTreeResourceRecords, instantiate_service_instantiateService as instantiateService, instantiateServices, loadAppResourceRecords, prepare, replaceResourceIds, syncRushProjects, zipAppData, __webpack_exports__DEFAULT_APP_MODULE_DIR_NAME as DEFAULT_APP_MODULE_DIR_NAME };
|
|
386
|
+
export { DEFAULT_APP_MODULE_HANDLER_DEPENDENCY_VERSION_TEMPLATE, DEFAULT_HANDLER_MODULE_PARENT_DIR_NAME, RUSH_JSON_PATH, constants_ZipAppDataLayout as ZipAppDataLayout, addFileToZipFolder, extendAppData, extendAppDataWithPath, fetchAppData, generate, generateAppIndexTs, generateByAppData, getAppData, getHandlerPackageJson, getTreeResourceRecords, instantiate_service_instantiateService as instantiateService, instantiateServices, loadAppResourceRecords, prepare, replaceResourceIds, syncRushProjects, zipAppData, __webpack_exports__DEFAULT_APP_MODULE_DIR_NAME as DEFAULT_APP_MODULE_DIR_NAME };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ldsg/utils",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.41",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "wanxger",
|
|
@@ -36,11 +36,10 @@
|
|
|
36
36
|
"jsonata": "2.2.2",
|
|
37
37
|
"jszip": "^3.10.1",
|
|
38
38
|
"lodash": "^4.17.21",
|
|
39
|
-
"@ldsg/
|
|
40
|
-
"@ldsg/
|
|
41
|
-
"@ldsg/
|
|
42
|
-
"@ldsg/
|
|
43
|
-
"@ldsg/types": "0.3.38"
|
|
39
|
+
"@ldsg/core": "0.3.41",
|
|
40
|
+
"@ldsg/handler": "0.3.41",
|
|
41
|
+
"@ldsg/constants": "0.3.41",
|
|
42
|
+
"@ldsg/types": "0.3.41"
|
|
44
43
|
},
|
|
45
44
|
"devDependencies": {
|
|
46
45
|
"@rslib/core": "^0.17.1",
|