sf-plugin-cms 0.1.0 → 0.2.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 +34 -19
- package/lib/commands/cms/export/workspace.d.ts +4 -3
- package/lib/commands/cms/export/workspace.js +21 -10
- package/lib/commands/cms/export/workspace.js.map +1 -1
- package/lib/commands/cms/import/workspace.d.ts +3 -2
- package/lib/commands/cms/import/workspace.js +15 -9
- package/lib/commands/cms/import/workspace.js.map +1 -1
- package/lib/services/export-workspace.d.ts +2 -0
- package/lib/services/export-workspace.js +23 -0
- package/lib/services/export-workspace.js.map +1 -1
- package/lib/services/resolve-workspace.d.ts +15 -0
- package/lib/services/resolve-workspace.js +77 -0
- package/lib/services/resolve-workspace.js.map +1 -0
- package/messages/cms.export.workspace.md +12 -4
- package/messages/cms.import.workspace.md +11 -7
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -32,16 +32,16 @@ For a sandbox or org that uses a custom login host, add `--instance-url <login-u
|
|
|
32
32
|
|
|
33
33
|
### Install the plugin
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
Install the plugin with Salesforce CLI:
|
|
36
36
|
|
|
37
37
|
```sh
|
|
38
38
|
sf plugins install sf-plugin-cms
|
|
39
39
|
```
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
For contributor work or local development from a source checkout, run these commands from the repository's `sf-plugin-cms` directory:
|
|
42
42
|
|
|
43
43
|
```sh
|
|
44
|
-
npm install
|
|
44
|
+
npm install
|
|
45
45
|
npm run compile
|
|
46
46
|
sf plugins link .
|
|
47
47
|
```
|
|
@@ -56,6 +56,18 @@ sf cms info
|
|
|
56
56
|
|
|
57
57
|
## Command reference
|
|
58
58
|
|
|
59
|
+
| Command | Details |
|
|
60
|
+
|---|---|
|
|
61
|
+
| `sf cms info` | [Plugin information](#sf-cms-info) |
|
|
62
|
+
| `sf cms list workspace` | [List workspaces](#sf-cms-list-workspace) |
|
|
63
|
+
| `sf cms get workspace` | [Get a workspace](#sf-cms-get-workspace) |
|
|
64
|
+
| `sf cms list channel` | [List workspace channels](#sf-cms-list-channel) |
|
|
65
|
+
| `sf cms get channel` | [Get a channel](#sf-cms-get-channel) |
|
|
66
|
+
| `sf cms get content` | [Get content](#sf-cms-get-content) |
|
|
67
|
+
| `sf cms get variant` | [Get a variant](#sf-cms-get-variant) |
|
|
68
|
+
| `sf cms export workspace` | [Export a workspace](#sf-cms-export-workspace) |
|
|
69
|
+
| `sf cms import workspace` | [Import a workspace](#sf-cms-import-workspace) |
|
|
70
|
+
|
|
59
71
|
All org-backed commands require `--target-org <username-or-alias>` (short form `-o`). They use API version `67.0` by default; pass `--api-version <version>` only when you need to override it. Add `--json` for machine-readable Salesforce CLI output. Without `--json`, list commands print compact tables and get commands print formatted JSON records.
|
|
60
72
|
|
|
61
73
|
### `sf cms info`
|
|
@@ -159,24 +171,27 @@ Required selector: `--variant-id <id>`.
|
|
|
159
171
|
Runs an experimental, read-only, best-effort export of the variants currently observed for one CMS workspace. The destination must not already exist. This output is not a complete or guaranteed backup.
|
|
160
172
|
|
|
161
173
|
```sh
|
|
162
|
-
sf cms export workspace --target-org my-org --workspace-
|
|
163
|
-
sf cms export workspace --target-org my-org --workspace-id 0Zu... --output-dir ./
|
|
174
|
+
sf cms export workspace --target-org my-org --workspace-name "Main Site"
|
|
175
|
+
sf cms export workspace --target-org my-org --workspace-id 0Zu... --output-dir ./custom-export --json
|
|
164
176
|
```
|
|
165
177
|
|
|
166
|
-
|
|
178
|
+
Workspace selector (exactly one required):
|
|
179
|
+
|
|
180
|
+
- `--workspace-id <id>`: CMS workspace content-space ID. The command validates that the returned workspace ID exactly matches this value.
|
|
181
|
+
- `--workspace-name <name>`: exact, case-sensitive workspace name. The command scans bounded zero-based pages, rejects distinct-ID ambiguity, then validates the selected workspace by ID.
|
|
167
182
|
|
|
168
|
-
|
|
169
|
-
- `--output-dir <path>`: new destination directory for `manifest.json` and the exported `items/*.json` files. There is no overwrite option.
|
|
183
|
+
`--output-dir <path>` is optional. When omitted, export writes to `./cms/<safe-workspace-name>`. The safe segment preserves Unicode and case, replaces path/control/Windows-invalid characters, and trims unsafe trailing dots or spaces. Empty, dot-only, and Windows reserved device names require an explicit `--output-dir`. An explicit path is used exactly as supplied. The destination must not already exist; missing parents are created.
|
|
170
184
|
|
|
171
185
|
Every service warning is emitted to stderr. Human output reports the destination and exported-versus-expected counts; `--json` suppresses that human summary and returns one clean structured result.
|
|
172
186
|
|
|
173
187
|
Export layout:
|
|
174
188
|
|
|
175
189
|
```text
|
|
176
|
-
cms
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
└──
|
|
190
|
+
cms/
|
|
191
|
+
└── Main Site/
|
|
192
|
+
├── manifest.json
|
|
193
|
+
└── items/
|
|
194
|
+
└── <variant-id>.json
|
|
180
195
|
```
|
|
181
196
|
|
|
182
197
|
`manifest.json` records the source workspace, search provenance, counts, warnings, rejected IDs, failed IDs, and the exact item-file mapping. Each item file contains one observed variant representation. Treat the package as best-effort evidence from that run, not as a guaranteed backup.
|
|
@@ -188,21 +203,21 @@ Plans or applies a create-only import from an export package. Dry-run is the def
|
|
|
188
203
|
Safe dry run:
|
|
189
204
|
|
|
190
205
|
```sh
|
|
191
|
-
sf cms import workspace --target-org my-org --workspace-
|
|
192
|
-
sf cms import workspace --target-org my-org --workspace-id 0Zu... --source-dir ./cms
|
|
206
|
+
sf cms import workspace --target-org my-org --workspace-name "Destination" --source-dir "./cms/Source"
|
|
207
|
+
sf cms import workspace --target-org my-org --workspace-id 0Zu... --source-dir "./cms/Source" --json
|
|
193
208
|
```
|
|
194
209
|
|
|
195
210
|
Explicit apply:
|
|
196
211
|
|
|
197
212
|
```sh
|
|
198
|
-
sf cms import workspace --target-org my-org --workspace-
|
|
213
|
+
sf cms import workspace --target-org my-org --workspace-name "Destination" --source-dir "./cms/Source" --apply --report-dir ./cms-import-report
|
|
199
214
|
```
|
|
200
215
|
|
|
201
216
|
Required flags:
|
|
202
217
|
|
|
203
218
|
- `--target-org <username-or-alias>`: explicit destination org; no implicit target is accepted.
|
|
204
|
-
- `--workspace-id <id
|
|
205
|
-
- `--source-dir <path>`: existing export package containing `manifest.json` and exactly the mapped `items/*.json` files.
|
|
219
|
+
- Exactly one destination selector: `--workspace-id <id>` or exact case-sensitive `--workspace-name <name>`. This identity is the destination and is independent of the source workspace recorded in the export manifest.
|
|
220
|
+
- `--source-dir <path>`: existing source export package containing `manifest.json` and exactly the mapped `items/*.json` files. Its manifest identifies the source workspace only; it does not select the destination.
|
|
206
221
|
|
|
207
222
|
Safety flags:
|
|
208
223
|
|
|
@@ -227,7 +242,7 @@ Import limitations and conflicts:
|
|
|
227
242
|
- Every content group must contain exactly one variant matching the destination workspace's `defaultLanguage`. There is no primary-language fallback.
|
|
228
243
|
- Child variants are created sequentially after their primary parent. There is no concurrency.
|
|
229
244
|
- Media-specific migration is not supported.
|
|
230
|
-
- The command does not
|
|
245
|
+
- The command does not change publication state; newly created records are expected to remain drafts.
|
|
231
246
|
- `--allow-partial` accepts known source omissions but does not make the missing records recoverable.
|
|
232
247
|
|
|
233
248
|
Recovery guidance:
|
|
@@ -257,7 +272,7 @@ sf cms get content --help
|
|
|
257
272
|
## Development
|
|
258
273
|
|
|
259
274
|
```sh
|
|
260
|
-
npm install
|
|
275
|
+
npm install
|
|
261
276
|
npm run lint
|
|
262
277
|
npm run build
|
|
263
278
|
npm run intake:check
|
|
@@ -2,13 +2,14 @@ import { type ExportWorkspaceResult } from '../../../services/export-workspace.j
|
|
|
2
2
|
import { CmsCommand } from '../command-base.js';
|
|
3
3
|
export default class ExportWorkspace extends CmsCommand<ExportWorkspaceResult> {
|
|
4
4
|
static readonly summary = "Experimentally export a CMS workspace using a read-only, best-effort process.";
|
|
5
|
-
static readonly description = "
|
|
5
|
+
static readonly description = "Selects one Marketing Cloud CMS workspace by exact ID or exact case-sensitive name and writes the variants observed by an experimental, best-effort search. Without --output-dir, the new destination is ./cms/<safe-workspace-name>. This is not a complete or guaranteed backup and does not mutate org data.";
|
|
6
6
|
static readonly examples: string[];
|
|
7
7
|
static readonly flags: {
|
|
8
8
|
'target-org': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
9
|
'api-version': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
-
'workspace-id': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
-
'
|
|
10
|
+
'workspace-id': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
'workspace-name': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
'output-dir': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
13
|
};
|
|
13
14
|
run(): Promise<ExportWorkspaceResult>;
|
|
14
15
|
}
|
|
@@ -1,31 +1,42 @@
|
|
|
1
1
|
import { Flags } from '@salesforce/sf-plugins-core';
|
|
2
|
-
import { exportWorkspace, } from '../../../services/export-workspace.js';
|
|
3
|
-
import {
|
|
2
|
+
import { defaultWorkspaceDestination, exportWorkspace, } from '../../../services/export-workspace.js';
|
|
3
|
+
import { assertWorkspaceSelector, resolveWorkspace } from '../../../services/resolve-workspace.js';
|
|
4
4
|
import { apiVersionFlag, CmsCommand, targetOrgFlag } from '../command-base.js';
|
|
5
5
|
export default class ExportWorkspace extends CmsCommand {
|
|
6
6
|
static summary = 'Experimentally export a CMS workspace using a read-only, best-effort process.';
|
|
7
|
-
static description = '
|
|
7
|
+
static description = 'Selects one Marketing Cloud CMS workspace by exact ID or exact case-sensitive name and writes the variants observed by an experimental, best-effort search. Without --output-dir, the new destination is ./cms/<safe-workspace-name>. This is not a complete or guaranteed backup and does not mutate org data.';
|
|
8
8
|
static examples = [
|
|
9
|
+
'<%= config.bin %> cms export workspace --target-org my-org --workspace-name "Main Site"',
|
|
9
10
|
'<%= config.bin %> cms export workspace --target-org my-org --workspace-id 0Zu... --output-dir ./cms-export',
|
|
10
11
|
];
|
|
11
12
|
static flags = {
|
|
12
13
|
'target-org': targetOrgFlag,
|
|
13
14
|
'api-version': apiVersionFlag,
|
|
14
|
-
'workspace-id': Flags.string({
|
|
15
|
+
'workspace-id': Flags.string({ summary: 'Exact CMS workspace content-space ID.' }),
|
|
16
|
+
'workspace-name': Flags.string({ summary: 'Exact case-sensitive CMS workspace name.' }),
|
|
15
17
|
'output-dir': Flags.directory({
|
|
16
18
|
exists: false,
|
|
17
|
-
|
|
18
|
-
summary: 'New directory to receive the experimental best-effort export.',
|
|
19
|
+
summary: 'Exact new destination directory; defaults to ./cms/<safe-workspace-name>.',
|
|
19
20
|
}),
|
|
20
21
|
};
|
|
21
22
|
async run() {
|
|
22
23
|
const { flags } = await this.parse(ExportWorkspace);
|
|
24
|
+
const selector = {
|
|
25
|
+
workspaceId: flags['workspace-id'],
|
|
26
|
+
workspaceName: flags['workspace-name'],
|
|
27
|
+
};
|
|
28
|
+
assertWorkspaceSelector(selector);
|
|
23
29
|
const connection = await this.getConnection(flags['target-org'], flags['api-version']);
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
30
|
+
const selected = await resolveWorkspace(connection, selector);
|
|
31
|
+
let destination = flags['output-dir'];
|
|
32
|
+
if (destination === undefined) {
|
|
33
|
+
const workspaceName = selected.workspace.name;
|
|
34
|
+
if (typeof workspaceName !== 'string' || workspaceName.length === 0) {
|
|
35
|
+
throw new Error('Selected workspace has no usable name. Pass --output-dir explicitly.');
|
|
36
|
+
}
|
|
37
|
+
destination = defaultWorkspaceDestination(workspaceName);
|
|
27
38
|
}
|
|
28
|
-
const result = await exportWorkspace(connection,
|
|
39
|
+
const result = await exportWorkspace(connection, selected.id, destination);
|
|
29
40
|
for (const warning of result.manifest.warnings)
|
|
30
41
|
this.warn(formatWarning(warning));
|
|
31
42
|
if (!this.jsonEnabled()) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../../../src/commands/cms/export/workspace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACpD,OAAO,EACL,eAAe,GAGhB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../../../src/commands/cms/export/workspace.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,12 +2,13 @@ import { type WorkspaceImportResult } from '../../../services/import-workspace.j
|
|
|
2
2
|
import { CmsCommand } from '../command-base.js';
|
|
3
3
|
export default class ImportWorkspace extends CmsCommand<WorkspaceImportResult> {
|
|
4
4
|
static readonly summary = "Safely plan or apply a create-only import into a CMS workspace.";
|
|
5
|
-
static readonly description = "Validates
|
|
5
|
+
static readonly description = "Validates the source workspace export locally before any org request, selects one destination workspace by exact ID or exact case-sensitive name, checks every content key for conflicts, and defaults to a non-mutating dry run. Pass --apply with a new --report-dir to create content.";
|
|
6
6
|
static readonly examples: string[];
|
|
7
7
|
static readonly flags: {
|
|
8
8
|
'target-org': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
9
|
'api-version': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
-
'workspace-id': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
'workspace-id': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
'workspace-name': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
12
|
'source-dir': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
13
|
apply: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
14
|
'allow-partial': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
import { Flags } from '@salesforce/sf-plugins-core';
|
|
2
2
|
import { executeWorkspaceImport, loadWorkspaceExport, } from '../../../services/import-workspace.js';
|
|
3
|
-
import {
|
|
3
|
+
import { assertWorkspaceSelector, resolveWorkspace } from '../../../services/resolve-workspace.js';
|
|
4
4
|
import { apiVersionFlag, CmsCommand, targetOrgFlag } from '../command-base.js';
|
|
5
5
|
export default class ImportWorkspace extends CmsCommand {
|
|
6
6
|
static summary = 'Safely plan or apply a create-only import into a CMS workspace.';
|
|
7
|
-
static description = 'Validates
|
|
7
|
+
static description = 'Validates the source workspace export locally before any org request, selects one destination workspace by exact ID or exact case-sensitive name, checks every content key for conflicts, and defaults to a non-mutating dry run. Pass --apply with a new --report-dir to create content.';
|
|
8
8
|
static examples = [
|
|
9
|
-
'<%= config.bin %> cms import workspace --target-org my-org --workspace-
|
|
10
|
-
'<%= config.bin %> cms import workspace --target-org my-org --workspace-id 0Zu... --source-dir ./cms
|
|
9
|
+
'<%= config.bin %> cms import workspace --target-org my-org --workspace-name "Destination" --source-dir ./cms/Source',
|
|
10
|
+
'<%= config.bin %> cms import workspace --target-org my-org --workspace-id 0Zu... --source-dir ./cms/Source --apply --report-dir ./cms-import-report',
|
|
11
11
|
];
|
|
12
12
|
static flags = {
|
|
13
13
|
'target-org': targetOrgFlag,
|
|
14
14
|
'api-version': apiVersionFlag,
|
|
15
|
-
'workspace-id': Flags.string({
|
|
15
|
+
'workspace-id': Flags.string({ summary: 'Exact destination CMS workspace ID.' }),
|
|
16
|
+
'workspace-name': Flags.string({ summary: 'Exact case-sensitive destination workspace name.' }),
|
|
16
17
|
'source-dir': Flags.directory({
|
|
17
18
|
exists: true,
|
|
18
19
|
required: true,
|
|
19
|
-
summary: '
|
|
20
|
+
summary: 'Source workspace export containing manifest.json and items/.',
|
|
20
21
|
}),
|
|
21
22
|
apply: Flags.boolean({
|
|
22
23
|
default: false,
|
|
@@ -39,17 +40,22 @@ export default class ImportWorkspace extends CmsCommand {
|
|
|
39
40
|
}
|
|
40
41
|
// Reject malformed, unsafe, or disallowed partial packages before contacting the org.
|
|
41
42
|
await loadWorkspaceExport(flags['source-dir'], { allowPartial: flags['allow-partial'] });
|
|
43
|
+
const selector = {
|
|
44
|
+
workspaceId: flags['workspace-id'],
|
|
45
|
+
workspaceName: flags['workspace-name'],
|
|
46
|
+
};
|
|
47
|
+
assertWorkspaceSelector(selector);
|
|
42
48
|
const { connection, orgId } = await this.getOrgContext(flags['target-org'], flags['api-version']);
|
|
43
|
-
const
|
|
49
|
+
const selected = await resolveWorkspace(connection, selector);
|
|
44
50
|
const result = await executeWorkspaceImport({
|
|
45
51
|
allowPartial: flags['allow-partial'],
|
|
46
52
|
connection,
|
|
47
53
|
destinationOrgId: orgId,
|
|
48
|
-
destinationWorkspace: workspace,
|
|
54
|
+
destinationWorkspace: selected.workspace,
|
|
49
55
|
dryRun: !flags.apply,
|
|
50
56
|
reportDirectory: flags['report-dir'],
|
|
51
57
|
sourceDirectory: flags['source-dir'],
|
|
52
|
-
workspaceId:
|
|
58
|
+
workspaceId: selected.id,
|
|
53
59
|
});
|
|
54
60
|
if (!this.jsonEnabled())
|
|
55
61
|
this.showPlan(result);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../../../src/commands/cms/import/workspace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACpD,OAAO,EACL,sBAAsB,EACtB,mBAAmB,GAEpB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../../../src/commands/cms/import/workspace.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,5 +33,7 @@ export type ExportWorkspaceResult = {
|
|
|
33
33
|
manifest: WorkspaceExportManifest;
|
|
34
34
|
};
|
|
35
35
|
type RequestConnection = Pick<Connection, 'request'>;
|
|
36
|
+
export declare function safeWorkspaceDirectoryName(workspaceName: string): string;
|
|
37
|
+
export declare function defaultWorkspaceDestination(workspaceName: string): string;
|
|
36
38
|
export declare function exportWorkspace(connection: RequestConnection, workspaceId: string, destination: string, options?: JsonRequestOptions): Promise<ExportWorkspaceResult>;
|
|
37
39
|
export {};
|
|
@@ -39,6 +39,28 @@ function detailWorkspaceId(detail) {
|
|
|
39
39
|
function jsonBytes(value) {
|
|
40
40
|
return `${JSON.stringify(value, null, 2)}\n`;
|
|
41
41
|
}
|
|
42
|
+
const WINDOWS_RESERVED_NAME = /^(?:con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\..*)?$/iu;
|
|
43
|
+
export function safeWorkspaceDirectoryName(workspaceName) {
|
|
44
|
+
const replaced = [...workspaceName]
|
|
45
|
+
.map((character) => {
|
|
46
|
+
const codePoint = character.codePointAt(0) ?? 0;
|
|
47
|
+
return codePoint <= 31 || codePoint === 127 || /[\\/<>:"|?*]/u.test(character)
|
|
48
|
+
? '_'
|
|
49
|
+
: character;
|
|
50
|
+
})
|
|
51
|
+
.join('');
|
|
52
|
+
const safeName = replaced.replaceAll(/[. ]+$/gu, '');
|
|
53
|
+
if (safeName.length === 0 ||
|
|
54
|
+
safeName === '.' ||
|
|
55
|
+
safeName === '..' ||
|
|
56
|
+
WINDOWS_RESERVED_NAME.test(safeName)) {
|
|
57
|
+
throw new Error(`Workspace name ${workspaceName} cannot be used as a portable directory name. Pass --output-dir explicitly.`);
|
|
58
|
+
}
|
|
59
|
+
return safeName;
|
|
60
|
+
}
|
|
61
|
+
export function defaultWorkspaceDestination(workspaceName) {
|
|
62
|
+
return path.join('.', 'cms', safeWorkspaceDirectoryName(workspaceName));
|
|
63
|
+
}
|
|
42
64
|
async function exists(path) {
|
|
43
65
|
try {
|
|
44
66
|
await stat(path);
|
|
@@ -195,6 +217,7 @@ export async function exportWorkspace(connection, workspaceId, destination, opti
|
|
|
195
217
|
warnings,
|
|
196
218
|
};
|
|
197
219
|
const parent = path.dirname(destination);
|
|
220
|
+
await mkdir(parent, { recursive: true });
|
|
198
221
|
const temporary = path.join(parent, `.${path.basename(destination)}.tmp-${process.pid}-${Date.now()}`);
|
|
199
222
|
try {
|
|
200
223
|
await mkdir(temporary);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export-workspace.js","sourceRoot":"","sources":["../../src/services/export-workspace.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"export-workspace.js","sourceRoot":"","sources":["../../src/services/export-workspace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Connection } from '@salesforce/core';
|
|
2
|
+
import type { JsonRequestOptions } from '../transport/json-request.js';
|
|
3
|
+
import { type CmsRecord } from './read.js';
|
|
4
|
+
type RequestConnection = Pick<Connection, 'request'>;
|
|
5
|
+
export type WorkspaceSelector = {
|
|
6
|
+
readonly workspaceId?: string;
|
|
7
|
+
readonly workspaceName?: string;
|
|
8
|
+
};
|
|
9
|
+
export type ResolvedWorkspace = {
|
|
10
|
+
readonly id: string;
|
|
11
|
+
readonly workspace: CmsRecord;
|
|
12
|
+
};
|
|
13
|
+
export declare function assertWorkspaceSelector(selector: WorkspaceSelector): void;
|
|
14
|
+
export declare function resolveWorkspace(connection: RequestConnection, selector: WorkspaceSelector, options?: JsonRequestOptions): Promise<ResolvedWorkspace>;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { getWorkspace, listWorkspaces } from './read.js';
|
|
2
|
+
const WORKSPACE_PAGE_SIZE = 100;
|
|
3
|
+
const WORKSPACE_PAGE_CAP = 1000;
|
|
4
|
+
function nonemptyString(value) {
|
|
5
|
+
return typeof value === 'string' && value.length > 0;
|
|
6
|
+
}
|
|
7
|
+
function workspaceIdentity(value) {
|
|
8
|
+
return nonemptyString(value.id) && nonemptyString(value.name)
|
|
9
|
+
? { id: value.id, name: value.name }
|
|
10
|
+
: undefined;
|
|
11
|
+
}
|
|
12
|
+
async function validatedWorkspace(connection, workspaceId, options) {
|
|
13
|
+
const workspace = await getWorkspace(connection, workspaceId, options);
|
|
14
|
+
if (workspace.id !== workspaceId) {
|
|
15
|
+
throw new Error(`Workspace validation returned ID ${String(workspace.id)} instead of selected ID ${workspaceId}.`);
|
|
16
|
+
}
|
|
17
|
+
return { id: workspaceId, workspace };
|
|
18
|
+
}
|
|
19
|
+
export function assertWorkspaceSelector(selector) {
|
|
20
|
+
const hasId = nonemptyString(selector.workspaceId);
|
|
21
|
+
const hasName = nonemptyString(selector.workspaceName);
|
|
22
|
+
if (hasId === hasName) {
|
|
23
|
+
throw new Error('Specify exactly one of --workspace-id or --workspace-name.');
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export async function resolveWorkspace(connection, selector, options = {}) {
|
|
27
|
+
assertWorkspaceSelector(selector);
|
|
28
|
+
if (nonemptyString(selector.workspaceId)) {
|
|
29
|
+
return validatedWorkspace(connection, selector.workspaceId, options);
|
|
30
|
+
}
|
|
31
|
+
const requestedName = selector.workspaceName;
|
|
32
|
+
const matches = new Map();
|
|
33
|
+
const observedIds = new Set();
|
|
34
|
+
const pageFingerprints = new Set();
|
|
35
|
+
for (let page = 0; page < WORKSPACE_PAGE_CAP; page += 1) {
|
|
36
|
+
const response = await listWorkspaces(connection, { nameFragment: requestedName, page, pageSize: WORKSPACE_PAGE_SIZE }, options);
|
|
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
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (matches.size === 0)
|
|
71
|
+
throw new Error(`No workspace has the exact name ${requestedName}.`);
|
|
72
|
+
if (matches.size > 1) {
|
|
73
|
+
throw new Error(`Workspace name ${requestedName} is ambiguous across IDs: ${[...matches.keys()].toSorted().join(', ')}. Use --workspace-id.`);
|
|
74
|
+
}
|
|
75
|
+
return validatedWorkspace(connection, [...matches.keys()][0], options);
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=resolve-workspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-workspace.js","sourceRoot":"","sources":["../../src/services/resolve-workspace.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,11 +4,15 @@ Experimentally export a CMS workspace using a read-only, best-effort process.
|
|
|
4
4
|
|
|
5
5
|
# description
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Selects one Marketing Cloud CMS workspace by exact ID or exact case-sensitive name and writes the variants observed by an experimental, best-effort search. Without --output-dir, the new destination is ./cms/<safe-workspace-name>. This is not a complete or guaranteed backup and does not mutate org data.
|
|
8
8
|
|
|
9
9
|
# examples
|
|
10
10
|
|
|
11
|
-
- Export
|
|
11
|
+
- Export by exact workspace name to ./cms/Main Site:
|
|
12
|
+
|
|
13
|
+
<%= config.bin %> <%= command.id %> --target-org my-org --workspace-name "Main Site"
|
|
14
|
+
|
|
15
|
+
- Export by workspace ID to an exact explicit directory:
|
|
12
16
|
|
|
13
17
|
<%= config.bin %> <%= command.id %> --target-org my-org --workspace-id 0Zu... --output-dir ./cms-export
|
|
14
18
|
|
|
@@ -22,8 +26,12 @@ Salesforce API version used for CMS requests.
|
|
|
22
26
|
|
|
23
27
|
# flags.workspace-id.summary
|
|
24
28
|
|
|
25
|
-
CMS workspace content-space ID.
|
|
29
|
+
Exact CMS workspace content-space ID.
|
|
30
|
+
|
|
31
|
+
# flags.workspace-name.summary
|
|
32
|
+
|
|
33
|
+
Exact case-sensitive CMS workspace name.
|
|
26
34
|
|
|
27
35
|
# flags.output-dir.summary
|
|
28
36
|
|
|
29
|
-
|
|
37
|
+
Exact new destination directory; defaults to ./cms/<safe-workspace-name>.
|
|
@@ -4,17 +4,17 @@ Safely plan or apply a create-only import into a CMS workspace.
|
|
|
4
4
|
|
|
5
5
|
# description
|
|
6
6
|
|
|
7
|
-
Validates
|
|
7
|
+
Validates the source workspace export locally before any org request, selects one destination workspace by exact ID or exact case-sensitive name, checks every content key for conflicts, and defaults to a non-mutating dry run. Pass --apply with a new --report-dir to create content.
|
|
8
8
|
|
|
9
9
|
# examples
|
|
10
10
|
|
|
11
|
-
- Validate and preflight an
|
|
11
|
+
- Validate a source export and preflight an exact destination workspace name:
|
|
12
12
|
|
|
13
|
-
<%= config.bin %> <%= command.id %> --target-org my-org --workspace-
|
|
13
|
+
<%= config.bin %> <%= command.id %> --target-org my-org --workspace-name "Destination" --source-dir ./cms/Source
|
|
14
14
|
|
|
15
|
-
- Apply
|
|
15
|
+
- Apply to an exact destination workspace ID and write a durable run report:
|
|
16
16
|
|
|
17
|
-
<%= config.bin %> <%= command.id %> --target-org my-org --workspace-id 0Zu... --source-dir ./cms
|
|
17
|
+
<%= config.bin %> <%= command.id %> --target-org my-org --workspace-id 0Zu... --source-dir ./cms/Source --apply --report-dir ./cms-import-report
|
|
18
18
|
|
|
19
19
|
# flags.target-org.summary
|
|
20
20
|
|
|
@@ -26,11 +26,15 @@ Salesforce API version used for CMS requests.
|
|
|
26
26
|
|
|
27
27
|
# flags.workspace-id.summary
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
Exact destination CMS workspace ID.
|
|
30
|
+
|
|
31
|
+
# flags.workspace-name.summary
|
|
32
|
+
|
|
33
|
+
Exact case-sensitive destination CMS workspace name.
|
|
30
34
|
|
|
31
35
|
# flags.source-dir.summary
|
|
32
36
|
|
|
33
|
-
|
|
37
|
+
Source workspace export containing manifest.json and items/.
|
|
34
38
|
|
|
35
39
|
# flags.apply.summary
|
|
36
40
|
|