contensis-cli 1.6.1-beta.2 → 1.6.1-beta.20
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/dist/index.js +58301 -11
- package/dist/index.js.map +4 -4
- package/dist/shell.js +58040 -52
- package/dist/shell.js.map +4 -4
- package/esbuild.config.js +8 -13
- package/package.json +3 -2
- package/src/commands/create.ts +48 -0
- package/src/commands/dev.ts +12 -2
- package/src/commands/globalOptions.ts +5 -3
- package/src/commands/import.ts +46 -5
- package/src/commands/push.ts +8 -1
- package/src/commands/set.ts +69 -1
- package/src/factories/RequestHandlerFactory.ts +19 -8
- package/src/localisation/en-GB.ts +22 -4
- package/src/mappers/DevRequests-to-RequestHanderCliArgs.ts +25 -17
- package/src/models/CliService.d.ts +5 -1
- package/src/providers/GitHubCliModuleProvider.ts +8 -8
- package/src/providers/HttpProvider.ts +2 -2
- package/src/providers/file-provider.ts +3 -0
- package/src/services/ContensisCliService.ts +265 -23
- package/src/services/ContensisDevService.ts +99 -35
- package/src/shell.ts +7 -1
- package/src/util/console.printer.ts +52 -0
- package/src/util/logger.ts +3 -4
- package/src/util/os.ts +5 -3
- package/src/version.ts +1 -1
- package/dist/commands/connect.js +0 -44
- package/dist/commands/connect.js.map +0 -7
- package/dist/commands/copy.js +0 -78
- package/dist/commands/copy.js.map +0 -7
- package/dist/commands/create.js +0 -170
- package/dist/commands/create.js.map +0 -7
- package/dist/commands/dev.js +0 -78
- package/dist/commands/dev.js.map +0 -7
- package/dist/commands/diff.js +0 -57
- package/dist/commands/diff.js.map +0 -7
- package/dist/commands/execute.js +0 -103
- package/dist/commands/execute.js.map +0 -7
- package/dist/commands/get.js +0 -330
- package/dist/commands/get.js.map +0 -7
- package/dist/commands/globalOptions.js +0 -252
- package/dist/commands/globalOptions.js.map +0 -7
- package/dist/commands/import.js +0 -229
- package/dist/commands/import.js.map +0 -7
- package/dist/commands/index.js +0 -107
- package/dist/commands/index.js.map +0 -7
- package/dist/commands/list.js +0 -195
- package/dist/commands/list.js.map +0 -7
- package/dist/commands/login.js +0 -55
- package/dist/commands/login.js.map +0 -7
- package/dist/commands/push.js +0 -229
- package/dist/commands/push.js.map +0 -7
- package/dist/commands/remove.js +0 -193
- package/dist/commands/remove.js.map +0 -7
- package/dist/commands/set.js +0 -180
- package/dist/commands/set.js.map +0 -7
- package/dist/commands/update.js +0 -70
- package/dist/commands/update.js.map +0 -7
- package/dist/factories/RequestHandlerFactory.js +0 -221
- package/dist/factories/RequestHandlerFactory.js.map +0 -7
- package/dist/localisation/en-GB.js +0 -552
- package/dist/localisation/en-GB.js.map +0 -7
- package/dist/mappers/ContensisCliService-to-RequestHanderSiteConfigYaml.js +0 -56
- package/dist/mappers/ContensisCliService-to-RequestHanderSiteConfigYaml.js.map +0 -7
- package/dist/mappers/DevInit-to-CIWorkflow.js +0 -409
- package/dist/mappers/DevInit-to-CIWorkflow.js.map +0 -7
- package/dist/mappers/DevInit-to-RolePermissions.js +0 -56
- package/dist/mappers/DevInit-to-RolePermissions.js.map +0 -7
- package/dist/mappers/DevRequests-to-RequestHanderCliArgs.js +0 -161
- package/dist/mappers/DevRequests-to-RequestHanderCliArgs.js.map +0 -7
- package/dist/mappers/MixedFileData.js +0 -83
- package/dist/mappers/MixedFileData.js.map +0 -7
- package/dist/models/AppError.d.js +0 -2
- package/dist/models/AppError.d.js.map +0 -7
- package/dist/models/Cache.d.js +0 -2
- package/dist/models/Cache.d.js.map +0 -7
- package/dist/models/CliService.d.js +0 -17
- package/dist/models/CliService.d.js.map +0 -7
- package/dist/models/DevService.d.js +0 -17
- package/dist/models/DevService.d.js.map +0 -7
- package/dist/models/JsModules.d.js +0 -2
- package/dist/models/JsModules.d.js.map +0 -7
- package/dist/providers/CredentialProvider.js +0 -126
- package/dist/providers/CredentialProvider.js.map +0 -7
- package/dist/providers/GitHubCliModuleProvider.js +0 -115
- package/dist/providers/GitHubCliModuleProvider.js.map +0 -7
- package/dist/providers/HttpProvider.js +0 -73
- package/dist/providers/HttpProvider.js.map +0 -7
- package/dist/providers/ManifestProvider.js +0 -50
- package/dist/providers/ManifestProvider.js.map +0 -7
- package/dist/providers/SessionCacheProvider.js +0 -132
- package/dist/providers/SessionCacheProvider.js.map +0 -7
- package/dist/providers/file-provider.js +0 -174
- package/dist/providers/file-provider.js.map +0 -7
- package/dist/services/ContensisAuthService.js +0 -88
- package/dist/services/ContensisAuthService.js.map +0 -7
- package/dist/services/ContensisCliService.js +0 -2598
- package/dist/services/ContensisCliService.js.map +0 -7
- package/dist/services/ContensisDevService.js +0 -387
- package/dist/services/ContensisDevService.js.map +0 -7
- package/dist/services/ContensisRoleService.js +0 -112
- package/dist/services/ContensisRoleService.js.map +0 -7
- package/dist/util/api-ids.js +0 -110
- package/dist/util/api-ids.js.map +0 -7
- package/dist/util/assert.js +0 -62
- package/dist/util/assert.js.map +0 -7
- package/dist/util/console.printer.js +0 -425
- package/dist/util/console.printer.js.map +0 -7
- package/dist/util/csv.formatter.js +0 -118
- package/dist/util/csv.formatter.js.map +0 -7
- package/dist/util/debug.js +0 -29
- package/dist/util/debug.js.map +0 -7
- package/dist/util/diff.js +0 -118
- package/dist/util/diff.js.map +0 -7
- package/dist/util/dotenv.js +0 -56
- package/dist/util/dotenv.js.map +0 -7
- package/dist/util/error.js +0 -36
- package/dist/util/error.js.map +0 -7
- package/dist/util/fetch.js +0 -69
- package/dist/util/fetch.js.map +0 -7
- package/dist/util/find.js +0 -39
- package/dist/util/find.js.map +0 -7
- package/dist/util/git.js +0 -145
- package/dist/util/git.js.map +0 -7
- package/dist/util/gitignore.js +0 -61
- package/dist/util/gitignore.js.map +0 -7
- package/dist/util/html.formatter.js +0 -70
- package/dist/util/html.formatter.js.map +0 -7
- package/dist/util/index.js +0 -68
- package/dist/util/index.js.map +0 -7
- package/dist/util/json.formatter.js +0 -66
- package/dist/util/json.formatter.js.map +0 -7
- package/dist/util/logger.js +0 -304
- package/dist/util/logger.js.map +0 -7
- package/dist/util/os.js +0 -46
- package/dist/util/os.js.map +0 -7
- package/dist/util/timers.js +0 -49
- package/dist/util/timers.js.map +0 -7
- package/dist/util/xml.formatter.js +0 -62
- package/dist/util/xml.formatter.js.map +0 -7
- package/dist/util/yaml.js +0 -44
- package/dist/util/yaml.js.map +0 -7
- package/dist/version.js +0 -29
- package/dist/version.js.map +0 -7
|
@@ -93,6 +93,9 @@ export const cwdPath = (filePath: string) =>
|
|
|
93
93
|
|
|
94
94
|
export const joinPath = path.join;
|
|
95
95
|
|
|
96
|
+
export const pathExists = (filePath: string) =>
|
|
97
|
+
fs.existsSync(appPath(filePath));
|
|
98
|
+
|
|
96
99
|
export const addExecutePermission = (filePath: string) =>
|
|
97
100
|
// Fails in windows with `TypeError [ERR_INVALID_ARG_TYPE]: The "mode" argument must be of type number. Received undefined`
|
|
98
101
|
fs.chmodSync(filePath, fs.constants.S_IRWXU);
|
|
@@ -8,8 +8,10 @@ import clone from 'rfdc';
|
|
|
8
8
|
|
|
9
9
|
import { Component, ContentType, Project } from 'contensis-core-api';
|
|
10
10
|
import {
|
|
11
|
+
ICreateNode,
|
|
11
12
|
ICreateTag,
|
|
12
13
|
ICreateTagGroup,
|
|
14
|
+
Node,
|
|
13
15
|
Role,
|
|
14
16
|
Tag,
|
|
15
17
|
TagGroup,
|
|
@@ -23,6 +25,7 @@ import {
|
|
|
23
25
|
Model,
|
|
24
26
|
BlockActionType,
|
|
25
27
|
logEntitiesTable,
|
|
28
|
+
Renderer,
|
|
26
29
|
} from 'migratortron';
|
|
27
30
|
|
|
28
31
|
import ContensisAuthService from './ContensisAuthService';
|
|
@@ -54,6 +57,7 @@ import {
|
|
|
54
57
|
printModelMigrationResult,
|
|
55
58
|
printNodeTreeOutput,
|
|
56
59
|
printNodesMigrateResult,
|
|
60
|
+
printWebhooksMigrateResult,
|
|
57
61
|
} from '~/util/console.printer';
|
|
58
62
|
import { csvFormatter } from '~/util/csv.formatter';
|
|
59
63
|
import { htmlFormatter } from '~/util/html.formatter';
|
|
@@ -93,6 +97,9 @@ class ContensisCli {
|
|
|
93
97
|
targetEnv?: string;
|
|
94
98
|
urls: CliUrls;
|
|
95
99
|
log = Logger;
|
|
100
|
+
/** Currently used to pass to other modules such as migratortron and request handler
|
|
101
|
+
* and less-so in the CLI service itself */
|
|
102
|
+
logLevel?: 'debug' | 'info' | 'warning' | 'error' | 'none';
|
|
96
103
|
messages = LogMessages;
|
|
97
104
|
|
|
98
105
|
verb: string;
|
|
@@ -156,6 +163,7 @@ class ContensisCli {
|
|
|
156
163
|
);
|
|
157
164
|
}
|
|
158
165
|
|
|
166
|
+
this.logLevel = outputOpts?.logLevel;
|
|
159
167
|
this.format = outputOpts?.format;
|
|
160
168
|
this.output = outputOpts?.output
|
|
161
169
|
? path.isAbsolute(outputOpts.output)
|
|
@@ -1833,7 +1841,7 @@ class ContensisCli {
|
|
|
1833
1841
|
else
|
|
1834
1842
|
await this.HandleFormattingAndOutput(result, () => {
|
|
1835
1843
|
// print the results to console
|
|
1836
|
-
if (!result
|
|
1844
|
+
if (result && !result?.committed) {
|
|
1837
1845
|
log.raw(log.boldText(`\nContent types:`));
|
|
1838
1846
|
if (!result.contentTypes) log.info(`- None returned\n`);
|
|
1839
1847
|
else printModelMigrationAnalysis(this, result.contentTypes);
|
|
@@ -1859,7 +1867,7 @@ class ContensisCli {
|
|
|
1859
1867
|
log.object(result.errors);
|
|
1860
1868
|
}
|
|
1861
1869
|
} else {
|
|
1862
|
-
const { modelsResult = {} } = result;
|
|
1870
|
+
const { modelsResult = {} } = result || {};
|
|
1863
1871
|
log.raw(log.boldText(`\nContent types:`));
|
|
1864
1872
|
printModelMigrationResult(
|
|
1865
1873
|
this,
|
|
@@ -2267,8 +2275,8 @@ class ContensisCli {
|
|
|
2267
2275
|
});
|
|
2268
2276
|
if (
|
|
2269
2277
|
!err &&
|
|
2270
|
-
((!commit && result
|
|
2271
|
-
(commit && result
|
|
2278
|
+
((!commit && result?.entriesToMigrate[currentProject].totalCount) ||
|
|
2279
|
+
(commit && result?.migrateResult?.deleted))
|
|
2272
2280
|
) {
|
|
2273
2281
|
log.success(messages.entries.removed(currentEnv, commit));
|
|
2274
2282
|
if (!commit) {
|
|
@@ -2357,7 +2365,7 @@ class ContensisCli {
|
|
|
2357
2365
|
const [err, result] = await contensis.MigrateEntries();
|
|
2358
2366
|
|
|
2359
2367
|
if (err) logError(err);
|
|
2360
|
-
else {
|
|
2368
|
+
else if (result) {
|
|
2361
2369
|
const { entries, nodes, tags } =
|
|
2362
2370
|
contensis.content.targets[currentProject];
|
|
2363
2371
|
|
|
@@ -2394,19 +2402,24 @@ class ContensisCli {
|
|
|
2394
2402
|
}
|
|
2395
2403
|
if (
|
|
2396
2404
|
!err &&
|
|
2397
|
-
!result
|
|
2398
|
-
((!commit && result
|
|
2405
|
+
!result?.errors?.length &&
|
|
2406
|
+
((!commit && result?.entriesToMigrate[currentProject].totalCount) ||
|
|
2399
2407
|
(commit &&
|
|
2400
|
-
(result
|
|
2408
|
+
(result?.migrateResult?.created ||
|
|
2409
|
+
result?.migrateResult?.updated ||
|
|
2410
|
+
result?.nodesResult?.created ||
|
|
2411
|
+
result?.nodesResult?.updated ||
|
|
2412
|
+
result?.tagsResult?.created ||
|
|
2413
|
+
result?.tagsResult?.updated)))
|
|
2401
2414
|
) {
|
|
2402
2415
|
log.success(
|
|
2403
2416
|
messages.entries.imported(
|
|
2404
2417
|
currentEnv,
|
|
2405
2418
|
commit,
|
|
2406
2419
|
commit
|
|
2407
|
-
? (result
|
|
2408
|
-
(result
|
|
2409
|
-
: result
|
|
2420
|
+
? (result?.migrateResult?.created || 0) +
|
|
2421
|
+
(result?.migrateResult?.updated || 0)
|
|
2422
|
+
: result?.entriesToMigrate[currentProject].totalCount,
|
|
2410
2423
|
commit
|
|
2411
2424
|
? (result.nodesResult?.created || 0) +
|
|
2412
2425
|
(result.nodesResult?.updated || 0)
|
|
@@ -2665,7 +2678,7 @@ class ContensisCli {
|
|
|
2665
2678
|
const [err, result] = await contensis.MigrateNodes();
|
|
2666
2679
|
|
|
2667
2680
|
if (err) log.raw(``);
|
|
2668
|
-
else
|
|
2681
|
+
else if (result)
|
|
2669
2682
|
await this.HandleFormattingAndOutput(result, () => {
|
|
2670
2683
|
// print the migrateResult to console
|
|
2671
2684
|
const migrateTree =
|
|
@@ -2688,9 +2701,9 @@ class ContensisCli {
|
|
|
2688
2701
|
|
|
2689
2702
|
if (
|
|
2690
2703
|
!err &&
|
|
2691
|
-
(!result
|
|
2704
|
+
(!result?.errors?.length || this.contensisOpts.ignoreErrors) &&
|
|
2692
2705
|
((!commit && nodesMigrateCount) ||
|
|
2693
|
-
(commit && (nodesCreated || nodesUpdated || result
|
|
2706
|
+
(commit && (nodesCreated || nodesUpdated || result?.errors?.length)))
|
|
2694
2707
|
) {
|
|
2695
2708
|
let totalCount: number;
|
|
2696
2709
|
if (commit) {
|
|
@@ -2751,8 +2764,8 @@ class ContensisCli {
|
|
|
2751
2764
|
}
|
|
2752
2765
|
if (
|
|
2753
2766
|
!err &&
|
|
2754
|
-
((!commit && result
|
|
2755
|
-
(commit && result
|
|
2767
|
+
((!commit && result?.nodesToMigrate[currentProject].totalCount) ||
|
|
2768
|
+
(commit && result?.nodesResult?.deleted))
|
|
2756
2769
|
) {
|
|
2757
2770
|
log.success(
|
|
2758
2771
|
messages.nodes.removed(currentEnv, commit, contensis.nodes.rootPath)
|
|
@@ -2769,6 +2782,143 @@ class ContensisCli {
|
|
|
2769
2782
|
}
|
|
2770
2783
|
};
|
|
2771
2784
|
|
|
2785
|
+
CreateOrUpdateNode = async (
|
|
2786
|
+
nodePathOrId: string,
|
|
2787
|
+
nodeUpdates: Partial<Node>,
|
|
2788
|
+
displayName?: string | undefined,
|
|
2789
|
+
slug?: string | undefined,
|
|
2790
|
+
language?: string | undefined
|
|
2791
|
+
) => {
|
|
2792
|
+
const { currentEnv, currentProject, log, messages } = this;
|
|
2793
|
+
const contensis = await this.ConnectContensis();
|
|
2794
|
+
|
|
2795
|
+
const nodePath = nodePathOrId.startsWith('/') ? nodePathOrId : undefined;
|
|
2796
|
+
let nodeId = isUuid(nodePathOrId) ? nodePathOrId : undefined;
|
|
2797
|
+
|
|
2798
|
+
let existingNode: Node | undefined;
|
|
2799
|
+
let parentNode: Node | undefined;
|
|
2800
|
+
let updateNode: Node | undefined;
|
|
2801
|
+
|
|
2802
|
+
if (contensis) {
|
|
2803
|
+
// Retrieve node
|
|
2804
|
+
if (nodePath) {
|
|
2805
|
+
const [, nodesByPath] = await to(contensis.nodes.GetNodes(nodePath, 0));
|
|
2806
|
+
|
|
2807
|
+
if (Array.isArray(nodesByPath) && nodesByPath[0]?.id) {
|
|
2808
|
+
nodeId = nodesByPath[0].id;
|
|
2809
|
+
}
|
|
2810
|
+
}
|
|
2811
|
+
|
|
2812
|
+
if (nodeId) {
|
|
2813
|
+
// Get the management node so we can update it
|
|
2814
|
+
const [, nodeById] = await to(
|
|
2815
|
+
contensis.source.repo.GetNodeById(nodeId)
|
|
2816
|
+
);
|
|
2817
|
+
|
|
2818
|
+
if (nodeById) existingNode = nodeById;
|
|
2819
|
+
}
|
|
2820
|
+
|
|
2821
|
+
// TODO: resolve any renderer id to its uuid so we can support passing the regular id for ease of use
|
|
2822
|
+
if (!existingNode) {
|
|
2823
|
+
// Build a node object to create or reject if there is not enough data
|
|
2824
|
+
|
|
2825
|
+
if (!language) {
|
|
2826
|
+
const project =
|
|
2827
|
+
await contensis.source.repo.GetProject(currentProject);
|
|
2828
|
+
language = project?.primaryLanguage || 'en-GB';
|
|
2829
|
+
}
|
|
2830
|
+
|
|
2831
|
+
if (!nodeUpdates.parentId) {
|
|
2832
|
+
// Find the node's parentId from the path if possible
|
|
2833
|
+
if (!nodePath)
|
|
2834
|
+
throw new Error(
|
|
2835
|
+
`A node with id "${nodeId}" does not exist, and a path was not provided to find the parent node.`
|
|
2836
|
+
);
|
|
2837
|
+
|
|
2838
|
+
const parentPath =
|
|
2839
|
+
nodePath.substring(0, nodePath.lastIndexOf('/')) || '/';
|
|
2840
|
+
const [, parentNodesByPath] = await to(
|
|
2841
|
+
contensis.nodes.GetNodes(parentPath, 0)
|
|
2842
|
+
);
|
|
2843
|
+
|
|
2844
|
+
if (!parentNodesByPath?.[0]?.id)
|
|
2845
|
+
throw new Error(
|
|
2846
|
+
`A node with id "${nodeId}" does not exist, and the parent node could not be found at path "${parentPath}".`
|
|
2847
|
+
);
|
|
2848
|
+
else parentNode = parentNodesByPath[0] as unknown as Node;
|
|
2849
|
+
}
|
|
2850
|
+
const pathSlug = nodePath?.substring(nodePath.lastIndexOf('/') + 1);
|
|
2851
|
+
|
|
2852
|
+
const createNode: ICreateNode = {
|
|
2853
|
+
id: nodeId,
|
|
2854
|
+
parentId: nodeUpdates.parentId || parentNode?.id,
|
|
2855
|
+
projectId: currentProject,
|
|
2856
|
+
displayName: displayName
|
|
2857
|
+
? {
|
|
2858
|
+
[language]: displayName,
|
|
2859
|
+
}
|
|
2860
|
+
: nodeUpdates.displayName
|
|
2861
|
+
? nodeUpdates.displayName
|
|
2862
|
+
: pathSlug
|
|
2863
|
+
? {
|
|
2864
|
+
[language]: pathSlug,
|
|
2865
|
+
}
|
|
2866
|
+
: (undefined as any),
|
|
2867
|
+
slug: slug
|
|
2868
|
+
? {
|
|
2869
|
+
[language]: slug,
|
|
2870
|
+
}
|
|
2871
|
+
: nodeUpdates.slug
|
|
2872
|
+
? nodeUpdates.slug
|
|
2873
|
+
: pathSlug
|
|
2874
|
+
? {
|
|
2875
|
+
[language]: pathSlug,
|
|
2876
|
+
}
|
|
2877
|
+
: (undefined as any),
|
|
2878
|
+
entryId: nodeUpdates.entryId,
|
|
2879
|
+
isCanonical: nodeUpdates.isCanonical,
|
|
2880
|
+
renderer: nodeUpdates.renderer,
|
|
2881
|
+
proxy: nodeUpdates.proxy,
|
|
2882
|
+
includeInMenu: nodeUpdates.includeInMenu,
|
|
2883
|
+
};
|
|
2884
|
+
|
|
2885
|
+
// Validate createNode
|
|
2886
|
+
updateNode = createNode as Node;
|
|
2887
|
+
} else {
|
|
2888
|
+
updateNode = { ...existingNode, ...nodeUpdates };
|
|
2889
|
+
}
|
|
2890
|
+
|
|
2891
|
+
if (updateNode) {
|
|
2892
|
+
log.info(messages.nodes.setPayload());
|
|
2893
|
+
log.object(updateNode);
|
|
2894
|
+
log.raw('');
|
|
2895
|
+
const [err, newNode] = await contensis.source.repo.UpdateOrCreateNode(
|
|
2896
|
+
existingNode as Node,
|
|
2897
|
+
updateNode
|
|
2898
|
+
);
|
|
2899
|
+
|
|
2900
|
+
if (err)
|
|
2901
|
+
log.error(
|
|
2902
|
+
messages.nodes[existingNode ? 'failedSet' : 'failedCreate'](
|
|
2903
|
+
currentEnv,
|
|
2904
|
+
nodePathOrId
|
|
2905
|
+
),
|
|
2906
|
+
err
|
|
2907
|
+
);
|
|
2908
|
+
else if (newNode) {
|
|
2909
|
+
log.success(
|
|
2910
|
+
messages.nodes[existingNode ? 'set' : 'created'](
|
|
2911
|
+
currentEnv,
|
|
2912
|
+
newNode.id
|
|
2913
|
+
)
|
|
2914
|
+
);
|
|
2915
|
+
|
|
2916
|
+
await this.HandleFormattingAndOutput(newNode, log.object);
|
|
2917
|
+
}
|
|
2918
|
+
}
|
|
2919
|
+
}
|
|
2920
|
+
};
|
|
2921
|
+
|
|
2772
2922
|
PrintWebhookSubscriptions = async (subscriptionIdsOrNames?: string[]) => {
|
|
2773
2923
|
const { currentEnv, log, messages } = this;
|
|
2774
2924
|
const contensis = await this.ConnectContensis();
|
|
@@ -2809,7 +2959,7 @@ class ContensisCli {
|
|
|
2809
2959
|
} of filteredResults) {
|
|
2810
2960
|
console.log(
|
|
2811
2961
|
log.infoText(
|
|
2812
|
-
|
|
2962
|
+
`${chalk.bold.white`${enabled ? '🟢' : '🔴'} ${name}`} ${id} [${(
|
|
2813
2963
|
version.modified || version.created
|
|
2814
2964
|
)
|
|
2815
2965
|
.toString()
|
|
@@ -2819,6 +2969,9 @@ class ContensisCli {
|
|
|
2819
2969
|
)
|
|
2820
2970
|
);
|
|
2821
2971
|
if (description) console.log(log.infoText` ${description}`);
|
|
2972
|
+
console.log(
|
|
2973
|
+
` ${log.infoText`enabled`}: ${chalk[enabled ? 'green' : 'red'](enabled)}`
|
|
2974
|
+
);
|
|
2822
2975
|
console.log(` ${log.infoText`[${method}]`} ${url}`);
|
|
2823
2976
|
if (headers && Object.keys(headers).length) {
|
|
2824
2977
|
console.log(` ${log.infoText`headers`}:`);
|
|
@@ -2849,8 +3002,6 @@ class ContensisCli {
|
|
|
2849
3002
|
templates
|
|
2850
3003
|
).join(' ')}`
|
|
2851
3004
|
);
|
|
2852
|
-
if (enabled === false)
|
|
2853
|
-
console.log(` ${log.infoText`enabled`}: ${enabled}`);
|
|
2854
3005
|
}
|
|
2855
3006
|
});
|
|
2856
3007
|
}
|
|
@@ -2863,6 +3014,90 @@ class ContensisCli {
|
|
|
2863
3014
|
}
|
|
2864
3015
|
};
|
|
2865
3016
|
|
|
3017
|
+
ImportWebhooks = async ({
|
|
3018
|
+
commit,
|
|
3019
|
+
fromFile,
|
|
3020
|
+
logOutput,
|
|
3021
|
+
enabled = false,
|
|
3022
|
+
disabled = false,
|
|
3023
|
+
}: {
|
|
3024
|
+
commit: boolean;
|
|
3025
|
+
fromFile?: string;
|
|
3026
|
+
logOutput: string;
|
|
3027
|
+
enabled?: boolean;
|
|
3028
|
+
disabled?: boolean;
|
|
3029
|
+
}) => {
|
|
3030
|
+
const { currentEnv, currentProject, log, messages } = this;
|
|
3031
|
+
|
|
3032
|
+
const contensis = await this.ConnectContensisImport({
|
|
3033
|
+
commit,
|
|
3034
|
+
fromFile,
|
|
3035
|
+
});
|
|
3036
|
+
|
|
3037
|
+
if (contensis) {
|
|
3038
|
+
log.line();
|
|
3039
|
+
if (contensis.isPreview) {
|
|
3040
|
+
log.success(messages.migrate.preview());
|
|
3041
|
+
} else {
|
|
3042
|
+
log.warning(messages.migrate.commit());
|
|
3043
|
+
}
|
|
3044
|
+
|
|
3045
|
+
const [err, result] = await to(
|
|
3046
|
+
contensis.webhooks.MigrateWebhooks({
|
|
3047
|
+
// trying to simulate XOR logic, setting enabled arg from
|
|
3048
|
+
// enabled or disabled option only if one of them is set
|
|
3049
|
+
enabled: enabled !== disabled ? enabled || !disabled : undefined,
|
|
3050
|
+
})
|
|
3051
|
+
);
|
|
3052
|
+
|
|
3053
|
+
if (err) logError(err);
|
|
3054
|
+
else if (result) {
|
|
3055
|
+
await this.HandleFormattingAndOutput(result, () => {
|
|
3056
|
+
printWebhooksMigrateResult(this, result, {
|
|
3057
|
+
showAll: logOutput === 'all',
|
|
3058
|
+
showDiff: logOutput === 'all' || logOutput === 'changes',
|
|
3059
|
+
showChanged: logOutput === 'changes',
|
|
3060
|
+
});
|
|
3061
|
+
});
|
|
3062
|
+
}
|
|
3063
|
+
if (
|
|
3064
|
+
!err &&
|
|
3065
|
+
!result.errors?.length &&
|
|
3066
|
+
((!commit && result.webhooksToMigrate[currentProject].totalCount) ||
|
|
3067
|
+
(commit &&
|
|
3068
|
+
(result.webhooksResult?.created || result.webhooksResult?.updated)))
|
|
3069
|
+
) {
|
|
3070
|
+
log.success(
|
|
3071
|
+
messages.webhooks.imported(
|
|
3072
|
+
currentEnv,
|
|
3073
|
+
commit,
|
|
3074
|
+
commit
|
|
3075
|
+
? (result.webhooksResult?.created || 0) +
|
|
3076
|
+
(result.webhooksResult?.updated || 0)
|
|
3077
|
+
: (result.webhooksToMigrate[currentProject].totalCount as number)
|
|
3078
|
+
)
|
|
3079
|
+
);
|
|
3080
|
+
if (!commit) {
|
|
3081
|
+
log.raw(``);
|
|
3082
|
+
log.help(messages.migrate.commitTip());
|
|
3083
|
+
}
|
|
3084
|
+
} else {
|
|
3085
|
+
const noChanges =
|
|
3086
|
+
result?.webhooksToMigrate?.[currentProject]?.['no change'] &&
|
|
3087
|
+
result?.webhooksToMigrate?.[currentProject].totalCount === 0;
|
|
3088
|
+
|
|
3089
|
+
if (noChanges && !err && !result.errors?.length) {
|
|
3090
|
+
log.help(messages.webhooks.noChange(currentEnv));
|
|
3091
|
+
} else {
|
|
3092
|
+
log.error(messages.webhooks.failedCreate(currentEnv), err);
|
|
3093
|
+
}
|
|
3094
|
+
}
|
|
3095
|
+
} else {
|
|
3096
|
+
log.warning(messages.models.noList(currentProject));
|
|
3097
|
+
log.help(messages.connect.tip());
|
|
3098
|
+
}
|
|
3099
|
+
};
|
|
3100
|
+
|
|
2866
3101
|
PrintBlocks = async () => {
|
|
2867
3102
|
const { currentEnv, env, log, messages } = this;
|
|
2868
3103
|
const contensis = await this.ConnectContensis();
|
|
@@ -3282,7 +3517,6 @@ class ContensisCli {
|
|
|
3282
3517
|
}
|
|
3283
3518
|
};
|
|
3284
3519
|
|
|
3285
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
3286
3520
|
PrintRenderers = async (rendererId?: string) => {
|
|
3287
3521
|
const { currentEnv, env, log, messages } = this;
|
|
3288
3522
|
const contensis = await this.ConnectContensis();
|
|
@@ -3291,19 +3525,27 @@ class ContensisCli {
|
|
|
3291
3525
|
const [err, renderers] = await contensis.renderers.GetRenderers();
|
|
3292
3526
|
|
|
3293
3527
|
if (Array.isArray(renderers)) {
|
|
3294
|
-
|
|
3528
|
+
const result = rendererId
|
|
3529
|
+
? ([renderers.find(r => r.id === rendererId)].filter(
|
|
3530
|
+
Boolean
|
|
3531
|
+
) as Renderer[])
|
|
3532
|
+
: renderers || [];
|
|
3533
|
+
|
|
3534
|
+
await this.HandleFormattingAndOutput(result, () => {
|
|
3295
3535
|
// print the renderers to console
|
|
3296
3536
|
log.success(messages.renderers.list(currentEnv, env.currentProject));
|
|
3297
3537
|
for (const {
|
|
3538
|
+
uuid,
|
|
3298
3539
|
id,
|
|
3299
3540
|
description,
|
|
3300
3541
|
assignedContentTypes,
|
|
3301
3542
|
rules,
|
|
3302
3543
|
version,
|
|
3303
|
-
} of
|
|
3544
|
+
} of result) {
|
|
3304
3545
|
console.log(
|
|
3305
3546
|
` - ${id} [${version.versionNo}] ${log.infoText`${description}`}`
|
|
3306
3547
|
);
|
|
3548
|
+
console.log(log.infoText` uuid: ${uuid}`);
|
|
3307
3549
|
if (assignedContentTypes?.length)
|
|
3308
3550
|
console.log(
|
|
3309
3551
|
log.infoText` assignedContentTypes: ${assignedContentTypes.join(
|
|
@@ -3319,7 +3561,7 @@ class ContensisCli {
|
|
|
3319
3561
|
);
|
|
3320
3562
|
}
|
|
3321
3563
|
});
|
|
3322
|
-
return
|
|
3564
|
+
return result;
|
|
3323
3565
|
}
|
|
3324
3566
|
|
|
3325
3567
|
if (err) {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { search } from '@inquirer/prompts';
|
|
1
2
|
import ansiEscapes from 'ansi-escapes';
|
|
2
3
|
import to from 'await-to-js';
|
|
3
4
|
import inquirer from 'inquirer';
|
|
@@ -413,10 +414,11 @@ class ContensisDev extends ContensisRole {
|
|
|
413
414
|
|
|
414
415
|
ExecRequestHandler = async (
|
|
415
416
|
blockId: string[],
|
|
417
|
+
blockOverrides: string[] | boolean,
|
|
416
418
|
overrideArgs: string[] = [],
|
|
417
419
|
version?: string
|
|
418
420
|
) => {
|
|
419
|
-
const { debug, log, messages } = this;
|
|
421
|
+
const { currentEnv, currentProject, debug, log, messages } = this;
|
|
420
422
|
|
|
421
423
|
const spinner = !debug
|
|
422
424
|
? createSpinner(messages.devrequests.launch())
|
|
@@ -425,43 +427,105 @@ class ContensisDev extends ContensisRole {
|
|
|
425
427
|
// Ensure request handler is available to use
|
|
426
428
|
const requestHandler = await createRequestHandler(version);
|
|
427
429
|
|
|
428
|
-
//
|
|
429
|
-
const
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
430
|
+
// Get the available blocks for the project
|
|
431
|
+
const contensis = await this.ConnectContensis();
|
|
432
|
+
if (contensis) {
|
|
433
|
+
const blockBranches = new Map<string, string>();
|
|
434
|
+
|
|
435
|
+
const [err, projectBlocks] = await contensis.blocks.GetBlocks();
|
|
436
|
+
if (err) log.error(messages.blocks.noList(currentEnv, currentProject));
|
|
437
|
+
else if (projectBlocks) {
|
|
438
|
+
// Prompt block id and dev uri to run locally (if not supplied)
|
|
439
|
+
const blockIdChoices = projectBlocks.map(block => block.id) || [];
|
|
440
|
+
blockIdChoices.push('none');
|
|
441
|
+
const defaultDeveloperUri = 'http://localhost:3000';
|
|
442
|
+
|
|
443
|
+
const { developmentBlockId, developmentBlockUri } = blockId.length
|
|
444
|
+
? {
|
|
445
|
+
developmentBlockId: blockId[0],
|
|
446
|
+
developmentBlockUri: blockId?.[1] || defaultDeveloperUri,
|
|
447
|
+
}
|
|
448
|
+
: await inquirer.prompt([
|
|
449
|
+
{
|
|
450
|
+
type: 'list',
|
|
451
|
+
prefix: '🧱',
|
|
452
|
+
message: messages.devrequests.overrideBlock(),
|
|
453
|
+
name: 'developmentBlockId',
|
|
454
|
+
choices: blockIdChoices,
|
|
455
|
+
},
|
|
456
|
+
{
|
|
457
|
+
type: 'input',
|
|
458
|
+
prefix: '🔗',
|
|
459
|
+
message: messages.devrequests.overrideUri(),
|
|
460
|
+
name: 'developmentBlockUri',
|
|
461
|
+
default: defaultDeveloperUri,
|
|
462
|
+
},
|
|
463
|
+
]);
|
|
464
|
+
|
|
465
|
+
// Prompt for other block overrides (e.g. branch)
|
|
466
|
+
if (blockOverrides) {
|
|
467
|
+
// Prompt for which blocks to override
|
|
468
|
+
const blockIdChoices =
|
|
469
|
+
projectBlocks
|
|
470
|
+
// ?.filter(block => block.id !== developmentBlockId)
|
|
471
|
+
?.map(block => ({
|
|
472
|
+
name: `${block.id}${block.description ? ` (${block.description})` : ''}`,
|
|
473
|
+
value: block.id,
|
|
474
|
+
})) || [];
|
|
475
|
+
blockIdChoices.push({ name: 'none', value: 'none' });
|
|
476
|
+
|
|
477
|
+
const { overrideBlockIds } = Array.isArray(blockOverrides)
|
|
478
|
+
? {
|
|
479
|
+
overrideBlockIds: blockOverrides
|
|
480
|
+
.map(bId => projectBlocks.find(b => b.id === bId)?.id)
|
|
481
|
+
.filter(Boolean) as string[],
|
|
482
|
+
}
|
|
483
|
+
: await inquirer.prompt<{ overrideBlockIds: string[] }>([
|
|
484
|
+
{
|
|
485
|
+
type: 'checkbox',
|
|
486
|
+
prefix: '🧱',
|
|
487
|
+
message: messages.devrequests.overrideBlocks(),
|
|
488
|
+
name: 'overrideBlockIds',
|
|
489
|
+
choices: blockIdChoices,
|
|
490
|
+
// default: blockIdChoices.findIndex(b => b.value === 'none'),
|
|
491
|
+
},
|
|
492
|
+
]);
|
|
493
|
+
|
|
494
|
+
// For each block to override, prompt for the branch to use
|
|
495
|
+
for (const overrideBlockId of overrideBlockIds) {
|
|
496
|
+
if (overrideBlockId === 'none') continue;
|
|
497
|
+
const choices = projectBlocks
|
|
498
|
+
.find(b => b.id === overrideBlockId)
|
|
499
|
+
?.branches.map(b => b.id);
|
|
500
|
+
if (choices) {
|
|
501
|
+
const overrideBranch = await search<string>({
|
|
502
|
+
message: `🌿 ${messages.devrequests.overrideBranch(overrideBlockId)}`,
|
|
503
|
+
source: input => {
|
|
504
|
+
input = input || '';
|
|
505
|
+
const fuzzyResult = input
|
|
506
|
+
? choices?.filter(choice =>
|
|
507
|
+
choice.toLowerCase().includes(input.toLowerCase())
|
|
508
|
+
)
|
|
509
|
+
: choices;
|
|
510
|
+
return fuzzyResult || [];
|
|
511
|
+
},
|
|
512
|
+
});
|
|
513
|
+
blockBranches.set(overrideBlockId, overrideBranch);
|
|
514
|
+
}
|
|
515
|
+
}
|
|
443
516
|
}
|
|
444
|
-
: await inquirer.prompt([
|
|
445
|
-
{
|
|
446
|
-
type: 'list',
|
|
447
|
-
prefix: '🧱',
|
|
448
|
-
message: messages.devrequests.overrideBlock(),
|
|
449
|
-
name: 'overrideBlockId',
|
|
450
|
-
choices: blockIdChoices,
|
|
451
|
-
},
|
|
452
|
-
{
|
|
453
|
-
type: 'input',
|
|
454
|
-
prefix: '🔗',
|
|
455
|
-
message: messages.devrequests.overrideUri(),
|
|
456
|
-
name: 'overrideUri',
|
|
457
|
-
default: defaultDeveloperUri,
|
|
458
|
-
},
|
|
459
|
-
]);
|
|
460
517
|
|
|
461
|
-
|
|
518
|
+
// Generate args for request handler using CLI methods
|
|
519
|
+
const args = new RequestHandlerArgs(projectBlocks, blockBranches, this);
|
|
520
|
+
spinner?.start();
|
|
521
|
+
await args.Create();
|
|
522
|
+
args.overrideBlock(developmentBlockId, developmentBlockUri);
|
|
523
|
+
spinner?.success();
|
|
462
524
|
|
|
463
|
-
|
|
464
|
-
|
|
525
|
+
// Launch request handler
|
|
526
|
+
await requestHandler(args.getArgs(overrideArgs));
|
|
527
|
+
}
|
|
528
|
+
}
|
|
465
529
|
};
|
|
466
530
|
}
|
|
467
531
|
export const devCommand = (
|
package/src/shell.ts
CHANGED
|
@@ -142,12 +142,15 @@ class ContensisShell {
|
|
|
142
142
|
'login',
|
|
143
143
|
'list projects',
|
|
144
144
|
'set project',
|
|
145
|
-
...(this.env?.projects || []).map(
|
|
145
|
+
...(this.env?.projects || []).map(
|
|
146
|
+
project => `set project ${project.id}`
|
|
147
|
+
)
|
|
146
148
|
);
|
|
147
149
|
if (userId)
|
|
148
150
|
availableCommands.push(
|
|
149
151
|
'copy field',
|
|
150
152
|
'create key',
|
|
153
|
+
'create node',
|
|
151
154
|
'create project',
|
|
152
155
|
'create role',
|
|
153
156
|
'create tag',
|
|
@@ -183,6 +186,7 @@ class ContensisShell {
|
|
|
183
186
|
'import nodes',
|
|
184
187
|
'import tags',
|
|
185
188
|
'import taggroups',
|
|
189
|
+
'import webhooks',
|
|
186
190
|
'list blocks',
|
|
187
191
|
'list contenttypes',
|
|
188
192
|
'list components',
|
|
@@ -207,6 +211,8 @@ class ContensisShell {
|
|
|
207
211
|
'remove tags',
|
|
208
212
|
'remove tags in',
|
|
209
213
|
'remove taggroup',
|
|
214
|
+
'set node entry',
|
|
215
|
+
'set node renderer',
|
|
210
216
|
'set project name',
|
|
211
217
|
'set project description',
|
|
212
218
|
'set role name',
|