sf-plugin-cms 0.2.0 → 0.3.0
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 +116 -13
- package/lib/{commands/cms/command-base.d.ts → command-base.d.ts} +2 -1
- package/lib/{commands/cms/command-base.js → command-base.js} +3 -0
- package/lib/command-base.js.map +1 -0
- package/lib/commands/cms/export/workspace.d.ts +12 -5
- package/lib/commands/cms/export/workspace.js +102 -11
- package/lib/commands/cms/export/workspace.js.map +1 -1
- package/lib/commands/cms/get/channel.d.ts +1 -1
- package/lib/commands/cms/get/channel.js +1 -1
- package/lib/commands/cms/get/channel.js.map +1 -1
- package/lib/commands/cms/get/content.d.ts +1 -1
- package/lib/commands/cms/get/content.js +1 -1
- package/lib/commands/cms/get/content.js.map +1 -1
- package/lib/commands/cms/get/variant.d.ts +1 -1
- package/lib/commands/cms/get/variant.js +1 -1
- package/lib/commands/cms/get/variant.js.map +1 -1
- package/lib/commands/cms/get/workspace.d.ts +1 -1
- package/lib/commands/cms/get/workspace.js +1 -1
- package/lib/commands/cms/get/workspace.js.map +1 -1
- package/lib/commands/cms/import/workspace.d.ts +7 -4
- package/lib/commands/cms/import/workspace.js +121 -35
- package/lib/commands/cms/import/workspace.js.map +1 -1
- package/lib/commands/cms/info.d.ts +11 -10
- package/lib/commands/cms/info.js +123 -8
- package/lib/commands/cms/info.js.map +1 -1
- package/lib/commands/cms/list/channel.d.ts +1 -1
- package/lib/commands/cms/list/channel.js +1 -1
- package/lib/commands/cms/list/channel.js.map +1 -1
- package/lib/commands/cms/list/workspace.d.ts +1 -1
- package/lib/commands/cms/list/workspace.js +1 -1
- package/lib/commands/cms/list/workspace.js.map +1 -1
- package/lib/contracts/info.d.ts +43 -0
- package/lib/contracts/info.js +69 -0
- package/lib/contracts/info.js.map +1 -0
- package/lib/contracts/shared.d.ts +81 -0
- package/lib/contracts/shared.js +218 -0
- package/lib/contracts/shared.js.map +1 -0
- package/lib/contracts/workspace-export.d.ts +91 -0
- package/lib/contracts/workspace-export.js +324 -0
- package/lib/contracts/workspace-export.js.map +1 -0
- package/lib/contracts/workspace-import.d.ts +46 -0
- package/lib/contracts/workspace-import.js +108 -0
- package/lib/contracts/workspace-import.js.map +1 -0
- package/lib/index.d.ts +1 -1
- package/lib/services/bulk-export-workspaces.d.ts +25 -0
- package/lib/services/bulk-export-workspaces.js +272 -0
- package/lib/services/bulk-export-workspaces.js.map +1 -0
- package/lib/services/export-references.d.ts +21 -0
- package/lib/services/export-references.js +150 -0
- package/lib/services/export-references.js.map +1 -0
- package/lib/services/export-workspace.d.ts +10 -22
- package/lib/services/export-workspace.js +68 -2
- package/lib/services/export-workspace.js.map +1 -1
- package/lib/services/import-workspace.d.ts +7 -3
- package/lib/services/import-workspace.js +224 -96
- package/lib/services/import-workspace.js.map +1 -1
- package/lib/services/resolve-workspace.d.ts +5 -0
- package/lib/services/resolve-workspace.js +56 -47
- package/lib/services/resolve-workspace.js.map +1 -1
- package/messages/cms.export.workspace.md +22 -4
- package/messages/cms.import.workspace.md +8 -2
- package/messages/cms.info.md +21 -0
- package/package.json +3 -2
- package/lib/commands/cms/command-base.js.map +0 -1
|
@@ -1,13 +1,53 @@
|
|
|
1
1
|
import { getWorkspace, listWorkspaces } from './read.js';
|
|
2
|
-
const WORKSPACE_PAGE_SIZE =
|
|
2
|
+
const WORKSPACE_PAGE_SIZE = 250;
|
|
3
3
|
const WORKSPACE_PAGE_CAP = 1000;
|
|
4
4
|
function nonemptyString(value) {
|
|
5
5
|
return typeof value === 'string' && value.length > 0;
|
|
6
6
|
}
|
|
7
|
-
function
|
|
8
|
-
return
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
function folded(value) {
|
|
8
|
+
return value.normalize('NFKC').toLocaleLowerCase('en-US');
|
|
9
|
+
}
|
|
10
|
+
function workspaceSummary(value, page) {
|
|
11
|
+
if (!nonemptyString(value.id)) {
|
|
12
|
+
throw new Error(`Workspace listing page ${page} contains an item with a missing or malformed ID.`);
|
|
13
|
+
}
|
|
14
|
+
return {
|
|
15
|
+
id: value.id,
|
|
16
|
+
...(nonemptyString(value.name) ? { name: value.name } : {}),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export async function enumerateWorkspaces(connection, options = {}, query = {}) {
|
|
20
|
+
const workspaces = new Map();
|
|
21
|
+
const foldedIds = new Map();
|
|
22
|
+
const pageFingerprints = new Set();
|
|
23
|
+
for (let page = 0; page < WORKSPACE_PAGE_CAP; page += 1) {
|
|
24
|
+
const response = await listWorkspaces(connection, { ...query, page, pageSize: WORKSPACE_PAGE_SIZE }, options);
|
|
25
|
+
if (response.items.length === 0)
|
|
26
|
+
return [...workspaces.values()];
|
|
27
|
+
const summaries = response.items.map((item) => workspaceSummary(item, page));
|
|
28
|
+
const fingerprint = JSON.stringify(summaries.map(({ id, name }) => [id, name ?? '']));
|
|
29
|
+
if (pageFingerprints.has(fingerprint)) {
|
|
30
|
+
throw new Error(`Workspace listing repeated page content at page ${page}.`);
|
|
31
|
+
}
|
|
32
|
+
pageFingerprints.add(fingerprint);
|
|
33
|
+
let additions = 0;
|
|
34
|
+
for (const summary of summaries) {
|
|
35
|
+
const foldedId = folded(summary.id);
|
|
36
|
+
const existingCasing = foldedIds.get(foldedId);
|
|
37
|
+
if (existingCasing !== undefined && existingCasing !== summary.id) {
|
|
38
|
+
throw new Error(`Workspace IDs ${existingCasing} and ${summary.id} differ only by case or Unicode normalization and are ambiguous.`);
|
|
39
|
+
}
|
|
40
|
+
foldedIds.set(foldedId, summary.id);
|
|
41
|
+
if (!workspaces.has(summary.id)) {
|
|
42
|
+
workspaces.set(summary.id, summary);
|
|
43
|
+
additions += 1;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (additions === 0) {
|
|
47
|
+
throw new Error(`Workspace listing made no progress at page ${page}.`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
throw new Error(`Workspace listing exceeded the ${WORKSPACE_PAGE_CAP}-page safety limit.`);
|
|
11
51
|
}
|
|
12
52
|
async function validatedWorkspace(connection, workspaceId, options) {
|
|
13
53
|
const workspace = await getWorkspace(connection, workspaceId, options);
|
|
@@ -29,49 +69,18 @@ export async function resolveWorkspace(connection, selector, options = {}) {
|
|
|
29
69
|
return validatedWorkspace(connection, selector.workspaceId, options);
|
|
30
70
|
}
|
|
31
71
|
const requestedName = selector.workspaceName;
|
|
32
|
-
const
|
|
33
|
-
const
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
const identities = response.items
|
|
38
|
-
.map((item) => workspaceIdentity(item))
|
|
39
|
-
.filter((value) => value !== undefined);
|
|
40
|
-
const fingerprint = JSON.stringify(identities.map(({ id, name }) => [id, name]));
|
|
41
|
-
if (pageFingerprints.has(fingerprint) && identities.length > 0) {
|
|
42
|
-
throw new Error(`Workspace listing repeated a page while resolving name ${requestedName}.`);
|
|
43
|
-
}
|
|
44
|
-
pageFingerprints.add(fingerprint);
|
|
45
|
-
let additions = 0;
|
|
46
|
-
for (const identity of identities) {
|
|
47
|
-
if (!observedIds.has(identity.id)) {
|
|
48
|
-
observedIds.add(identity.id);
|
|
49
|
-
additions += 1;
|
|
50
|
-
}
|
|
51
|
-
if (identity.name === requestedName)
|
|
52
|
-
matches.set(identity.id, identity);
|
|
53
|
-
}
|
|
54
|
-
if (response.items.length === 0)
|
|
55
|
-
break;
|
|
56
|
-
if (additions === 0) {
|
|
57
|
-
throw new Error(`Workspace listing made no progress while resolving name ${requestedName}.`);
|
|
58
|
-
}
|
|
59
|
-
const trustworthyPage = response.page === page && response.pageSize === WORKSPACE_PAGE_SIZE;
|
|
60
|
-
const advertisedComplete = trustworthyPage &&
|
|
61
|
-
response.total !== undefined &&
|
|
62
|
-
response.total >= observedIds.size &&
|
|
63
|
-
observedIds.size >= response.total;
|
|
64
|
-
if (advertisedComplete && response.items.length < WORKSPACE_PAGE_SIZE)
|
|
65
|
-
break;
|
|
66
|
-
if (page === WORKSPACE_PAGE_CAP - 1) {
|
|
67
|
-
throw new Error(`Workspace listing exceeded the ${WORKSPACE_PAGE_CAP}-page safety limit.`);
|
|
68
|
-
}
|
|
72
|
+
const requestedFoldedName = folded(requestedName);
|
|
73
|
+
const listed = await enumerateWorkspaces(connection, options, { nameFragment: requestedName });
|
|
74
|
+
const matches = listed.filter(({ name }) => name !== undefined && folded(name) === requestedFoldedName);
|
|
75
|
+
if (matches.length === 0) {
|
|
76
|
+
throw new Error(`No workspace has the exact case-insensitive name ${requestedName}.`);
|
|
69
77
|
}
|
|
70
|
-
if (matches.
|
|
71
|
-
throw new Error(`
|
|
72
|
-
|
|
73
|
-
|
|
78
|
+
if (matches.length > 1) {
|
|
79
|
+
throw new Error(`Workspace name ${requestedName} is ambiguous across IDs: ${matches
|
|
80
|
+
.map(({ id }) => id)
|
|
81
|
+
.toSorted()
|
|
82
|
+
.join(', ')}. Use --workspace-id.`);
|
|
74
83
|
}
|
|
75
|
-
return validatedWorkspace(connection,
|
|
84
|
+
return validatedWorkspace(connection, matches[0].id, options);
|
|
76
85
|
}
|
|
77
86
|
//# sourceMappingURL=resolve-workspace.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-workspace.js","sourceRoot":"","sources":["../../src/services/resolve-workspace.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAkB,MAAM,WAAW,CAAC;AAEzE,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAChC,MAAM,kBAAkB,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"resolve-workspace.js","sourceRoot":"","sources":["../../src/services/resolve-workspace.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# summary
|
|
2
2
|
|
|
3
|
-
Experimentally export
|
|
3
|
+
Experimentally export one or all CMS workspaces using a read-only, best-effort process.
|
|
4
4
|
|
|
5
5
|
# description
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Exports one Marketing Cloud CMS workspace selected by exact ID or case-insensitive exact name, or preflights and exports all workspaces under a parent directory. Canonical fetched names and casing are preserved. Bulk preflight is global and strict; execution then continues across individual failures and returns a complete aggregate. This is not a complete or guaranteed backup and does not mutate org data.
|
|
8
8
|
|
|
9
9
|
# examples
|
|
10
10
|
|
|
@@ -16,6 +16,12 @@ Selects one Marketing Cloud CMS workspace by exact ID or exact case-sensitive na
|
|
|
16
16
|
|
|
17
17
|
<%= config.bin %> <%= command.id %> --target-org my-org --workspace-id 0Zu... --output-dir ./cms-export
|
|
18
18
|
|
|
19
|
+
- Export all Marketing workspaces beneath ./cms with the v1 JSON aggregate:
|
|
20
|
+
|
|
21
|
+
<%= config.bin %> <%= command.id %> --target-org my-org --all --workspace-type Marketing --output-dir ./cms --contract-version 1 --json
|
|
22
|
+
|
|
23
|
+
Bulk JSON uses `sf-cms-workspace-export-set@1`. Exit 0 means success, 2 means partial with a usable aggregate, and 1 means failed or blocked. Unsupported contract majors block before org access.
|
|
24
|
+
|
|
19
25
|
# flags.target-org.summary
|
|
20
26
|
|
|
21
27
|
Username or alias of the target Salesforce org.
|
|
@@ -24,14 +30,26 @@ Username or alias of the target Salesforce org.
|
|
|
24
30
|
|
|
25
31
|
Salesforce API version used for CMS requests.
|
|
26
32
|
|
|
33
|
+
# flags.contract-version.summary
|
|
34
|
+
|
|
35
|
+
Machine contract major version (supported: 1). Unsupported majors return a blocked contract envelope before org access.
|
|
36
|
+
|
|
37
|
+
# flags.all.summary
|
|
38
|
+
|
|
39
|
+
Export every CMS workspace after a strict global preflight.
|
|
40
|
+
|
|
27
41
|
# flags.workspace-id.summary
|
|
28
42
|
|
|
29
43
|
Exact CMS workspace content-space ID.
|
|
30
44
|
|
|
31
45
|
# flags.workspace-name.summary
|
|
32
46
|
|
|
33
|
-
Exact case-
|
|
47
|
+
Exact case-insensitive CMS workspace name.
|
|
48
|
+
|
|
49
|
+
# flags.workspace-type.summary
|
|
50
|
+
|
|
51
|
+
Bulk-only workspace type filter: Marketing or Content (case-insensitive).
|
|
34
52
|
|
|
35
53
|
# flags.output-dir.summary
|
|
36
54
|
|
|
37
|
-
|
|
55
|
+
Single: exact new destination. Bulk: parent directory. Defaults to ./cms/<name> or ./cms.
|
|
@@ -12,14 +12,20 @@ Validates the source workspace export locally before any org request, selects on
|
|
|
12
12
|
|
|
13
13
|
<%= config.bin %> <%= command.id %> --target-org my-org --workspace-name "Destination" --source-dir ./cms/Source
|
|
14
14
|
|
|
15
|
-
- Apply to an exact destination workspace ID and write a durable run report:
|
|
15
|
+
- Apply to an exact destination workspace ID, select result major 1, and write a durable run report:
|
|
16
16
|
|
|
17
|
-
<%= config.bin %> <%= command.id %> --target-org my-org --workspace-id 0Zu... --source-dir ./cms/Source --apply --report-dir ./cms-import-report
|
|
17
|
+
<%= config.bin %> <%= command.id %> --target-org my-org --workspace-id 0Zu... --source-dir ./cms/Source --apply --report-dir ./cms-import-report --contract-version 1 --json
|
|
18
|
+
|
|
19
|
+
JSON uses `sf-cms-workspace-import@1`. Package integrity and the independently declared manifest major are validated before org access. Exit 0 means success, 2 means partial with a usable result, and 1 means failed or blocked.
|
|
18
20
|
|
|
19
21
|
# flags.target-org.summary
|
|
20
22
|
|
|
21
23
|
Username or alias of the target Salesforce org.
|
|
22
24
|
|
|
25
|
+
# flags.contract-version.summary
|
|
26
|
+
|
|
27
|
+
Machine contract major version (supported: 1). Unsupported majors return a blocked contract envelope before package or org access.
|
|
28
|
+
|
|
23
29
|
# flags.api-version.summary
|
|
24
30
|
|
|
25
31
|
Salesforce API version used for CMS requests.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# summary
|
|
2
|
+
|
|
3
|
+
Show offline CMS contract and capability information.
|
|
4
|
+
|
|
5
|
+
# description
|
|
6
|
+
|
|
7
|
+
Reports the versioned CLI JSON contracts, package compatibility, tested API baseline, and truthfully evidenced CMS capabilities without contacting an org.
|
|
8
|
+
|
|
9
|
+
# examples
|
|
10
|
+
|
|
11
|
+
- Show the installed plugin's offline capability envelope:
|
|
12
|
+
|
|
13
|
+
<%= config.bin %> <%= command.id %> --json
|
|
14
|
+
|
|
15
|
+
- Explicitly select supported command-result major 1:
|
|
16
|
+
|
|
17
|
+
<%= config.bin %> <%= command.id %> --contract-version 1 --json
|
|
18
|
+
|
|
19
|
+
# flags.contract-version.summary
|
|
20
|
+
|
|
21
|
+
Machine contract major version (supported: 1).
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sf-plugin-cms",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Salesforce CLI plugin
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "Salesforce CLI plugin for Marketing Cloud CMS workspace export and create-only import",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Jörn Berkefeld",
|
|
7
7
|
"email": "joern.berkefeld@gmail.com"
|
|
@@ -72,6 +72,7 @@
|
|
|
72
72
|
"devDependencies": {
|
|
73
73
|
"@eslint/js": "9.39.4",
|
|
74
74
|
"@oclif/plugin-command-snapshot": "5.3.33",
|
|
75
|
+
"@salesforce/cli": "2.150.6",
|
|
75
76
|
"@salesforce/cli-plugins-testkit": "5.3.64",
|
|
76
77
|
"@salesforce/dev-config": "4.3.3",
|
|
77
78
|
"@types/chai": "4.3.20",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"command-base.js","sourceRoot":"","sources":["../../../src/commands/cms/command-base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAG/D,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,GAAG;IACT,QAAQ,EAAE,IAAI;IACd,OAAO,EAAE,iDAAiD;CAC3D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC,aAAa,CAAC;IAChD,OAAO,EAAE,MAAM;IACf,OAAO,EAAE,+CAA+C;CACzD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAC;AACtF,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,mCAAmC,EAAE,CAAC,CAAC;AAEpG,MAAM,OAAgB,UAAc,SAAQ,SAAY;IAC5C,KAAK,CAAC,aAAa,CAC3B,SAAiB,EACjB,UAAkB;QAElB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAChE,OAAO,OAAO,CAAC,UAAU,CAAC;IAC5B,CAAC;IAES,KAAK,CAAC,aAAa,CAC3B,SAAiB,EACjB,UAAkB;QAElB,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC,CAAC;QAC7D,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC9E,CAAC;IAES,QAAQ,CAAC,KAAa,EAAE,IAAa;QAC7C,IAAI,CAAC,KAAK,CAAC;YACT,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC9B,EAAE,EAAE,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC;gBAC3B,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC;gBAC7D,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC;aAChC,CAAC,CAAC;YACH,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAES,UAAU,CAAC,MAAiB;QACpC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC;CACF;AAED,SAAS,WAAW,CAAC,MAAiB,EAAE,GAAW;IACjD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAChD,CAAC"}
|