@contrail/cli 2.1.27 → 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 (68) hide show
  1. package/README.md +97 -3
  2. package/dist/api/schedules.d.ts +7 -0
  3. package/dist/api/schedules.js +32 -0
  4. package/dist/commands/app/create.js +3 -4
  5. package/dist/commands/app/delete.js +5 -5
  6. package/dist/commands/app/init.d.ts +6 -0
  7. package/dist/commands/app/init.js +63 -0
  8. package/dist/commands/app/publish.js +3 -3
  9. package/dist/commands/app/version/major.d.ts +7 -0
  10. package/dist/commands/app/version/major.js +40 -0
  11. package/dist/commands/app/version/minor.d.ts +7 -0
  12. package/dist/commands/app/version/minor.js +40 -0
  13. package/dist/commands/app/version/patch.d.ts +7 -0
  14. package/dist/commands/app/version/patch.js +40 -0
  15. package/dist/commands/colors/deleteAll.js +3 -3
  16. package/dist/commands/colors/load.js +5 -5
  17. package/dist/commands/config/environments/remove.js +2 -2
  18. package/dist/commands/config/environments/set.js +1 -1
  19. package/dist/commands/groups/export.js +1 -1
  20. package/dist/commands/loader-process/load.js +4 -4
  21. package/dist/commands/loader-process/upload-and-load.js +4 -4
  22. package/dist/commands/projects/load.js +5 -5
  23. package/dist/commands/types/exportOptionSetHierarchies.js +4 -4
  24. package/dist/commands/types/getAll.js +31 -25
  25. package/dist/commands/types/loadAll.js +2 -2
  26. package/dist/commands/types/mergeOptionSets.js +5 -4
  27. package/dist/commands/types/mergeTypeProperties.js +2 -2
  28. package/dist/commands/types/parseOptionSetsHierarchyLocalFile.js +4 -4
  29. package/dist/commands/types/parseOptionSetsHierarchyValuesToKeysLocalFile.js +2 -2
  30. package/dist/commands/types/parseOptionSetsLocalFiles.js +2 -2
  31. package/dist/commands/types/parseOptionSetsToFolderStructure.js +2 -2
  32. package/dist/commands/types/parseTypesFromFiles.js +2 -2
  33. package/dist/commands/types/parseTypesFromLocalFiles.js +2 -2
  34. package/dist/commands/types/parseTypesFromTemplateAndDataFromLocalFiles.js +2 -2
  35. package/dist/commands/types/parseTypesFromTemplateFromLocalFiles.js +2 -2
  36. package/dist/commands/types/uploadOptionSetHierarchies.js +30 -20
  37. package/dist/commands/types/uploadOptionSets.js +16 -15
  38. package/dist/commands/types/uploadOptionSetsHierarchyLocalFile.js +5 -5
  39. package/dist/commands/types/uploadRuleSets.js +20 -22
  40. package/dist/commands/types/uploadTypePolicies.js +23 -23
  41. package/dist/commands/types/uploadTypePropertyPolicies.js +14 -14
  42. package/dist/commands/types/uploadUsageInfo.js +12 -12
  43. package/dist/commands/webhooks/create.js +2 -4
  44. package/dist/commands/webhooks/list.js +2 -4
  45. package/dist/helpers/app/actions-deployer.js +4 -4
  46. package/dist/helpers/app/app-deployer.js +9 -9
  47. package/dist/helpers/app/extensions-deployer.js +4 -4
  48. package/dist/helpers/app/update-app-config.d.ts +2 -0
  49. package/dist/helpers/app/update-app-config.js +20 -0
  50. package/dist/helpers/app/upgrade-version.d.ts +16 -0
  51. package/dist/helpers/app/upgrade-version.js +37 -0
  52. package/dist/helpers/app/upgrade-version.spec.d.ts +1 -0
  53. package/dist/helpers/app/upgrade-version.spec.js +33 -0
  54. package/dist/helpers/colors/helpers.js +2 -2
  55. package/dist/helpers/loader-process/helpers.js +4 -4
  56. package/dist/helpers/projects/helpers.js +1 -1
  57. package/dist/helpers/types/csv-parser.js +6 -6
  58. package/dist/helpers/types/type-extractor.js +1 -1
  59. package/dist/helpers/types/type-parser.js +11 -11
  60. package/dist/helpers/types/type-uploader.js +21 -21
  61. package/dist/helpers/workflow-template-definitions/workflow-template-definition-deployer.js +6 -6
  62. package/dist/helpers/workflow-templates/helper.d.ts +4 -2
  63. package/dist/helpers/workflow-templates/helper.js +109 -25
  64. package/dist/interfaces.d.ts +8 -1
  65. package/dist/templates/typescript/app.yml +2 -1
  66. package/dist/templates/typescript/package.json +4 -3
  67. package/oclif.manifest.json +150 -2
  68. package/package.json +4 -3
@@ -24,11 +24,11 @@ class AppDeployer {
24
24
  async deploy(appDeclaration) {
25
25
  let app = await this.getExistingApp(appDeclaration);
26
26
  if (!app) {
27
- logger_1.default.info('%s Creating new app.', chalk_1.default.yellow.bold('APP'));
27
+ logger_1.default.info(`${chalk_1.default.yellow.bold('APP')} Creating new app.`);
28
28
  app = await this.createNewApp(appDeclaration);
29
29
  }
30
30
  else {
31
- logger_1.default.info('%s Updating existing app.', chalk_1.default.yellow.bold('APP'));
31
+ logger_1.default.info(`${chalk_1.default.yellow.bold('APP')} Updating existing app.`);
32
32
  app = await this.updateExistingApp(appDeclaration, app);
33
33
  }
34
34
  if (this.dryRun) {
@@ -79,14 +79,14 @@ class AppDeployer {
79
79
  return {};
80
80
  }
81
81
  let app = await new sdk_1.Entities().create({ entityName: 'app', object: newApp });
82
- logger_1.default.info(`%s Created new app: ${app.name}`, chalk_1.default.yellow.bold('APP'));
82
+ logger_1.default.info(`${chalk_1.default.yellow.bold('APP')} Created new app: ${app.name}`);
83
83
  const isDocker = Object.hasOwnProperty.call(appDeclaration, 'dockerImageRef');
84
84
  if (!isDocker) {
85
85
  // this is the expected default behavior
86
86
  const appCodePackage = await createNodePackage(appDeclaration.appIdentifier, this.debug, this.dryRun);
87
87
  app.appCodePackageId = appCodePackage.id;
88
88
  app = await new sdk_1.Entities().update({ entityName: 'app', id: app.id, object: app });
89
- logger_1.default.info(`%s Updated app with code package: ${app.name}`, chalk_1.default.yellow.bold('APP'));
89
+ logger_1.default.info(`${chalk_1.default.yellow.bold('APP')} Updated app with code package: ${app.name}`);
90
90
  }
91
91
  return app;
92
92
  }
@@ -136,7 +136,7 @@ class AppDeployer {
136
136
  id: existingApp.id,
137
137
  object: updates,
138
138
  });
139
- logger_1.default.info(`%s Updated app: ${app.name}`, chalk_1.default.yellow.bold('APP'));
139
+ logger_1.default.info(`${chalk_1.default.yellow.bold('APP')} Updated app: ${app.name}`);
140
140
  return app;
141
141
  }
142
142
  async remove(appDeclaration) {
@@ -144,11 +144,11 @@ class AppDeployer {
144
144
  if (app) {
145
145
  const actions = await (0, actions_deployer_1.getActionsForAppVersion)(app);
146
146
  for (const action of actions) {
147
- logger_1.default.info(`%s Deleting action: ${action.identifier}`, chalk_1.default.yellow.bold('APP'));
147
+ logger_1.default.info(`${chalk_1.default.yellow.bold('APP')} Deleting action: ${action.identifier}`);
148
148
  await (0, actions_deployer_1.deleteAction)(action.id);
149
149
  }
150
150
  app = await new sdk_1.Entities().delete({ entityName: 'app', id: app.id });
151
- logger_1.default.info(`%s Deleted app: ${app.name}`, chalk_1.default.yellow.bold('APP'));
151
+ logger_1.default.info(`${chalk_1.default.green.bold('APP')} Deleted app: ${app.name}`);
152
152
  }
153
153
  else {
154
154
  throw new Error('App not found.');
@@ -177,7 +177,7 @@ async function createNodePackage(appIdentifier, debug, dryRun) {
177
177
  child_process_1.default.execSync('npx tsc --outDir tmp/dist');
178
178
  }
179
179
  catch (e) {
180
- logger_1.default.error('%s Failed to build package.', chalk_1.default.red.bold('APP'));
180
+ logger_1.default.error(`${chalk_1.default.red.bold('APP')} Failed to build package.`);
181
181
  const stdOut = e.stdout.toString();
182
182
  const stdErr = e.stderr.toString();
183
183
  logger_1.default.error('Build Error(stdout):', stdOut);
@@ -224,7 +224,7 @@ async function createNodePackage(appIdentifier, debug, dryRun) {
224
224
  return appCodePackage;
225
225
  }
226
226
  catch (e) {
227
- logger_1.default.error('%s Failed to create app package.', chalk_1.default.red.bold('APP'));
227
+ logger_1.default.error(`${chalk_1.default.red.bold('APP')} Failed to create app package.`);
228
228
  throw e;
229
229
  }
230
230
  finally {
@@ -18,7 +18,7 @@ class ExtensionsDeployer {
18
18
  var _a;
19
19
  // FETCH ALL EXTENSIONS FROM THE API.
20
20
  if (!appDeclaration.extensions) {
21
- logger_1.default.info('%s \tNo extensions found...skipping.', chalk_1.default.yellow.bold('EXTENSION'));
21
+ logger_1.default.info(`${chalk_1.default.yellow.bold('EXTENSION')} \tNo extensions found...skipping.`);
22
22
  return;
23
23
  }
24
24
  // UPSERT / DELETE BASED ON EXTENSION IDENTIFIER
@@ -32,7 +32,7 @@ class ExtensionsDeployer {
32
32
  }
33
33
  }
34
34
  async deployExtension(extension, app, existingExtensions) {
35
- logger_1.default.info(`%s \tDeploying extension: ${extension === null || extension === void 0 ? void 0 : extension.identifier}`, chalk_1.default.yellow.bold('EXTENSION'));
35
+ logger_1.default.info(`${chalk_1.default.yellow.bold('EXTENSION')} \tDeploying extension: ${extension === null || extension === void 0 ? void 0 : extension.identifier}`);
36
36
  const identifier = util_1.AppUtil.createExtensionIdentifier({
37
37
  appIdentifier: app.identifier,
38
38
  extensionIdentifier: extension.identifier,
@@ -63,7 +63,7 @@ class ExtensionsDeployer {
63
63
  entityName: 'app-extension-definition',
64
64
  object: newObject,
65
65
  });
66
- logger_1.default.info(`%s Created new extension definition: ${extension === null || extension === void 0 ? void 0 : extension.identifier}`, chalk_1.default.yellow.bold('APP'));
66
+ logger_1.default.info(`${chalk_1.default.yellow.bold('EXTENSION')} Created new extension definition: ${extension === null || extension === void 0 ? void 0 : extension.identifier}`);
67
67
  return actionDefinition;
68
68
  }
69
69
  async updateActionDefinition(existingActionDefinition, extension, app) {
@@ -85,7 +85,7 @@ class ExtensionsDeployer {
85
85
  id: existingActionDefinition.id,
86
86
  object: updates,
87
87
  });
88
- logger_1.default.info(`%s Updated existing extension definition: ${extensionDefinition.identifier}`, chalk_1.default.yellow.bold('APP'));
88
+ logger_1.default.info(`${chalk_1.default.yellow.bold('EXTENSION')} Updated existing extension definition: ${extensionDefinition.identifier}`);
89
89
  return extensionDefinition;
90
90
  }
91
91
  }
@@ -0,0 +1,2 @@
1
+ import { AppDeclaration } from '../../interfaces';
2
+ export declare function updateAppConfig(newAppYml: AppDeclaration): void;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updateAppConfig = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const path = tslib_1.__importStar(require("path"));
6
+ const fs_1 = tslib_1.__importDefault(require("fs"));
7
+ const js_yaml_1 = tslib_1.__importDefault(require("js-yaml"));
8
+ function updateAppConfig(newAppYml) {
9
+ const TARGET_DIR = process.cwd();
10
+ try {
11
+ // Convert the updated data back to YAML format
12
+ const updatedYamlData = js_yaml_1.default.dump(newAppYml);
13
+ // Write the updated YAML back to the file
14
+ fs_1.default.writeFileSync(path.resolve(path.join(TARGET_DIR, 'app.yml')), updatedYamlData, 'utf8');
15
+ }
16
+ catch (e) {
17
+ throw new Error(`ERROR PARSING YAML: ${e}`);
18
+ }
19
+ }
20
+ exports.updateAppConfig = updateAppConfig;
@@ -0,0 +1,16 @@
1
+ import semver from 'semver';
2
+ /**
3
+ * Upgrades a semantic version based on a specified release type.
4
+ *
5
+ * @param {string} currentVersion - The current semantic version string.
6
+ * @param {semver.ReleaseType} type - The type of release ('major', 'minor', 'patch').
7
+ * @returns {string} The upgraded semantic version.
8
+ * @throws {Error} If the provided currentVersion is not a valid semantic version.
9
+ *
10
+ * @example
11
+ * const currentVersion = '1.2.3';
12
+ * const releaseType = 'minor';
13
+ * const upgradedVersion = upgradeVersion(currentVersion, releaseType);
14
+ * console.log(upgradedVersion); // Outputs: '1.3.0'
15
+ */
16
+ export declare function upgradeVersion(currentVersion: string, type: semver.ReleaseType): string;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.upgradeVersion = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const semver_1 = tslib_1.__importDefault(require("semver"));
6
+ /**
7
+ * Upgrades a semantic version based on a specified release type.
8
+ *
9
+ * @param {string} currentVersion - The current semantic version string.
10
+ * @param {semver.ReleaseType} type - The type of release ('major', 'minor', 'patch').
11
+ * @returns {string} The upgraded semantic version.
12
+ * @throws {Error} If the provided currentVersion is not a valid semantic version.
13
+ *
14
+ * @example
15
+ * const currentVersion = '1.2.3';
16
+ * const releaseType = 'minor';
17
+ * const upgradedVersion = upgradeVersion(currentVersion, releaseType);
18
+ * console.log(upgradedVersion); // Outputs: '1.3.0'
19
+ */
20
+ function upgradeVersion(currentVersion, type) {
21
+ try {
22
+ const paddedVersion = currentVersion
23
+ .toString()
24
+ .split('.')
25
+ .concat(new Array(3).fill(0).map(String))
26
+ .slice(0, 3)
27
+ .join('.');
28
+ if (!semver_1.default.valid(paddedVersion)) {
29
+ throw new Error('Invalid version string');
30
+ }
31
+ return semver_1.default.inc(paddedVersion, type);
32
+ }
33
+ catch (e) {
34
+ throw new Error(`ERROR PARSING YAML: ${e}`);
35
+ }
36
+ }
37
+ exports.upgradeVersion = upgradeVersion;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const semver_1 = tslib_1.__importDefault(require("semver"));
5
+ const upgrade_version_1 = require("./upgrade-version");
6
+ describe('upgradeVersion', () => {
7
+ it('should upgrade the major semantic version correctly for a valid input', () => {
8
+ const currentVersion = '1.1.1';
9
+ const releaseType = 'major';
10
+ const upgradedVersion = (0, upgrade_version_1.upgradeVersion)(currentVersion, releaseType);
11
+ const expectedVersion = semver_1.default.inc(currentVersion, releaseType);
12
+ expect(upgradedVersion).toBe(expectedVersion);
13
+ });
14
+ it('should upgrade the minor semantic version correctly for a valid input', () => {
15
+ const currentVersion = '1.2.3';
16
+ const releaseType = 'minor';
17
+ const upgradedVersion = (0, upgrade_version_1.upgradeVersion)(currentVersion, releaseType);
18
+ const expectedVersion = semver_1.default.inc(currentVersion, releaseType);
19
+ expect(upgradedVersion).toBe(expectedVersion);
20
+ });
21
+ it('should upgrade the patch semantic version correctly for a valid input', () => {
22
+ const currentVersion = '1.1.0';
23
+ const releaseType = 'patch';
24
+ const upgradedVersion = (0, upgrade_version_1.upgradeVersion)(currentVersion, releaseType);
25
+ const expectedVersion = semver_1.default.inc(currentVersion, releaseType);
26
+ expect(upgradedVersion).toBe(expectedVersion);
27
+ });
28
+ it('should throw an error for an invalid semantic version input', () => {
29
+ const currentVersion = 'invalidVersion';
30
+ const releaseType = 'patch';
31
+ expect(() => (0, upgrade_version_1.upgradeVersion)(currentVersion, releaseType)).toThrowError('Invalid version string');
32
+ });
33
+ });
@@ -21,7 +21,7 @@ async function getLocalColors() {
21
21
  }
22
22
  exports.getLocalColors = getLocalColors;
23
23
  async function getExistingColors() {
24
- logger_1.default.info('%s Getting Existing Colors', chalk_1.default.yellow.bold('COLORS'));
24
+ logger_1.default.info(`${chalk_1.default.yellow.bold('COLORS')} Getting Existing Colors`);
25
25
  const colors = [];
26
26
  try {
27
27
  let nextPageKey = null;
@@ -56,7 +56,7 @@ async function uploadColors() {
56
56
  const existingNamesValues = existingColors.filter((x) => x.name).map((x) => x.name);
57
57
  for (const color of colors) {
58
58
  if (existingNamesValues.includes(color.name)) {
59
- logger_1.default.info('%s SKIPPING %s (%s)', chalk_1.default.yellow.bold('COLORS'), color.hex, color.name);
59
+ logger_1.default.info(`${chalk_1.default.yellow.bold('COLORS')} SKIPPING ${color.hex} (${color.name})`);
60
60
  continue;
61
61
  }
62
62
  if (color.hex.length > 1 && color.hex[0] === '#') {
@@ -27,7 +27,7 @@ function getLocalUploadConfig(configFileName) {
27
27
  }
28
28
  const CURRENT_DIR = process.cwd();
29
29
  const fullPath = path.join(CURRENT_DIR, configFileName);
30
- logger_1.default.info('Getting config from path: ', fullPath);
30
+ logger_1.default.info(`Getting config from path: ${fullPath}`);
31
31
  if (ext === '.yml') {
32
32
  try {
33
33
  const doc = js_yaml_1.default.load(fs.readFileSync(fullPath, 'utf8'));
@@ -53,7 +53,7 @@ async function uploadFile(incomingFileName) {
53
53
  entityName: 'file',
54
54
  object: { contentType: 'text/csv', fileName: fileName, ttl: 24 * 60 * 60 * 1000 },
55
55
  });
56
- logger_1.default.info('VibeIQ file ID:', file.id);
56
+ logger_1.default.info(`VibeIQ file ID: ${file.id}`);
57
57
  // Upload the CSV data to the newly created VibeIQ file
58
58
  const fileDetails = {
59
59
  contentType: 'text/csv',
@@ -65,14 +65,14 @@ async function uploadFile(incomingFileName) {
65
65
  async function loadFile(config) {
66
66
  const entities = new sdk_1.Entities();
67
67
  // start a load job referencing the newly created file
68
- logger_1.default.info('Loading with config: ', config);
68
+ logger_1.default.info(`Loading with config: ${config}`);
69
69
  const loadJob = await entities.create({
70
70
  entityName: 'loader-process',
71
71
  object: {
72
72
  ...config,
73
73
  },
74
74
  });
75
- logger_1.default.info('Load has been kicked off. loader-process ID: ', loadJob.id);
75
+ logger_1.default.info(`Load has been kicked off. loader-process ID: ${loadJob.id}`);
76
76
  }
77
77
  async function uploadAndLoadLocalFile(incomingFileName, configFileName) {
78
78
  const file = await uploadFile(incomingFileName);
@@ -12,7 +12,7 @@ function getProjectFile(fileName) {
12
12
  const CURRENT_DIR = process.cwd();
13
13
  try {
14
14
  const fullPath = path.join(CURRENT_DIR, fileName);
15
- logger_1.default.info('Getting file from path: ', fullPath);
15
+ logger_1.default.info(`Getting file from path: ${fullPath}`);
16
16
  const doc = js_yaml_1.default.load(fs_1.default.readFileSync(fullPath, 'utf8'));
17
17
  return doc.projectConfiguration;
18
18
  }
@@ -10,7 +10,7 @@ async function getCSVFromFile(loadFileId) {
10
10
  let file;
11
11
  try {
12
12
  file = await new sdk_1.Entities().get({ entityName: 'file', id: loadFileId });
13
- logger_1.default.info('Got file: ', file);
13
+ logger_1.default.info(`Got file: ${file}`);
14
14
  }
15
15
  catch (e) {
16
16
  logger_1.default.info(`Failed to get file: ${loadFileId}`, JSON.stringify(e));
@@ -26,15 +26,15 @@ async function getCSVFromFile(loadFileId) {
26
26
  response = await new Promise((resolve, reject) => {
27
27
  client
28
28
  .get(file.downloadUrl, function (res) {
29
- logger_1.default.info('Status code:', res.statusCode);
30
- logger_1.default.info('Status text:', res.statusMessage);
29
+ logger_1.default.info(`Status code: ${res.statusCode}`);
30
+ logger_1.default.info(`Status text: ${res.statusMessage}`);
31
31
  let body = '';
32
32
  res.on('data', (data) => {
33
33
  body += data.toString();
34
34
  });
35
35
  res.on('end', () => {
36
- logger_1.default.info('Response body:');
37
- //logger.info(body);
36
+ logger_1.default.debug('Response body:');
37
+ logger_1.default.debug(body);
38
38
  resolve(body);
39
39
  });
40
40
  })
@@ -45,7 +45,7 @@ async function getCSVFromFile(loadFileId) {
45
45
  });
46
46
  }
47
47
  catch (e) {
48
- logger_1.default.info(`Failed to get data from downloadUrl: ${file.downloadUrl}`, e);
48
+ logger_1.default.info(`Failed to get data from downloadUrl: ${file.downloadUrl} ${JSON.stringify(e)}`);
49
49
  throw e;
50
50
  }
51
51
  if (!response) {
@@ -8,7 +8,7 @@ const p_limit_1 = tslib_1.__importDefault(require("p-limit"));
8
8
  const logger_1 = tslib_1.__importDefault(require("../../logger"));
9
9
  const limit = (0, p_limit_1.default)(30);
10
10
  async function getTypes(withTypeProperties = true) {
11
- logger_1.default.info('%s Retrieving', chalk_1.default.yellow.bold('TYPES'));
11
+ logger_1.default.info(`${chalk_1.default.yellow.bold('TYPES')} Retrieving`);
12
12
  const entitiesClient = new sdk_1.Entities();
13
13
  const types = await entitiesClient.get({
14
14
  entityName: 'type',
@@ -25,13 +25,13 @@ async function parseTypesFromLocalFiles(fileLocations) {
25
25
  const csvJSONData = [];
26
26
  for (const fileLocation of fileLocations) {
27
27
  try {
28
- logger_1.default.info('Getting data for fileLocation: ', fileLocation);
28
+ logger_1.default.info(`Getting data for fileLocation: ${fileLocation}`);
29
29
  const csvData = await loadDataFromLocalCSV(fileLocation);
30
30
  logger_1.default.info(`CSV import was successful. ${csvData === null || csvData === void 0 ? void 0 : csvData.length} rows found. Adding to total rows.`);
31
31
  csvJSONData.push(...csvData);
32
32
  }
33
33
  catch (e) {
34
- logger_1.default.info('Error importing csv data.', e);
34
+ logger_1.default.info(`Error importing csv data. ${e}`);
35
35
  throw e;
36
36
  }
37
37
  }
@@ -45,15 +45,15 @@ async function parseTypesFromTemplateFromLocalFiles(templateFileLocation, dataFi
45
45
  let templateCSVData = [];
46
46
  let dataCSVData = [];
47
47
  try {
48
- logger_1.default.info('Getting template from fileLocation: ', templateFileLocation);
48
+ logger_1.default.info(`Getting template from fileLocation: ${templateFileLocation}`);
49
49
  templateCSVData = await loadDataFromLocalCSV(templateFileLocation);
50
50
  logger_1.default.info(`CSV import was successful. ${templateCSVData === null || templateCSVData === void 0 ? void 0 : templateCSVData.length} rows found.`);
51
- logger_1.default.info('Getting data from fileLocation: ', dataFileLocation);
51
+ logger_1.default.info(`Getting data from fileLocation: ${dataFileLocation}`);
52
52
  dataCSVData = await loadDataFromLocalCSV(dataFileLocation);
53
53
  logger_1.default.info(`CSV import was successful. ${dataCSVData === null || dataCSVData === void 0 ? void 0 : dataCSVData.length} rows found.`);
54
54
  }
55
55
  catch (e) {
56
- logger_1.default.info('Error importing csv data.', e);
56
+ logger_1.default.info(`Error importing csv data. ${e}`);
57
57
  throw e;
58
58
  }
59
59
  const types = (0, types_1.GetTypesFromTemplate)(templateCSVData, dataCSVData);
@@ -64,24 +64,24 @@ exports.parseTypesFromTemplateFromLocalFiles = parseTypesFromTemplateFromLocalFi
64
64
  async function parseTypesFromTemplateAndDataFromLocalFiles(templateFileLocation, dataFileLocations) {
65
65
  let templateCSVData = [];
66
66
  try {
67
- logger_1.default.info('Getting template from fileLocation: ', templateFileLocation);
67
+ logger_1.default.info(`Getting template from fileLocation: ${templateFileLocation}`);
68
68
  templateCSVData = await loadDataFromLocalCSV(templateFileLocation);
69
69
  logger_1.default.info(`CSV import was successful. ${templateCSVData === null || templateCSVData === void 0 ? void 0 : templateCSVData.length} rows found.`);
70
70
  }
71
71
  catch (e) {
72
- logger_1.default.info('Error importing csv data.', e);
72
+ logger_1.default.info(`Error importing csv data. ${e}`);
73
73
  throw e;
74
74
  }
75
75
  const dataCSVData = [];
76
76
  for (const dataFileLocation of dataFileLocations) {
77
77
  try {
78
- logger_1.default.info('Getting data for dataFileLocation: ', dataFileLocation);
78
+ logger_1.default.info(`Getting data for dataFileLocation: ${dataFileLocation}`);
79
79
  const csvData = await loadDataFromLocalCSV(dataFileLocation);
80
80
  logger_1.default.info(`CSV import was successful. ${csvData === null || csvData === void 0 ? void 0 : csvData.length} rows found. Adding to total rows.`);
81
81
  dataCSVData.push(...csvData);
82
82
  }
83
83
  catch (e) {
84
- logger_1.default.info('Error importing csv data.', e);
84
+ logger_1.default.info(`Error importing csv data. ${e}`);
85
85
  throw e;
86
86
  }
87
87
  }
@@ -96,13 +96,13 @@ async function parseTypesFromFiles(fileIds) {
96
96
  const csvJSONData = [];
97
97
  for (const loadFileId of fileIds) {
98
98
  try {
99
- logger_1.default.info('Getting data for fileId: ', loadFileId);
99
+ logger_1.default.info(`Getting data for fileId: ${loadFileId}`);
100
100
  const csvJSON = await (0, csv_parser_1.getCSVFromFile)(loadFileId);
101
101
  logger_1.default.info(`CSV download was successful. ${csvJSON === null || csvJSON === void 0 ? void 0 : csvJSON.length} rows found. Adding to total rows`);
102
102
  csvJSONData.push(...csvJSON);
103
103
  }
104
104
  catch (e) {
105
- logger_1.default.info('Error retrieving csv data', e);
105
+ logger_1.default.info(`Error retrieving csv data ${e}`);
106
106
  throw e;
107
107
  }
108
108
  }
@@ -13,16 +13,16 @@ const logger_1 = tslib_1.__importDefault(require("../../logger"));
13
13
  async function uploadTypes(dir) {
14
14
  try {
15
15
  const userConfig = await (0, login_1.authUser)();
16
- logger_1.default.info(`%s Getting all types for orgId: ${userConfig.orgId}`, chalk_1.default.blue.bold('START'));
17
- logger_1.default.info('%s Uploading', chalk_1.default.yellow.bold('TYPES'));
16
+ logger_1.default.info(`START Getting all types for orgId: ${userConfig.orgId}`);
17
+ logger_1.default.info('TYPES Uploading ');
18
18
  await uploadReducedTypes(dir);
19
- logger_1.default.info('%s Uploaded', chalk_1.default.yellow.bold('TYPES'));
19
+ logger_1.default.info(`${chalk_1.default.yellow.bold('TYPES')} Uploaded`);
20
20
  }
21
21
  catch (e) {
22
- logger_1.default.info(`%s Types Upload Failed. ${e}`, chalk_1.default.red.bold('FAIL'));
22
+ logger_1.default.info(`${chalk_1.default.red.bold('FAIL')} Types Upload Failed . ${e}`);
23
23
  return;
24
24
  }
25
- logger_1.default.info('%s Types Upload Complete.', chalk_1.default.green.bold('COMPLETE'));
25
+ logger_1.default.info(`${chalk_1.default.green.bold('COMPLETE')} Types Upload Complete.`);
26
26
  }
27
27
  exports.uploadTypes = uploadTypes;
28
28
  function loadReducedTypes(fromDir) {
@@ -66,10 +66,10 @@ async function uploadReducedTypes(dir) {
66
66
  const found = currentTypesBySlug[type.slug];
67
67
  if (!found) {
68
68
  if (!type.typePath.includes(':')) {
69
- logger_1.default.info('Cannot create a base type. Skipping: ', type.slug);
69
+ logger_1.default.info(`Cannot create a base type. Skipping: ${type.slug}`);
70
70
  continue;
71
71
  }
72
- logger_1.default.info('Creating Type: ', type.slug);
72
+ logger_1.default.info(`Creating Type: ': ${type.slug}`);
73
73
  const createdType = await new sdk_1.Entities().create({
74
74
  entityName: 'type',
75
75
  object: {
@@ -84,7 +84,7 @@ async function uploadReducedTypes(dir) {
84
84
  await uploadReducedTypeProperties(createdType, newTypeProperties, type.typeProperties);
85
85
  }
86
86
  else {
87
- logger_1.default.info('Updating Type: ', type.slug);
87
+ logger_1.default.info(`Updating Type: ': ${type.slug}`);
88
88
  const updatedType = await new sdk_1.Entities().update({
89
89
  entityName: 'type',
90
90
  id: found.id,
@@ -99,7 +99,7 @@ async function uploadReducedTypes(dir) {
99
99
  }
100
100
  }
101
101
  catch (err) {
102
- logger_1.default.info('Error Uploading Types: ', err);
102
+ logger_1.default.info(`Error Uploading Types: ${err}`);
103
103
  }
104
104
  }
105
105
  }
@@ -116,15 +116,15 @@ async function uploadReducedTypeProperties(type, currentPropertyTypes, newProper
116
116
  const optionSets = await new sdk_1.Entities().get({
117
117
  entityName: 'type-property-option-set',
118
118
  });
119
- const optionSetIdByName = {};
119
+ const optionSetIdByIdentifier = {};
120
120
  for (const optionSet of optionSets) {
121
- optionSetIdByName[optionSet.name] = optionSet.id;
121
+ optionSetIdByIdentifier[optionSet.identifier] = optionSet.id;
122
122
  }
123
123
  for (const newPropertyType of newPropertyTypes) {
124
124
  try {
125
125
  const found = currentPropertyTypeBySlug[newPropertyType.slug];
126
126
  if (!found && !newPropertyType.inherited) {
127
- logger_1.default.info('Creating Type-Property: ', newPropertyType.slug);
127
+ logger_1.default.info(`Creating Type-Property: ': ${newPropertyType.slug}`);
128
128
  await sdk_1.Request.request(`/types/${type.id}/type-properties`, {
129
129
  method: 'POST',
130
130
  body: JSON.stringify({
@@ -135,7 +135,7 @@ async function uploadReducedTypeProperties(type, currentPropertyTypes, newProper
135
135
  editable: newPropertyType.editable,
136
136
  searchable: newPropertyType.searchable,
137
137
  core: newPropertyType.core,
138
- typePropertyOptionSetId: optionSetIdByName[newPropertyType.typePropertyOptionSetName],
138
+ typePropertyOptionSetId: optionSetIdByIdentifier[newPropertyType.typePropertyOptionSetSlug],
139
139
  formula: newPropertyType.formula,
140
140
  referencedTypePath: newPropertyType.referencedTypePath,
141
141
  referencedTypeRootSlug: newPropertyType.referencedTypeRootSlug,
@@ -154,8 +154,8 @@ async function uploadReducedTypeProperties(type, currentPropertyTypes, newProper
154
154
  }
155
155
  else if (found &&
156
156
  !newPropertyType.inherited &&
157
- !typePropertiesEqual(found, newPropertyType, optionSetIdByName)) {
158
- logger_1.default.info('Updating Type-Property: ', newPropertyType.slug);
157
+ !typePropertiesEqual(found, newPropertyType, optionSetIdByIdentifier)) {
158
+ logger_1.default.info(`Updating Type-Property: ': ${newPropertyType.slug}`);
159
159
  await new sdk_1.Entities().update({
160
160
  entityName: 'type-property',
161
161
  id: found.id,
@@ -167,7 +167,7 @@ async function uploadReducedTypeProperties(type, currentPropertyTypes, newProper
167
167
  editable: (_e = newPropertyType.editable) !== null && _e !== void 0 ? _e : null,
168
168
  searchable: (_f = newPropertyType.searchable) !== null && _f !== void 0 ? _f : null,
169
169
  core: (_g = newPropertyType.core) !== null && _g !== void 0 ? _g : null,
170
- typePropertyOptionSetId: (_h = optionSetIdByName[newPropertyType.typePropertyOptionSetName]) !== null && _h !== void 0 ? _h : null,
170
+ typePropertyOptionSetId: (_h = optionSetIdByIdentifier[newPropertyType.typePropertyOptionSetSlug]) !== null && _h !== void 0 ? _h : null,
171
171
  formula: (_j = newPropertyType.formula) !== null && _j !== void 0 ? _j : null,
172
172
  referencedTypePath: (_k = newPropertyType.referencedTypePath) !== null && _k !== void 0 ? _k : null,
173
173
  referencedTypeRootSlug: (_l = newPropertyType.referencedTypeRootSlug) !== null && _l !== void 0 ? _l : null,
@@ -182,14 +182,14 @@ async function uploadReducedTypeProperties(type, currentPropertyTypes, newProper
182
182
  }
183
183
  }
184
184
  catch (err) {
185
- logger_1.default.info('Error Creating Properties: ', err);
185
+ logger_1.default.info(`Error Creating Properties: ${err}`);
186
186
  }
187
187
  }
188
188
  for (const currentPropertyType of currentPropertyTypes) {
189
189
  try {
190
190
  const found = newPropertyTypesBySlug[currentPropertyType.slug];
191
191
  if (!found && !currentPropertyType.inherited) {
192
- logger_1.default.info('Deleting Type-Property: ', currentPropertyType.slug);
192
+ logger_1.default.info(`Deleting Type-Property: ': ${currentPropertyType.slug}`);
193
193
  await sdk_1.Request.request(`/types/${type.id}/type-properties/${currentPropertyType.id}`, {
194
194
  method: 'DELETE',
195
195
  headers: {
@@ -204,7 +204,7 @@ async function uploadReducedTypeProperties(type, currentPropertyTypes, newProper
204
204
  }
205
205
  }
206
206
  }
207
- function typePropertiesEqual(typeProperty1, typeProperty2, optionSetIdByName) {
207
+ function typePropertiesEqual(typeProperty1, typeProperty2, optionSetIdByIdentifier) {
208
208
  const reducedProperty1 = {
209
209
  isArchived: typeProperty1.isArchived,
210
210
  propertyType: typeProperty1.propertyType,
@@ -213,7 +213,7 @@ function typePropertiesEqual(typeProperty1, typeProperty2, optionSetIdByName) {
213
213
  editable: typeProperty1.editable,
214
214
  searchable: typeProperty1.searchable,
215
215
  core: typeProperty1.core,
216
- typePropertyOptionSetId: optionSetIdByName[typeProperty1.typePropertyOptionSetName],
216
+ typePropertyOptionSetId: optionSetIdByIdentifier[typeProperty1.typePropertyOptionSetSlug],
217
217
  formula: typeProperty1.formula,
218
218
  referencedTypePath: typeProperty1.referencedTypePath,
219
219
  referencedTypeRootSlug: typeProperty1.referencedTypeRootSlug,
@@ -232,7 +232,7 @@ function typePropertiesEqual(typeProperty1, typeProperty2, optionSetIdByName) {
232
232
  editable: typeProperty2.editable,
233
233
  searchable: typeProperty2.searchable,
234
234
  core: typeProperty2.core,
235
- typePropertyOptionSetId: optionSetIdByName[typeProperty2.typePropertyOptionSetName],
235
+ typePropertyOptionSetId: optionSetIdByIdentifier[typeProperty2.typePropertyOptionSetSlug],
236
236
  formula: typeProperty2.formula,
237
237
  referencedTypePath: typeProperty2.referencedTypePath,
238
238
  referencedTypeRootSlug: typeProperty2.referencedTypeRootSlug,
@@ -14,7 +14,7 @@ class WorkflowTemplateDefinitionDeployer {
14
14
  async cliInstallWorkflowTemplateDefinitions() {
15
15
  const installedAppOrgs = await (0, apps_1.getInstalledApps)();
16
16
  if (!installedAppOrgs.length) {
17
- logger_1.default.info('%s \nNo apps are currently installed. You must install an app before installing its associated workflow template definitions.', chalk_1.default.red.bold('WORKFLOW DEFINITION'));
17
+ logger_1.default.warn('WORKFLOW DEFINITION \nNo apps are currently installed. You must install an app before installing its associated workflow template definitions.');
18
18
  return;
19
19
  }
20
20
  const answers = await inquirer_1.default.prompt([
@@ -69,7 +69,7 @@ class WorkflowTemplateDefinitionDeployer {
69
69
  };
70
70
  await (0, event_workflow_templates_1.createWorkflowTemplate)(newObject);
71
71
  }
72
- logger_1.default.info(`%s \n ${workflowTemplateDefinitionsToInstall.length} workflows installed`, chalk_1.default.green.bold('WORKFLOW DEFINITION'));
72
+ logger_1.default.info(`WORKFLOW DEFINITION \n ${workflowTemplateDefinitionsToInstall.length} workflows installed`);
73
73
  }
74
74
  async listWorkflowTemplateDefinitions() {
75
75
  const installedAppOrgs = await (0, apps_1.getInstalledApps)();
@@ -92,7 +92,7 @@ class WorkflowTemplateDefinitionDeployer {
92
92
  appVersionId: app.latestAppVersionId,
93
93
  });
94
94
  // UPSERT / DELETE BASED ON WORKFLOW IDENTIFIER
95
- logger_1.default.info('%s \tDeploying workflow definitions.', chalk_1.default.yellow.bold('WORKFLOW DEFINITION'));
95
+ logger_1.default.info('WORKFLOW DEFINITION \tDeploying workflow definitions.');
96
96
  if (appDeclaration.workflows) {
97
97
  const localWorkflows = Object.keys(appDeclaration.workflows);
98
98
  if ((localWorkflows === null || localWorkflows === void 0 ? void 0 : localWorkflows.length) > 0) {
@@ -103,7 +103,7 @@ class WorkflowTemplateDefinitionDeployer {
103
103
  }
104
104
  }
105
105
  async deployWorkflow(workflowKey, workflow, app, existingWorkflows) {
106
- logger_1.default.info(`%s \tDeploying workflow definitions: ${workflowKey}`, chalk_1.default.yellow.bold('WORKFLOW DEFINITION'));
106
+ logger_1.default.info(`WORKFLOW DEFINITION \tDeploying workflow definitions: ${workflowKey}`);
107
107
  const identifier = this.getWorkflowDeclarationIdentifier(workflowKey, app);
108
108
  const existingDefinition = existingWorkflows.find((ad) => ad.identifier === identifier);
109
109
  (0, interface_converters_1.convertWorkflow)(workflow);
@@ -127,7 +127,7 @@ class WorkflowTemplateDefinitionDeployer {
127
127
  parallelWorkerCount: workflowDeclaration.parallelWorkerCount,
128
128
  };
129
129
  const workflowTemplate = await (0, event_workflow_template_definition_1.createWorkflowTemplateDefinition)(newObject);
130
- logger_1.default.info(`%s Created new workflow definition definitions: ${workflowKey}`, chalk_1.default.yellow.bold('WORKFLOW DEFINITION'));
130
+ logger_1.default.info(`WORKFLOW DEFINITION \t Created new workflow definition definitions: ${workflowKey}`);
131
131
  return workflowTemplate;
132
132
  }
133
133
  async populateActionIds(workflowDefinition, app) {
@@ -169,7 +169,7 @@ class WorkflowTemplateDefinitionDeployer {
169
169
  id: existingWorkflowDefinition.id,
170
170
  updates,
171
171
  });
172
- logger_1.default.info(`%s Updated existing workflow definition: ${updatedWorkflowDefinition.identifier}`, chalk_1.default.yellow.bold('WORKFLOW DEFINITION'));
172
+ logger_1.default.info(`WORKFLOW DEFINITION \t Updated existing workflow definition: ${updatedWorkflowDefinition.identifier}`);
173
173
  return updatedWorkflowDefinition;
174
174
  }
175
175
  getActionDeclarationIdentifier(actionKey, app) {
@@ -1,13 +1,15 @@
1
1
  import { EventWorkflowActionDefinition, WorkflowTemplate, WorkflowTemplateDeclaration } from '../../interfaces';
2
2
  export declare class LocalWorkflowTemplateDeployer {
3
3
  deployWorkflows(wtDeclaration: WorkflowTemplateDeclaration): Promise<void>;
4
- deployWorkflowTemplate(workflow: WorkflowTemplate, existingWorkflows: WorkflowTemplate[]): Promise<WorkflowTemplate>;
4
+ deployWorkflowTemplate(workflow: WorkflowTemplate, existingWorkflows: WorkflowTemplate[], appIdentifier: string): Promise<WorkflowTemplate>;
5
5
  private createNewWorkflowTemplate;
6
6
  private populateActionIds;
7
+ createWorkflowSchedule(workflowTemplate: WorkflowTemplate, workflowId: string): Promise<any>;
8
+ updateWorkflowSchedule(workflowTemplate: WorkflowTemplate, workflowId: string): Promise<any>;
7
9
  private updateWorkflowTemplate;
8
10
  deleteWorkflowTemplates(wtDeclaration: WorkflowTemplateDeclaration): Promise<void>;
9
11
  }
10
- export declare function getWorkflowTemplateIdentifier(workflowKey: string): string;
12
+ export declare function getWorkflowTemplateIdentifier(workflowTemplate: WorkflowTemplate): string;
11
13
  export declare function getActionByIdentifier(identifier: string): Promise<EventWorkflowActionDefinition>;
12
14
  export declare class WorkflowTemplateDeployer {
13
15
  deleteWorkflowTemplates(): Promise<void>;