@celonis/content-cli 0.6.1 → 0.8.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.
Files changed (33) hide show
  1. package/api/batch-import-export-api.js +51 -0
  2. package/api/package-api.js +5 -3
  3. package/api/variables-api.js +9 -1
  4. package/commands/config.command.js +53 -0
  5. package/commands/package.command.js +4 -4
  6. package/content-cli-config.js +102 -0
  7. package/content-cli-export.js +3 -1
  8. package/content-cli-import.js +2 -1
  9. package/content-cli-list.js +1 -4
  10. package/content-cli-set.js +4 -3
  11. package/content-cli.js +1 -0
  12. package/interfaces/batch-export-import-constants.js +25 -0
  13. package/interfaces/package-export-transport.js +12 -0
  14. package/lib/api/batch-import-export-api.d.ts +13 -0
  15. package/lib/api/package-api.d.ts +2 -2
  16. package/lib/api/variables-api.d.ts +1 -0
  17. package/lib/commands/config.command.d.ts +6 -0
  18. package/lib/commands/package.command.d.ts +2 -2
  19. package/lib/content-cli-config.d.ts +9 -0
  20. package/lib/interfaces/batch-export-import-constants.d.ts +11 -0
  21. package/lib/interfaces/package-export-transport.d.ts +71 -0
  22. package/lib/interfaces/package-manager.interfaces.d.ts +2 -1
  23. package/lib/services/http-client-service.v2.d.ts +3 -1
  24. package/lib/services/package-manager/batch-import-export-service.d.ts +14 -0
  25. package/lib/services/package-manager/package-service.d.ts +3 -3
  26. package/lib/services/package-manager/variable-service.d.ts +6 -0
  27. package/lib/services/studio/studio.service.d.ts +25 -0
  28. package/package.json +1 -1
  29. package/services/http-client-service.v2.js +27 -5
  30. package/services/package-manager/batch-import-export-service.js +151 -0
  31. package/services/package-manager/package-service.js +27 -37
  32. package/services/package-manager/variable-service.js +54 -4
  33. package/services/studio/studio.service.js +220 -0
@@ -0,0 +1,220 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ (function (factory) {
11
+ if (typeof module === "object" && typeof module.exports === "object") {
12
+ var v = factory(require, exports);
13
+ if (v !== undefined) module.exports = v;
14
+ }
15
+ else if (typeof define === "function" && define.amd) {
16
+ define(["require", "exports", "../../api/package-api", "../../interfaces/package-manager.interfaces", "../package-manager/datamodel-service", "../../util/yaml", "../../api/node-api", "../../api/variables-api", "../../api/space-api", "../package-manager/space-service", "../package-manager/variable-service", "../../interfaces/batch-export-import-constants", "adm-zip"], factory);
17
+ }
18
+ })(function (require, exports) {
19
+ "use strict";
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.studioService = void 0;
22
+ const package_api_1 = require("../../api/package-api");
23
+ const package_manager_interfaces_1 = require("../../interfaces/package-manager.interfaces");
24
+ const datamodel_service_1 = require("../package-manager/datamodel-service");
25
+ const yaml_1 = require("../../util/yaml");
26
+ const node_api_1 = require("../../api/node-api");
27
+ const variables_api_1 = require("../../api/variables-api");
28
+ const space_api_1 = require("../../api/space-api");
29
+ const space_service_1 = require("../package-manager/space-service");
30
+ const variable_service_1 = require("../package-manager/variable-service");
31
+ const batch_export_import_constants_1 = require("../../interfaces/batch-export-import-constants");
32
+ const AdmZip = require("adm-zip");
33
+ class StudioService {
34
+ getExportPackagesWithStudioData(packagesToExport, withDependencies) {
35
+ return __awaiter(this, void 0, void 0, function* () {
36
+ const studioPackagesWithDataModels = yield package_api_1.packageApi.findAllPackagesWithVariableAssignments(package_manager_interfaces_1.PackageManagerVariableType.DATA_MODEL);
37
+ packagesToExport = exports.studioService.setSpaceIdForStudioPackages(packagesToExport, studioPackagesWithDataModels);
38
+ if (withDependencies) {
39
+ const dataModelDetailsByNode = yield datamodel_service_1.dataModelService.getDataModelDetailsForPackages(studioPackagesWithDataModels);
40
+ packagesToExport = exports.studioService.setDataModelsForStudioPackages(packagesToExport, studioPackagesWithDataModels, dataModelDetailsByNode);
41
+ }
42
+ return packagesToExport;
43
+ });
44
+ }
45
+ fixConnectionVariables(variables) {
46
+ return variables.map(variableManifest => (Object.assign(Object.assign({}, variableManifest), { variables: variableManifest.variables.map(variable => {
47
+ if (variable.type !== package_manager_interfaces_1.PackageManagerVariableType.CONNECTION) {
48
+ return variable;
49
+ }
50
+ return this.fixConnectionVariable(variable);
51
+ }) })));
52
+ }
53
+ getStudioPackageManifests(studioPackageKeys) {
54
+ return __awaiter(this, void 0, void 0, function* () {
55
+ return Promise.all(studioPackageKeys.map((packageKey) => __awaiter(this, void 0, void 0, function* () {
56
+ const node = yield node_api_1.nodeApi.findOneByKeyAndRootNodeKey(packageKey, packageKey);
57
+ const nodeSpace = yield space_api_1.spaceApi.findOne(node.spaceId);
58
+ const variableAssignments = yield variables_api_1.variablesApi.getRuntimeVariableValues(packageKey, batch_export_import_constants_1.BatchExportImportConstants.APP_MODE_VIEWER);
59
+ return {
60
+ packageKey: packageKey,
61
+ space: {
62
+ name: nodeSpace.name,
63
+ iconReference: nodeSpace.iconReference
64
+ },
65
+ runtimeVariableAssignments: variableAssignments
66
+ };
67
+ })));
68
+ });
69
+ }
70
+ processPackageForExport(exportedPackage, exportedVariables) {
71
+ const packageZip = new AdmZip(exportedPackage.getData());
72
+ this.deleteScenarioAssets(packageZip);
73
+ this.fixConnectionVariablesForRootNodeFiles(packageZip, exportedPackage.name, exportedVariables);
74
+ return packageZip;
75
+ }
76
+ processImportedPackages(configs, existingStudioPackages, studioManifests) {
77
+ return __awaiter(this, void 0, void 0, function* () {
78
+ if (studioManifests == null) {
79
+ return;
80
+ }
81
+ for (const manifest of studioManifests) {
82
+ const existingPackage = existingStudioPackages.find(existingPackage => existingPackage.key === manifest.packageKey);
83
+ if (existingPackage) {
84
+ yield package_api_1.packageApi.movePackageToSpace(existingPackage.id, manifest.space.id);
85
+ }
86
+ yield this.assignRuntimeVariables(manifest);
87
+ }
88
+ });
89
+ }
90
+ setSpaceIdForStudioPackages(packages, studioPackages) {
91
+ const studioPackageByKey = new Map();
92
+ studioPackages.forEach(pkg => studioPackageByKey.set(pkg.key, pkg));
93
+ return packages.map(pkg => {
94
+ return studioPackageByKey.has(pkg.key) ? Object.assign(Object.assign({}, pkg), { spaceId: studioPackageByKey.get(pkg.key).spaceId }) : pkg;
95
+ });
96
+ }
97
+ setDataModelsForStudioPackages(packages, studioPackageWithDataModels, dataModelDetailsByNode) {
98
+ const studioPackageByKey = new Map();
99
+ studioPackageWithDataModels.forEach(pkg => studioPackageByKey.set(pkg.key, pkg));
100
+ return packages.map(pkg => {
101
+ return studioPackageByKey.has(pkg.key) ? Object.assign(Object.assign({}, pkg), { datamodels: dataModelDetailsByNode.get(pkg.key)
102
+ .map(dataModel => ({
103
+ name: dataModel.name,
104
+ poolId: dataModel.poolId,
105
+ dataModelId: dataModel.dataModelId
106
+ })) }) : pkg;
107
+ });
108
+ }
109
+ fixConnectionVariable(variable) {
110
+ if (!variable.value.appName) {
111
+ return variable;
112
+ }
113
+ return Object.assign(Object.assign({}, variable), { metadata: Object.assign(Object.assign({}, variable.metadata), { appName: variable.value.appName }) });
114
+ }
115
+ deleteScenarioAssets(packageZip) {
116
+ packageZip.getEntries().filter(entry => entry.entryName.startsWith(batch_export_import_constants_1.BatchExportImportConstants.NODES_FOLDER_NAME) && entry.entryName.endsWith(batch_export_import_constants_1.BatchExportImportConstants.YAML_EXTENSION))
117
+ .forEach(entry => {
118
+ const node = (0, yaml_1.parse)(entry.getData().toString());
119
+ if (node.type === batch_export_import_constants_1.BatchExportImportConstants.SCENARIO_NODE) {
120
+ packageZip.deleteFile(entry);
121
+ }
122
+ });
123
+ }
124
+ fixConnectionVariablesForRootNodeFiles(packageZip, zipName, exportedVariables) {
125
+ const packageKeyAndVersion = this.getPackageKeyAndVersion(zipName);
126
+ const connectionVariablesByKey = this.getConnectionVariablesByKeyForPackage(packageKeyAndVersion.packageKey, packageKeyAndVersion.version, exportedVariables);
127
+ if (connectionVariablesByKey.size === 0) {
128
+ return;
129
+ }
130
+ const packageEntry = packageZip.getEntry("package.yml");
131
+ const exportedNode = (0, yaml_1.parse)(packageEntry.getData().toString());
132
+ const nodeContent = (0, yaml_1.parse)(exportedNode.serializedContent);
133
+ nodeContent.variables = nodeContent.variables.map(variable => (Object.assign(Object.assign({}, variable), { metadata: variable.type === package_manager_interfaces_1.PackageManagerVariableType.CONNECTION ?
134
+ connectionVariablesByKey.get(variable.key).metadata : variable.metadata })));
135
+ exportedNode.serializedContent = (0, yaml_1.stringify)(nodeContent);
136
+ packageZip.updateFile(packageEntry, Buffer.from((0, yaml_1.stringify)(exportedNode)));
137
+ }
138
+ getPackageKeyAndVersion(zipName) {
139
+ const lastUnderscoreIndex = zipName.lastIndexOf("_");
140
+ const packageKey = zipName.replace(batch_export_import_constants_1.BatchExportImportConstants.ZIP_EXTENSION, "").substring(0, lastUnderscoreIndex);
141
+ const packageVersion = zipName.replace(batch_export_import_constants_1.BatchExportImportConstants.ZIP_EXTENSION, "").substring(lastUnderscoreIndex + 1);
142
+ return {
143
+ packageKey: packageKey,
144
+ version: packageVersion
145
+ };
146
+ }
147
+ getConnectionVariablesByKeyForPackage(packageKey, packageVersion, variables) {
148
+ const variablesByKey = new Map();
149
+ const packageVariables = variables.find(exportedVariable => exportedVariable.packageKey === packageKey && exportedVariable.version === packageVersion);
150
+ if (packageVariables && packageVariables.variables.length) {
151
+ packageVariables.variables.filter(variable => variable.type === package_manager_interfaces_1.PackageManagerVariableType.CONNECTION)
152
+ .forEach(variable => variablesByKey.set(variable.key, variable));
153
+ }
154
+ return variablesByKey;
155
+ }
156
+ mapSpaces(exportedFiles, studioManifests) {
157
+ return __awaiter(this, void 0, void 0, function* () {
158
+ if (studioManifests == null) {
159
+ return exportedFiles;
160
+ }
161
+ for (const file of exportedFiles.getEntries()) {
162
+ if (file.name.endsWith(batch_export_import_constants_1.BatchExportImportConstants.ZIP_EXTENSION)) {
163
+ const packageKey = this.getPackageKeyAndVersion(file.name).packageKey;
164
+ if (this.isStudioPackage(studioManifests, packageKey)) {
165
+ const studioManifest = studioManifests.find(manifest => manifest.packageKey === packageKey);
166
+ if (studioManifest) {
167
+ const spaceId = yield this.findDesiredSpaceIdForPackage(studioManifest);
168
+ studioManifest.space.id = spaceId;
169
+ const packageZip = new AdmZip(file.getData());
170
+ packageZip.getEntries().forEach(nodeFile => {
171
+ if (nodeFile.entryName.endsWith(batch_export_import_constants_1.BatchExportImportConstants.YAML_EXTENSION)) {
172
+ const updatedNodeFile = this.updateSpaceIdForNode(nodeFile.getData().toString(), spaceId);
173
+ packageZip.updateFile(nodeFile, Buffer.from(updatedNodeFile));
174
+ }
175
+ });
176
+ exportedFiles.updateFile(file, packageZip.toBuffer());
177
+ }
178
+ }
179
+ }
180
+ }
181
+ return exportedFiles;
182
+ });
183
+ }
184
+ isStudioPackage(studioManifests, packageKey) {
185
+ return studioManifests.some(manifest => manifest.packageKey === packageKey);
186
+ }
187
+ findDesiredSpaceIdForPackage(studioPackageManifest) {
188
+ return __awaiter(this, void 0, void 0, function* () {
189
+ const allSpaces = yield space_service_1.spaceService.refreshAndGetAllSpaces();
190
+ if (studioPackageManifest.space.id) {
191
+ const targetSpace = allSpaces.find(space => space.id === studioPackageManifest.space.id);
192
+ if (!targetSpace) {
193
+ throw Error("Provided space ID does not exist.");
194
+ }
195
+ return targetSpace.id;
196
+ }
197
+ const targetSpaceByName = allSpaces.find(space => space.name === studioPackageManifest.space.name);
198
+ if (targetSpaceByName) {
199
+ return targetSpaceByName.id;
200
+ }
201
+ const spaceTransport = yield space_service_1.spaceService.createSpace(studioPackageManifest.space.name, studioPackageManifest.space.iconReference);
202
+ return spaceTransport.id;
203
+ });
204
+ }
205
+ assignRuntimeVariables(manifest) {
206
+ return __awaiter(this, void 0, void 0, function* () {
207
+ if (manifest.runtimeVariableAssignments.length) {
208
+ yield variable_service_1.variableService.assignVariableValues(manifest.packageKey, manifest.runtimeVariableAssignments);
209
+ }
210
+ });
211
+ }
212
+ updateSpaceIdForNode(nodeContent, spaceId) {
213
+ const exportedNode = (0, yaml_1.parse)(nodeContent);
214
+ const oldSpaceId = exportedNode.unversionedMetadata.spaceId;
215
+ nodeContent = nodeContent.replace(new RegExp(oldSpaceId, "g"), spaceId);
216
+ return nodeContent;
217
+ }
218
+ }
219
+ exports.studioService = new StudioService();
220
+ });