@ldsg/utils 0.3.25 → 0.3.27

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.
Files changed (43) hide show
  1. package/LICENSE +1 -1
  2. package/dist/browser.cjs +88 -0
  3. package/dist/browser.d.ts +5 -0
  4. package/dist/browser.js +51 -0
  5. package/dist/common/index.d.ts +2 -0
  6. package/dist/common/types/handler-service-settings.d.ts +14 -0
  7. package/dist/common/types/index.d.ts +2 -0
  8. package/dist/common/types/service-record.d.ts +11 -0
  9. package/dist/common/utils/index.d.ts +3 -0
  10. package/dist/common/utils/instantiate-service.d.ts +12 -0
  11. package/dist/common/utils/instantiate-services.d.ts +13 -0
  12. package/dist/common/utils/zip-app-data/constants.d.ts +15 -0
  13. package/dist/common/utils/zip-app-data/index.d.ts +18 -0
  14. package/dist/common/utils/zip-app-data/utils/add-file-to-zip-folder.d.ts +9 -0
  15. package/dist/common/utils/zip-app-data/utils/get-handler-package-json.d.ts +20 -0
  16. package/dist/common/utils/zip-app-data/utils/index.d.ts +2 -0
  17. package/dist/extend-app-data-with-path.d.ts +0 -1
  18. package/dist/extend-app-data.d.ts +0 -1
  19. package/dist/fetch-app-data.d.ts +13 -4
  20. package/dist/generate-by-app-data.d.ts +0 -1
  21. package/dist/generate.d.ts +0 -1
  22. package/dist/get-app-data.d.ts +0 -1
  23. package/dist/get-tree-resource-records.d.ts +14 -0
  24. package/dist/index.cjs +440 -0
  25. package/dist/index.d.ts +4 -1
  26. package/dist/index.js +337 -22
  27. package/dist/prepare.d.ts +6 -0
  28. package/dist/replace-resource-ids/index.d.ts +8 -0
  29. package/dist/replace-resource-ids/utils/replace-resource-ids-in-string.d.ts +10 -0
  30. package/package.json +32 -19
  31. package/dist/extend-app-data-with-path.d.ts.map +0 -1
  32. package/dist/extend-app-data-with-path.js +0 -24
  33. package/dist/extend-app-data.d.ts.map +0 -1
  34. package/dist/extend-app-data.js +0 -12
  35. package/dist/fetch-app-data.d.ts.map +0 -1
  36. package/dist/fetch-app-data.js +0 -16
  37. package/dist/generate-by-app-data.d.ts.map +0 -1
  38. package/dist/generate-by-app-data.js +0 -19
  39. package/dist/generate.d.ts.map +0 -1
  40. package/dist/generate.js +0 -11
  41. package/dist/get-app-data.d.ts.map +0 -1
  42. package/dist/get-app-data.js +0 -15
  43. package/dist/index.d.ts.map +0 -1
package/dist/index.cjs ADDED
@@ -0,0 +1,440 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.n = (module)=>{
5
+ var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
6
+ __webpack_require__.d(getter, {
7
+ a: getter
8
+ });
9
+ return getter;
10
+ };
11
+ })();
12
+ (()=>{
13
+ __webpack_require__.d = (exports1, definition)=>{
14
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
15
+ enumerable: true,
16
+ get: definition[key]
17
+ });
18
+ };
19
+ })();
20
+ (()=>{
21
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
22
+ })();
23
+ (()=>{
24
+ __webpack_require__.r = (exports1)=>{
25
+ if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
26
+ value: 'Module'
27
+ });
28
+ Object.defineProperty(exports1, '__esModule', {
29
+ value: true
30
+ });
31
+ };
32
+ })();
33
+ var __webpack_exports__ = {};
34
+ __webpack_require__.r(__webpack_exports__);
35
+ __webpack_require__.d(__webpack_exports__, {
36
+ ZipAppDataLayout: ()=>constants_ZipAppDataLayout,
37
+ loadAppResourceRecords: ()=>loadAppResourceRecords,
38
+ generate: ()=>generate,
39
+ generateByAppData: ()=>generateByAppData,
40
+ instantiateServices: ()=>instantiateServices,
41
+ addFileToZipFolder: ()=>addFileToZipFolder,
42
+ getTreeResourceRecords: ()=>getTreeResourceRecords,
43
+ zipAppData: ()=>zipAppData,
44
+ fetchAppData: ()=>fetchAppData,
45
+ instantiateService: ()=>instantiate_service_instantiateService,
46
+ getAppData: ()=>getAppData,
47
+ getHandlerPackageJson: ()=>getHandlerPackageJson,
48
+ extendAppData: ()=>extendAppData,
49
+ extendAppDataWithPath: ()=>extendAppDataWithPath,
50
+ DEFAULT_HANDLER_MODULE_PARENT_DIR_NAME: ()=>DEFAULT_HANDLER_MODULE_PARENT_DIR_NAME,
51
+ prepare: ()=>prepare,
52
+ replaceResourceIds: ()=>replaceResourceIds,
53
+ DEFAULT_APP_MODULE_HANDLER_DEPENDENCY_VERSION_TEMPLATE: ()=>DEFAULT_APP_MODULE_HANDLER_DEPENDENCY_VERSION_TEMPLATE,
54
+ DEFAULT_APP_MODULE_DIR_NAME: ()=>"app"
55
+ });
56
+ const core_namespaceObject = require("@ldsg/core");
57
+ const instantiateServices = (params)=>{
58
+ const { serviceRecords, instantiateService = instantiate_service_instantiateService, serviceTypeMap } = params;
59
+ const services = serviceRecords.map((value)=>{
60
+ const instantiateServiceRes = instantiateService({
61
+ serviceProperties: value,
62
+ serviceTypeMap
63
+ });
64
+ const { service } = instantiateServiceRes;
65
+ return service;
66
+ });
67
+ const res = {
68
+ services: services.map((value)=>{
69
+ const res = value;
70
+ res.services = services;
71
+ return res;
72
+ })
73
+ };
74
+ return res;
75
+ };
76
+ const instantiate_service_instantiateService = (params)=>{
77
+ const { serviceProperties, serviceRecords, serviceTypeMap } = params;
78
+ const { type } = serviceProperties;
79
+ if (!type) throw new Error('service type is required');
80
+ const ServiceConstructor = serviceTypeMap?.[type]?.class || core_namespaceObject.Service;
81
+ const service = new ServiceConstructor(serviceProperties);
82
+ if (serviceRecords) {
83
+ const { services } = instantiateServices({
84
+ serviceRecords,
85
+ serviceTypeMap
86
+ });
87
+ service.services = services;
88
+ }
89
+ const res = {
90
+ service
91
+ };
92
+ return res;
93
+ };
94
+ const apaas_constants_namespaceObject = require("@ldsg/apaas-constants");
95
+ const constants_namespaceObject = require("@ldsg/constants");
96
+ const external_jszip_namespaceObject = require("jszip");
97
+ var external_jszip_default = /*#__PURE__*/ __webpack_require__.n(external_jszip_namespaceObject);
98
+ const external_lodash_namespaceObject = require("lodash");
99
+ var external_lodash_default = /*#__PURE__*/ __webpack_require__.n(external_lodash_namespaceObject);
100
+ const DEFAULT_APP_MODULE_HANDLER_DEPENDENCY_VERSION_TEMPLATE = 'workspace:*';
101
+ const DEFAULT_HANDLER_MODULE_PARENT_DIR_NAME = 'handlers';
102
+ var constants_ZipAppDataLayout = /*#__PURE__*/ function(ZipAppDataLayout) {
103
+ ZipAppDataLayout["FLAT"] = "flat";
104
+ ZipAppDataLayout["NESTED"] = "nested";
105
+ return ZipAppDataLayout;
106
+ }({});
107
+ const addFileToZipFolder = (params)=>{
108
+ const { folder, path, data } = params;
109
+ folder.file(path, external_lodash_default().isObject(data) ? JSON.stringify(data, null, 2) : data);
110
+ };
111
+ const getHandlerPackageJson = (params)=>{
112
+ const { moduleName, dependencies, reuseMainAppDependencies, packageJson } = params;
113
+ external_lodash_default().set(packageJson, 'name', moduleName);
114
+ const packageJsonDependencies = external_lodash_default().omit(external_lodash_default().fromPairs(dependencies.map((value)=>[
115
+ value.name,
116
+ value.version ?? 'latest'
117
+ ])), reuseMainAppDependencies);
118
+ external_lodash_default().set(packageJson, 'dependencies', packageJsonDependencies);
119
+ const res = {
120
+ packageJson
121
+ };
122
+ return res;
123
+ };
124
+ const zipAppData = async (params)=>{
125
+ const { environmentVariables, filesInAppModele = constants_namespaceObject.FILES_IN_APP_TEMPLATE_MODULE, filesInHandlerModele = constants_namespaceObject.FILES_IN_HANDLER_TEMPLATE_MODULE, resourceRecords, reuseMainAppDependencies = [], type, appModuleHandlerDependencyVersionTemplate = DEFAULT_APP_MODULE_HANDLER_DEPENDENCY_VERSION_TEMPLATE, layout = constants_ZipAppDataLayout.NESTED } = params;
126
+ const rootZip = new (external_jszip_default())();
127
+ const handlerResourceRecords = resourceRecords.filter((resourceRecord)=>{
128
+ const { kind } = resourceRecord;
129
+ return kind === apaas_constants_namespaceObject.ApaasResourceKind.HANDLER;
130
+ });
131
+ let appModuleFolder;
132
+ let handlerModuleParentFolder;
133
+ switch(layout){
134
+ case constants_ZipAppDataLayout.FLAT:
135
+ appModuleFolder = rootZip.folder("app");
136
+ handlerModuleParentFolder = rootZip;
137
+ break;
138
+ case constants_ZipAppDataLayout.NESTED:
139
+ default:
140
+ appModuleFolder = rootZip;
141
+ handlerModuleParentFolder = appModuleFolder.folder(DEFAULT_HANDLER_MODULE_PARENT_DIR_NAME);
142
+ break;
143
+ }
144
+ if (!appModuleFolder) throw new Error('invalid app folder');
145
+ if (!handlerModuleParentFolder) throw new Error('invalid handler module parent folder');
146
+ for (const file of filesInAppModele){
147
+ const { path } = file;
148
+ let data;
149
+ switch(path){
150
+ case 'package.json':
151
+ {
152
+ const packageJson = file.data;
153
+ data = {
154
+ ...packageJson,
155
+ dependencies: {
156
+ ...external_lodash_default().fromPairs(handlerResourceRecords.map((handlerResourceRecord)=>{
157
+ const { id: moduleName } = handlerResourceRecord;
158
+ return [
159
+ moduleName,
160
+ appModuleHandlerDependencyVersionTemplate.replace('MODULE_NAME', moduleName)
161
+ ];
162
+ })),
163
+ ...packageJson.dependencies
164
+ }
165
+ };
166
+ break;
167
+ }
168
+ case 'manifest.json':
169
+ data = external_lodash_default().pick(params, 'resourceRecords');
170
+ break;
171
+ case '.env':
172
+ if (environmentVariables) data = external_lodash_default().toPairs(environmentVariables).map((value)=>value.join('=')).join('\n');
173
+ break;
174
+ default:
175
+ {
176
+ const omitPaths = [
177
+ '.gitignore',
178
+ 'pnpm-lock.yaml'
179
+ ];
180
+ if (!omitPaths.includes(path)) {
181
+ if ('data' in file) data = file.data;
182
+ }
183
+ break;
184
+ }
185
+ }
186
+ if (data) addFileToZipFolder({
187
+ folder: appModuleFolder,
188
+ path,
189
+ data
190
+ });
191
+ }
192
+ if (handlerResourceRecords.length) external_lodash_default().each(handlerResourceRecords, (handlerManifestResource)=>{
193
+ const { id, settings } = handlerManifestResource;
194
+ const { code, dependencies } = settings;
195
+ const handlerFolder = handlerModuleParentFolder.folder(id);
196
+ if (handlerFolder) for (const file of filesInHandlerModele){
197
+ const { path } = file;
198
+ let data;
199
+ switch(path){
200
+ case 'index.ts':
201
+ data = code;
202
+ break;
203
+ case 'package.json':
204
+ {
205
+ const { packageJson } = getHandlerPackageJson({
206
+ packageJson: file.data,
207
+ moduleName: id,
208
+ dependencies,
209
+ reuseMainAppDependencies
210
+ });
211
+ data = packageJson;
212
+ break;
213
+ }
214
+ default:
215
+ if ('data' in file) data = file.data;
216
+ break;
217
+ }
218
+ if (data) addFileToZipFolder({
219
+ folder: handlerFolder,
220
+ path,
221
+ data
222
+ });
223
+ }
224
+ });
225
+ const archive = await rootZip.generateAsync({
226
+ type
227
+ });
228
+ const res = {
229
+ archive
230
+ };
231
+ return res;
232
+ };
233
+ const extendAppData = (params)=>{
234
+ const { appData, extraAppData } = params;
235
+ const res = {
236
+ ...extraAppData,
237
+ ...appData
238
+ };
239
+ return res;
240
+ };
241
+ const external_fs_extra_namespaceObject = require("fs-extra");
242
+ var external_fs_extra_default = /*#__PURE__*/ __webpack_require__.n(external_fs_extra_namespaceObject);
243
+ const extendAppDataWithPath = async (params)=>{
244
+ const { appData, extraAppDataPath } = params;
245
+ let extraAppData = {};
246
+ if (extraAppDataPath) {
247
+ const existsRes = await external_fs_extra_default().exists(extraAppDataPath);
248
+ if (existsRes) extraAppData = await external_fs_extra_default().readJson(extraAppDataPath);
249
+ }
250
+ const res = extendAppData({
251
+ appData,
252
+ extraAppData
253
+ });
254
+ return res;
255
+ };
256
+ const external_axios_namespaceObject = require("axios");
257
+ var external_axios_default = /*#__PURE__*/ __webpack_require__.n(external_axios_namespaceObject);
258
+ const external_jsonata_namespaceObject = require("jsonata");
259
+ var external_jsonata_default = /*#__PURE__*/ __webpack_require__.n(external_jsonata_namespaceObject);
260
+ const external_path_namespaceObject = require("path");
261
+ var external_path_default = /*#__PURE__*/ __webpack_require__.n(external_path_namespaceObject);
262
+ const readSourceData = async (uri)=>{
263
+ if (external_lodash_default().startsWith(uri, 'http')) {
264
+ const axiosRes = await external_axios_default()({
265
+ url: uri
266
+ });
267
+ return axiosRes.data;
268
+ }
269
+ if (external_path_default().isAbsolute(uri)) return external_fs_extra_default().readJson(uri);
270
+ return external_fs_extra_default().readJson(external_path_default().resolve(process.cwd(), uri));
271
+ };
272
+ const normalizeSourceData = async (rawData, expression)=>{
273
+ if (expression) {
274
+ const exp = external_jsonata_default()(expression);
275
+ return await exp.evaluate(rawData);
276
+ }
277
+ return rawData;
278
+ };
279
+ const loadAppResourceRecords = async (params)=>{
280
+ const { appDataUri, apaasAppDataUri, apaasAppDataExpression } = params;
281
+ if (apaasAppDataUri) {
282
+ const rawData = await readSourceData(apaasAppDataUri);
283
+ const { resourceRecords } = await normalizeSourceData(rawData, apaasAppDataExpression);
284
+ const apaasRecords = resourceRecords.map((record)=>({
285
+ id: record.id,
286
+ kind: record.kind,
287
+ parentId: record.parentId ?? null,
288
+ settings: record.settings ?? {}
289
+ }));
290
+ return {
291
+ resourceRecords: apaasRecords,
292
+ sourceType: 'apaas'
293
+ };
294
+ }
295
+ if (!appDataUri) throw new Error('Missing appDataUri or apaasAppDataUri');
296
+ const appData = await readSourceData(appDataUri);
297
+ return {
298
+ resourceRecords: appData.resourceRecords,
299
+ sourceType: 'runtime'
300
+ };
301
+ };
302
+ const fetchAppData = async (params)=>{
303
+ const { lgsgAppDataUrl: url } = params;
304
+ const axiosRes = await external_axios_default()({
305
+ url
306
+ });
307
+ const res = axiosRes.data;
308
+ return res;
309
+ };
310
+ const external_adm_zip_namespaceObject = require("adm-zip");
311
+ var external_adm_zip_default = /*#__PURE__*/ __webpack_require__.n(external_adm_zip_namespaceObject);
312
+ const generateByAppData = async (params)=>{
313
+ const { appData, outputPath } = params;
314
+ const zipAppDataRes = await zipAppData({
315
+ ...appData,
316
+ type: 'nodebuffer'
317
+ });
318
+ const { archive } = zipAppDataRes;
319
+ const admZip = new (external_adm_zip_default())(archive);
320
+ admZip.extractAllTo(outputPath, true);
321
+ };
322
+ const getAppData = async (params)=>{
323
+ const { extraAppDataPath } = params;
324
+ const appData = await fetchAppData(params);
325
+ const res = await extendAppDataWithPath({
326
+ appData,
327
+ extraAppDataPath
328
+ });
329
+ return res;
330
+ };
331
+ const generate = async (params)=>{
332
+ const { outputPath } = params;
333
+ const appData = await getAppData(params);
334
+ await generateByAppData({
335
+ appData,
336
+ outputPath
337
+ });
338
+ };
339
+ const getTreeResourceRecords = (params)=>{
340
+ const { resourceRecords, rootId } = params;
341
+ const childrenMap = new Map();
342
+ for (const r of resourceRecords){
343
+ if (!r.parentId) continue;
344
+ const children = childrenMap.get(r.parentId);
345
+ if (children) children.push(r.id);
346
+ else childrenMap.set(r.parentId, [
347
+ r.id
348
+ ]);
349
+ }
350
+ const ids = new Set();
351
+ const stack = [
352
+ rootId
353
+ ];
354
+ while(stack.length > 0){
355
+ const id = stack.pop();
356
+ if (ids.has(id)) continue;
357
+ ids.add(id);
358
+ const children = childrenMap.get(id);
359
+ if (children) stack.push(...children);
360
+ }
361
+ const treeResourceRecords = resourceRecords.filter((r)=>ids.has(r.id));
362
+ const res = {
363
+ treeResourceRecords
364
+ };
365
+ return res;
366
+ };
367
+ const prepare = async (params)=>{
368
+ const { outputPath } = params;
369
+ const { archive } = await zipAppData({
370
+ ...external_lodash_default().omit(params, 'outputPath'),
371
+ type: 'nodebuffer'
372
+ });
373
+ const admZip = new (external_adm_zip_default())(archive);
374
+ admZip.extractAllTo(outputPath, true);
375
+ };
376
+ const replaceResourceIdsInString = (params)=>{
377
+ const { jsonString, oldResourceIdToNewResourceIdMap } = params;
378
+ let result = jsonString;
379
+ for (const [oldResourceId, newResourceId] of Object.entries(oldResourceIdToNewResourceIdMap))result = result.split(oldResourceId).join(newResourceId);
380
+ const res = {
381
+ jsonString: result
382
+ };
383
+ return res;
384
+ };
385
+ const replaceResourceIds = (params)=>{
386
+ const { source, oldResourceIdToNewResourceIdMap } = params;
387
+ const jsonString = JSON.stringify(source);
388
+ const { jsonString: replacedJsonString } = replaceResourceIdsInString({
389
+ jsonString,
390
+ oldResourceIdToNewResourceIdMap
391
+ });
392
+ const replacement = JSON.parse(replacedJsonString);
393
+ const res = {
394
+ replacement
395
+ };
396
+ return res;
397
+ };
398
+ exports.DEFAULT_APP_MODULE_DIR_NAME = __webpack_exports__.DEFAULT_APP_MODULE_DIR_NAME;
399
+ exports.DEFAULT_APP_MODULE_HANDLER_DEPENDENCY_VERSION_TEMPLATE = __webpack_exports__.DEFAULT_APP_MODULE_HANDLER_DEPENDENCY_VERSION_TEMPLATE;
400
+ exports.DEFAULT_HANDLER_MODULE_PARENT_DIR_NAME = __webpack_exports__.DEFAULT_HANDLER_MODULE_PARENT_DIR_NAME;
401
+ exports.ZipAppDataLayout = __webpack_exports__.ZipAppDataLayout;
402
+ exports.addFileToZipFolder = __webpack_exports__.addFileToZipFolder;
403
+ exports.extendAppData = __webpack_exports__.extendAppData;
404
+ exports.extendAppDataWithPath = __webpack_exports__.extendAppDataWithPath;
405
+ exports.fetchAppData = __webpack_exports__.fetchAppData;
406
+ exports.generate = __webpack_exports__.generate;
407
+ exports.generateByAppData = __webpack_exports__.generateByAppData;
408
+ exports.getAppData = __webpack_exports__.getAppData;
409
+ exports.getHandlerPackageJson = __webpack_exports__.getHandlerPackageJson;
410
+ exports.getTreeResourceRecords = __webpack_exports__.getTreeResourceRecords;
411
+ exports.instantiateService = __webpack_exports__.instantiateService;
412
+ exports.instantiateServices = __webpack_exports__.instantiateServices;
413
+ exports.loadAppResourceRecords = __webpack_exports__.loadAppResourceRecords;
414
+ exports.prepare = __webpack_exports__.prepare;
415
+ exports.replaceResourceIds = __webpack_exports__.replaceResourceIds;
416
+ exports.zipAppData = __webpack_exports__.zipAppData;
417
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
418
+ "DEFAULT_APP_MODULE_DIR_NAME",
419
+ "DEFAULT_APP_MODULE_HANDLER_DEPENDENCY_VERSION_TEMPLATE",
420
+ "DEFAULT_HANDLER_MODULE_PARENT_DIR_NAME",
421
+ "ZipAppDataLayout",
422
+ "addFileToZipFolder",
423
+ "extendAppData",
424
+ "extendAppDataWithPath",
425
+ "fetchAppData",
426
+ "generate",
427
+ "generateByAppData",
428
+ "getAppData",
429
+ "getHandlerPackageJson",
430
+ "getTreeResourceRecords",
431
+ "instantiateService",
432
+ "instantiateServices",
433
+ "loadAppResourceRecords",
434
+ "prepare",
435
+ "replaceResourceIds",
436
+ "zipAppData"
437
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
438
+ Object.defineProperty(exports, '__esModule', {
439
+ value: true
440
+ });
package/dist/index.d.ts CHANGED
@@ -1,7 +1,10 @@
1
+ export * from './common';
1
2
  export * from './extend-app-data';
2
3
  export * from './extend-app-data-with-path';
3
4
  export * from './fetch-app-data';
4
5
  export * from './generate';
5
6
  export * from './generate-by-app-data';
6
7
  export * from './get-app-data';
7
- //# sourceMappingURL=index.d.ts.map
8
+ export * from './get-tree-resource-records';
9
+ export * from './prepare';
10
+ export * from './replace-resource-ids';