contensis-cli 1.0.12-beta.2 → 1.0.12-beta.21
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 +9 -9
- package/dist/commands/get.js +13 -1
- package/dist/commands/get.js.map +2 -2
- package/dist/commands/globalOptions.js +9 -10
- package/dist/commands/globalOptions.js.map +2 -2
- package/dist/commands/import.js +22 -12
- package/dist/commands/import.js.map +2 -2
- package/dist/commands/index.js +2 -2
- package/dist/commands/index.js.map +2 -2
- package/dist/commands/list.js +9 -0
- package/dist/commands/list.js.map +2 -2
- package/dist/commands/remove.js +13 -0
- package/dist/commands/remove.js.map +2 -2
- package/dist/localisation/en-GB.js +12 -4
- package/dist/localisation/en-GB.js.map +2 -2
- package/dist/mappers/DevInit-to-CIWorkflow.js +6 -8
- package/dist/mappers/DevInit-to-CIWorkflow.js.map +2 -2
- package/dist/mappers/DevInit-to-RolePermissions.js +4 -4
- package/dist/mappers/DevInit-to-RolePermissions.js.map +2 -2
- package/dist/providers/file-provider.js +5 -1
- package/dist/providers/file-provider.js.map +2 -2
- package/dist/services/ContensisAuthService.js.map +2 -2
- package/dist/services/ContensisCliService.js +158 -40
- package/dist/services/ContensisCliService.js.map +2 -2
- package/dist/services/ContensisDevService.js +51 -56
- package/dist/services/ContensisDevService.js.map +3 -3
- package/dist/shell.js +6 -0
- package/dist/shell.js.map +2 -2
- package/dist/util/console.printer.js +61 -52
- package/dist/util/console.printer.js.map +3 -3
- package/dist/util/csv.formatter.js +3 -11
- package/dist/util/csv.formatter.js.map +3 -3
- package/dist/util/diff.js +1 -1
- package/dist/util/diff.js.map +2 -2
- package/dist/util/error.js +36 -0
- package/dist/util/error.js.map +7 -0
- package/dist/util/find.js +10 -2
- package/dist/util/find.js.map +2 -2
- package/dist/util/git.js +1 -0
- package/dist/util/git.js.map +2 -2
- package/dist/util/json.formatter.js +35 -3
- package/dist/util/json.formatter.js.map +3 -3
- package/dist/util/logger.js +52 -9
- package/dist/util/logger.js.map +3 -3
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +4 -4
- package/src/commands/get.ts +19 -1
- package/src/commands/globalOptions.ts +9 -7
- package/src/commands/import.ts +35 -15
- package/src/commands/index.ts +2 -3
- package/src/commands/list.ts +15 -0
- package/src/commands/remove.ts +20 -0
- package/src/localisation/en-GB.ts +15 -5
- package/src/mappers/DevInit-to-CIWorkflow.ts +8 -8
- package/src/mappers/DevInit-to-RolePermissions.ts +5 -2
- package/src/models/Cache.d.ts +2 -1
- package/src/providers/file-provider.ts +5 -1
- package/src/services/ContensisAuthService.ts +1 -1
- package/src/services/ContensisCliService.ts +195 -55
- package/src/services/ContensisDevService.ts +76 -70
- package/src/shell.ts +8 -0
- package/src/util/console.printer.ts +151 -72
- package/src/util/csv.formatter.ts +1 -4
- package/src/util/diff.ts +1 -1
- package/src/util/error.ts +7 -0
- package/src/util/find.ts +13 -2
- package/src/util/git.ts +2 -1
- package/src/util/json.formatter.ts +32 -1
- package/src/util/logger.ts +90 -15
- package/src/version.ts +1 -1
|
@@ -11,7 +11,8 @@ export const appRootDir =
|
|
|
11
11
|
: path.join(userHomeDir, '.contensis/');
|
|
12
12
|
|
|
13
13
|
export const readJsonFile = <T>(filePath: string) => {
|
|
14
|
-
const
|
|
14
|
+
const directoryPath = cwdPath(filePath);
|
|
15
|
+
const file = readFile(directoryPath);
|
|
15
16
|
if (file) return tryParse(file) as T | string;
|
|
16
17
|
return undefined;
|
|
17
18
|
};
|
|
@@ -81,3 +82,6 @@ export const checkDir = (filePath: string) => {
|
|
|
81
82
|
|
|
82
83
|
export const localPath = (filePath: string) =>
|
|
83
84
|
path.isAbsolute(filePath) ? filePath : path.join(appRootDir, filePath);
|
|
85
|
+
|
|
86
|
+
export const cwdPath = (filePath: string) =>
|
|
87
|
+
path.isAbsolute(filePath) ? filePath : path.join(process.cwd(), filePath);
|
|
@@ -59,7 +59,7 @@ class ContensisAuthService {
|
|
|
59
59
|
});
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
ClassicToken = async () => {
|
|
62
|
+
ClassicToken = async (): Promise<string | null | undefined> => {
|
|
63
63
|
// make sure our token isn't expried.
|
|
64
64
|
await this.client.ensureBearerToken();
|
|
65
65
|
return (this.client as any).contensisClassicToken;
|
|
@@ -46,7 +46,7 @@ import {
|
|
|
46
46
|
} from '~/util/console.printer';
|
|
47
47
|
import { csvFormatter } from '~/util/csv.formatter';
|
|
48
48
|
import { xmlFormatter } from '~/util/xml.formatter';
|
|
49
|
-
import { jsonFormatter } from '~/util/json.formatter';
|
|
49
|
+
import { jsonFormatter, limitFields } from '~/util/json.formatter';
|
|
50
50
|
import { diffLogStrings } from '~/util/diff';
|
|
51
51
|
import { logError, Logger } from '~/util/logger';
|
|
52
52
|
import { promiseDelay } from '~/util/timers';
|
|
@@ -63,23 +63,16 @@ class ContensisCli {
|
|
|
63
63
|
process.exit(exitCode);
|
|
64
64
|
};
|
|
65
65
|
|
|
66
|
-
private command: CliCommand;
|
|
67
66
|
private format?: OutputFormat;
|
|
68
67
|
private output?: string;
|
|
69
68
|
private session: SessionCacheProvider;
|
|
70
69
|
|
|
70
|
+
auth?: ContensisAuthService;
|
|
71
|
+
command: CliCommand;
|
|
71
72
|
contensis?: ContensisMigrationService;
|
|
72
73
|
contensisOpts: Partial<MigrateRequest>;
|
|
73
74
|
currentProject: string;
|
|
74
75
|
|
|
75
|
-
devinit!: {
|
|
76
|
-
invokedBy: string;
|
|
77
|
-
credentials: {
|
|
78
|
-
clientId: string;
|
|
79
|
-
clientSecret: string;
|
|
80
|
-
};
|
|
81
|
-
};
|
|
82
|
-
|
|
83
76
|
sourceAlias?: string;
|
|
84
77
|
targetEnv?: string;
|
|
85
78
|
urls:
|
|
@@ -99,10 +92,6 @@ class ContensisCli {
|
|
|
99
92
|
noun: string;
|
|
100
93
|
thirdArg: string;
|
|
101
94
|
|
|
102
|
-
get invokedBy() {
|
|
103
|
-
return this.command.createdUserId;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
95
|
get cache() {
|
|
107
96
|
return this.session.Get();
|
|
108
97
|
}
|
|
@@ -132,11 +121,6 @@ class ContensisCli {
|
|
|
132
121
|
}
|
|
133
122
|
}
|
|
134
123
|
|
|
135
|
-
constructor(
|
|
136
|
-
args: string[],
|
|
137
|
-
outputOpts?: OutputOptionsConstructorArg,
|
|
138
|
-
contensisOpts?: Partial<MigrateRequest>
|
|
139
|
-
);
|
|
140
124
|
constructor(
|
|
141
125
|
args: string[],
|
|
142
126
|
outputOpts?: OutputOptionsConstructorArg,
|
|
@@ -164,15 +148,19 @@ class ContensisCli {
|
|
|
164
148
|
const environments = this.cache.environments || {};
|
|
165
149
|
this.currentEnv = currentEnvironment;
|
|
166
150
|
|
|
151
|
+
// Set env from command options
|
|
167
152
|
const env = this.env;
|
|
168
|
-
|
|
169
153
|
if (outputOpts?.projectId) env.currentProject = outputOpts.projectId;
|
|
170
154
|
if (outputOpts?.user) env.lastUserId = outputOpts.user;
|
|
171
155
|
// setting this in env means passwordFallback is written to environments.json
|
|
172
156
|
if (outputOpts?.password) env.passwordFallback = outputOpts.password;
|
|
173
157
|
if (outputOpts?.clientId) env.lastUserId = outputOpts.clientId;
|
|
174
158
|
if (outputOpts?.sharedSecret)
|
|
175
|
-
|
|
159
|
+
if (outputOpts.sharedSecret.startsWith('-'))
|
|
160
|
+
throw new Error(
|
|
161
|
+
`Shared secret option provided a value of ${outputOpts.sharedSecret}`
|
|
162
|
+
);
|
|
163
|
+
else env.passwordFallback = outputOpts.sharedSecret;
|
|
176
164
|
|
|
177
165
|
this.currentProject = env?.currentProject || 'null';
|
|
178
166
|
this.sourceAlias = outputOpts?.sourceAlias || currentEnvironment;
|
|
@@ -183,8 +171,9 @@ class ContensisCli {
|
|
|
183
171
|
|
|
184
172
|
this.command = {
|
|
185
173
|
commandText,
|
|
174
|
+
options: outputOpts as any,
|
|
186
175
|
createdDate: new Date().toISOString(),
|
|
187
|
-
|
|
176
|
+
invokedBy: env?.lastUserId,
|
|
188
177
|
};
|
|
189
178
|
|
|
190
179
|
if (currentEnvironment) {
|
|
@@ -424,7 +413,10 @@ class ContensisCli {
|
|
|
424
413
|
|
|
425
414
|
if (credentialError && !credentials.current) {
|
|
426
415
|
// Log problem with Credential Provider
|
|
427
|
-
log.error(
|
|
416
|
+
log.error(
|
|
417
|
+
`Unable to find credentials for user ${userId} at ${currentEnv}`,
|
|
418
|
+
credentialError as any
|
|
419
|
+
);
|
|
428
420
|
return;
|
|
429
421
|
}
|
|
430
422
|
|
|
@@ -492,7 +484,7 @@ class ContensisCli {
|
|
|
492
484
|
}
|
|
493
485
|
|
|
494
486
|
if (inputPassword || cachedPassword || cachedSecret) {
|
|
495
|
-
|
|
487
|
+
this.auth = new ContensisAuthService({
|
|
496
488
|
username: userId,
|
|
497
489
|
password: inputPassword || cachedPassword,
|
|
498
490
|
projectId: env?.currentProject || 'website',
|
|
@@ -501,9 +493,7 @@ class ContensisCli {
|
|
|
501
493
|
clientSecret: sharedSecret || cachedSecret,
|
|
502
494
|
});
|
|
503
495
|
|
|
504
|
-
const [authError, bearerToken] = await to(
|
|
505
|
-
authService.BearerToken()
|
|
506
|
-
);
|
|
496
|
+
const [authError, bearerToken] = await to(this.auth.BearerToken());
|
|
507
497
|
|
|
508
498
|
// Login successful
|
|
509
499
|
if (bearerToken) {
|
|
@@ -784,7 +774,7 @@ class ContensisCli {
|
|
|
784
774
|
}
|
|
785
775
|
};
|
|
786
776
|
|
|
787
|
-
CreateApiKey = async (name: string, description
|
|
777
|
+
CreateApiKey = async (name: string, description = '') => {
|
|
788
778
|
const { currentEnv, log, messages } = this;
|
|
789
779
|
const contensis = await this.ConnectContensis();
|
|
790
780
|
|
|
@@ -1038,6 +1028,98 @@ class ContensisCli {
|
|
|
1038
1028
|
}
|
|
1039
1029
|
};
|
|
1040
1030
|
|
|
1031
|
+
PrintWorkflows = async () => {
|
|
1032
|
+
const { currentEnv, log, messages } = this;
|
|
1033
|
+
const contensis = await this.ConnectContensis();
|
|
1034
|
+
|
|
1035
|
+
if (contensis) {
|
|
1036
|
+
// Retrieve workflows list for env
|
|
1037
|
+
const [workflowsErr, workflows] =
|
|
1038
|
+
await contensis.content.sourceRepo.workflows.GetWorkflows();
|
|
1039
|
+
|
|
1040
|
+
if (Array.isArray(workflows)) {
|
|
1041
|
+
log.success(messages.workflows.list(currentEnv));
|
|
1042
|
+
|
|
1043
|
+
if (!workflows.length) log.help(messages.workflows.noneExist());
|
|
1044
|
+
|
|
1045
|
+
const stringFromLanguageObject = (o: { [lang: string]: string }) =>
|
|
1046
|
+
Object.values(o || {})?.[0];
|
|
1047
|
+
|
|
1048
|
+
this.HandleFormattingAndOutput(workflows, () => {
|
|
1049
|
+
// print the workflows to console
|
|
1050
|
+
// log.object(workflows);
|
|
1051
|
+
for (const {
|
|
1052
|
+
id,
|
|
1053
|
+
name,
|
|
1054
|
+
description,
|
|
1055
|
+
states,
|
|
1056
|
+
eventGroups,
|
|
1057
|
+
isSystem,
|
|
1058
|
+
} of workflows as any) {
|
|
1059
|
+
const color = isSystem ? (s: string) => s : log.infoText;
|
|
1060
|
+
|
|
1061
|
+
console.log(
|
|
1062
|
+
color(
|
|
1063
|
+
` - ${chalk.bold(
|
|
1064
|
+
stringFromLanguageObject(name)
|
|
1065
|
+
)} ${log.infoText(id)}`
|
|
1066
|
+
)
|
|
1067
|
+
);
|
|
1068
|
+
if (description)
|
|
1069
|
+
console.log(
|
|
1070
|
+
log.infoText(` ${stringFromLanguageObject(description)}`)
|
|
1071
|
+
);
|
|
1072
|
+
if (isSystem === false)
|
|
1073
|
+
console.log(` ${chalk.bold.grey('isSystem')}: false`);
|
|
1074
|
+
if (states?.length)
|
|
1075
|
+
console.log(
|
|
1076
|
+
` ${chalk.bold.grey('states')}: ${states
|
|
1077
|
+
.map((state: any) => state.id)
|
|
1078
|
+
.join(', ')}`
|
|
1079
|
+
);
|
|
1080
|
+
if (eventGroups?.length)
|
|
1081
|
+
console.log(
|
|
1082
|
+
` ${chalk.bold.grey('eventGroups')}: ${eventGroups
|
|
1083
|
+
.map((evtGrp: any) => evtGrp.id)
|
|
1084
|
+
.join(', ')}`
|
|
1085
|
+
);
|
|
1086
|
+
}
|
|
1087
|
+
});
|
|
1088
|
+
}
|
|
1089
|
+
|
|
1090
|
+
if (workflowsErr) {
|
|
1091
|
+
log.error(messages.workflows.noList(currentEnv));
|
|
1092
|
+
log.error(jsonFormatter(workflowsErr));
|
|
1093
|
+
}
|
|
1094
|
+
}
|
|
1095
|
+
};
|
|
1096
|
+
|
|
1097
|
+
PrintWorkflow = async (workflowNameOrId: string) => {
|
|
1098
|
+
const { currentEnv, log, messages } = this;
|
|
1099
|
+
const contensis = await this.ConnectContensis();
|
|
1100
|
+
|
|
1101
|
+
if (contensis) {
|
|
1102
|
+
// Retrieve workflows list for env
|
|
1103
|
+
const [workflowsErr, workflows] =
|
|
1104
|
+
await contensis.content.sourceRepo.workflows.GetWorkflows();
|
|
1105
|
+
|
|
1106
|
+
if (Array.isArray(workflows)) {
|
|
1107
|
+
log.success(messages.workflows.list(currentEnv));
|
|
1108
|
+
|
|
1109
|
+
const workflow = findByIdOrName(workflows, workflowNameOrId);
|
|
1110
|
+
|
|
1111
|
+
if (workflow) this.HandleFormattingAndOutput(workflow, log.object);
|
|
1112
|
+
else
|
|
1113
|
+
log.error(messages.workflows.failedGet(currentEnv, workflowNameOrId));
|
|
1114
|
+
}
|
|
1115
|
+
|
|
1116
|
+
if (workflowsErr) {
|
|
1117
|
+
log.error(messages.workflows.noList(currentEnv));
|
|
1118
|
+
log.error(jsonFormatter(workflowsErr));
|
|
1119
|
+
}
|
|
1120
|
+
}
|
|
1121
|
+
};
|
|
1122
|
+
|
|
1041
1123
|
CreateProject = async (project: Project) => {
|
|
1042
1124
|
const { currentEnv, log, messages } = this;
|
|
1043
1125
|
const contensis = await this.ConnectContensis();
|
|
@@ -1305,7 +1387,7 @@ class ContensisCli {
|
|
|
1305
1387
|
const { currentProject, log, messages } = this;
|
|
1306
1388
|
const contensis = await this.ConnectContensisImport({
|
|
1307
1389
|
commit,
|
|
1308
|
-
importDataType: 'user-input',
|
|
1390
|
+
importDataType: 'user-input', // 'user-input' import type does not require a source cms
|
|
1309
1391
|
});
|
|
1310
1392
|
if (contensis) {
|
|
1311
1393
|
const [err, result] = await contensis.DeleteContentTypes(contentTypeIds);
|
|
@@ -1482,7 +1564,7 @@ class ContensisCli {
|
|
|
1482
1564
|
const { currentProject, log, messages } = this;
|
|
1483
1565
|
const contensis = await this.ConnectContensisImport({
|
|
1484
1566
|
commit,
|
|
1485
|
-
importDataType: 'user-input',
|
|
1567
|
+
importDataType: 'user-input', // 'user-input' import type does not require a source cms
|
|
1486
1568
|
});
|
|
1487
1569
|
if (contensis) {
|
|
1488
1570
|
const [err, result] = await contensis.DeleteContentTypes(
|
|
@@ -1568,7 +1650,7 @@ class ContensisCli {
|
|
|
1568
1650
|
const { currentEnv, currentProject, log, messages } = this;
|
|
1569
1651
|
const contensis = await this.ConnectContensisImport({
|
|
1570
1652
|
commit,
|
|
1571
|
-
importDataType: 'user-input',
|
|
1653
|
+
importDataType: 'user-input', // 'user-input' import type does not require a source cms
|
|
1572
1654
|
});
|
|
1573
1655
|
|
|
1574
1656
|
if (contensis) {
|
|
@@ -1598,7 +1680,7 @@ class ContensisCli {
|
|
|
1598
1680
|
}
|
|
1599
1681
|
} else {
|
|
1600
1682
|
log.error(messages.entries.failedRemove(currentEnv), err);
|
|
1601
|
-
if (!result
|
|
1683
|
+
if (!result?.entriesToMigrate?.[currentProject]?.totalCount)
|
|
1602
1684
|
log.help(messages.entries.notFound(currentEnv));
|
|
1603
1685
|
}
|
|
1604
1686
|
}
|
|
@@ -1689,7 +1771,7 @@ class ContensisCli {
|
|
|
1689
1771
|
}
|
|
1690
1772
|
} else {
|
|
1691
1773
|
log.error(messages.entries.failedImport(currentEnv), err);
|
|
1692
|
-
if (!result
|
|
1774
|
+
if (!result?.entriesToMigrate?.[currentProject]?.totalCount)
|
|
1693
1775
|
log.help(messages.entries.notFound(currentEnv));
|
|
1694
1776
|
}
|
|
1695
1777
|
} else {
|
|
@@ -1704,19 +1786,18 @@ class ContensisCli {
|
|
|
1704
1786
|
|
|
1705
1787
|
if (contensis) {
|
|
1706
1788
|
log.line();
|
|
1707
|
-
const [err] = await to(
|
|
1708
|
-
contensis.content.sourceRepo.nodes.GetNodes(rootPath, depth)
|
|
1709
|
-
);
|
|
1789
|
+
const [err, nodes] = await to(contensis.nodes.GetNodes(rootPath, depth));
|
|
1710
1790
|
if (err) {
|
|
1711
1791
|
log.error(messages.nodes.failedGet(currentProject), err);
|
|
1712
1792
|
return;
|
|
1713
1793
|
}
|
|
1714
|
-
const root = contensis.
|
|
1794
|
+
const root = contensis.nodes.sourceRepo.nodes.tree;
|
|
1715
1795
|
|
|
1716
1796
|
log.success(messages.nodes.get(currentProject, rootPath, depth));
|
|
1717
1797
|
|
|
1718
|
-
this.HandleFormattingAndOutput(
|
|
1798
|
+
this.HandleFormattingAndOutput(nodes, () => {
|
|
1719
1799
|
// print the nodes to console
|
|
1800
|
+
log.object({ ...root, children: undefined, language: undefined });
|
|
1720
1801
|
printNodeTreeOutput(this, root);
|
|
1721
1802
|
});
|
|
1722
1803
|
} else {
|
|
@@ -1729,10 +1810,12 @@ class ContensisCli {
|
|
|
1729
1810
|
commit,
|
|
1730
1811
|
fromFile,
|
|
1731
1812
|
logOutput,
|
|
1813
|
+
logLimit,
|
|
1732
1814
|
}: {
|
|
1733
1815
|
commit: boolean;
|
|
1734
1816
|
fromFile: string;
|
|
1735
1817
|
logOutput: string;
|
|
1818
|
+
logLimit: number;
|
|
1736
1819
|
}) => {
|
|
1737
1820
|
const { currentEnv, currentProject, log, messages } = this;
|
|
1738
1821
|
|
|
@@ -1751,28 +1834,34 @@ class ContensisCli {
|
|
|
1751
1834
|
}
|
|
1752
1835
|
|
|
1753
1836
|
const [err, result] = await contensis.MigrateNodes();
|
|
1837
|
+
const migrateTree =
|
|
1838
|
+
contensis.nodes.targetRepos[currentProject].nodes.migrateNodesTreeView;
|
|
1754
1839
|
|
|
1755
|
-
if (err)
|
|
1840
|
+
if (err) log.raw(``);
|
|
1756
1841
|
else
|
|
1757
1842
|
this.HandleFormattingAndOutput(result, () => {
|
|
1758
1843
|
// print the migrateResult to console
|
|
1759
|
-
|
|
1844
|
+
printNodeTreeOutput(this, migrateTree, logOutput, logLimit);
|
|
1760
1845
|
printNodesMigrateResult(this, result, {
|
|
1761
1846
|
showAll: logOutput === 'all',
|
|
1762
1847
|
showChanged: logOutput === 'changes',
|
|
1763
1848
|
});
|
|
1764
1849
|
});
|
|
1765
1850
|
|
|
1766
|
-
const
|
|
1851
|
+
const nodesMigrateCount =
|
|
1852
|
+
result?.nodesToMigrate?.[currentProject].totalCount;
|
|
1767
1853
|
const nodesCreated = result?.nodesResult?.['created'] || 0;
|
|
1768
1854
|
const nodesUpdated = result?.nodesResult?.['updated'] || 0;
|
|
1769
|
-
const
|
|
1855
|
+
const nodesErrored = result?.nodesResult?.['errors'] || 0;
|
|
1856
|
+
const noChanges =
|
|
1857
|
+
result?.nodesToMigrate?.[currentProject]['no change'] &&
|
|
1858
|
+
nodesMigrateCount === 0;
|
|
1770
1859
|
|
|
1771
1860
|
if (
|
|
1772
1861
|
!err &&
|
|
1773
|
-
!result.errors?.length &&
|
|
1774
|
-
((!commit &&
|
|
1775
|
-
(commit && (nodesCreated || nodesUpdated)))
|
|
1862
|
+
(!result.errors?.length || this.contensisOpts.ignoreErrors) &&
|
|
1863
|
+
((!commit && nodesMigrateCount) ||
|
|
1864
|
+
(commit && (nodesCreated || nodesUpdated || result.errors?.length)))
|
|
1776
1865
|
) {
|
|
1777
1866
|
let totalCount: number;
|
|
1778
1867
|
if (commit) {
|
|
@@ -1782,20 +1871,20 @@ class ContensisCli {
|
|
|
1782
1871
|
totalCount = created + updated;
|
|
1783
1872
|
} else {
|
|
1784
1873
|
totalCount =
|
|
1785
|
-
typeof
|
|
1874
|
+
typeof nodesMigrateCount === 'number' ? nodesMigrateCount : 0;
|
|
1786
1875
|
}
|
|
1787
1876
|
|
|
1788
1877
|
log.success(messages.nodes.imported(currentEnv, commit, totalCount));
|
|
1878
|
+
log.raw(``);
|
|
1789
1879
|
if (!commit) {
|
|
1790
|
-
log.raw(``);
|
|
1791
1880
|
log.help(messages.nodes.commitTip());
|
|
1792
1881
|
}
|
|
1793
1882
|
} else {
|
|
1794
|
-
if (
|
|
1883
|
+
if (noChanges && !err && !nodesErrored) {
|
|
1795
1884
|
log.help(messages.nodes.noChange(currentEnv));
|
|
1796
1885
|
} else {
|
|
1797
1886
|
log.error(messages.nodes.failedImport(currentEnv), err);
|
|
1798
|
-
if (!
|
|
1887
|
+
if (!nodesMigrateCount) log.help(messages.nodes.notFound(currentEnv));
|
|
1799
1888
|
}
|
|
1800
1889
|
}
|
|
1801
1890
|
} else {
|
|
@@ -1804,6 +1893,54 @@ class ContensisCli {
|
|
|
1804
1893
|
}
|
|
1805
1894
|
};
|
|
1806
1895
|
|
|
1896
|
+
RemoveNodes = async (commit = false) => {
|
|
1897
|
+
const { currentEnv, currentProject, log, messages } = this;
|
|
1898
|
+
const contensis = await this.ConnectContensisImport({
|
|
1899
|
+
commit,
|
|
1900
|
+
importDataType: 'user-input', // 'user-input' import type does not require a source cms
|
|
1901
|
+
});
|
|
1902
|
+
|
|
1903
|
+
if (contensis) {
|
|
1904
|
+
if (contensis.isPreview) {
|
|
1905
|
+
console.log(log.successText(` -- PREVIEW -- `));
|
|
1906
|
+
} else {
|
|
1907
|
+
console.log(log.warningText(` *** COMMITTING DELETE *** `));
|
|
1908
|
+
}
|
|
1909
|
+
const [err, result] = await contensis.DeleteNodes();
|
|
1910
|
+
if (result) {
|
|
1911
|
+
this.HandleFormattingAndOutput(result, () => {
|
|
1912
|
+
// print the migrateResult to console
|
|
1913
|
+
printNodeTreeOutput(
|
|
1914
|
+
this,
|
|
1915
|
+
contensis.nodes.targetRepos[currentProject].nodes
|
|
1916
|
+
.migrateNodesTreeView
|
|
1917
|
+
);
|
|
1918
|
+
// printNodesMigrateResult(this, result, {
|
|
1919
|
+
// action: 'delete',
|
|
1920
|
+
// showAll: true,
|
|
1921
|
+
// });
|
|
1922
|
+
});
|
|
1923
|
+
}
|
|
1924
|
+
if (
|
|
1925
|
+
!err &&
|
|
1926
|
+
((!commit && result.nodesToMigrate[currentProject].totalCount) ||
|
|
1927
|
+
(commit && result.nodesResult?.deleted))
|
|
1928
|
+
) {
|
|
1929
|
+
log.success(
|
|
1930
|
+
messages.nodes.removed(currentEnv, commit, contensis.nodes.rootPath)
|
|
1931
|
+
);
|
|
1932
|
+
log.raw(``);
|
|
1933
|
+
if (!commit) {
|
|
1934
|
+
log.help(messages.nodes.commitTip());
|
|
1935
|
+
}
|
|
1936
|
+
} else {
|
|
1937
|
+
log.error(messages.nodes.failedRemove(currentEnv), err);
|
|
1938
|
+
if (!result?.nodesToMigrate?.[currentProject]?.totalCount)
|
|
1939
|
+
log.help(messages.nodes.notFound(currentEnv));
|
|
1940
|
+
}
|
|
1941
|
+
}
|
|
1942
|
+
};
|
|
1943
|
+
|
|
1807
1944
|
PrintWebhookSubscriptions = async (subscriptionIdsOrNames?: string[]) => {
|
|
1808
1945
|
const { currentEnv, log, messages } = this;
|
|
1809
1946
|
const contensis = await this.ConnectContensis();
|
|
@@ -2354,18 +2491,20 @@ class ContensisCli {
|
|
|
2354
2491
|
};
|
|
2355
2492
|
HandleFormattingAndOutput = <T>(obj: T, logFn: (obj: T) => void) => {
|
|
2356
2493
|
const { format, log, messages, output } = this;
|
|
2494
|
+
const fields = this.contensis?.payload.query?.fields;
|
|
2495
|
+
|
|
2357
2496
|
if (!format) {
|
|
2358
2497
|
// print the object to console
|
|
2359
2498
|
logFn(obj);
|
|
2360
2499
|
} else if (format === 'csv') {
|
|
2361
2500
|
log.raw('');
|
|
2362
|
-
log.raw(log.infoText(csvFormatter(obj)));
|
|
2501
|
+
log.raw(log.infoText(csvFormatter(limitFields(obj, fields))));
|
|
2363
2502
|
} else if (format === 'xml') {
|
|
2364
2503
|
log.raw('');
|
|
2365
|
-
log.raw(log.infoText(xmlFormatter(obj)));
|
|
2504
|
+
log.raw(log.infoText(xmlFormatter(limitFields(obj, fields))));
|
|
2366
2505
|
} else if (format === 'json') {
|
|
2367
2506
|
log.raw('');
|
|
2368
|
-
log.raw(log.infoText(jsonFormatter(obj)));
|
|
2507
|
+
log.raw(log.infoText(jsonFormatter(obj, fields)));
|
|
2369
2508
|
}
|
|
2370
2509
|
log.raw('');
|
|
2371
2510
|
|
|
@@ -2373,10 +2512,11 @@ class ContensisCli {
|
|
|
2373
2512
|
let writeString = '';
|
|
2374
2513
|
const isText = !tryParse(obj) && typeof obj === 'string';
|
|
2375
2514
|
if (format === 'csv') {
|
|
2376
|
-
writeString = csvFormatter(obj
|
|
2515
|
+
writeString = csvFormatter(limitFields(obj, fields));
|
|
2377
2516
|
} else if (format === 'xml') {
|
|
2378
|
-
writeString = xmlFormatter(obj
|
|
2379
|
-
} else
|
|
2517
|
+
writeString = xmlFormatter(limitFields(obj, fields));
|
|
2518
|
+
} else
|
|
2519
|
+
writeString = isText ? (obj as string) : jsonFormatter(obj, fields);
|
|
2380
2520
|
// write output to file
|
|
2381
2521
|
if (writeString) {
|
|
2382
2522
|
fs.writeFileSync(output, writeString);
|