@contrail/cli 1.0.67 → 1.0.69

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 (170) hide show
  1. package/.eslintrc.js +53 -53
  2. package/.vscode/settings.json +5 -5
  3. package/README.md +5 -5
  4. package/bin/init +3 -3
  5. package/lib/api/apps.d.ts +13 -13
  6. package/lib/api/apps.js +85 -85
  7. package/lib/api/event-workflow-action-definition.d.ts +1 -1
  8. package/lib/api/event-workflow-action-definition.js +7 -7
  9. package/lib/api/event-workflow-template-definition.d.ts +6 -6
  10. package/lib/api/event-workflow-template-definition.js +20 -20
  11. package/lib/api/event-workflow-templates.d.ts +7 -7
  12. package/lib/api/event-workflow-templates.js +25 -25
  13. package/lib/apps/create-app/create.d.ts +1 -1
  14. package/lib/apps/create-app/create.js +60 -59
  15. package/lib/apps/create-app/setup-template.d.ts +1 -1
  16. package/lib/apps/create-app/setup-template.js +34 -34
  17. package/lib/apps/deploy-app/actions-deployer.d.ts +11 -11
  18. package/lib/apps/deploy-app/actions-deployer.js +114 -114
  19. package/lib/apps/deploy-app/app-deployer.d.ts +8 -8
  20. package/lib/apps/deploy-app/app-deployer.js +93 -93
  21. package/lib/apps/deploy-app/app-template-parsers.d.ts +7 -7
  22. package/lib/apps/deploy-app/app-template-parsers.js +38 -38
  23. package/lib/apps/deploy-app/deploy.d.ts +2 -2
  24. package/lib/apps/deploy-app/deploy.js +58 -58
  25. package/lib/apps/install-app/app-installer.d.ts +2 -2
  26. package/lib/apps/install-app/app-installer.js +120 -120
  27. package/lib/apps/upgrade-app/app-upgrader.d.ts +3 -3
  28. package/lib/apps/upgrade-app/app-upgrader.js +126 -126
  29. package/lib/auth/auth.d.ts +9 -9
  30. package/lib/auth/auth.js +2 -2
  31. package/lib/auth/login.d.ts +2 -2
  32. package/lib/auth/login.js +141 -141
  33. package/lib/cli.d.ts +5 -5
  34. package/lib/cli.js +524 -481
  35. package/lib/colors/color-loader.d.ts +2 -2
  36. package/lib/colors/color-loader.js +96 -96
  37. package/lib/common.d.ts +1 -1
  38. package/lib/common.js +5 -5
  39. package/lib/config/config.d.ts +6 -6
  40. package/lib/config/config.js +70 -70
  41. package/lib/config/configCommands.d.ts +3 -3
  42. package/lib/config/configCommands.js +34 -34
  43. package/lib/interfaces.d.ts +191 -191
  44. package/lib/interfaces.js +25 -25
  45. package/lib/loader-process/loader-process.d.ts +2 -2
  46. package/lib/loader-process/loader-process.js +120 -120
  47. package/lib/projects/interfaces.d.ts +77 -77
  48. package/lib/projects/interfaces.js +23 -23
  49. package/lib/projects/project-exporter.d.ts +2 -2
  50. package/lib/projects/project-exporter.js +187 -187
  51. package/lib/projects/project-uploader.d.ts +1 -1
  52. package/lib/projects/project-uploader.js +105 -105
  53. package/lib/types/allUploader.d.ts +1 -1
  54. package/lib/types/allUploader.js +24 -24
  55. package/lib/types/csv-parser.d.ts +1 -1
  56. package/lib/types/csv-parser.js +51 -51
  57. package/lib/types/interfaces.d.ts +55 -55
  58. package/lib/types/interfaces.js +1 -1
  59. package/lib/types/option-set-hierarchy-exporter.d.ts +1 -1
  60. package/lib/types/option-set-hierarchy-exporter.js +113 -113
  61. package/lib/types/option-set-hierarchy-parser.d.ts +2 -2
  62. package/lib/types/option-set-hierarchy-parser.js +140 -140
  63. package/lib/types/option-set-hierarchy-uploader.d.ts +1 -1
  64. package/lib/types/option-set-hierarchy-uploader.js +113 -113
  65. package/lib/types/option-set-merger.d.ts +1 -1
  66. package/lib/types/option-set-merger.js +105 -102
  67. package/lib/types/option-set-parser.d.ts +3 -1
  68. package/lib/types/option-set-parser.js +140 -50
  69. package/lib/types/option-set-uploader.d.ts +1 -1
  70. package/lib/types/option-set-uploader.js +98 -98
  71. package/lib/types/parse-types.d.ts +4 -4
  72. package/lib/types/parse-types.js +189 -189
  73. package/lib/types/rule-set-uploader.d.ts +1 -1
  74. package/lib/types/rule-set-uploader.js +172 -172
  75. package/lib/types/type-property-policy-uploader.d.ts +1 -1
  76. package/lib/types/type-property-policy-uploader.js +178 -178
  77. package/lib/types/types-extractor.d.ts +27 -27
  78. package/lib/types/types-extractor.js +318 -318
  79. package/lib/types/types-properties-merger.d.ts +1 -1
  80. package/lib/types/types-properties-merger.js +75 -75
  81. package/lib/types/types-uploader.d.ts +1 -1
  82. package/lib/types/types-uploader.js +239 -239
  83. package/lib/types/usage-info-uploader.d.ts +1 -1
  84. package/lib/types/usage-info-uploader.js +132 -132
  85. package/lib/users/user-exporter.d.ts +1 -0
  86. package/lib/users/user-exporter.js +41 -0
  87. package/lib/users/user-uploader.d.ts +1 -0
  88. package/lib/users/user-uploader.js +45 -0
  89. package/lib/workflow-template-definitions/workflow-template-definition-commands.d.ts +2 -2
  90. package/lib/workflow-template-definitions/workflow-template-definition-commands.js +10 -10
  91. package/lib/workflow-template-definitions/workflow-template-definition-deployer.d.ts +12 -12
  92. package/lib/workflow-template-definitions/workflow-template-definition-deployer.js +151 -151
  93. package/lib/workflow-templates/local-workflow-template-deployer.d.ts +11 -11
  94. package/lib/workflow-templates/local-workflow-template-deployer.js +102 -102
  95. package/lib/workflow-templates/workflow-template-commands.d.ts +4 -4
  96. package/lib/workflow-templates/workflow-template-commands.js +51 -51
  97. package/lib/workflow-templates/workflow-template-deployer.d.ts +4 -4
  98. package/lib/workflow-templates/workflow-template-deployer.js +26 -26
  99. package/package.json +72 -72
  100. package/publish.bat +5 -0
  101. package/publish.sh +4 -4
  102. package/src/api/apps.ts +96 -96
  103. package/src/api/event-workflow-action-definition.ts +7 -7
  104. package/src/api/event-workflow-template-definition.ts +22 -22
  105. package/src/api/event-workflow-templates.ts +28 -28
  106. package/src/apps/create-app/create.ts +74 -73
  107. package/src/apps/create-app/setup-template.ts +37 -37
  108. package/src/apps/deploy-app/actions-deployer.ts +140 -140
  109. package/src/apps/deploy-app/app-deployer.ts +105 -105
  110. package/src/apps/deploy-app/app-template-parsers.ts +43 -43
  111. package/src/apps/deploy-app/deploy.ts +65 -65
  112. package/src/apps/install-app/app-installer.ts +125 -125
  113. package/src/apps/upgrade-app/app-upgrader.ts +131 -131
  114. package/src/auth/auth.ts +9 -9
  115. package/src/auth/login.ts +155 -155
  116. package/src/cli.ts +540 -496
  117. package/src/colors/color-loader.ts +112 -112
  118. package/src/colors/colors.csv +866 -866
  119. package/src/common.ts +4 -4
  120. package/src/config/config.ts +74 -74
  121. package/src/config/configCommands.ts +37 -37
  122. package/src/interfaces.ts +200 -200
  123. package/src/loader-process/loader-process.ts +151 -151
  124. package/src/projects/interfaces.ts +72 -72
  125. package/src/projects/project-exporter.ts +224 -224
  126. package/src/projects/project-uploader.ts +130 -130
  127. package/src/types/allUploader.ts +28 -28
  128. package/src/types/csv-parser.ts +58 -58
  129. package/src/types/interfaces.ts +58 -58
  130. package/src/types/option-set-hierarchy-exporter.ts +124 -124
  131. package/src/types/option-set-hierarchy-parser.ts +168 -168
  132. package/src/types/option-set-hierarchy-uploader.ts +121 -121
  133. package/src/types/option-set-merger.ts +123 -122
  134. package/src/types/option-set-parser.ts +165 -59
  135. package/src/types/option-set-uploader.ts +107 -107
  136. package/src/types/parse-types.ts +226 -226
  137. package/src/types/rule-set-uploader.ts +186 -186
  138. package/src/types/type-property-policy-uploader.ts +191 -191
  139. package/src/types/types-extractor.ts +368 -368
  140. package/src/types/types-properties-merger.ts +89 -89
  141. package/src/types/types-uploader.ts +271 -271
  142. package/src/types/usage-info-uploader.ts +138 -138
  143. package/src/users/user-exporter.ts +52 -0
  144. package/src/users/user-uploader.ts +58 -0
  145. package/src/workflow-template-definitions/workflow-template-definition-commands.ts +12 -12
  146. package/src/workflow-template-definitions/workflow-template-definition-deployer.ts +184 -184
  147. package/src/workflow-templates/local-workflow-template-deployer.ts +125 -125
  148. package/src/workflow-templates/workflow-template-commands.ts +59 -59
  149. package/src/workflow-templates/workflow-template-deployer.ts +29 -29
  150. package/templates/docker_deploy.bat +1 -0
  151. package/templates/javascript/actions/example/action.js +37 -37
  152. package/templates/javascript/app.yml +52 -52
  153. package/templates/javascript/package.json +23 -23
  154. package/templates/typescript/Dockerfile +15 -14
  155. package/templates/typescript/README.md +10 -10
  156. package/templates/typescript/app.yml +50 -54
  157. package/templates/typescript/package-lock.json +14 -14
  158. package/templates/typescript/package.json +54 -52
  159. package/templates/typescript/src/actions/logItem.ts +26 -0
  160. package/templates/typescript/src/framework/action-dispatcher.ts +86 -0
  161. package/templates/typescript/src/framework/app-config.ts +27 -0
  162. package/templates/typescript/src/framework/handler.ts +11 -0
  163. package/templates/typescript/src/framework/index.ts +3 -0
  164. package/templates/typescript/src/framework/interfaces.ts +32 -0
  165. package/templates/typescript/src/framework/logger.ts +21 -0
  166. package/templates/typescript/{actions → src/framework}/mock-server.ts +7 -0
  167. package/templates/typescript/tsconfig.json +28 -27
  168. package/tsconfig.json +31 -30
  169. package/templates/typescript/actions/handler.ts +0 -62
  170. package/templates/typescript/actions/utils/logger.ts +0 -15
package/src/cli.ts CHANGED
@@ -1,496 +1,540 @@
1
-
2
- import { create } from './apps/create-app/create';
3
- import { deployApp, removeApp } from './apps/deploy-app/deploy';
4
- import { getAll } from './types/types-extractor';
5
- import { uploadTypes } from './types/types-uploader';
6
- import { UploadOptionSets } from './types/option-set-uploader';
7
- import { ParseOptionSetsLocalFiles } from './types/option-set-parser';
8
- import { ParseOptionSetsHierarchyLocalFile, UploadOptionSetsHierarchyLocalFile } from './types/option-set-hierarchy-parser';
9
- import { ExportOptionSetsHierarchies } from './types/option-set-hierarchy-exporter';
10
- import { MergeOptionSets } from './types/option-set-merger';
11
- import { MergeTypeProperties } from './types/types-properties-merger';
12
- import { ParseTypesFromFiles, ParseTypesFromLocalFiles, ParseTypesFromTemplateFromLocalFiles, ParseTypesFromTemplateAndDataFromLocalFiles } from './types/parse-types';
13
- import { loadColors, deleteColors } from './colors/color-loader';
14
- import { listConfig, removeConfig, setConfig } from './config/configCommands';
15
- import { deleteWorkflowTemplates, localDeployWorkflowTemplate, listWorkflowTemplate } from './workflow-templates/workflow-template-commands';
16
- import { installApp, uninstallApp } from './apps/install-app/app-installer';
17
- import { upgradeApp } from './apps/upgrade-app/app-upgrader';
18
- import { cliInstallWorkflowTemplateDefinitions, listWorkflowTemplateDefinitions } from './workflow-template-definitions/workflow-template-definition-commands';
19
- import { configureProject } from './projects/project-uploader';
20
- import { ListProjects, ExportProject } from './projects/project-exporter';
21
- import { Load, UploadAndLoad } from './loader-process/loader-process';
22
- import { uploadUsageInfo } from './types/usage-info-uploader';
23
- import { uploadRuleSets } from './types/rule-set-uploader';
24
- import { UploadOptionSetHierarchies } from './types/option-set-hierarchy-uploader';
25
- import { uploadTypePropertyPolicies } from './types/type-property-policy-uploader';
26
- import { uploadAll } from './types/allUploader';
27
-
28
- const cliUsage = require('command-line-usage');
29
-
30
- /**
31
- * Built using documentation here:
32
- * https://www.twilio.com/blog/how-to-build-a-cli-with-node-js
33
- */
34
-
35
- export async function cli(args) {
36
- const fullCommand = args[2];
37
- if (!fullCommand) {
38
- printIllegalCommand();
39
- return;
40
- }
41
- const commandParts = fullCommand.split('.');
42
-
43
- if (!commandParts?.length) {
44
- printIllegalCommand();
45
- return;
46
- }
47
-
48
- if (
49
- commandParts?.length < 2 &&
50
- commandParts[0].toLowerCase() !== 'help' &&
51
- commandParts[0].toLowerCase() !== '-help' &&
52
- commandParts[0].toLowerCase() !== '--help'
53
- ) {
54
- printIllegalCommand();
55
- return;
56
- }
57
-
58
- const domain = commandParts[0];
59
- const command = commandParts[1];
60
-
61
- switch (domain) {
62
- case 'app': {
63
- switch (command) {
64
- case 'create': {
65
- create(args);
66
- break;
67
- }
68
- case 'deploy': {
69
- deployApp(args);
70
- break;
71
- }
72
- case 'remove': {
73
- removeApp(args);
74
- break;
75
- }
76
- case 'install': {
77
- installApp();
78
- break;
79
- }
80
- case 'uninstall': {
81
- uninstallApp();
82
- break;
83
- }
84
- case 'upgrade': {
85
- upgradeApp();
86
- break;
87
- }
88
- default: {
89
- printIllegalCommand();
90
- }
91
- }
92
- break;
93
- }
94
- case 'types': {
95
- switch (command) {
96
- case 'getAll': {
97
- getAll(args);
98
- break;
99
- }
100
- case 'uploadAll': {
101
- uploadAll();
102
- break;
103
- }
104
- case 'uploadTypes': {
105
- uploadTypes();
106
- break;
107
- }
108
- case 'uploadOptionSets': {
109
- UploadOptionSets(args);
110
- break;
111
- }
112
- case 'parseOptionSetsLocalFiles': {
113
- ParseOptionSetsLocalFiles(args);
114
- break;
115
- }
116
- case 'parseOptionSetsHierarchyLocalFile': {
117
- ParseOptionSetsHierarchyLocalFile(args);
118
- break;
119
- }
120
- case 'uploadOptionSetsHierarchyLocalFile': {
121
- UploadOptionSetsHierarchyLocalFile(args);
122
- break;
123
- }
124
- case 'exportOptionSetsHierarchies': {
125
- ExportOptionSetsHierarchies();
126
- break;
127
- }
128
- case 'uploadOptionSetsHierarchies': {
129
- UploadOptionSetHierarchies(args);
130
- break;
131
- }
132
- case 'uploadRuleSets': {
133
- uploadRuleSets(args);
134
- break;
135
- }
136
- case 'uploadUsageInfo': {
137
- uploadUsageInfo(args);
138
- break;
139
- }
140
- case 'uploadTypePropertyPolicies': {
141
- uploadTypePropertyPolicies(args);
142
- break;
143
- }
144
- case 'parseTypesFromLocalFiles': {
145
- ParseTypesFromLocalFiles(args);
146
- break;
147
- }
148
- case 'parseTypesFromTemplateFromLocalFiles': {
149
- ParseTypesFromTemplateFromLocalFiles(args);
150
- break;
151
- }
152
- case 'parseTypesFromTemplateAndDataFromLocalFiles': {
153
- ParseTypesFromTemplateAndDataFromLocalFiles(args);
154
- break;
155
- }
156
- case 'parseTypesFromFiles': {
157
- ParseTypesFromFiles(args);
158
- break;
159
- }
160
- case 'mergeOptionSets': {
161
- MergeOptionSets(args);
162
- break;
163
- }
164
- case 'mergeTypeProperties': {
165
- MergeTypeProperties(args);
166
- break;
167
- }
168
- default: {
169
- printIllegalCommand();
170
- }
171
- }
172
- break;
173
- }
174
- case 'colors': {
175
- switch (command) {
176
- case 'load': {
177
- await loadColors();
178
- break;
179
- }
180
- case 'delete': {
181
- await deleteColors();
182
- break;
183
- }
184
- default: {
185
- printIllegalCommand();
186
- }
187
- }
188
- break;
189
- }
190
- case 'loader': {
191
- switch (command) {
192
- case 'uploadAndLoad': {
193
- await UploadAndLoad(args);
194
- break;
195
- }
196
- case 'load': {
197
- await Load(args);
198
- break;
199
- }
200
- default: {
201
- printIllegalCommand();
202
- }
203
- }
204
- break;
205
- }
206
- case 'projects': {
207
- switch (command) {
208
- case 'load': {
209
- await configureProject(args);
210
- break;
211
- }
212
- case 'list': {
213
- await ListProjects();
214
- break;
215
- }
216
- case 'export': {
217
- await ExportProject(args);
218
- break;
219
- }
220
- default: {
221
- printIllegalCommand();
222
- }
223
- }
224
- break;
225
- }
226
- case 'workflow-templates': {
227
- switch (command) {
228
- case 'load': {
229
- await localDeployWorkflowTemplate();
230
- break;
231
- }
232
- case 'delete': {
233
- await deleteWorkflowTemplates();
234
- break;
235
- }
236
- case 'list': {
237
- await listWorkflowTemplate();
238
- break;
239
- }
240
- default: {
241
- printIllegalCommand();
242
- }
243
- }
244
- break;
245
- }
246
- case 'workflow-template-definitions': {
247
- switch (command) {
248
- case 'install': {
249
- await cliInstallWorkflowTemplateDefinitions();
250
- break;
251
- }
252
- case 'list': {
253
- await listWorkflowTemplateDefinitions();
254
- break;
255
- }
256
- default: {
257
- printIllegalCommand();
258
- }
259
- }
260
- break;
261
- }
262
- case 'config': {
263
- switch (command) {
264
- case 'list': {
265
- await listConfig();
266
- break;
267
- }
268
- case 'set': {
269
- await setConfig(args);
270
- break;
271
- }
272
- case 'remove': {
273
- await removeConfig(args);
274
- break;
275
- }
276
- default: {
277
- printIllegalCommand();
278
- }
279
- }
280
- break;
281
- }
282
- case 'help':
283
- case '-help':
284
- case '--help': {
285
- printHelp();
286
- break;
287
- }
288
- default: {
289
- printIllegalCommand();
290
- }
291
- }
292
- }
293
-
294
- function printHelp() {
295
- const sections = [
296
- {
297
- header: 'VibeIQ CLI',
298
- content: 'From your friends at VibeIQ!',
299
- },
300
- ...helpSections,
301
- ];
302
-
303
- const usage = cliUsage(sections);
304
- console.log(usage);
305
- }
306
-
307
- function printIllegalCommand() {
308
- console.log('Illegal command.');
309
-
310
- const usage = cliUsage(helpSections);
311
- console.log(usage);
312
- }
313
-
314
- const helpSections = [
315
- {
316
- header: 'General Usage',
317
- content: [
318
- 'Commands are run by pairing a domain with a command, joining them using a "."',
319
- 'e.g. app.create',
320
- '',
321
- 'All <File Path> options should use the file path relative to the folder the command is being run in and include the file ext.',
322
- ],
323
- },
324
- {
325
- header: 'App Commands - Domain: app',
326
- content: [
327
- {
328
- name: 'create',
329
- summary: 'Create a new app workspace.'
330
- },
331
- {
332
- name: 'deploy [--template-only]',
333
- summary: 'Deploy your app. --template-only can be used to deploy event workflow as a template directly to the org'
334
- },
335
- {
336
- name: 'remove',
337
- summary: 'Remove your app.'
338
- },
339
- {
340
- name: 'install',
341
- summary: 'Install an app to your org.'
342
- },
343
- {
344
- name: 'upgrade',
345
- summary: 'Upgrades or downgrades an existing app in your org.'
346
- },
347
- {
348
- name: 'uninstall',
349
- summary: 'Uninstall an app from your org.'
350
- },
351
- ],
352
- },
353
- {
354
- header: 'Colors Commands - Domain: colors',
355
- content: [{
356
- name: 'load',
357
- summary: 'Load colors from a CSV. Headers (name, hex, red, green, blue) are required'
358
- }
359
- // , {name: 'delete', summary: 'Delete all colors.'}
360
- ],
361
- },
362
- {
363
- header: 'Loader Commands - Domain: loader',
364
- content: [{
365
- name: 'uploadAndLoad <File Path> <Config Path>',
366
- summary: 'Upload a csv file and kick off a load job for the uploaded file. The file path must be a reference to a .csv file and the config path must be a reference to a .json or a .yml file.'
367
- },
368
- {
369
- name: 'load <Config Path>',
370
- summary: 'Upload a csv file and kick off a load job for the uploaded file. The config path must be a reference to a .json or a .yml file.'
371
- }
372
- ],
373
- },
374
- {
375
- header: 'Project Commands - Domain: projects',
376
- content: [{
377
- name: 'load <File Path>',
378
- summary: 'Configure a project from a yml file.'
379
- },
380
- {
381
- name: 'list',
382
- summary: 'Get a list of all projects.'
383
- },
384
- {
385
- name: 'export <Project Name>',
386
- summary: 'Export a project.'
387
- }
388
- ],
389
- },
390
- {
391
- header: 'Workflow Template Commands - Domain: workflow-templates',
392
- content: [
393
- {
394
- name: 'deploy',
395
- summary: 'Deploy your workflow. Assumes a workflow.yml file.'
396
- },
397
- {
398
- name: 'delete',
399
- summary: 'Removes the workflows in the workflow.yml file.'
400
- },
401
- {
402
- name: 'list',
403
- summary: 'Lists the workflow templates in the org'
404
- },
405
- ],
406
- },
407
- {
408
- header: 'Workflow Template Definition Commands - Domain: workflow-template-definitions',
409
- content: [{
410
- name: 'install',
411
- summary: 'Install the template definitions of an app to your org'
412
- },
413
- {
414
- name: 'list',
415
- summary: 'Lists the workflow templates in the org'
416
- }
417
- ],
418
- },
419
- {
420
- header: 'Type Commands - Domain: types',
421
- content: [
422
- {
423
- name: 'getAll',
424
- summary: 'Get all OptionSets and Types for your Org.'
425
- },
426
- {
427
- name: 'uploadTypes',
428
- summary: 'Upload Types for your Org. Types are uploaded from types.yml\n'
429
- },
430
- {
431
- name: 'uploadOptionSets',
432
- summary: 'Upload OptionSets for your Org. OptionSets are loaded from option_sets.yml\n'
433
- },
434
- {
435
- name: 'parseOptionSetsLocalFiles <File Paths>',
436
- summary: 'Parse CSV files into OptionSets.\n'
437
- },
438
- {
439
- name: 'parseOptionSetsHierarchyLocalFile <File Path>',
440
- summary: 'Parse CSV file into OptionSetHierarchy.'
441
- },
442
- {
443
- name: 'uploadOptionSetsHierarchyLocalFile <File Path> <name>',
444
- summary: 'upload CSV file into OptionSetHierarchy.'
445
- },
446
- {
447
- name: 'exportOptionSetsHierarchies',
448
- summary: 'export OptionSetHierarchies into CSVs.\n'
449
- },
450
- {
451
- name: 'uploadAll',
452
- summary: 'Upload an extracted archive of types:getAll.'
453
- },
454
- {
455
- name: 'uploadOptionSetsHierarchies',
456
- summary: 'Upload an extracted option set hierarchies.'
457
- },
458
- {
459
- name: 'uploadRuleSets',
460
- summary: 'Upload an extracted rule set.'
461
- },
462
- {
463
- name: 'uploadUsageInfo',
464
- summary: 'Upload extracted usage info.'
465
- },
466
- {
467
- name: 'uploadTypePropertyPolicies',
468
- summary: 'Upload type property policies.'
469
- },
470
- {
471
- name: 'uploadOptionSetsHierarchyLocalFiles <File Paths> <name>',
472
- summary: 'upload CSV files into OptionSetHierarchies.'
473
- },
474
- {
475
- name: 'parseTypesFromLocalFiles <File Paths>',
476
- summary: 'Parse CSV files into Types and OptionSets from local files.\n'
477
- },
478
- {
479
- name: 'parseTypesFromTemplateFromLocalFiles <File Paths>',
480
- summary: 'Parse CSV files into Types and OptionSets from local type template files.\n'
481
- },
482
- {
483
- name: 'parseTypesFromTemplateAndDataFromLocalFiles <File Paths>',
484
- summary: 'Parse CSV files into Types and OptionSets from local type template and data files.\n'
485
- },
486
- {
487
- name: 'parseTypesFromFiles <fileIds>',
488
- summary: 'Parse CSV files into Types and OptionSets from VibeIQ Files.\n File must be .yml\n'
489
- },
490
- {
491
- name: 'mergeTypeProperties <File Path> <TypePaths>',
492
- summary: 'Merge the TypeProperties from an existing org and the TypeProperties passed in. Add to Types via TypePath File must be .yml\n'
493
- },
494
- ],
495
- },
496
- ];
1
+
2
+ import { create } from './apps/create-app/create';
3
+ import { deployApp, removeApp } from './apps/deploy-app/deploy';
4
+ import { getAll } from './types/types-extractor';
5
+ import { uploadTypes } from './types/types-uploader';
6
+ import { UploadOptionSets } from './types/option-set-uploader';
7
+ import { ParseOptionSetsLocalFiles, ParseOptionSetsToFolderStructure } from './types/option-set-parser';
8
+ import { ParseOptionSetsHierarchyLocalFile, UploadOptionSetsHierarchyLocalFile } from './types/option-set-hierarchy-parser';
9
+ import { ExportOptionSetsHierarchies } from './types/option-set-hierarchy-exporter';
10
+ import { MergeOptionSets } from './types/option-set-merger';
11
+ import { MergeTypeProperties } from './types/types-properties-merger';
12
+ import { ParseTypesFromFiles, ParseTypesFromLocalFiles, ParseTypesFromTemplateFromLocalFiles, ParseTypesFromTemplateAndDataFromLocalFiles } from './types/parse-types';
13
+ import { loadColors, deleteColors } from './colors/color-loader';
14
+ import { listConfig, removeConfig, setConfig } from './config/configCommands';
15
+ import { deleteWorkflowTemplates, localDeployWorkflowTemplate, listWorkflowTemplate } from './workflow-templates/workflow-template-commands';
16
+ import { installApp, uninstallApp } from './apps/install-app/app-installer';
17
+ import { upgradeApp } from './apps/upgrade-app/app-upgrader';
18
+ import { cliInstallWorkflowTemplateDefinitions, listWorkflowTemplateDefinitions } from './workflow-template-definitions/workflow-template-definition-commands';
19
+ import { configureProject } from './projects/project-uploader';
20
+ import { ListProjects, ExportProject } from './projects/project-exporter';
21
+ import { Load, UploadAndLoad } from './loader-process/loader-process';
22
+ import { uploadUsageInfo } from './types/usage-info-uploader';
23
+ import { uploadRuleSets } from './types/rule-set-uploader';
24
+ import { UploadOptionSetHierarchies } from './types/option-set-hierarchy-uploader';
25
+ import { uploadTypePropertyPolicies } from './types/type-property-policy-uploader';
26
+ import { uploadAll } from './types/allUploader';
27
+ import { ExportUsers } from './users/user-exporter';
28
+ import { UploadUsers } from './users/user-uploader';
29
+
30
+ const cliUsage = require('command-line-usage');
31
+
32
+ /**
33
+ * Built using documentation here:
34
+ * https://www.twilio.com/blog/how-to-build-a-cli-with-node-js
35
+ */
36
+
37
+ export async function cli(args) {
38
+ const fullCommand = args[2];
39
+ if (!fullCommand) {
40
+ printIllegalCommand();
41
+ return;
42
+ }
43
+ const commandParts = fullCommand.split('.');
44
+
45
+ if (!commandParts?.length) {
46
+ printIllegalCommand();
47
+ return;
48
+ }
49
+
50
+ if (
51
+ commandParts?.length < 2 &&
52
+ commandParts[0].toLowerCase() !== 'help' &&
53
+ commandParts[0].toLowerCase() !== '-help' &&
54
+ commandParts[0].toLowerCase() !== '--help'
55
+ ) {
56
+ printIllegalCommand();
57
+ return;
58
+ }
59
+
60
+ const domain = commandParts[0];
61
+ const command = commandParts[1];
62
+
63
+ switch (domain) {
64
+ case 'app': {
65
+ switch (command) {
66
+ case 'create': {
67
+ create(args);
68
+ break;
69
+ }
70
+ case 'deploy': {
71
+ deployApp(args);
72
+ break;
73
+ }
74
+ case 'remove': {
75
+ removeApp(args);
76
+ break;
77
+ }
78
+ case 'install': {
79
+ installApp();
80
+ break;
81
+ }
82
+ case 'uninstall': {
83
+ uninstallApp();
84
+ break;
85
+ }
86
+ case 'upgrade': {
87
+ upgradeApp();
88
+ break;
89
+ }
90
+ default: {
91
+ printIllegalCommand();
92
+ }
93
+ }
94
+ break;
95
+ }
96
+ case 'types': {
97
+ switch (command) {
98
+ case 'getAll': {
99
+ getAll(args);
100
+ break;
101
+ }
102
+ case 'uploadAll': {
103
+ uploadAll();
104
+ break;
105
+ }
106
+ case 'uploadTypes': {
107
+ uploadTypes();
108
+ break;
109
+ }
110
+ case 'uploadOptionSets': {
111
+ UploadOptionSets(args);
112
+ break;
113
+ }
114
+ case 'parseOptionSetsLocalFiles': {
115
+ ParseOptionSetsLocalFiles(args);
116
+ break;
117
+ }
118
+ case 'parseOptionSetsToFolderStructure': {
119
+ ParseOptionSetsToFolderStructure(args);
120
+ break;
121
+ }
122
+ case 'parseOptionSetsHierarchyLocalFile': {
123
+ ParseOptionSetsHierarchyLocalFile(args);
124
+ break;
125
+ }
126
+ case 'uploadOptionSetsHierarchyLocalFile': {
127
+ UploadOptionSetsHierarchyLocalFile(args);
128
+ break;
129
+ }
130
+ case 'exportOptionSetsHierarchies': {
131
+ ExportOptionSetsHierarchies();
132
+ break;
133
+ }
134
+ case 'uploadOptionSetsHierarchies': {
135
+ UploadOptionSetHierarchies(args);
136
+ break;
137
+ }
138
+ case 'uploadRuleSets': {
139
+ uploadRuleSets(args);
140
+ break;
141
+ }
142
+ case 'uploadUsageInfo': {
143
+ uploadUsageInfo(args);
144
+ break;
145
+ }
146
+ case 'uploadTypePropertyPolicies': {
147
+ uploadTypePropertyPolicies(args);
148
+ break;
149
+ }
150
+ case 'parseTypesFromLocalFiles': {
151
+ ParseTypesFromLocalFiles(args);
152
+ break;
153
+ }
154
+ case 'parseTypesFromTemplateFromLocalFiles': {
155
+ ParseTypesFromTemplateFromLocalFiles(args);
156
+ break;
157
+ }
158
+ case 'parseTypesFromTemplateAndDataFromLocalFiles': {
159
+ ParseTypesFromTemplateAndDataFromLocalFiles(args);
160
+ break;
161
+ }
162
+ case 'parseTypesFromFiles': {
163
+ ParseTypesFromFiles(args);
164
+ break;
165
+ }
166
+ case 'mergeOptionSets': {
167
+ MergeOptionSets(args);
168
+ break;
169
+ }
170
+ case 'mergeTypeProperties': {
171
+ MergeTypeProperties(args);
172
+ break;
173
+ }
174
+ default: {
175
+ printIllegalCommand();
176
+ }
177
+ }
178
+ break;
179
+ }
180
+ case 'colors': {
181
+ switch (command) {
182
+ case 'load': {
183
+ await loadColors();
184
+ break;
185
+ }
186
+ case 'delete': {
187
+ await deleteColors();
188
+ break;
189
+ }
190
+ default: {
191
+ printIllegalCommand();
192
+ }
193
+ }
194
+ break;
195
+ }
196
+ case 'loader': {
197
+ switch (command) {
198
+ case 'uploadAndLoad': {
199
+ await UploadAndLoad(args);
200
+ break;
201
+ }
202
+ case 'load': {
203
+ await Load(args);
204
+ break;
205
+ }
206
+ default: {
207
+ printIllegalCommand();
208
+ }
209
+ }
210
+ break;
211
+ }
212
+ case 'projects': {
213
+ switch (command) {
214
+ case 'load': {
215
+ await configureProject(args);
216
+ break;
217
+ }
218
+ case 'list': {
219
+ await ListProjects();
220
+ break;
221
+ }
222
+ case 'export': {
223
+ await ExportProject(args);
224
+ break;
225
+ }
226
+ default: {
227
+ printIllegalCommand();
228
+ }
229
+ }
230
+ break;
231
+ }
232
+ case 'users': {
233
+ switch (command) {
234
+ case 'export': {
235
+ await ExportUsers();
236
+ break;
237
+ }
238
+ case 'import': {
239
+ await UploadUsers();
240
+ break;
241
+ }
242
+ default: {
243
+ printIllegalCommand();
244
+ }
245
+ }
246
+ break;
247
+ }
248
+
249
+ case 'workflow-templates': {
250
+ switch (command) {
251
+ case 'load': {
252
+ await localDeployWorkflowTemplate();
253
+ break;
254
+ }
255
+ case 'delete': {
256
+ await deleteWorkflowTemplates();
257
+ break;
258
+ }
259
+ case 'list': {
260
+ await listWorkflowTemplate();
261
+ break;
262
+ }
263
+ default: {
264
+ printIllegalCommand();
265
+ }
266
+ }
267
+ break;
268
+ }
269
+ case 'workflow-template-definitions': {
270
+ switch (command) {
271
+ case 'install': {
272
+ await cliInstallWorkflowTemplateDefinitions();
273
+ break;
274
+ }
275
+ case 'list': {
276
+ await listWorkflowTemplateDefinitions();
277
+ break;
278
+ }
279
+ default: {
280
+ printIllegalCommand();
281
+ }
282
+ }
283
+ break;
284
+ }
285
+ case 'config': {
286
+ switch (command) {
287
+ case 'list': {
288
+ await listConfig();
289
+ break;
290
+ }
291
+ case 'set': {
292
+ await setConfig(args);
293
+ break;
294
+ }
295
+ case 'remove': {
296
+ await removeConfig(args);
297
+ break;
298
+ }
299
+ default: {
300
+ printIllegalCommand();
301
+ }
302
+ }
303
+ break;
304
+ }
305
+ case 'help':
306
+ case '-help':
307
+ case '--help': {
308
+ printHelp();
309
+ break;
310
+ }
311
+ default: {
312
+ printIllegalCommand();
313
+ }
314
+ }
315
+ }
316
+
317
+ function printHelp() {
318
+ const sections = [
319
+ {
320
+ header: 'VibeIQ CLI',
321
+ content: 'From your friends at VibeIQ!',
322
+ },
323
+ ...helpSections,
324
+ ];
325
+
326
+ const usage = cliUsage(sections);
327
+ console.log(usage);
328
+ }
329
+
330
+ function printIllegalCommand() {
331
+ console.log('Illegal command.');
332
+
333
+ const usage = cliUsage(helpSections);
334
+ console.log(usage);
335
+ }
336
+
337
+ const helpSections = [
338
+ {
339
+ header: 'General Usage',
340
+ content: [
341
+ 'Commands are run by pairing a domain with a command, joining them using a "."',
342
+ 'e.g. app.create',
343
+ '',
344
+ 'All <File Path> options should use the file path relative to the folder the command is being run in and include the file ext.',
345
+ ],
346
+ },
347
+ {
348
+ header: 'App Commands - Domain: app',
349
+ content: [
350
+ {
351
+ name: 'create',
352
+ summary: 'Create a new app workspace.'
353
+ },
354
+ {
355
+ name: 'deploy [--template-only]',
356
+ summary: 'Deploy your app. --template-only can be used to deploy event workflow as a template directly to the org'
357
+ },
358
+ {
359
+ name: 'remove',
360
+ summary: 'Remove your app.'
361
+ },
362
+ {
363
+ name: 'install',
364
+ summary: 'Install an app to your org.'
365
+ },
366
+ {
367
+ name: 'upgrade',
368
+ summary: 'Upgrades or downgrades an existing app in your org.'
369
+ },
370
+ {
371
+ name: 'uninstall',
372
+ summary: 'Uninstall an app from your org.'
373
+ },
374
+ ],
375
+ },
376
+ {
377
+ header: 'Colors Commands - Domain: colors',
378
+ content: [{
379
+ name: 'load',
380
+ summary: 'Load colors from a CSV. Headers (name, hex, red, green, blue) are required'
381
+ }
382
+ // , {name: 'delete', summary: 'Delete all colors.'}
383
+ ],
384
+ },
385
+ {
386
+ header: 'Loader Commands - Domain: loader',
387
+ content: [{
388
+ name: 'uploadAndLoad <File Path> <Config Path>',
389
+ summary: 'Upload a csv file and kick off a load job for the uploaded file. The file path must be a reference to a .csv file and the config path must be a reference to a .json or a .yml file.'
390
+ },
391
+ {
392
+ name: 'load <Config Path>',
393
+ summary: 'Upload a csv file and kick off a load job for the uploaded file. The config path must be a reference to a .json or a .yml file.'
394
+ }
395
+ ],
396
+ },
397
+ {
398
+ header: 'Project Commands - Domain: projects',
399
+ content: [{
400
+ name: 'load <File Path>',
401
+ summary: 'Configure a project from a yml file.'
402
+ },
403
+ {
404
+ name: 'list',
405
+ summary: 'Get a list of all projects.'
406
+ },
407
+ {
408
+ name: 'export <Project Name>',
409
+ summary: 'Export a project.'
410
+ }
411
+ ],
412
+ },
413
+ {
414
+ header: 'Users Commands - Domain: users',
415
+ content: [
416
+ {
417
+ name: 'export',
418
+ summary: 'Export all users in the org.'
419
+ },
420
+ {
421
+ name: 'import',
422
+ summary: 'Import all users in the users.yml file.'
423
+ }
424
+ ],
425
+ },
426
+ {
427
+ header: 'Workflow Template Commands - Domain: workflow-templates',
428
+ content: [
429
+ {
430
+ name: 'deploy',
431
+ summary: 'Deploy your workflow. Assumes a workflow.yml file.'
432
+ },
433
+ {
434
+ name: 'delete',
435
+ summary: 'Removes the workflows in the workflow.yml file.'
436
+ },
437
+ {
438
+ name: 'list',
439
+ summary: 'Lists the workflow templates in the org'
440
+ },
441
+ ],
442
+ },
443
+ {
444
+ header: 'Workflow Template Definition Commands - Domain: workflow-template-definitions',
445
+ content: [{
446
+ name: 'install',
447
+ summary: 'Install the template definitions of an app to your org'
448
+ },
449
+ {
450
+ name: 'list',
451
+ summary: 'Lists the workflow templates in the org'
452
+ }
453
+ ],
454
+ },
455
+ {
456
+ header: 'Type Commands - Domain: types',
457
+ content: [
458
+ {
459
+ name: 'getAll',
460
+ summary: 'Get all OptionSets and Types for your Org.'
461
+ },
462
+ {
463
+ name: 'uploadTypes',
464
+ summary: 'Upload Types for your Org. Types are uploaded from types.yml\n'
465
+ },
466
+ {
467
+ name: 'uploadOptionSets',
468
+ summary: 'Upload OptionSets for your Org. OptionSets are loaded from .yml files in the option-sets directory.\n'
469
+ },
470
+ {
471
+ name: 'parseOptionSetsLocalFiles <File Paths> <style>',
472
+ summary: 'Parse CSV files into OptionSets. Style denotes the format the csv is in. If the csv file has a column for name and label, use "NameAndLabel". If the file has one column for each option set with the rows being the label value use "LabelsInColumn"\n'
473
+ },
474
+ {
475
+ name: 'parseOptionSetsToFolderStructure <File Path>',
476
+ summary: 'Parse single yml file into a folder with separate files per option set.\n'
477
+ },
478
+ {
479
+ name: 'parseOptionSetsHierarchyLocalFile <File Path>',
480
+ summary: 'Parse CSV file into OptionSetHierarchy.'
481
+ },
482
+ {
483
+ name: 'uploadOptionSetsHierarchyLocalFile <File Path> <name>',
484
+ summary: 'upload CSV file into OptionSetHierarchy.'
485
+ },
486
+ {
487
+ name: 'exportOptionSetsHierarchies',
488
+ summary: 'export OptionSetHierarchies into CSVs.\n'
489
+ },
490
+ {
491
+ name: 'uploadAll',
492
+ summary: 'Upload an extracted archive of types:getAll.'
493
+ },
494
+ {
495
+ name: 'uploadOptionSetsHierarchies',
496
+ summary: 'Upload an extracted option set hierarchies.'
497
+ },
498
+ {
499
+ name: 'uploadRuleSets',
500
+ summary: 'Upload an extracted rule set.'
501
+ },
502
+ {
503
+ name: 'uploadUsageInfo',
504
+ summary: 'Upload extracted usage info.'
505
+ },
506
+ {
507
+ name: 'uploadTypePropertyPolicies',
508
+ summary: 'Upload type property policies.'
509
+ },
510
+ {
511
+ name: 'uploadOptionSetsHierarchyLocalFiles <File Paths> <name>',
512
+ summary: 'upload CSV files into OptionSetHierarchies.'
513
+ },
514
+ {
515
+ name: 'parseTypesFromLocalFiles <File Paths>',
516
+ summary: 'Parse CSV files into Types and OptionSets from local files.\n'
517
+ },
518
+ {
519
+ name: 'parseTypesFromTemplateFromLocalFiles <File Paths>',
520
+ summary: 'Parse CSV files into Types and OptionSets from local type template files.\n'
521
+ },
522
+ {
523
+ name: 'parseTypesFromTemplateAndDataFromLocalFiles <File Paths>',
524
+ summary: 'Parse CSV files into Types and OptionSets from local type template and data files.\n'
525
+ },
526
+ {
527
+ name: 'parseTypesFromFiles <fileIds>',
528
+ summary: 'Parse CSV files into Types and OptionSets from VibeIQ Files.\n File must be .yml\n'
529
+ },
530
+ {
531
+ name: 'mergeTypeProperties <File Path> <TypePaths>',
532
+ summary: 'Merge the TypeProperties from an existing org and the TypeProperties passed in. Add to Types via TypePath File must be .yml\n'
533
+ },
534
+ {
535
+ name: 'mergeOptionSets <File Path>',
536
+ summary: 'Merge the OptionSets from an existing org and the OptionSets passed in. OptionSets File must be .yml.',
537
+ },
538
+ ],
539
+ },
540
+ ];