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.
- package/README.md +78 -6
- package/dist/commands/copy.js +2 -2
- package/dist/commands/copy.js.map +2 -2
- package/dist/commands/create.js +1 -2
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/globalOptions.js +16 -4
- package/dist/commands/globalOptions.js.map +2 -2
- package/dist/commands/import.js +1 -1
- package/dist/commands/import.js.map +2 -2
- package/dist/commands/index.js +4 -2
- package/dist/commands/index.js.map +2 -2
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/login.js +1 -2
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/push.js +102 -10
- package/dist/commands/push.js.map +3 -3
- package/dist/commands/remove.js +15 -4
- package/dist/commands/remove.js.map +2 -2
- package/dist/commands/set.js +2 -4
- package/dist/commands/set.js.map +1 -1
- package/dist/commands/update.js +70 -0
- package/dist/commands/update.js.map +7 -0
- package/dist/factories/RequestHandlerFactory.js +12 -5
- package/dist/factories/RequestHandlerFactory.js.map +2 -2
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/localisation/en-GB.js +19 -2
- package/dist/localisation/en-GB.js.map +2 -2
- package/dist/mappers/ContensisCliService-to-RequestHanderSiteConfigYaml.js.map +1 -1
- package/dist/mappers/DevInit-to-CIWorkflow.js +11 -6
- package/dist/mappers/DevInit-to-CIWorkflow.js.map +1 -1
- package/dist/mappers/DevRequests-to-RequestHanderCliArgs.js +4 -2
- package/dist/mappers/DevRequests-to-RequestHanderCliArgs.js.map +1 -1
- package/dist/models/CliService.d.js.map +1 -1
- package/dist/providers/CredentialProvider.js +11 -4
- package/dist/providers/CredentialProvider.js.map +2 -2
- package/dist/providers/GitHubCliModuleProvider.js +8 -10
- package/dist/providers/GitHubCliModuleProvider.js.map +1 -1
- package/dist/providers/HttpProvider.js +5 -4
- package/dist/providers/HttpProvider.js.map +1 -1
- package/dist/providers/ManifestProvider.js +1 -4
- package/dist/providers/ManifestProvider.js.map +1 -1
- package/dist/providers/SessionCacheProvider.js +26 -8
- package/dist/providers/SessionCacheProvider.js.map +2 -2
- package/dist/providers/file-provider.js +13 -11
- package/dist/providers/file-provider.js.map +1 -1
- package/dist/services/ContensisAuthService.js +1 -2
- package/dist/services/ContensisAuthService.js.map +1 -1
- package/dist/services/ContensisCliService.js +194 -127
- package/dist/services/ContensisCliService.js.map +3 -3
- package/dist/services/ContensisDevService.js +15 -18
- package/dist/services/ContensisDevService.js.map +2 -2
- package/dist/services/ContensisRoleService.js +8 -10
- package/dist/services/ContensisRoleService.js.map +1 -1
- package/dist/shell.js +31 -15
- package/dist/shell.js.map +2 -2
- package/dist/util/api-ids.js.map +1 -1
- package/dist/util/console.printer.js +15 -17
- package/dist/util/console.printer.js.map +2 -2
- package/dist/util/csv.formatter.js +8 -15
- package/dist/util/csv.formatter.js.map +2 -2
- package/dist/util/diff.js +6 -4
- package/dist/util/diff.js.map +1 -1
- package/dist/util/dotenv.js +1 -2
- package/dist/util/dotenv.js.map +1 -1
- package/dist/util/error.js.map +1 -1
- package/dist/util/fetch.js +4 -0
- package/dist/util/fetch.js.map +1 -1
- package/dist/util/git.js +8 -8
- package/dist/util/git.js.map +1 -1
- package/dist/util/gitignore.js +4 -0
- package/dist/util/gitignore.js.map +1 -1
- package/dist/util/html.formatter.js +70 -0
- package/dist/util/html.formatter.js.map +7 -0
- package/dist/util/index.js +5 -1
- package/dist/util/index.js.map +2 -2
- package/dist/util/json.formatter.js +6 -4
- package/dist/util/json.formatter.js.map +1 -1
- package/dist/util/logger.js +47 -53
- package/dist/util/logger.js.map +2 -2
- package/dist/util/os.js +4 -0
- package/dist/util/os.js.map +1 -1
- package/dist/util/xml.formatter.js +4 -0
- package/dist/util/xml.formatter.js.map +1 -1
- package/dist/util/yaml.js +1 -2
- package/dist/util/yaml.js.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/esbuild.config.js +12 -16
- package/package.json +31 -32
- package/src/commands/copy.ts +3 -1
- package/src/commands/globalOptions.ts +10 -3
- package/src/commands/import.ts +2 -0
- package/src/commands/index.ts +4 -0
- package/src/commands/push.ts +125 -1
- package/src/commands/remove.ts +20 -0
- package/src/commands/update.ts +84 -0
- package/src/factories/RequestHandlerFactory.ts +1 -1
- package/src/localisation/en-GB.ts +16 -1
- package/src/models/CliService.d.ts +1 -1
- package/src/providers/CredentialProvider.ts +2 -2
- package/src/providers/SessionCacheProvider.ts +26 -2
- package/src/services/ContensisCliService.ts +187 -49
- package/src/services/ContensisDevService.ts +2 -2
- package/src/shell.ts +20 -9
- package/src/util/console.printer.ts +23 -19
- package/src/util/csv.formatter.ts +1 -1
- package/src/util/html.formatter.ts +52 -0
- package/src/util/index.ts +1 -1
- package/src/util/logger.ts +17 -16
- package/src/version.ts +1 -1
- 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 (
|
|
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' =
|
|
341
|
+
const source: 'contensis' | 'file' =
|
|
342
|
+
fromFile || importData ? 'file' : 'contensis';
|
|
306
343
|
|
|
307
|
-
const fileData =
|
|
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 {
|
|
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.
|
|
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
|
-
|
|
625
|
-
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
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
|
-
|
|
1372
|
+
log.success(messages.migrate.preview());
|
|
1334
1373
|
} else {
|
|
1335
|
-
|
|
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,
|
|
1529
|
-
|
|
1530
|
-
|
|
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,
|
|
1721
|
-
|
|
1722
|
-
|
|
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(
|
|
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
|
|
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
|
-
|
|
1889
|
+
log.success(messages.migrate.preview());
|
|
1842
1890
|
} else {
|
|
1843
|
-
|
|
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
|
|
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 (
|
|
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
|
-
|
|
1988
|
+
log.success(messages.migrate.preview());
|
|
1934
1989
|
} else {
|
|
1935
|
-
|
|
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.
|
|
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
|
-
|
|
2176
|
+
log.success(messages.migrate.preview());
|
|
2041
2177
|
} else {
|
|
2042
|
-
|
|
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.
|
|
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
|
-
|
|
2079
|
-
|
|
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.
|
|
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] =
|
|
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] =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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) => {
|