@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.
Files changed (65) hide show
  1. package/README.md +86 -2
  2. package/dist/commands/app/create.js +3 -4
  3. package/dist/commands/app/delete.js +5 -5
  4. package/dist/commands/app/init.d.ts +6 -0
  5. package/dist/commands/app/init.js +63 -0
  6. package/dist/commands/app/publish.js +3 -3
  7. package/dist/commands/app/version/major.d.ts +7 -0
  8. package/dist/commands/app/version/major.js +40 -0
  9. package/dist/commands/app/version/minor.d.ts +7 -0
  10. package/dist/commands/app/version/minor.js +40 -0
  11. package/dist/commands/app/version/patch.d.ts +7 -0
  12. package/dist/commands/app/version/patch.js +40 -0
  13. package/dist/commands/colors/deleteAll.js +3 -3
  14. package/dist/commands/colors/load.js +5 -5
  15. package/dist/commands/config/environments/remove.js +2 -2
  16. package/dist/commands/config/environments/set.js +1 -1
  17. package/dist/commands/groups/export.js +1 -1
  18. package/dist/commands/loader-process/load.js +4 -4
  19. package/dist/commands/loader-process/upload-and-load.js +4 -4
  20. package/dist/commands/projects/load.js +2 -2
  21. package/dist/commands/types/exportOptionSetHierarchies.js +4 -4
  22. package/dist/commands/types/getAll.js +31 -25
  23. package/dist/commands/types/loadAll.js +2 -2
  24. package/dist/commands/types/mergeOptionSets.js +5 -4
  25. package/dist/commands/types/mergeTypeProperties.js +2 -2
  26. package/dist/commands/types/parseOptionSetsHierarchyLocalFile.js +4 -4
  27. package/dist/commands/types/parseOptionSetsHierarchyValuesToKeysLocalFile.js +2 -2
  28. package/dist/commands/types/parseOptionSetsLocalFiles.js +2 -2
  29. package/dist/commands/types/parseOptionSetsToFolderStructure.js +2 -2
  30. package/dist/commands/types/parseTypesFromFiles.js +2 -2
  31. package/dist/commands/types/parseTypesFromLocalFiles.js +2 -2
  32. package/dist/commands/types/parseTypesFromTemplateAndDataFromLocalFiles.js +2 -2
  33. package/dist/commands/types/parseTypesFromTemplateFromLocalFiles.js +2 -2
  34. package/dist/commands/types/uploadOptionSetHierarchies.js +30 -20
  35. package/dist/commands/types/uploadOptionSets.js +16 -15
  36. package/dist/commands/types/uploadOptionSetsHierarchyLocalFile.js +5 -5
  37. package/dist/commands/types/uploadRuleSets.js +20 -22
  38. package/dist/commands/types/uploadTypePolicies.js +23 -23
  39. package/dist/commands/types/uploadTypePropertyPolicies.js +14 -14
  40. package/dist/commands/types/uploadUsageInfo.js +12 -12
  41. package/dist/commands/webhooks/create.js +2 -4
  42. package/dist/commands/webhooks/list.js +2 -4
  43. package/dist/helpers/app/actions-deployer.js +4 -4
  44. package/dist/helpers/app/app-deployer.js +9 -9
  45. package/dist/helpers/app/extensions-deployer.js +4 -4
  46. package/dist/helpers/app/update-app-config.d.ts +2 -0
  47. package/dist/helpers/app/update-app-config.js +20 -0
  48. package/dist/helpers/app/upgrade-version.d.ts +16 -0
  49. package/dist/helpers/app/upgrade-version.js +37 -0
  50. package/dist/helpers/app/upgrade-version.spec.d.ts +1 -0
  51. package/dist/helpers/app/upgrade-version.spec.js +33 -0
  52. package/dist/helpers/colors/helpers.js +2 -2
  53. package/dist/helpers/loader-process/helpers.js +4 -4
  54. package/dist/helpers/projects/helpers.js +1 -1
  55. package/dist/helpers/types/csv-parser.js +6 -6
  56. package/dist/helpers/types/type-extractor.js +1 -1
  57. package/dist/helpers/types/type-parser.js +11 -11
  58. package/dist/helpers/types/type-uploader.js +21 -21
  59. package/dist/helpers/workflow-template-definitions/workflow-template-definition-deployer.js +6 -6
  60. package/dist/helpers/workflow-templates/helper.js +7 -7
  61. package/dist/interfaces.d.ts +2 -1
  62. package/dist/templates/typescript/app.yml +1 -1
  63. package/dist/templates/typescript/package.json +2 -2
  64. package/oclif.manifest.json +150 -2
  65. 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(`%s Getting all types for orgId: ${userConfig.orgId}`, chalk_1.default.blue.bold('START'));
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('%s Retrieved', chalk_1.default.yellow.bold('TYPES'));
67
+ logger_1.default.info(`${chalk_1.default.yellow.bold('TYPES')} Retrieved`);
68
68
  }
69
69
  catch (e) {
70
- logger_1.default.info(`%s Types Retrieval Failed. ${e}`, chalk_1.default.red.bold('FAIL'));
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('%s Types Retrieval Complete.', chalk_1.default.green.bold('COMPLETE'));
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 typePropertyPolicyLabel = (_b = data.typePropertyPolicies.find((y) => y.id === x.typePropertyPolicyId)) === null || _b === void 0 ? void 0 : _b.label;
132
- if (!typeSlug || !typePropertySlug || !typePropertyPolicyLabel) {
133
- logger_1.default.warn('Could not reduce bad type property policy link... skipping', x);
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
- typePropertyPolicyLabel,
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
- typePolicyLabel: (_b = data.typePolicies.find((y) => y.id === x.typePolicyId)) === null || _b === void 0 ? void 0 : _b.label,
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('%s Skipping bad rule set link', ruleSetLink.id, chalk_1.default.red.bold('TYPES'));
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.name,
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 hierarchyByName = 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.name; });
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: hierarchyByName,
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('OSH Link: could not find option set hierarchy', x.optionSetHierarchyId, 'skipping...');
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('OSH Link: could not find type', x.typeId, 'skipping...');
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('OSH Link: could not find type property', tpId, 'skipping...');
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
- optionSetHierarchyName: osh.name,
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('Found types: ', dataHolder.types.length);
303
+ logger_1.default.info(`Found types: ${dataHolder.types.length}`);
299
304
  let reducedTypes = [];
300
- const optionSetNameById = {};
305
+ const optionSetSlugById = {};
301
306
  for (const optionSet of dataHolder.optionSets) {
302
- optionSetNameById[optionSet.id] = optionSet.name;
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
- typePropertyOptionSetName: optionSetNameById[typeProperty.typePropertyOptionSetId],
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('skipping bad type with no path', type);
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('skipping bad type root:', root);
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: 'name',
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('skipping bad data:', item);
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(`%s Types Upload Failed. ${e}`, chalk_1.default.red.bold('FAIL'));
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('%s Types Upload Complete.', chalk_1.default.green.bold('COMPLETE'));
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('No OptionSet for: ', uploadedOptionSet.name);
73
+ logger_1.default.info(`No OptionSet for: ${uploadedOptionSet.name}`);
74
74
  continue;
75
75
  }
76
- logger_1.default.info('Adding New: ', uploadedOptionSet.name);
76
+ logger_1.default.info(`Adding New: ${uploadedOptionSet.name}`);
77
77
  mergedOptionSets.push(uploadedOptionSet);
78
78
  }
79
79
  else {
80
- logger_1.default.info('Merging: ', uploadedOptionSet.name);
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('Adding Existing: ', currentOptionSet.name);
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('argv:', JSON.stringify(argv));
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(`%s No Type found for: ${typePath}`, chalk_1.default.red.bold('WARNING'));
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('%s Importing local file', chalk_1.default.yellow.bold('OPTION SET HIERARCHY PARSE'));
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('%s Parsed', chalk_1.default.yellow.bold('OPTION SET HIERARCHY PARSE'));
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(`%s PARSE Failed. ${e}`, chalk_1.default.red.bold('FAIL'));
40
+ logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} PARSE Failed. ${e}`);
41
41
  return;
42
42
  }
43
- logger_1.default.info('%s PARSE Complete.', chalk_1.default.green.bold('COMPLETE'));
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(`%s PARSE Failed. ${e}`, chalk_1.default.red.bold('FAIL'));
43
+ logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} PARSE Failed . ${e}`);
44
44
  return;
45
45
  }
46
- logger_1.default.info('%s PARSE Complete.', chalk_1.default.green.bold('COMPLETE'));
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(`%s PARSE Failed. ${e}`, chalk_1.default.red.bold('FAIL'));
56
+ logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} PARSE Failed . ${e}`);
57
57
  return;
58
58
  }
59
- logger_1.default.info('%s PARSE Complete.', chalk_1.default.green.bold('COMPLETE'));
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(`%s PARSE Failed. ${e}`, chalk_1.default.red.bold('FAIL'));
24
+ logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} PARSE Failed . ${e}`);
25
25
  return;
26
26
  }
27
- logger_1.default.info('%s PARSE Complete.', chalk_1.default.green.bold('COMPLETE'));
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(`%s Parsing Failed. ${e}`, chalk_1.default.red.bold('FAIL'));
20
+ logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} Parsing Failed . ${e}`);
21
21
  return;
22
22
  }
23
- logger_1.default.info('%s Parsing Complete.', chalk_1.default.green.bold('COMPLETE'));
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(`%s Parsing Failed. ${e}`, chalk_1.default.red.bold('FAIL'));
20
+ logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} Parsing Failed . ${e}`);
21
21
  return;
22
22
  }
23
- logger_1.default.info('%s Parsing Complete.', chalk_1.default.green.bold('COMPLETE'));
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(`%s Parsing Failed. ${e}`, chalk_1.default.red.bold('FAIL'));
22
+ logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} Parsing Failed . ${e}`);
23
23
  return;
24
24
  }
25
- logger_1.default.info('%s Parsing Complete.', chalk_1.default.green.bold('COMPLETE'));
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(`%s Parsing Failed. ${e}`, chalk_1.default.red.bold('FAIL'));
22
+ logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} Parsing Failed . ${e}`);
23
23
  return;
24
24
  }
25
- logger_1.default.info('%s Parsing Complete.', chalk_1.default.green.bold('COMPLETE'));
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('%s Uploading', chalk_1.default.yellow.bold('OPTION SET HIERARCHIES'));
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('%s Uploaded', chalk_1.default.yellow.bold('OPTION SET HIERARCHIES'));
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(`%s Option set hierarchy Upload Failed. ${e}`, chalk_1.default.red.bold('FAIL'));
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('%s Option set hierarchy Upload Complete.', chalk_1.default.green.bold('COMPLETE'));
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('current OSH:', currentOSHs);
94
- logger_1.default.debug('loaded OSH:', loadedOSHs);
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.info('Creating: ', osh);
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.info('Updating: ', osh);
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('Deleting: ', currentOSH.name);
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('passed hierarchy:', hierarchy);
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('could not find option set with name', hierarchy[i], ' at position', i, 'skipping...');
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('skipping unhashable, invalid type option set hierarchy link:', currentLink);
181
+ logger_1.default.info(`skipping unhashable, invalid type option set hierarchy link: ${currentLink}`);
182
182
  }
183
- const hash = `${foundType.slug}|${foundOSH.name}|${foundTPSlugs.sort().join('|')}`;
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
- const hash = `${loadedLink.typeSlug}|${loadedLink.optionSetHierarchyName}|${loadedLink.typePropertySlugs.sort().join('|')}}`;
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
- const found = currentOSHLinkHashes[`${loadedLink.typeSlug}|${loadedLink.optionSetHierarchyName}|${loadedLink.typePropertySlugs.sort().join('|')}`];
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.info('Deleting: ', currentLinkHash);
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('OSH Links: Could not find type with slug', OSHLink.typeSlug);
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('OSH Links: Could not find all type properties with slugs', OSHLink.typePropertySlugs);
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.name === OSHLink.optionSetHierarchyName);
251
+ const foundOSH = OSHs.find((x) => x.identifier === OSHLink.optionSetHierarchyIdentifier);
243
252
  if (!foundOSH) {
244
- logger_1.default.error('OSH Links: Could not find option set hierarchy with name', OSHLink.optionSetHierarchyName);
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(`%s Getting all types for orgId: ${userConfig.orgId}`, chalk_1.default.blue.bold('START'));
38
- logger_1.default.info('%s Uploading', chalk_1.default.yellow.bold('OPTION SETS'));
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('%s Uploaded', chalk_1.default.yellow.bold('OPTION SETS'));
40
+ logger_1.default.info(`${chalk_1.default.yellow.bold('OPTION SETS')} Uploaded`);
41
41
  }
42
42
  catch (e) {
43
- logger_1.default.info(`%s Types Upload Failed. ${e}`, chalk_1.default.red.bold('FAIL'));
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('%s Types Upload Complete.', chalk_1.default.green.bold('COMPLETE'));
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 currentOptionSetsByName = {};
68
+ const currentOptionSetsByIdentifier = {};
69
69
  for (const currentOptionSet of currentOptionSets) {
70
- currentOptionSetsByName[currentOptionSet.name] = currentOptionSet;
70
+ currentOptionSetsByIdentifier[currentOptionSet.identifier] = currentOptionSet;
71
71
  }
72
- const newOptionSetsByName = {};
72
+ const newOptionSetsByIdentifier = {};
73
73
  for (const optionSet of optionSets) {
74
- newOptionSetsByName[optionSet.name] = optionSet;
74
+ newOptionSetsByIdentifier[optionSet.identifier] = optionSet;
75
75
  }
76
76
  for (const optionSet of optionSets) {
77
77
  try {
78
- const found = currentOptionSetsByName[optionSet.name];
78
+ const found = currentOptionSetsByIdentifier[optionSet.identifier];
79
79
  if (!found) {
80
80
  if (!optionSet.optionSet) {
81
- logger_1.default.info('No OptionSet for: ', optionSet.name);
81
+ logger_1.default.info(`No OptionSet for: ${optionSet.identifier}`);
82
82
  continue;
83
83
  }
84
- logger_1.default.info('Creating: ', optionSet.name);
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('Updating: ', optionSet.name);
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 = newOptionSetsByName[currentOptionSet.name];
114
+ const found = newOptionSetsByIdentifier[currentOptionSet.identifier];
114
115
  if (!found) {
115
- logger_1.default.info('Deleting: ', currentOptionSet.name);
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,