@contrail/cli 2.1.28 → 2.2.1
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/README.md +86 -2
- package/dist/commands/app/create.js +3 -4
- package/dist/commands/app/delete.js +5 -5
- package/dist/commands/app/init.d.ts +6 -0
- package/dist/commands/app/init.js +63 -0
- package/dist/commands/app/publish.js +3 -3
- package/dist/commands/app/version/major.d.ts +7 -0
- package/dist/commands/app/version/major.js +40 -0
- package/dist/commands/app/version/minor.d.ts +7 -0
- package/dist/commands/app/version/minor.js +40 -0
- package/dist/commands/app/version/patch.d.ts +7 -0
- package/dist/commands/app/version/patch.js +40 -0
- package/dist/commands/colors/deleteAll.js +3 -3
- package/dist/commands/colors/load.js +5 -5
- package/dist/commands/config/environments/remove.js +2 -2
- package/dist/commands/config/environments/set.js +1 -1
- package/dist/commands/groups/export.js +1 -1
- package/dist/commands/loader-process/load.js +4 -4
- package/dist/commands/loader-process/upload-and-load.js +4 -4
- package/dist/commands/projects/load.js +2 -2
- package/dist/commands/types/exportOptionSetHierarchies.js +4 -4
- package/dist/commands/types/getAll.js +31 -25
- package/dist/commands/types/loadAll.js +2 -2
- package/dist/commands/types/mergeOptionSets.js +5 -4
- package/dist/commands/types/mergeTypeProperties.js +2 -2
- package/dist/commands/types/parseOptionSetsHierarchyLocalFile.js +4 -4
- package/dist/commands/types/parseOptionSetsHierarchyValuesToKeysLocalFile.js +2 -2
- package/dist/commands/types/parseOptionSetsLocalFiles.js +2 -2
- package/dist/commands/types/parseOptionSetsToFolderStructure.js +2 -2
- package/dist/commands/types/parseTypesFromFiles.js +2 -2
- package/dist/commands/types/parseTypesFromLocalFiles.js +2 -2
- package/dist/commands/types/parseTypesFromTemplateAndDataFromLocalFiles.js +2 -2
- package/dist/commands/types/parseTypesFromTemplateFromLocalFiles.js +2 -2
- package/dist/commands/types/uploadOptionSetHierarchies.js +30 -20
- package/dist/commands/types/uploadOptionSets.js +16 -15
- package/dist/commands/types/uploadOptionSetsHierarchyLocalFile.js +5 -5
- package/dist/commands/types/uploadRuleSets.js +20 -22
- package/dist/commands/types/uploadTypePolicies.js +23 -23
- package/dist/commands/types/uploadTypePropertyPolicies.js +14 -14
- package/dist/commands/types/uploadUsageInfo.js +12 -12
- package/dist/commands/webhooks/create.js +2 -4
- package/dist/commands/webhooks/list.js +2 -4
- package/dist/helpers/app/actions-deployer.js +4 -4
- package/dist/helpers/app/app-deployer.js +9 -9
- package/dist/helpers/app/extensions-deployer.js +4 -4
- package/dist/helpers/app/update-app-config.d.ts +2 -0
- package/dist/helpers/app/update-app-config.js +20 -0
- package/dist/helpers/app/upgrade-version.d.ts +16 -0
- package/dist/helpers/app/upgrade-version.js +37 -0
- package/dist/helpers/app/upgrade-version.spec.d.ts +1 -0
- package/dist/helpers/app/upgrade-version.spec.js +33 -0
- package/dist/helpers/colors/helpers.js +2 -2
- package/dist/helpers/loader-process/helpers.js +4 -4
- package/dist/helpers/projects/helpers.js +1 -1
- package/dist/helpers/types/csv-parser.js +6 -6
- package/dist/helpers/types/type-extractor.js +1 -1
- package/dist/helpers/types/type-parser.js +11 -11
- package/dist/helpers/types/type-uploader.js +21 -21
- package/dist/helpers/workflow-template-definitions/workflow-template-definition-deployer.js +6 -6
- package/dist/helpers/workflow-templates/helper.js +7 -7
- package/dist/interfaces.d.ts +2 -1
- package/dist/templates/typescript/app.yml +1 -1
- package/dist/templates/typescript/package.json +2 -2
- package/oclif.manifest.json +150 -2
- package/package.json +3 -2
|
@@ -44,7 +44,7 @@ GetAllTypes.flags = {
|
|
|
44
44
|
async function getAll(outDir, overwrite) {
|
|
45
45
|
try {
|
|
46
46
|
const userConfig = await (0, login_1.authUser)();
|
|
47
|
-
logger_1.default.info(
|
|
47
|
+
logger_1.default.info(`${chalk_1.default.blue.bold('START')} Getting all types for orgId: ${userConfig.orgId}`);
|
|
48
48
|
// make directory to house exports
|
|
49
49
|
if (!fs_1.default.existsSync(path.resolve(outDir))) {
|
|
50
50
|
fs_1.default.mkdirSync(path.resolve(outDir));
|
|
@@ -64,13 +64,13 @@ async function getAll(outDir, overwrite) {
|
|
|
64
64
|
};
|
|
65
65
|
const reducedData = await reduceData(data);
|
|
66
66
|
await saveData(reducedData, outDir, overwrite);
|
|
67
|
-
logger_1.default.info(
|
|
67
|
+
logger_1.default.info(`${chalk_1.default.yellow.bold('TYPES')} Retrieved`);
|
|
68
68
|
}
|
|
69
69
|
catch (e) {
|
|
70
|
-
logger_1.default.info(
|
|
70
|
+
logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} Types Retrieval Failed. ${e}`);
|
|
71
71
|
return;
|
|
72
72
|
}
|
|
73
|
-
logger_1.default.info(
|
|
73
|
+
logger_1.default.info(`${chalk_1.default.green.bold('COMPLETE')} Types Retrieval Complete.`);
|
|
74
74
|
}
|
|
75
75
|
exports.getAll = getAll;
|
|
76
76
|
async function reduceTypePropertyPolicies(data) {
|
|
@@ -107,6 +107,7 @@ async function reduceTypePropertyPolicies(data) {
|
|
|
107
107
|
return (_a = data === null || data === void 0 ? void 0 : data.typePropertyPolicies) === null || _a === void 0 ? void 0 : _a.map((x) => {
|
|
108
108
|
return {
|
|
109
109
|
label: x.label,
|
|
110
|
+
identifier: x.identifier,
|
|
110
111
|
policy: {
|
|
111
112
|
version: x.policy.version,
|
|
112
113
|
statements: x.policy.statements.map((x) => reducePrincipal(x)),
|
|
@@ -128,15 +129,15 @@ function reduceTypePropertyPolicyLinks(data) {
|
|
|
128
129
|
var _a, _b;
|
|
129
130
|
const typeSlug = typePropertyIdToTypeSlugMap[x.typePropertyId];
|
|
130
131
|
const typePropertySlug = (_a = typeProperties.find((y) => y.id === x.typePropertyId)) === null || _a === void 0 ? void 0 : _a.slug;
|
|
131
|
-
const
|
|
132
|
-
if (!typeSlug || !typePropertySlug || !
|
|
133
|
-
logger_1.default.warn(
|
|
132
|
+
const typePropertyPolicyIdentifier = (_b = data.typePropertyPolicies.find((y) => y.id === x.typePropertyPolicyId)) === null || _b === void 0 ? void 0 : _b.identifier;
|
|
133
|
+
if (!typeSlug || !typePropertySlug || !typePropertyPolicyIdentifier) {
|
|
134
|
+
logger_1.default.warn(`Could not reduce bad type property policy link... skipping ${x}`);
|
|
134
135
|
return null;
|
|
135
136
|
}
|
|
136
137
|
return {
|
|
137
138
|
typeSlug,
|
|
138
139
|
typePropertySlug,
|
|
139
|
-
|
|
140
|
+
typePropertyPolicyIdentifier,
|
|
140
141
|
};
|
|
141
142
|
}).filter((x) => !!x);
|
|
142
143
|
}
|
|
@@ -174,6 +175,7 @@ async function reduceTypePolicies(data) {
|
|
|
174
175
|
return (_a = data === null || data === void 0 ? void 0 : data.typePolicies) === null || _a === void 0 ? void 0 : _a.map((x) => {
|
|
175
176
|
return {
|
|
176
177
|
label: x.label,
|
|
178
|
+
identifier: x.identifier,
|
|
177
179
|
policy: {
|
|
178
180
|
version: x.policy.version,
|
|
179
181
|
statements: x.policy.statements.map((x) => reducePrincipal(x)),
|
|
@@ -188,7 +190,7 @@ function reduceTypePolicyLinks(data) {
|
|
|
188
190
|
var _a, _b;
|
|
189
191
|
return {
|
|
190
192
|
typeSlug: (_a = types.find((y) => y.id === x.typeId)) === null || _a === void 0 ? void 0 : _a.slug,
|
|
191
|
-
|
|
193
|
+
typePolicyIdentifier: (_b = data.typePolicies.find((y) => y.id === x.typePolicyId)) === null || _b === void 0 ? void 0 : _b.identifier,
|
|
192
194
|
};
|
|
193
195
|
});
|
|
194
196
|
}
|
|
@@ -220,10 +222,10 @@ function reduceRuleSetLinks(data) {
|
|
|
220
222
|
const ruleSet = (_a = data === null || data === void 0 ? void 0 : data.ruleSets) === null || _a === void 0 ? void 0 : _a.find((x) => x.id === ruleSetLink.typeRuleSetId);
|
|
221
223
|
const type = (_b = data === null || data === void 0 ? void 0 : data.types) === null || _b === void 0 ? void 0 : _b.find((x) => x.id === ruleSetLink.typeId);
|
|
222
224
|
if (!ruleSet || !type) {
|
|
223
|
-
logger_1.default.info('
|
|
225
|
+
logger_1.default.info(`${chalk_1.default.red.bold('TYPES')} Skipping bad rule set link ${ruleSetLink.id}`);
|
|
224
226
|
}
|
|
225
227
|
reducedRuleSetLinks.push({
|
|
226
|
-
ruleSet: ruleSet.
|
|
228
|
+
ruleSet: ruleSet.identifier,
|
|
227
229
|
type: type.slug,
|
|
228
230
|
});
|
|
229
231
|
}
|
|
@@ -240,6 +242,7 @@ function reduceRuleSets(data) {
|
|
|
240
242
|
return {
|
|
241
243
|
ruleSet: x.ruleSet,
|
|
242
244
|
name: x.name,
|
|
245
|
+
identifier: x.identifier,
|
|
243
246
|
};
|
|
244
247
|
}).sort((one, two) => (one.name < two.name ? -1 : 1));
|
|
245
248
|
}
|
|
@@ -248,6 +251,7 @@ function reduceOptionSets(data) {
|
|
|
248
251
|
return (_a = data.optionSets) === null || _a === void 0 ? void 0 : _a.map((optionSet) => {
|
|
249
252
|
return {
|
|
250
253
|
name: optionSet.name,
|
|
254
|
+
slug: optionSet.slug,
|
|
251
255
|
isArchived: optionSet.isArchived,
|
|
252
256
|
optionSet: optionSet.optionSet,
|
|
253
257
|
};
|
|
@@ -256,11 +260,12 @@ function reduceOptionSets(data) {
|
|
|
256
260
|
function reduceOptionSetHierarchies(data) {
|
|
257
261
|
var _a;
|
|
258
262
|
return (_a = data.optionSetHierarchies) === null || _a === void 0 ? void 0 : _a.map((x) => {
|
|
259
|
-
const
|
|
263
|
+
const hierarchyBySlug = x.hierarchy.map((optionSetId) => { var _a, _b; return (_b = (_a = data.optionSets) === null || _a === void 0 ? void 0 : _a.find((x) => x.id === optionSetId)) === null || _b === void 0 ? void 0 : _b.slug; });
|
|
260
264
|
return {
|
|
261
|
-
hierarchy:
|
|
265
|
+
hierarchy: hierarchyBySlug,
|
|
262
266
|
options: x.options,
|
|
263
267
|
name: x.name,
|
|
268
|
+
identifier: x.identifier,
|
|
264
269
|
};
|
|
265
270
|
}).sort((one, two) => (one.name < two.name ? -1 : 1));
|
|
266
271
|
}
|
|
@@ -270,37 +275,38 @@ function reduceOptionSetHierarchyLinks(data) {
|
|
|
270
275
|
var _a;
|
|
271
276
|
const osh = data.optionSetHierarchies.find((y) => y.id === x.optionSetHierarchyId);
|
|
272
277
|
if (!osh) {
|
|
273
|
-
logger_1.default.info(
|
|
278
|
+
logger_1.default.info(`OSH Link: could not find option set hierarchy ${x.optionSetHierarchyId} skipping...`);
|
|
274
279
|
return null;
|
|
275
280
|
}
|
|
276
281
|
const type = data.types.find((y) => y.id === x.typeId);
|
|
277
282
|
if (!type) {
|
|
278
|
-
logger_1.default.info(
|
|
283
|
+
logger_1.default.info(`OSH Link: could not find type ${x.typeId} skipping...`);
|
|
279
284
|
return null;
|
|
280
285
|
}
|
|
281
286
|
const typePropertySlugs = [];
|
|
282
287
|
for (const tpId of x.hierarchyTypePropertyIds) {
|
|
283
288
|
const typePropertySlug = (_a = type.typeProperties.find((y) => y.id === tpId)) === null || _a === void 0 ? void 0 : _a.slug;
|
|
284
289
|
if (!typePropertySlug) {
|
|
285
|
-
logger_1.default.info(
|
|
290
|
+
logger_1.default.info(`OSH Link: could not find type property ${tpId} skipping...`);
|
|
286
291
|
return null;
|
|
287
292
|
}
|
|
288
293
|
typePropertySlugs.push(typePropertySlug);
|
|
289
294
|
}
|
|
290
295
|
return {
|
|
291
|
-
|
|
296
|
+
optionSetHierarchyIdentifier: osh.identifier,
|
|
292
297
|
typeSlug: type.slug,
|
|
293
298
|
typePropertySlugs,
|
|
294
299
|
};
|
|
295
300
|
}).filter((x) => !!x).sort((one, two) => (one.typeSlug < two.typeSlug ? -1 : 1));
|
|
296
301
|
}
|
|
297
302
|
function reduceTypes(dataHolder) {
|
|
298
|
-
logger_1.default.info(
|
|
303
|
+
logger_1.default.info(`Found types: ${dataHolder.types.length}`);
|
|
299
304
|
let reducedTypes = [];
|
|
300
|
-
const
|
|
305
|
+
const optionSetSlugById = {};
|
|
301
306
|
for (const optionSet of dataHolder.optionSets) {
|
|
302
|
-
|
|
307
|
+
optionSetSlugById[optionSet.id] = optionSet.slug;
|
|
303
308
|
}
|
|
309
|
+
logger_1.default.debug(`option set and their ids: ${JSON.stringify(optionSetSlugById, null, 2)}`);
|
|
304
310
|
for (const type of dataHolder.types) {
|
|
305
311
|
const reducedTypeProperties = [];
|
|
306
312
|
for (const typeProperty of type.typeProperties) {
|
|
@@ -313,7 +319,7 @@ function reduceTypes(dataHolder) {
|
|
|
313
319
|
editable: typeProperty.editable,
|
|
314
320
|
searchable: typeProperty.searchable,
|
|
315
321
|
core: typeProperty.core,
|
|
316
|
-
|
|
322
|
+
typePropertyOptionSetSlug: optionSetSlugById[typeProperty.typePropertyOptionSetId],
|
|
317
323
|
formula: typeProperty.formula,
|
|
318
324
|
referencedTypePath: typeProperty.referencedTypePath,
|
|
319
325
|
referencedTypeRootSlug: typeProperty.referencedTypeRootSlug,
|
|
@@ -368,7 +374,7 @@ const saveTypesFunction = async (data, dir, overwrite) => {
|
|
|
368
374
|
for (const type of data.reducedTypes) {
|
|
369
375
|
const typePathParts = type.typePath.split(':');
|
|
370
376
|
if (!typePathParts) {
|
|
371
|
-
logger_1.default.warn(
|
|
377
|
+
logger_1.default.warn(`skipping bad type with no path ${type}`);
|
|
372
378
|
}
|
|
373
379
|
const root = typePathParts[0];
|
|
374
380
|
if (roots[root]) {
|
|
@@ -387,7 +393,7 @@ const saveTypesFunction = async (data, dir, overwrite) => {
|
|
|
387
393
|
const yamlStr = js_yaml_1.default.dump(types);
|
|
388
394
|
const fileLabel = root;
|
|
389
395
|
if (!fileLabel) {
|
|
390
|
-
logger_1.default.warn(
|
|
396
|
+
logger_1.default.warn(`skipping bad type root: ${root}`);
|
|
391
397
|
}
|
|
392
398
|
const pathToWrite = path.join(subDir, `${(0, common_1.removeSlash)(fileLabel)}.yml`);
|
|
393
399
|
if (fs_1.default.existsSync(pathToWrite)) {
|
|
@@ -408,7 +414,7 @@ async function saveData(reducedData, dir, overwrite) {
|
|
|
408
414
|
reducedOptionSetHierarchies: {
|
|
409
415
|
filename: 'option-set-hierarchies',
|
|
410
416
|
split: true,
|
|
411
|
-
fileLabel: '
|
|
417
|
+
fileLabel: 'identifier',
|
|
412
418
|
},
|
|
413
419
|
reducedOptionSetHierarchyLinks: {
|
|
414
420
|
filename: 'type-option-set-hierarchy-links',
|
|
@@ -445,7 +451,7 @@ async function saveData(reducedData, dir, overwrite) {
|
|
|
445
451
|
const yamlStr = js_yaml_1.default.dump(item);
|
|
446
452
|
const fileLabel = item[folder.fileLabel];
|
|
447
453
|
if (!fileLabel) {
|
|
448
|
-
logger_1.default.warn(
|
|
454
|
+
logger_1.default.warn(`skipping bad data: ${item}`);
|
|
449
455
|
continue;
|
|
450
456
|
}
|
|
451
457
|
const pathToWrite = path.join(subDir, `${(0, common_1.removeSlash)(fileLabel)}.yml`);
|
|
@@ -48,9 +48,9 @@ async function loadAll(dir, skipPolicies = false) {
|
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
catch (e) {
|
|
51
|
-
logger_1.default.info(
|
|
51
|
+
logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} Types Upload Failed. ${e}`);
|
|
52
52
|
return;
|
|
53
53
|
}
|
|
54
|
-
logger_1.default.info(
|
|
54
|
+
logger_1.default.info(`${chalk_1.default.green.bold('COMPLETE')} Types Upload Complete.`);
|
|
55
55
|
}
|
|
56
56
|
exports.loadAll = loadAll;
|
|
@@ -70,21 +70,21 @@ async function mergeOptionSets(fileLocation) {
|
|
|
70
70
|
const existing = currentOptionSetsByName[uploadedOptionSet.name];
|
|
71
71
|
if (!existing) {
|
|
72
72
|
if (!uploadedOptionSet.optionSet) {
|
|
73
|
-
logger_1.default.info(
|
|
73
|
+
logger_1.default.info(`No OptionSet for: ${uploadedOptionSet.name}`);
|
|
74
74
|
continue;
|
|
75
75
|
}
|
|
76
|
-
logger_1.default.info(
|
|
76
|
+
logger_1.default.info(`Adding New: ${uploadedOptionSet.name}`);
|
|
77
77
|
mergedOptionSets.push(uploadedOptionSet);
|
|
78
78
|
}
|
|
79
79
|
else {
|
|
80
|
-
logger_1.default.info(
|
|
80
|
+
logger_1.default.info(`Merging: ${uploadedOptionSet.name}`);
|
|
81
81
|
mergedOptionSets.push(mergeOptionSet(existing, uploadedOptionSet));
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
84
|
for (const currentOptionSet of currentOptionSets) {
|
|
85
85
|
const found = uploadedOptionSetsByName[currentOptionSet.name];
|
|
86
86
|
if (!found) {
|
|
87
|
-
logger_1.default.info(
|
|
87
|
+
logger_1.default.info(`Adding Existing: ${currentOptionSet.name}`);
|
|
88
88
|
mergedOptionSets.push(currentOptionSet);
|
|
89
89
|
}
|
|
90
90
|
}
|
|
@@ -94,6 +94,7 @@ function mergeOptionSet(existingOptionSet, uploadedOptionSet) {
|
|
|
94
94
|
var _a;
|
|
95
95
|
const merged = {
|
|
96
96
|
name: uploadedOptionSet.name,
|
|
97
|
+
identifier: uploadedOptionSet.identifier,
|
|
97
98
|
optionSet: uploadedOptionSet.optionSet,
|
|
98
99
|
isArchived: uploadedOptionSet.isArchived,
|
|
99
100
|
};
|
|
@@ -18,7 +18,7 @@ class MergeTypeProperties extends basecommand_1.BaseCommand {
|
|
|
18
18
|
try {
|
|
19
19
|
this.log('%s Importing local file', chalk_1.default.yellow.bold('TYPE PROPERTIES MERGE'));
|
|
20
20
|
this.log('Using File: ', args.file);
|
|
21
|
-
logger_1.default.info(
|
|
21
|
+
logger_1.default.info(`argv: ${JSON.stringify(argv)}`);
|
|
22
22
|
const typePaths = argv.slice(1);
|
|
23
23
|
this.log('Using TypePaths: ', typePaths);
|
|
24
24
|
await mergeTypeProperties(args.file, typePaths);
|
|
@@ -73,7 +73,7 @@ async function mergeTypeProperties(fileLocation, typePaths) {
|
|
|
73
73
|
for (const typePath of typePaths) {
|
|
74
74
|
const foundType = reducedData.reducedTypes.find((reducedTypes) => reducedTypes.typePath === typePath);
|
|
75
75
|
if (!foundType) {
|
|
76
|
-
logger_1.default.warn(
|
|
76
|
+
logger_1.default.warn(`${chalk_1.default.red.bold('WARNING')} No Type found for: ${typePath}`);
|
|
77
77
|
}
|
|
78
78
|
mergeType(foundType, uploadedTypeProperties);
|
|
79
79
|
}
|
|
@@ -31,16 +31,16 @@ ParseOptionSetsHierarchyLocalFile.args = {
|
|
|
31
31
|
async function parseOptionSetsHierarchyLocalFile(fileLocation) {
|
|
32
32
|
try {
|
|
33
33
|
await (0, login_1.authUser)();
|
|
34
|
-
logger_1.default.info(
|
|
34
|
+
logger_1.default.info(`${chalk_1.default.yellow.bold('OPTION SET HIERARCHY PARSE')} Importing local file`);
|
|
35
35
|
logger_1.default.info('Using File: ', fileLocation);
|
|
36
36
|
await parseAndSaveOptionSetHierarchiesLocalFile(fileLocation);
|
|
37
|
-
logger_1.default.info(
|
|
37
|
+
logger_1.default.info(`${chalk_1.default.yellow.bold('OPTION SET HIERARCHY PARSE')} Parsed`);
|
|
38
38
|
}
|
|
39
39
|
catch (e) {
|
|
40
|
-
logger_1.default.info(
|
|
40
|
+
logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} PARSE Failed. ${e}`);
|
|
41
41
|
return;
|
|
42
42
|
}
|
|
43
|
-
logger_1.default.info(
|
|
43
|
+
logger_1.default.info(`${chalk_1.default.green.bold('COMPLETE')} PARSE Complete.`);
|
|
44
44
|
}
|
|
45
45
|
exports.parseOptionSetsHierarchyLocalFile = parseOptionSetsHierarchyLocalFile;
|
|
46
46
|
async function loadOptionSetHierarchyCSV(fileLocation) {
|
|
@@ -40,10 +40,10 @@ async function parseOptionSetsHierarchyValuesToKeysLocalFile(fileLocation) {
|
|
|
40
40
|
logger_1.default.info('%s Parsed', chalk_1.default.yellow.bold('OPTION SET HIERARCHY PARSE'));
|
|
41
41
|
}
|
|
42
42
|
catch (e) {
|
|
43
|
-
logger_1.default.info(
|
|
43
|
+
logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} PARSE Failed . ${e}`);
|
|
44
44
|
return;
|
|
45
45
|
}
|
|
46
|
-
logger_1.default.info(
|
|
46
|
+
logger_1.default.info(`${chalk_1.default.green.bold('COMPLETE')} PARSE Complete.`);
|
|
47
47
|
}
|
|
48
48
|
exports.parseOptionSetsHierarchyValuesToKeysLocalFile = parseOptionSetsHierarchyValuesToKeysLocalFile;
|
|
49
49
|
async function loadOptionSetHierarchyCSV(fileLocation) {
|
|
@@ -53,10 +53,10 @@ async function ParseOptionSetsToFolderStructure(args) {
|
|
|
53
53
|
logger_1.default.info('%s Parsed', chalk_1.default.yellow.bold('OPTION SET PARSE'));
|
|
54
54
|
}
|
|
55
55
|
catch (e) {
|
|
56
|
-
logger_1.default.info(
|
|
56
|
+
logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} PARSE Failed . ${e}`);
|
|
57
57
|
return;
|
|
58
58
|
}
|
|
59
|
-
logger_1.default.info(
|
|
59
|
+
logger_1.default.info(`${chalk_1.default.green.bold('COMPLETE')} PARSE Complete.`);
|
|
60
60
|
}
|
|
61
61
|
exports.ParseOptionSetsToFolderStructure = ParseOptionSetsToFolderStructure;
|
|
62
62
|
async function loadOptionSetCSV(fileLocation) {
|
|
@@ -21,10 +21,10 @@ class ParseOptionSetsToFolderStructure extends basecommand_1.BaseCommand {
|
|
|
21
21
|
logger_1.default.info('%s Parsed', chalk_1.default.yellow.bold('OPTION SET PARSE'));
|
|
22
22
|
}
|
|
23
23
|
catch (e) {
|
|
24
|
-
logger_1.default.info(
|
|
24
|
+
logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} PARSE Failed . ${e}`);
|
|
25
25
|
return;
|
|
26
26
|
}
|
|
27
|
-
logger_1.default.info(
|
|
27
|
+
logger_1.default.info(`${chalk_1.default.green.bold('COMPLETE')} PARSE Complete.`);
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
exports.default = ParseOptionSetsToFolderStructure;
|
|
@@ -17,10 +17,10 @@ class ParseTypesFromFiles extends basecommand_1.BaseCommand {
|
|
|
17
17
|
logger_1.default.info('%s Parsed', chalk_1.default.yellow.bold('TYPES AND OPTION SETS'));
|
|
18
18
|
}
|
|
19
19
|
catch (e) {
|
|
20
|
-
logger_1.default.info(
|
|
20
|
+
logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} Parsing Failed . ${e}`);
|
|
21
21
|
return;
|
|
22
22
|
}
|
|
23
|
-
logger_1.default.info(
|
|
23
|
+
logger_1.default.info(`${chalk_1.default.green.bold('COMPLETE')} Parsing Complete.`);
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
exports.default = ParseTypesFromFiles;
|
|
@@ -17,10 +17,10 @@ class ParseTypesFromLocalFiles extends basecommand_1.BaseCommand {
|
|
|
17
17
|
logger_1.default.info('%s Parsed', chalk_1.default.yellow.bold('TYPES AND OPTION SETS'));
|
|
18
18
|
}
|
|
19
19
|
catch (e) {
|
|
20
|
-
logger_1.default.info(
|
|
20
|
+
logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} Parsing Failed . ${e}`);
|
|
21
21
|
return;
|
|
22
22
|
}
|
|
23
|
-
logger_1.default.info(
|
|
23
|
+
logger_1.default.info(`${chalk_1.default.green.bold('COMPLETE')} Parsing Complete.`);
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
exports.default = ParseTypesFromLocalFiles;
|
|
@@ -19,10 +19,10 @@ class ParseTypesFromTemplateAndDataFromLocalFiles extends basecommand_1.BaseComm
|
|
|
19
19
|
logger_1.default.info('%s Parsed', chalk_1.default.yellow.bold('TYPES AND OPTION SETS'));
|
|
20
20
|
}
|
|
21
21
|
catch (e) {
|
|
22
|
-
logger_1.default.info(
|
|
22
|
+
logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} Parsing Failed . ${e}`);
|
|
23
23
|
return;
|
|
24
24
|
}
|
|
25
|
-
logger_1.default.info(
|
|
25
|
+
logger_1.default.info(`${chalk_1.default.green.bold('COMPLETE')} Parsing Complete.`);
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
exports.default = ParseTypesFromTemplateAndDataFromLocalFiles;
|
|
@@ -19,10 +19,10 @@ class ParseTypesFromTemplateFromLocalFiles extends basecommand_1.BaseCommand {
|
|
|
19
19
|
logger_1.default.info('%s Parsed', chalk_1.default.yellow.bold('TYPES AND OPTION SETS'));
|
|
20
20
|
}
|
|
21
21
|
catch (e) {
|
|
22
|
-
logger_1.default.info(
|
|
22
|
+
logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} Parsing Failed . ${e}`);
|
|
23
23
|
return;
|
|
24
24
|
}
|
|
25
|
-
logger_1.default.info(
|
|
25
|
+
logger_1.default.info(`${chalk_1.default.green.bold('COMPLETE')} Parsing Complete.`);
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
exports.default = ParseTypesFromTemplateFromLocalFiles;
|
|
@@ -35,18 +35,18 @@ UploadOptionSetHierarchies.flags = {
|
|
|
35
35
|
async function uploadOptionSetHierarchies(dir) {
|
|
36
36
|
try {
|
|
37
37
|
await (0, login_1.authUser)();
|
|
38
|
-
logger_1.default.info(
|
|
38
|
+
logger_1.default.info(`${chalk_1.default.yellow.bold('OPTION SET HIERARCHIES')} Uploading`);
|
|
39
39
|
const optionSetHierarchies = await loadOptionSetHierarchies(dir);
|
|
40
40
|
await uploadOSH(optionSetHierarchies);
|
|
41
41
|
const optionSetHierarchyLinks = await loadOptionSetHierarchyLinks(dir);
|
|
42
42
|
await uploadOSHLinks(optionSetHierarchyLinks);
|
|
43
|
-
logger_1.default.info(
|
|
43
|
+
logger_1.default.info(`${chalk_1.default.yellow.bold('OPTION SET HIERARCHIES')} Uploaded`);
|
|
44
44
|
}
|
|
45
45
|
catch (e) {
|
|
46
|
-
logger_1.default.info(
|
|
46
|
+
logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} Option set hierarchy Upload Failed. ${e}`);
|
|
47
47
|
return;
|
|
48
48
|
}
|
|
49
|
-
logger_1.default.info(
|
|
49
|
+
logger_1.default.info(`${chalk_1.default.green.bold('COMPLETE')} Option set hierarchy Upload Complete.`);
|
|
50
50
|
}
|
|
51
51
|
exports.uploadOptionSetHierarchies = uploadOptionSetHierarchies;
|
|
52
52
|
function loadOptionSetHierarchies(fromDir) {
|
|
@@ -90,8 +90,8 @@ async function uploadOSH(loadedOSHs) {
|
|
|
90
90
|
for (const loadedOSH of loadedOSHs) {
|
|
91
91
|
loadedOSHByName[loadedOSH.name] = loadedOSH;
|
|
92
92
|
}
|
|
93
|
-
logger_1.default.debug(
|
|
94
|
-
logger_1.default.debug(
|
|
93
|
+
logger_1.default.debug(`current OSH: ${currentOSHs}`);
|
|
94
|
+
logger_1.default.debug(`loaded OSH: ${loadedOSHs}`);
|
|
95
95
|
for (const osh of loadedOSHs) {
|
|
96
96
|
try {
|
|
97
97
|
const found = currentOSHByName[osh.name];
|
|
@@ -99,7 +99,7 @@ async function uploadOSH(loadedOSHs) {
|
|
|
99
99
|
if (!transformOSHNameToID(osh.hierarchy, optionSets)) {
|
|
100
100
|
continue;
|
|
101
101
|
}
|
|
102
|
-
logger_1.default.
|
|
102
|
+
logger_1.default.debug(`Creating: ': ${JSON.stringify(osh)}`);
|
|
103
103
|
await new sdk_1.Entities().create({
|
|
104
104
|
entityName: 'option-set-hierarchy',
|
|
105
105
|
object: osh,
|
|
@@ -109,7 +109,7 @@ async function uploadOSH(loadedOSHs) {
|
|
|
109
109
|
if (!transformOSHNameToID(osh.hierarchy, optionSets)) {
|
|
110
110
|
continue;
|
|
111
111
|
}
|
|
112
|
-
logger_1.default.
|
|
112
|
+
logger_1.default.debug(`Updating: ${JSON.stringify(osh)}`);
|
|
113
113
|
await new sdk_1.Entities().update({
|
|
114
114
|
entityName: 'option-set-hierarchy',
|
|
115
115
|
id: found.id,
|
|
@@ -125,7 +125,7 @@ async function uploadOSH(loadedOSHs) {
|
|
|
125
125
|
try {
|
|
126
126
|
const found = loadedOSHByName[currentOSH.name];
|
|
127
127
|
if (!found) {
|
|
128
|
-
logger_1.default.info(
|
|
128
|
+
logger_1.default.info(`Deleting: ${currentOSH.name}`);
|
|
129
129
|
await new sdk_1.Entities().delete({
|
|
130
130
|
entityName: 'option-set-hierarchy',
|
|
131
131
|
id: currentOSH.id,
|
|
@@ -139,11 +139,11 @@ async function uploadOSH(loadedOSHs) {
|
|
|
139
139
|
}
|
|
140
140
|
// transforms the passed hierarchy from names to ids, and returns true if operation succeeded.
|
|
141
141
|
function transformOSHNameToID(hierarchy, optionSets) {
|
|
142
|
-
logger_1.default.info(
|
|
142
|
+
logger_1.default.info(`passed hierarchy: ${hierarchy}`);
|
|
143
143
|
for (let i = 0; i < hierarchy.length; i++) {
|
|
144
144
|
const os = optionSets.find((os) => os.name === hierarchy[i]);
|
|
145
145
|
if (!os) {
|
|
146
|
-
logger_1.default.error(
|
|
146
|
+
logger_1.default.error(`could not find option set with name ${hierarchy[i]} at position ${i}. skipping...`);
|
|
147
147
|
return false;
|
|
148
148
|
}
|
|
149
149
|
hierarchy[i] = os.id;
|
|
@@ -178,23 +178,30 @@ async function uploadOSHLinks(reducedOSHLinks) {
|
|
|
178
178
|
if (!foundType ||
|
|
179
179
|
!foundOSH ||
|
|
180
180
|
foundTPSlugs.length !== currentLink.hierarchyTypePropertyIds.length) {
|
|
181
|
-
logger_1.default.info(
|
|
181
|
+
logger_1.default.info(`skipping unhashable, invalid type option set hierarchy link: ${currentLink}`);
|
|
182
182
|
}
|
|
183
|
-
|
|
183
|
+
// don't mutate original array
|
|
184
|
+
const sortedFoundTPSlugs = [...foundTPSlugs].sort();
|
|
185
|
+
const hash = `${foundType.slug}|${foundOSH.name}|${sortedFoundTPSlugs.join('|')}`;
|
|
184
186
|
currentOSHLinkHashes[hash] = currentLink;
|
|
185
187
|
}
|
|
186
188
|
const reducedLinksByHashes = {};
|
|
187
189
|
for (const loadedLink of reducedOSHLinks) {
|
|
188
|
-
|
|
190
|
+
// don't mutate original array
|
|
191
|
+
const sortedTPSlugs = [...loadedLink.typePropertySlugs].sort();
|
|
192
|
+
const hash = `${loadedLink.typeSlug}|${loadedLink.optionSetHierarchyIdentifier}|${sortedTPSlugs.join('|')}}`;
|
|
189
193
|
reducedLinksByHashes[hash] = loadedLink;
|
|
190
194
|
}
|
|
191
195
|
for (const loadedLink of reducedOSHLinks) {
|
|
192
196
|
try {
|
|
193
|
-
|
|
197
|
+
// don't mutate original array
|
|
198
|
+
const sortedTPSlugs = [...loadedLink.typePropertySlugs].sort();
|
|
199
|
+
const found = currentOSHLinkHashes[`${loadedLink.typeSlug}|${loadedLink.optionSetHierarchyIdentifier}|${sortedTPSlugs.join('|')}`];
|
|
194
200
|
if (!found) {
|
|
195
201
|
if (!transformReducedLink(loadedLink, typesWithProperties, currentOSHs)) {
|
|
196
202
|
continue;
|
|
197
203
|
}
|
|
204
|
+
logger_1.default.debug(`Creating: ': ${JSON.stringify(loadedLink)}`);
|
|
198
205
|
await new sdk_1.Entities().create({
|
|
199
206
|
entityName: 'type-option-set-hierarchy-link',
|
|
200
207
|
object: {
|
|
@@ -213,7 +220,7 @@ async function uploadOSHLinks(reducedOSHLinks) {
|
|
|
213
220
|
try {
|
|
214
221
|
const found = reducedLinksByHashes[currentLinkHash];
|
|
215
222
|
if (!found) {
|
|
216
|
-
logger_1.default.
|
|
223
|
+
logger_1.default.debug(`Deleting: ${JSON.stringify(currentLinkHash)}`);
|
|
217
224
|
await new sdk_1.Entities().delete({
|
|
218
225
|
entityName: 'type-option-set-hierarchy-link',
|
|
219
226
|
id: currentLink['id'],
|
|
@@ -227,23 +234,26 @@ async function uploadOSHLinks(reducedOSHLinks) {
|
|
|
227
234
|
}
|
|
228
235
|
function transformReducedLink(OSHLink, typesWithProperties, OSHs) {
|
|
229
236
|
var _a, _b;
|
|
237
|
+
logger_1.default.debug(`OSHLink before transform: ${JSON.stringify(OSHLink, null, 2)}`);
|
|
230
238
|
const foundType = typesWithProperties.find((x) => x.slug === OSHLink.typeSlug);
|
|
231
239
|
if (!foundType) {
|
|
232
|
-
logger_1.default.error(
|
|
240
|
+
logger_1.default.error(`OSH Links: Could not find type with slug ${OSHLink.typeSlug}`);
|
|
233
241
|
return false;
|
|
234
242
|
}
|
|
235
243
|
OSHLink.typeId = foundType.id;
|
|
236
244
|
const foundTPs = (_b = (_a = foundType === null || foundType === void 0 ? void 0 : foundType.typeProperties) === null || _a === void 0 ? void 0 : _a.filter((x) => OSHLink.typePropertySlugs.includes(x.slug))) !== null && _b !== void 0 ? _b : [];
|
|
237
245
|
if (foundTPs.length !== OSHLink.typePropertySlugs.length) {
|
|
238
|
-
logger_1.default.error(
|
|
246
|
+
logger_1.default.error(`OSH Links: Could not find all type properties with slugs ${OSHLink.typePropertySlugs}`);
|
|
239
247
|
return false;
|
|
240
248
|
}
|
|
249
|
+
logger_1.default.debug(`foundTPs: ${JSON.stringify(foundTPs)}`);
|
|
241
250
|
OSHLink.hierarchyTypePropertyIds = foundTPs.map((x) => x.id);
|
|
242
|
-
const foundOSH = OSHs.find((x) => x.
|
|
251
|
+
const foundOSH = OSHs.find((x) => x.identifier === OSHLink.optionSetHierarchyIdentifier);
|
|
243
252
|
if (!foundOSH) {
|
|
244
|
-
logger_1.default.error(
|
|
253
|
+
logger_1.default.error(`OSH Links: Could not find option set hierarchy with identifier ${OSHLink.optionSetHierarchyIdentifier}`);
|
|
245
254
|
return false;
|
|
246
255
|
}
|
|
247
256
|
OSHLink.optionSetHierarchyId = foundOSH.id;
|
|
257
|
+
logger_1.default.debug(`OSHLink after transform: ${JSON.stringify(OSHLink, null, 2)}`);
|
|
248
258
|
return true;
|
|
249
259
|
}
|
|
@@ -34,16 +34,16 @@ UploadOptionSets.flags = {
|
|
|
34
34
|
async function uploadOptionSets(dir) {
|
|
35
35
|
try {
|
|
36
36
|
const userConfig = await (0, login_1.authUser)();
|
|
37
|
-
logger_1.default.info(
|
|
38
|
-
logger_1.default.info(
|
|
37
|
+
logger_1.default.info(`${chalk_1.default.blue.bold('START')} Getting all types for orgId: ${userConfig.orgId}`);
|
|
38
|
+
logger_1.default.info(`${chalk_1.default.yellow.bold('OPTION SETS')} Uploading`);
|
|
39
39
|
await uploadOS(dir);
|
|
40
|
-
logger_1.default.info(
|
|
40
|
+
logger_1.default.info(`${chalk_1.default.yellow.bold('OPTION SETS')} Uploaded`);
|
|
41
41
|
}
|
|
42
42
|
catch (e) {
|
|
43
|
-
logger_1.default.info(
|
|
43
|
+
logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} Types Upload Failed. ${e}`);
|
|
44
44
|
return;
|
|
45
45
|
}
|
|
46
|
-
logger_1.default.info(
|
|
46
|
+
logger_1.default.info(`${chalk_1.default.green.bold('COMPLETE')} Types Upload Complete.`);
|
|
47
47
|
}
|
|
48
48
|
exports.uploadOptionSets = uploadOptionSets;
|
|
49
49
|
function loadOptionSets(fromDir) {
|
|
@@ -65,34 +65,35 @@ async function uploadOS(dir) {
|
|
|
65
65
|
const currentOptionSets = await new sdk_1.Entities().get({
|
|
66
66
|
entityName: 'type-property-option-set',
|
|
67
67
|
});
|
|
68
|
-
const
|
|
68
|
+
const currentOptionSetsByIdentifier = {};
|
|
69
69
|
for (const currentOptionSet of currentOptionSets) {
|
|
70
|
-
|
|
70
|
+
currentOptionSetsByIdentifier[currentOptionSet.identifier] = currentOptionSet;
|
|
71
71
|
}
|
|
72
|
-
const
|
|
72
|
+
const newOptionSetsByIdentifier = {};
|
|
73
73
|
for (const optionSet of optionSets) {
|
|
74
|
-
|
|
74
|
+
newOptionSetsByIdentifier[optionSet.identifier] = optionSet;
|
|
75
75
|
}
|
|
76
76
|
for (const optionSet of optionSets) {
|
|
77
77
|
try {
|
|
78
|
-
const found =
|
|
78
|
+
const found = currentOptionSetsByIdentifier[optionSet.identifier];
|
|
79
79
|
if (!found) {
|
|
80
80
|
if (!optionSet.optionSet) {
|
|
81
|
-
logger_1.default.info(
|
|
81
|
+
logger_1.default.info(`No OptionSet for: ${optionSet.identifier}`);
|
|
82
82
|
continue;
|
|
83
83
|
}
|
|
84
|
-
logger_1.default.info(
|
|
84
|
+
logger_1.default.info(`Creating: ${optionSet.identifier}`);
|
|
85
85
|
await new sdk_1.Entities().create({
|
|
86
86
|
entityName: 'type-property-option-set',
|
|
87
87
|
object: {
|
|
88
88
|
name: optionSet.name,
|
|
89
|
+
identifier: optionSet.identifier,
|
|
89
90
|
optionSet: optionSet.optionSet,
|
|
90
91
|
isArchived: optionSet.isArchived,
|
|
91
92
|
},
|
|
92
93
|
});
|
|
93
94
|
}
|
|
94
95
|
else {
|
|
95
|
-
logger_1.default.info(
|
|
96
|
+
logger_1.default.info(`Updating: ${optionSet.identifier}`);
|
|
96
97
|
await new sdk_1.Entities().update({
|
|
97
98
|
entityName: 'type-property-option-set',
|
|
98
99
|
id: found.id,
|
|
@@ -110,9 +111,9 @@ async function uploadOS(dir) {
|
|
|
110
111
|
}
|
|
111
112
|
for (const currentOptionSet of currentOptionSets) {
|
|
112
113
|
try {
|
|
113
|
-
const found =
|
|
114
|
+
const found = newOptionSetsByIdentifier[currentOptionSet.identifier];
|
|
114
115
|
if (!found) {
|
|
115
|
-
logger_1.default.info(
|
|
116
|
+
logger_1.default.info(`Deleting: ${currentOptionSet.identifier}`);
|
|
116
117
|
await new sdk_1.Entities().delete({
|
|
117
118
|
entityName: 'type-property-option-set',
|
|
118
119
|
id: currentOptionSet.id,
|