contensis-cli 1.3.1-beta.0 → 1.3.1-beta.10

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 (112) hide show
  1. package/README.md +78 -6
  2. package/dist/commands/copy.js +2 -2
  3. package/dist/commands/copy.js.map +2 -2
  4. package/dist/commands/create.js +1 -2
  5. package/dist/commands/create.js.map +1 -1
  6. package/dist/commands/globalOptions.js +16 -4
  7. package/dist/commands/globalOptions.js.map +2 -2
  8. package/dist/commands/import.js +1 -1
  9. package/dist/commands/import.js.map +2 -2
  10. package/dist/commands/index.js +4 -2
  11. package/dist/commands/index.js.map +2 -2
  12. package/dist/commands/list.js.map +1 -1
  13. package/dist/commands/login.js +1 -2
  14. package/dist/commands/login.js.map +1 -1
  15. package/dist/commands/push.js +102 -10
  16. package/dist/commands/push.js.map +3 -3
  17. package/dist/commands/remove.js +15 -4
  18. package/dist/commands/remove.js.map +2 -2
  19. package/dist/commands/set.js +2 -4
  20. package/dist/commands/set.js.map +1 -1
  21. package/dist/commands/update.js +70 -0
  22. package/dist/commands/update.js.map +7 -0
  23. package/dist/factories/RequestHandlerFactory.js +12 -5
  24. package/dist/factories/RequestHandlerFactory.js.map +2 -2
  25. package/dist/index.js +4 -0
  26. package/dist/index.js.map +1 -1
  27. package/dist/localisation/en-GB.js +19 -2
  28. package/dist/localisation/en-GB.js.map +2 -2
  29. package/dist/mappers/ContensisCliService-to-RequestHanderSiteConfigYaml.js.map +1 -1
  30. package/dist/mappers/DevInit-to-CIWorkflow.js +11 -6
  31. package/dist/mappers/DevInit-to-CIWorkflow.js.map +1 -1
  32. package/dist/mappers/DevRequests-to-RequestHanderCliArgs.js +4 -2
  33. package/dist/mappers/DevRequests-to-RequestHanderCliArgs.js.map +1 -1
  34. package/dist/models/CliService.d.js.map +1 -1
  35. package/dist/providers/CredentialProvider.js +11 -4
  36. package/dist/providers/CredentialProvider.js.map +2 -2
  37. package/dist/providers/GitHubCliModuleProvider.js +8 -10
  38. package/dist/providers/GitHubCliModuleProvider.js.map +1 -1
  39. package/dist/providers/HttpProvider.js +5 -4
  40. package/dist/providers/HttpProvider.js.map +1 -1
  41. package/dist/providers/ManifestProvider.js +1 -4
  42. package/dist/providers/ManifestProvider.js.map +1 -1
  43. package/dist/providers/SessionCacheProvider.js +26 -8
  44. package/dist/providers/SessionCacheProvider.js.map +2 -2
  45. package/dist/providers/file-provider.js +13 -11
  46. package/dist/providers/file-provider.js.map +1 -1
  47. package/dist/services/ContensisAuthService.js +1 -2
  48. package/dist/services/ContensisAuthService.js.map +1 -1
  49. package/dist/services/ContensisCliService.js +194 -127
  50. package/dist/services/ContensisCliService.js.map +3 -3
  51. package/dist/services/ContensisDevService.js +15 -18
  52. package/dist/services/ContensisDevService.js.map +2 -2
  53. package/dist/services/ContensisRoleService.js +8 -10
  54. package/dist/services/ContensisRoleService.js.map +1 -1
  55. package/dist/shell.js +31 -15
  56. package/dist/shell.js.map +2 -2
  57. package/dist/util/api-ids.js.map +1 -1
  58. package/dist/util/console.printer.js +15 -17
  59. package/dist/util/console.printer.js.map +2 -2
  60. package/dist/util/csv.formatter.js +8 -15
  61. package/dist/util/csv.formatter.js.map +2 -2
  62. package/dist/util/diff.js +6 -4
  63. package/dist/util/diff.js.map +1 -1
  64. package/dist/util/dotenv.js +1 -2
  65. package/dist/util/dotenv.js.map +1 -1
  66. package/dist/util/error.js.map +1 -1
  67. package/dist/util/fetch.js +4 -0
  68. package/dist/util/fetch.js.map +1 -1
  69. package/dist/util/git.js +8 -8
  70. package/dist/util/git.js.map +1 -1
  71. package/dist/util/gitignore.js +4 -0
  72. package/dist/util/gitignore.js.map +1 -1
  73. package/dist/util/html.formatter.js +70 -0
  74. package/dist/util/html.formatter.js.map +7 -0
  75. package/dist/util/index.js +5 -1
  76. package/dist/util/index.js.map +2 -2
  77. package/dist/util/json.formatter.js +6 -4
  78. package/dist/util/json.formatter.js.map +1 -1
  79. package/dist/util/logger.js +47 -53
  80. package/dist/util/logger.js.map +2 -2
  81. package/dist/util/os.js +4 -0
  82. package/dist/util/os.js.map +1 -1
  83. package/dist/util/xml.formatter.js +4 -0
  84. package/dist/util/xml.formatter.js.map +1 -1
  85. package/dist/util/yaml.js +1 -2
  86. package/dist/util/yaml.js.map +1 -1
  87. package/dist/version.js +1 -1
  88. package/dist/version.js.map +1 -1
  89. package/esbuild.config.js +12 -16
  90. package/package.json +31 -32
  91. package/src/commands/copy.ts +3 -1
  92. package/src/commands/globalOptions.ts +10 -3
  93. package/src/commands/import.ts +2 -0
  94. package/src/commands/index.ts +4 -0
  95. package/src/commands/push.ts +125 -1
  96. package/src/commands/remove.ts +20 -0
  97. package/src/commands/update.ts +84 -0
  98. package/src/factories/RequestHandlerFactory.ts +1 -1
  99. package/src/localisation/en-GB.ts +16 -1
  100. package/src/models/CliService.d.ts +1 -1
  101. package/src/providers/CredentialProvider.ts +2 -2
  102. package/src/providers/SessionCacheProvider.ts +26 -2
  103. package/src/services/ContensisCliService.ts +187 -49
  104. package/src/services/ContensisDevService.ts +2 -2
  105. package/src/shell.ts +20 -9
  106. package/src/util/console.printer.ts +23 -19
  107. package/src/util/csv.formatter.ts +1 -1
  108. package/src/util/html.formatter.ts +52 -0
  109. package/src/util/index.ts +1 -1
  110. package/src/util/logger.ts +17 -16
  111. package/src/version.ts +1 -1
  112. package/tsconfig.json +1 -1
@@ -15,7 +15,6 @@ import {
15
15
  SourceCms,
16
16
  ContentTypesResult,
17
17
  Model,
18
- MigrateModelsResult,
19
18
  BlockActionType,
20
19
  logEntitiesTable,
21
20
  } from 'migratortron';
@@ -51,6 +50,7 @@ import {
51
50
  printNodesMigrateResult,
52
51
  } from '~/util/console.printer';
53
52
  import { csvFormatter } from '~/util/csv.formatter';
53
+ import { htmlFormatter } from '~/util/html.formatter';
54
54
  import { jsonFormatter, limitFields } from '~/util/json.formatter';
55
55
  import { xmlFormatter } from '~/util/xml.formatter';
56
56
  import { isDebug } from '~/util/debug';
@@ -108,7 +108,7 @@ class ContensisCli {
108
108
  const environments = this.cache.environments || {};
109
109
 
110
110
  if (!currentEnvironment) return {} as EnvironmentCache;
111
- else if (!!environments[currentEnvironment])
111
+ else if (environments[currentEnvironment])
112
112
  return environments[currentEnvironment];
113
113
  else {
114
114
  return {
@@ -127,6 +127,7 @@ class ContensisCli {
127
127
  ) {
128
128
  // console.log('args: ', JSON.stringify(args, null, 2));
129
129
 
130
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
130
131
  const [exe, script, verb = '', noun = '', ...restArgs] = args;
131
132
  this.verb = verb?.toLowerCase();
132
133
  this.noun = noun?.toLowerCase();
@@ -199,7 +200,7 @@ class ContensisCli {
199
200
  PrintEnvironments = async () => {
200
201
  const { log, messages } = this;
201
202
  const { currentEnvironment, environments = {} } = this.cache;
202
- const envKeys = Object.keys(environments);
203
+ const envKeys = Object.keys(environments).sort();
203
204
  log.success(messages.envs.found(envKeys.length));
204
205
  await this.HandleFormattingAndOutput(envKeys, () => {
205
206
  // print the envKeys to console
@@ -212,6 +213,38 @@ class ContensisCli {
212
213
  }
213
214
  };
214
215
 
216
+ RemoveEnvironment = async (env: string) => {
217
+ const { log, messages, session } = this;
218
+ const { currentEnvironment, environments = {} } = this.cache;
219
+ const envKeys = Object.keys(environments);
220
+ log.success(messages.envs.found(envKeys.length));
221
+ if (environments[env]) {
222
+ // remove env from cache
223
+ session.RemoveEnv(env);
224
+ // remove credentials
225
+ const lastUserId = environments[env].lastUserId;
226
+ if (lastUserId) {
227
+ const [err, credentials] = await new CredentialProvider({
228
+ userId: environments[env].lastUserId,
229
+ alias: env,
230
+ }).Init();
231
+ if (!err && credentials) await credentials.Delete();
232
+ }
233
+ log.success(messages.envs.removed(env));
234
+ // support the output and format options - exporting the history for the
235
+ // removed alias
236
+ await this.HandleFormattingAndOutput(environments[env], () => log.line());
237
+ } else {
238
+ log.warning(messages.envs.notFound(env));
239
+ }
240
+
241
+ const nextCurrentEnv =
242
+ currentEnvironment === env ? undefined : currentEnvironment;
243
+ if (envKeys.length === 0 || !nextCurrentEnv) log.help(messages.envs.tip());
244
+
245
+ return nextCurrentEnv;
246
+ };
247
+
215
248
  Connect = async (environment: string) => {
216
249
  const { log, messages, session } = this;
217
250
 
@@ -219,6 +252,7 @@ class ContensisCli {
219
252
  this.currentEnv = environment;
220
253
  this.urls = url(environment, 'website');
221
254
 
255
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
222
256
  const [fetchErr, response] = await to(fetch(this.urls.cms));
223
257
  if (response && response?.status < 400) {
224
258
  log.success(messages.connect.connected(environment));
@@ -291,6 +325,7 @@ class ContensisCli {
291
325
  commit = false,
292
326
  fromFile,
293
327
  importDataType,
328
+ importData,
294
329
  }: {
295
330
  commit?: boolean;
296
331
  fromFile?: string;
@@ -301,10 +336,13 @@ class ContensisCli {
301
336
  | 'models'
302
337
  | 'nodes'
303
338
  | 'user-input';
339
+ importData?: any[];
304
340
  }) => {
305
- const source: 'contensis' | 'file' = fromFile ? 'file' : 'contensis';
341
+ const source: 'contensis' | 'file' =
342
+ fromFile || importData ? 'file' : 'contensis';
306
343
 
307
- const fileData = fromFile ? (await readFileAsJSON(fromFile)) || [] : [];
344
+ const fileData =
345
+ importData || (fromFile ? (await readFileAsJSON(fromFile)) || [] : []);
308
346
 
309
347
  if (typeof fileData === 'string')
310
348
  throw new Error(`Import file format must be of type JSON`);
@@ -463,7 +501,7 @@ class ContensisCli {
463
501
  isPassword(this.env.passwordFallback) ||
464
502
  '';
465
503
 
466
- const { log, messages } = this;
504
+ const { messages } = this;
467
505
 
468
506
  if (userId) {
469
507
  const { currentEnv, env } = this;
@@ -589,7 +627,7 @@ class ContensisCli {
589
627
  if (contensis) {
590
628
  // Retrieve token for env
591
629
  const [error, token] = await to(
592
- contensis.content.sourceRepo.repo.BearerToken()
630
+ contensis.content.source.repo.BearerToken()
593
631
  );
594
632
  if (token) {
595
633
  // Print bearer token to console
@@ -621,8 +659,8 @@ class ContensisCli {
621
659
  currentProject && currentProject !== 'null'
622
660
  ? currentProject
623
661
  : projects.some(p => p.id === 'website')
624
- ? 'website'
625
- : undefined;
662
+ ? 'website'
663
+ : undefined;
626
664
 
627
665
  session.UpdateEnv({
628
666
  projects: projects.map(p => p.id),
@@ -641,6 +679,7 @@ class ContensisCli {
641
679
  try {
642
680
  color = chalk.keyword((project as any).color);
643
681
  } catch (ex) {
682
+ Logger.debug(`${ex}`);
644
683
  color = chalk.white;
645
684
  }
646
685
  console.log(
@@ -671,7 +710,7 @@ class ContensisCli {
671
710
  };
672
711
 
673
712
  PrintProject = async (projectId = this.currentProject) => {
674
- const { log, messages, session } = this;
713
+ const { log, messages } = this;
675
714
  const contensis = await this.ConnectContensis();
676
715
 
677
716
  if (contensis) {
@@ -816,7 +855,7 @@ class ContensisCli {
816
855
  const contensis = await this.ConnectContensis({ commit: true });
817
856
 
818
857
  if (contensis) {
819
- const [err, key] = await contensis.apiKeys.RemoveKey(id);
858
+ const [err] = await contensis.apiKeys.RemoveKey(id);
820
859
 
821
860
  if (!err) {
822
861
  log.success(messages.keys.removed(currentEnv, id));
@@ -1040,7 +1079,7 @@ class ContensisCli {
1040
1079
  if (contensis) {
1041
1080
  // Retrieve workflows list for env
1042
1081
  const [workflowsErr, workflows] =
1043
- await contensis.content.sourceRepo.workflows.GetWorkflows();
1082
+ await contensis.content.source.workflows.GetWorkflows();
1044
1083
 
1045
1084
  if (Array.isArray(workflows)) {
1046
1085
  log.success(messages.workflows.list(currentEnv));
@@ -1106,7 +1145,7 @@ class ContensisCli {
1106
1145
  if (contensis) {
1107
1146
  // Retrieve workflows list for env
1108
1147
  const [workflowsErr, workflows] =
1109
- await contensis.content.sourceRepo.workflows.GetWorkflows();
1148
+ await contensis.content.source.workflows.GetWorkflows();
1110
1149
 
1111
1150
  if (Array.isArray(workflows)) {
1112
1151
  log.success(messages.workflows.list(currentEnv));
@@ -1330,9 +1369,9 @@ class ContensisCli {
1330
1369
  if (contensis) {
1331
1370
  log.line();
1332
1371
  if (contensis.isPreview) {
1333
- console.log(log.successText(` -- IMPORT PREVIEW -- `));
1372
+ log.success(messages.migrate.preview());
1334
1373
  } else {
1335
- console.log(log.warningText(` *** COMMITTING IMPORT *** `));
1374
+ log.warning(messages.migrate.commit());
1336
1375
  }
1337
1376
 
1338
1377
  const [migrateErr, result] = await contensis.MigrateContentModels();
@@ -1525,10 +1564,9 @@ class ContensisCli {
1525
1564
  contentType.projectId = currentProject;
1526
1565
  delete contentType.uuid;
1527
1566
 
1528
- const [err, created, createStatus] =
1529
- await contensis.models.targetRepos[
1530
- currentProject
1531
- ].repo.UpsertContentType(false, contentType);
1567
+ const [err, , createStatus] = await contensis.models.targets[
1568
+ currentProject
1569
+ ].repo.UpsertContentType(false, contentType);
1532
1570
 
1533
1571
  if (err) log.error(err.message, err);
1534
1572
  if (createStatus) {
@@ -1717,10 +1755,9 @@ class ContensisCli {
1717
1755
  component.projectId = currentProject;
1718
1756
  delete component.uuid;
1719
1757
 
1720
- const [err, created, createStatus] =
1721
- await contensis.models.targetRepos[
1722
- currentProject
1723
- ].repo.UpsertComponent(false, component);
1758
+ const [err, , createStatus] = await contensis.models.targets[
1759
+ currentProject
1760
+ ].repo.UpsertComponent(false, component);
1724
1761
 
1725
1762
  if (err) log.error(err.message, err);
1726
1763
  if (createStatus) {
@@ -1801,15 +1838,23 @@ class ContensisCli {
1801
1838
  // Add a full sys.uri to asset entries
1802
1839
  // Add sys.metadata.exportCms
1803
1840
  // Add sys.metadata.exportProjectId
1841
+ const nodes = contensis.content.source.nodes.raw;
1842
+ const combinedOutput = [...entries, ...nodes];
1804
1843
 
1805
- await this.HandleFormattingAndOutput(entries, () =>
1844
+ await this.HandleFormattingAndOutput(combinedOutput, () => {
1806
1845
  // print the entries to console
1807
1846
  logEntitiesTable({
1808
1847
  entries,
1809
1848
  projectId: currentProject,
1810
1849
  fields: contensis.payload.query?.fields,
1811
- })
1812
- );
1850
+ });
1851
+ if (nodes.length)
1852
+ logEntitiesTable({
1853
+ nodes,
1854
+ projectId: currentProject,
1855
+ fields: contensis.payload.query?.fields,
1856
+ });
1857
+ });
1813
1858
  } else {
1814
1859
  log.warning(messages.models.noList(currentProject));
1815
1860
  log.help(messages.connect.tip());
@@ -1821,11 +1866,13 @@ class ContensisCli {
1821
1866
  fromFile,
1822
1867
  logOutput,
1823
1868
  saveEntries,
1869
+ data,
1824
1870
  }: {
1825
1871
  commit: boolean;
1826
- fromFile: string;
1872
+ fromFile?: string;
1827
1873
  logOutput: string;
1828
1874
  saveEntries: boolean;
1875
+ data?: any[];
1829
1876
  }) => {
1830
1877
  const { currentEnv, currentProject, log, messages } = this;
1831
1878
 
@@ -1833,14 +1880,15 @@ class ContensisCli {
1833
1880
  commit,
1834
1881
  fromFile,
1835
1882
  importDataType: 'entries',
1883
+ importData: data,
1836
1884
  });
1837
1885
 
1838
1886
  if (contensis) {
1839
1887
  log.line();
1840
1888
  if (contensis.isPreview) {
1841
- console.log(log.successText(` -- IMPORT PREVIEW -- `));
1889
+ log.success(messages.migrate.preview());
1842
1890
  } else {
1843
- console.log(log.warningText(` *** COMMITTING IMPORT *** `));
1891
+ log.warning(messages.migrate.commit());
1844
1892
  }
1845
1893
 
1846
1894
  const [err, result] = await contensis.MigrateEntries();
@@ -1850,7 +1898,11 @@ class ContensisCli {
1850
1898
  const { entries, nodes } = contensis.content.targets[currentProject];
1851
1899
 
1852
1900
  const output = saveEntries
1853
- ? entries.migrate?.map(me => me.toJSON())
1901
+ ? // include entries and dependent nodes when saving entries
1902
+ [
1903
+ entries.migrate?.map(me => me.toJSON()) || [],
1904
+ nodes.migrateNodes.map(mn => mn.node),
1905
+ ].flat()
1854
1906
  : result;
1855
1907
  await this.HandleFormattingAndOutput(output, () => {
1856
1908
  // print the migrateResult to console
@@ -1859,7 +1911,10 @@ class ContensisCli {
1859
1911
  showDiff: logOutput === 'all' || logOutput === 'changes',
1860
1912
  showChanged: logOutput === 'changes',
1861
1913
  });
1862
- if (['all', 'changes'].includes(logOutput))
1914
+ if (
1915
+ ['all', 'changes'].includes(logOutput) &&
1916
+ nodes.migrateNodes.length
1917
+ )
1863
1918
  printNodeTreeOutput(
1864
1919
  this,
1865
1920
  {
@@ -1930,9 +1985,9 @@ class ContensisCli {
1930
1985
  if (contensis) {
1931
1986
  log.line();
1932
1987
  if (contensis.isPreview) {
1933
- console.log(log.successText(` -- IMPORT PREVIEW -- `));
1988
+ log.success(messages.migrate.preview());
1934
1989
  } else {
1935
- console.log(log.warningText(` *** COMMITTING IMPORT *** `));
1990
+ log.warning(messages.migrate.commit());
1936
1991
  }
1937
1992
 
1938
1993
  const [err, result] = await to(
@@ -1989,6 +2044,87 @@ class ContensisCli {
1989
2044
  }
1990
2045
  };
1991
2046
 
2047
+ UpdateEntryField = async ({
2048
+ commit,
2049
+ fromFile,
2050
+ logOutput,
2051
+ saveEntries,
2052
+ }: {
2053
+ commit: boolean;
2054
+ fromFile: string;
2055
+ logOutput: string;
2056
+ saveEntries: boolean;
2057
+ }) => {
2058
+ const { currentEnv, currentProject, log, messages } = this;
2059
+
2060
+ const contensis = await this.ConnectContensisImport({
2061
+ commit,
2062
+ fromFile,
2063
+ importDataType: 'entries',
2064
+ });
2065
+
2066
+ if (contensis) {
2067
+ log.line();
2068
+ if (contensis.isPreview) {
2069
+ log.success(messages.entries.update.preview());
2070
+ } else {
2071
+ log.warning(messages.entries.update.commit());
2072
+ }
2073
+
2074
+ const [err, result] = await to(
2075
+ contensis.content.update.UpdateFieldContent()
2076
+ );
2077
+
2078
+ if (err) logError(err);
2079
+ if (result) {
2080
+ const output = saveEntries
2081
+ ? contensis.content.update.targets[
2082
+ currentProject
2083
+ ].entries.migrate?.map(me => me.toJSON())
2084
+ : result;
2085
+ await this.HandleFormattingAndOutput(output, () => {
2086
+ // print the migrateResult to console
2087
+ printEntriesMigrateResult(this, result, {
2088
+ action: 'update',
2089
+ showAll: logOutput === 'all',
2090
+ showDiff: logOutput === 'all' || logOutput === 'changes',
2091
+ showChanged: logOutput === 'changes',
2092
+ });
2093
+ });
2094
+ }
2095
+
2096
+ if (
2097
+ result &&
2098
+ !err &&
2099
+ !result.errors?.length &&
2100
+ ((!commit && result.entriesToMigrate[currentProject].totalCount) ||
2101
+ (commit &&
2102
+ (result.migrateResult?.created || result.migrateResult?.updated)))
2103
+ ) {
2104
+ log.success(
2105
+ messages.entries.update.success(
2106
+ currentEnv,
2107
+ commit,
2108
+ commit
2109
+ ? (result.migrateResult?.created || 0) +
2110
+ (result.migrateResult?.updated || 0)
2111
+ : result.entriesToMigrate[currentProject].totalCount
2112
+ )
2113
+ );
2114
+ if (!commit) {
2115
+ log.raw(``);
2116
+ log.help(messages.entries.commitTip());
2117
+ }
2118
+ } else {
2119
+ log.error(messages.entries.update.failed(currentEnv), err);
2120
+ if (!result?.entriesToMigrate?.[currentProject]?.totalCount)
2121
+ log.help(messages.entries.notFound(currentEnv));
2122
+ }
2123
+ } else {
2124
+ log.warning(messages.models.noList(currentProject));
2125
+ log.help(messages.connect.tip());
2126
+ }
2127
+ };
1992
2128
  GetNodes = async (rootPath: string, depth = 0) => {
1993
2129
  const { currentProject, log, messages } = this;
1994
2130
  const contensis = await this.ConnectContensis();
@@ -2000,7 +2136,7 @@ class ContensisCli {
2000
2136
  log.error(messages.nodes.failedGet(currentProject), err);
2001
2137
  return;
2002
2138
  }
2003
- const root = contensis.nodes.sourceRepo.nodes.tree;
2139
+ const root = contensis.nodes.source.nodes.tree;
2004
2140
 
2005
2141
  log.success(messages.nodes.get(currentProject, rootPath, depth));
2006
2142
 
@@ -2037,9 +2173,9 @@ class ContensisCli {
2037
2173
  if (contensis) {
2038
2174
  log.line();
2039
2175
  if (contensis.isPreview) {
2040
- console.log(log.successText(` -- IMPORT PREVIEW -- `));
2176
+ log.success(messages.migrate.preview());
2041
2177
  } else {
2042
- console.log(log.warningText(` *** COMMITTING IMPORT *** `));
2178
+ log.warning(messages.migrate.commit());
2043
2179
  }
2044
2180
 
2045
2181
  const [err, result] = await contensis.MigrateNodes();
@@ -2049,8 +2185,7 @@ class ContensisCli {
2049
2185
  await this.HandleFormattingAndOutput(result, () => {
2050
2186
  // print the migrateResult to console
2051
2187
  const migrateTree =
2052
- contensis.nodes.targetRepos[currentProject].nodes
2053
- .migrateNodesTreeView;
2188
+ contensis.nodes.targets[currentProject].nodes.migrateNodesTreeView;
2054
2189
  printNodeTreeOutput(this, migrateTree, logOutput, logLimit);
2055
2190
  printNodesMigrateResult(this, result, {
2056
2191
  showAll: logOutput === 'all',
@@ -2075,8 +2210,8 @@ class ContensisCli {
2075
2210
  ) {
2076
2211
  let totalCount: number;
2077
2212
  if (commit) {
2078
- let created = typeof nodesCreated === 'number' ? nodesCreated : 0;
2079
- let updated = typeof nodesUpdated === 'number' ? nodesUpdated : 0;
2213
+ const created = typeof nodesCreated === 'number' ? nodesCreated : 0;
2214
+ const updated = typeof nodesUpdated === 'number' ? nodesUpdated : 0;
2080
2215
 
2081
2216
  totalCount = created + updated;
2082
2217
  } else {
@@ -2122,8 +2257,7 @@ class ContensisCli {
2122
2257
  // print the migrateResult to console
2123
2258
  printNodeTreeOutput(
2124
2259
  this,
2125
- contensis.nodes.targetRepos[currentProject].nodes
2126
- .migrateNodesTreeView
2260
+ contensis.nodes.targets[currentProject].nodes.migrateNodesTreeView
2127
2261
  );
2128
2262
  // printNodesMigrateResult(this, result, {
2129
2263
  // action: 'delete',
@@ -2368,9 +2502,8 @@ class ContensisCli {
2368
2502
  const contensis = await this.ConnectContensis();
2369
2503
  if (contensis) {
2370
2504
  // Push new block version
2371
- const [err, blockVersion] = await contensis.blocks.PushBlockVersion(
2372
- block
2373
- );
2505
+ const [err, blockVersion] =
2506
+ await contensis.blocks.PushBlockVersion(block);
2374
2507
  if (!err) {
2375
2508
  log.success(
2376
2509
  messages.blocks.pushed(
@@ -2447,9 +2580,8 @@ class ContensisCli {
2447
2580
 
2448
2581
  // If action is release and version is latest, find the latest version number
2449
2582
  if (action === 'release' && version === 'latest') {
2450
- const [getErr, blockVersion] = await this.GetLatestBlockVersion(
2451
- blockId
2452
- );
2583
+ const [getErr, blockVersion] =
2584
+ await this.GetLatestBlockVersion(blockId);
2453
2585
 
2454
2586
  if (getErr) {
2455
2587
  // Log error getting latest block version no
@@ -2562,7 +2694,7 @@ class ContensisCli {
2562
2694
  stopFollowing();
2563
2695
  });
2564
2696
 
2565
- let delay = promiseDelay(5 * 1000, null);
2697
+ const delay = promiseDelay(5 * 1000, null);
2566
2698
  const stopFollowing = () => {
2567
2699
  following = false;
2568
2700
  delay.cancel();
@@ -2666,6 +2798,7 @@ class ContensisCli {
2666
2798
  }
2667
2799
  };
2668
2800
 
2801
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
2669
2802
  PrintRenderers = async (rendererId?: string) => {
2670
2803
  const { currentEnv, env, log, messages } = this;
2671
2804
  const contensis = await this.ConnectContensis();
@@ -2722,6 +2855,9 @@ class ContensisCli {
2722
2855
  } else if (format === 'csv') {
2723
2856
  log.raw('');
2724
2857
  log.raw(log.infoText(await csvFormatter(limitFields(obj, fields))));
2858
+ } else if (format === 'html') {
2859
+ log.raw('');
2860
+ log.raw(log.infoText(htmlFormatter(limitFields(obj, fields))));
2725
2861
  } else if (format === 'xml') {
2726
2862
  log.raw('');
2727
2863
  log.raw(log.infoText(xmlFormatter(limitFields(obj, fields))));
@@ -2736,6 +2872,8 @@ class ContensisCli {
2736
2872
  const isText = !tryParse(obj) && typeof obj === 'string';
2737
2873
  if (format === 'csv') {
2738
2874
  writeString = await csvFormatter(limitFields(obj, fields));
2875
+ } else if (format === 'html') {
2876
+ writeString = htmlFormatter(limitFields(obj, fields));
2739
2877
  } else if (format === 'xml') {
2740
2878
  writeString = xmlFormatter(limitFields(obj, fields));
2741
2879
  } else
@@ -58,7 +58,7 @@ class ContensisDev extends ContensisRole {
58
58
  return pattern.test(blockId);
59
59
  } else return false;
60
60
  };
61
- let { blockId } = await inquirer.prompt({
61
+ const { blockId } = await inquirer.prompt({
62
62
  name: 'blockId',
63
63
  type: 'input',
64
64
  prefix: '🧱',
@@ -275,7 +275,7 @@ class ContensisDev extends ContensisRole {
275
275
 
276
276
  const envFilePath = `${projectHome}/.env`;
277
277
  const existingEnvFile = readFile(envFilePath);
278
- let existingEnvFileArray = (existingEnvFile || '')
278
+ const existingEnvFileArray = (existingEnvFile || '')
279
279
  .split('\n')
280
280
  .filter(l => !!l);
281
281
 
package/src/shell.ts CHANGED
@@ -14,6 +14,7 @@ import { LIB_VERSION } from './version';
14
14
  class ContensisShell {
15
15
  private currentEnvironment!: string;
16
16
  private emptyInputCounter: number = 0;
17
+ private cache!: SessionCache;
17
18
  private env!: EnvironmentCache;
18
19
  private firstStart = true;
19
20
  private userId: string = '';
@@ -22,12 +23,12 @@ class ContensisShell {
22
23
 
23
24
  private refreshEnvironment = () => {
24
25
  // Reload any persisted changes from the disk cache
25
- const {
26
- cache: { currentEnvironment = '', environments = {} },
27
- } = new ContensisCli([]);
26
+ const { cache } = new ContensisCli([]);
27
+ this.cache = cache; // read the cache to pre-load suggestions
28
28
  // console.log(`refreshing env w/${currentEnvironment}`);
29
- this.currentEnvironment = currentEnvironment;
30
- this.env = environments[currentEnvironment];
29
+ this.currentEnvironment = cache.currentEnvironment || '';
30
+ const environments = cache.environments || {};
31
+ this.env = environments[this.currentEnvironment];
31
32
 
32
33
  // Reload logging here to support changing language
33
34
  Logging('en-GB').then(({ messages, Log }) => {
@@ -128,12 +129,21 @@ class ContensisShell {
128
129
  },
129
130
  },
130
131
  'connect',
132
+ ...Object.keys(this.cache.environments || {}).map(
133
+ alias => `connect ${alias}`
134
+ ),
131
135
  'list envs',
136
+ 'remove env',
132
137
  'quit',
133
138
  ];
134
139
 
135
140
  if (currentEnvironment)
136
- availableCommands.push('login', 'list projects', 'set project');
141
+ availableCommands.push(
142
+ 'login',
143
+ 'list projects',
144
+ 'set project',
145
+ ...(this.env?.projects || []).map(project => `set project ${project}`)
146
+ );
137
147
  if (userId)
138
148
  availableCommands.push(
139
149
  'copy field',
@@ -176,6 +186,7 @@ class ContensisShell {
176
186
  'list roles',
177
187
  'list webhooks',
178
188
  'list workflows',
189
+ 'push asset',
179
190
  'push block',
180
191
  'remove components',
181
192
  'remove contenttypes',
@@ -189,7 +200,8 @@ class ContensisShell {
189
200
  'set role description',
190
201
  'set role assignments',
191
202
  'set role enabled',
192
- 'set role permissions'
203
+ 'set role permissions',
204
+ 'update field'
193
205
  );
194
206
 
195
207
  const prompt = inquirer.createPromptModule();
@@ -243,9 +255,8 @@ class ContensisShell {
243
255
  : JSON.stringify(ex, null, 2)
244
256
  }`
245
257
  );
246
- } finally {
247
- return this.contensisPrompt();
248
258
  }
259
+ return this.contensisPrompt();
249
260
  }
250
261
  })
251
262
  .catch((err: Error) => {