sf-plugin-cms 0.3.0 → 0.4.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 +99 -14
- package/lib/command-base.d.ts +4 -0
- package/lib/command-base.js +34 -0
- package/lib/command-base.js.map +1 -1
- package/lib/commands/cms/export/workspace.d.ts +2 -1
- package/lib/commands/cms/export/workspace.js +31 -18
- package/lib/commands/cms/export/workspace.js.map +1 -1
- package/lib/commands/cms/import/workspace.d.ts +3 -1
- package/lib/commands/cms/import/workspace.js +43 -22
- package/lib/commands/cms/import/workspace.js.map +1 -1
- package/lib/commands/cms/info.d.ts +1 -1
- package/lib/commands/cms/info.js +11 -13
- package/lib/commands/cms/info.js.map +1 -1
- package/lib/runtime-version.d.ts +2 -0
- package/lib/runtime-version.js +18 -0
- package/lib/runtime-version.js.map +1 -0
- package/lib/services/atomic-publish.d.ts +15 -0
- package/lib/services/atomic-publish.js +109 -0
- package/lib/services/atomic-publish.js.map +1 -0
- package/lib/services/bulk-export-workspaces.js +12 -5
- package/lib/services/bulk-export-workspaces.js.map +1 -1
- package/lib/services/editable-raw-html-export.d.ts +26 -0
- package/lib/services/editable-raw-html-export.js +100 -0
- package/lib/services/editable-raw-html-export.js.map +1 -0
- package/lib/services/editable-raw-html-import.d.ts +25 -0
- package/lib/services/editable-raw-html-import.js +107 -0
- package/lib/services/editable-raw-html-import.js.map +1 -0
- package/lib/services/editable-raw-html.d.ts +34 -0
- package/lib/services/editable-raw-html.js +83 -0
- package/lib/services/editable-raw-html.js.map +1 -0
- package/lib/services/export-references.js +3 -1
- package/lib/services/export-references.js.map +1 -1
- package/lib/services/export-workspace.d.ts +8 -0
- package/lib/services/export-workspace.js +46 -15
- package/lib/services/export-workspace.js.map +1 -1
- package/lib/services/import-identities.d.ts +33 -0
- package/lib/services/import-identities.js +287 -0
- package/lib/services/import-identities.js.map +1 -0
- package/lib/services/import-workspace.d.ts +39 -0
- package/lib/services/import-workspace.js +316 -20
- package/lib/services/import-workspace.js.map +1 -1
- package/lib/services/resolve-workspace.d.ts +6 -1
- package/lib/services/resolve-workspace.js +51 -4
- package/lib/services/resolve-workspace.js.map +1 -1
- package/lib/services/variant-identity.d.ts +13 -0
- package/lib/services/variant-identity.js +34 -0
- package/lib/services/variant-identity.js.map +1 -0
- package/messages/cms.export.workspace.md +12 -2
- package/messages/cms.import.workspace.md +23 -3
- package/package.json +15 -5
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { lstat, mkdir, mkdtemp, writeFile } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { cleanupOwnedPath, publishDirectoryNoClobber, } from './atomic-publish.js';
|
|
4
|
+
import { projectEditableRawHtml } from './editable-raw-html.js';
|
|
5
|
+
/**
|
|
6
|
+
* Validate portable directory paths and reject observed symlink routes.
|
|
7
|
+
* @param {string} destination - Local directory path.
|
|
8
|
+
* @param {boolean} requireNew - Whether the final directory must not exist.
|
|
9
|
+
* @returns {Promise<void>} Resolves for a safe directory route.
|
|
10
|
+
*/
|
|
11
|
+
export async function assertEditableDirectoryPath(destination, requireNew = true) {
|
|
12
|
+
if (!destination.trim())
|
|
13
|
+
throw new TypeError('Editable export paths must be nonempty');
|
|
14
|
+
if (destination.startsWith('\\\\') || destination.startsWith('//')) {
|
|
15
|
+
throw new TypeError('Editable export paths must not use network or device namespaces');
|
|
16
|
+
}
|
|
17
|
+
// Reject path aliases before normalization, including Windows device/stream spellings.
|
|
18
|
+
for (const component of destination.slice(path.parse(destination).root.length).split(/[\\/]/u)) {
|
|
19
|
+
if (component === '' || component === '.')
|
|
20
|
+
continue;
|
|
21
|
+
if (component === '..' ||
|
|
22
|
+
/[. ]$/u.test(component) ||
|
|
23
|
+
/[<>:"|?*]/u.test(component) ||
|
|
24
|
+
[...component].some((character) => (character.codePointAt(0) ?? 0) < 32) ||
|
|
25
|
+
/^(?:con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\..*)?$/iu.test(component))
|
|
26
|
+
throw new TypeError('Unsafe editable export path component');
|
|
27
|
+
}
|
|
28
|
+
const absolute = path.resolve(destination);
|
|
29
|
+
let current = path.parse(absolute).root;
|
|
30
|
+
for (const component of absolute.slice(current.length).split(path.sep)) {
|
|
31
|
+
current = path.join(current, component);
|
|
32
|
+
let information;
|
|
33
|
+
try {
|
|
34
|
+
information = await lstat(current);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
if (error.code === 'ENOENT')
|
|
38
|
+
continue;
|
|
39
|
+
throw error;
|
|
40
|
+
}
|
|
41
|
+
if (information.isSymbolicLink() || !information.isDirectory()) {
|
|
42
|
+
throw new TypeError(`Export path must use regular directories, not symlinks or reparse points: ${current}`);
|
|
43
|
+
}
|
|
44
|
+
if (requireNew && current === absolute)
|
|
45
|
+
throw new Error(`Export destination already exists: ${destination}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Validate disjoint, new destinations without writes or org access.
|
|
50
|
+
* @param {string} outputDirectory - Explicit immutable package destination.
|
|
51
|
+
* @param {string} editableDirectory - Separate new companion destination.
|
|
52
|
+
* @returns {Promise<void>} Resolves when both local destinations are safe.
|
|
53
|
+
*/
|
|
54
|
+
export async function preflightEditableExport(outputDirectory, editableDirectory) {
|
|
55
|
+
const output = path.resolve(outputDirectory);
|
|
56
|
+
const editable = path.resolve(editableDirectory);
|
|
57
|
+
const contains = (parent, child) => {
|
|
58
|
+
const relative = path.relative(parent, child);
|
|
59
|
+
return (relative === '' ||
|
|
60
|
+
(!path.isAbsolute(relative) && relative !== '..' && !relative.startsWith(`..${path.sep}`)));
|
|
61
|
+
};
|
|
62
|
+
if (contains(output, editable) || contains(editable, output)) {
|
|
63
|
+
throw new TypeError('--output-dir and --editable-dir must not overlap');
|
|
64
|
+
}
|
|
65
|
+
await assertEditableDirectoryPath(outputDirectory);
|
|
66
|
+
await assertEditableDirectoryPath(editableDirectory);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Publish only the fixed companion paths from original raw variant JSON.
|
|
70
|
+
* @param {readonly EditableRawItem[]} rawItems - Verified original JSON paired with manifest IDs.
|
|
71
|
+
* @param {string} sourceManifestSha256 - Verified immutable manifest digest.
|
|
72
|
+
* @param {string} destination - New companion directory.
|
|
73
|
+
* @param {EditablePublishOptions} options - Atomic publication and cleanup hooks.
|
|
74
|
+
* @returns {Promise<void>} Resolves after no-clobber publication.
|
|
75
|
+
*/
|
|
76
|
+
export async function writeEditableRawHtml(rawItems, sourceManifestSha256, destination, options = {}) {
|
|
77
|
+
await assertEditableDirectoryPath(destination);
|
|
78
|
+
const projection = projectEditableRawHtml(rawItems, sourceManifestSha256);
|
|
79
|
+
const absolute = path.resolve(destination);
|
|
80
|
+
const parent = path.dirname(absolute);
|
|
81
|
+
await mkdir(parent, { recursive: true });
|
|
82
|
+
await assertEditableDirectoryPath(destination);
|
|
83
|
+
const temporary = await mkdtemp(path.join(parent, `.${path.basename(absolute)}.tmp-`));
|
|
84
|
+
try {
|
|
85
|
+
await mkdir(path.join(temporary, 'items'));
|
|
86
|
+
await writeFile(path.join(temporary, 'editable.json'), projection.descriptorBytes, {
|
|
87
|
+
flag: 'wx',
|
|
88
|
+
});
|
|
89
|
+
for (const item of projection.items) {
|
|
90
|
+
await writeFile(path.join(temporary, item.metadataPath), item.metadataBytes, { flag: 'wx' });
|
|
91
|
+
await writeFile(path.join(temporary, item.htmlPath), item.htmlBytes, { flag: 'wx' });
|
|
92
|
+
}
|
|
93
|
+
await assertEditableDirectoryPath(destination);
|
|
94
|
+
await publishDirectoryNoClobber(temporary, absolute, options);
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
await cleanupOwnedPath(temporary, error, options);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=editable-raw-html-export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editable-raw-html-export.js","sourceRoot":"","sources":["../../src/services/editable-raw-html-export.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type LoadedWorkspaceExport, type WorkspaceImportItem } from './import-workspace.js';
|
|
2
|
+
export type EditableHtmlEvidence = {
|
|
3
|
+
readonly contract: 'sf-cms-editable-raw-html';
|
|
4
|
+
readonly sourceManifestSha256: string;
|
|
5
|
+
readonly entries: readonly {
|
|
6
|
+
readonly variantId: string;
|
|
7
|
+
readonly originalHtmlSha256: string;
|
|
8
|
+
readonly currentHtmlSha256: string;
|
|
9
|
+
readonly changed: boolean;
|
|
10
|
+
}[];
|
|
11
|
+
};
|
|
12
|
+
export type LoadedEditableRawHtml = {
|
|
13
|
+
readonly items: readonly WorkspaceImportItem[];
|
|
14
|
+
readonly literalHtmlVariantIds: ReadonlySet<string>;
|
|
15
|
+
readonly editableSource: EditableHtmlEvidence;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Reverify the complete original export and reconstruct only declared literal HTML sidecars.
|
|
19
|
+
* Metadata and descriptor expectations always come from original raw JSON, not editable hashes.
|
|
20
|
+
* @param {LoadedWorkspaceExport} source - Complete original integrity-loaded package (not a selected/proposed view).
|
|
21
|
+
* @param {string} editableDirectory - Separate companion directory.
|
|
22
|
+
* @param {readonly string[]} selectedVariantIds - Selected original variants; defaults to the complete editable subset.
|
|
23
|
+
* @returns {Promise<LoadedEditableRawHtml>} Detached selected items, literal-input provenance, and all-companion edit inventory.
|
|
24
|
+
*/
|
|
25
|
+
export declare function loadEditableRawHtml(source: LoadedWorkspaceExport, editableDirectory: string, selectedVariantIds?: readonly string[]): Promise<LoadedEditableRawHtml>;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { isDeepStrictEqual } from 'node:util';
|
|
4
|
+
import { assertEditableDirectoryPath } from './editable-raw-html-export.js';
|
|
5
|
+
import { projectEditableRawHtml } from './editable-raw-html.js';
|
|
6
|
+
import { enumeratePackageFiles, loadWorkspaceExport, readStableRegularFile, } from './import-workspace.js';
|
|
7
|
+
function sha256(bytes) {
|
|
8
|
+
return createHash('sha256').update(bytes).digest('hex');
|
|
9
|
+
}
|
|
10
|
+
function utf8(bytes, label) {
|
|
11
|
+
if (bytes.subarray(0, 3).equals(Buffer.from('\uFEFF', 'utf8'))) {
|
|
12
|
+
throw new TypeError(`${label} must be UTF-8 without a BOM`);
|
|
13
|
+
}
|
|
14
|
+
try {
|
|
15
|
+
return new TextDecoder('utf-8', { fatal: true }).decode(bytes);
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
throw new TypeError(`${label} must contain valid UTF-8`, { cause: error });
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Reverify the complete original export and reconstruct only declared literal HTML sidecars.
|
|
23
|
+
* Metadata and descriptor expectations always come from original raw JSON, not editable hashes.
|
|
24
|
+
* @param {LoadedWorkspaceExport} source - Complete original integrity-loaded package (not a selected/proposed view).
|
|
25
|
+
* @param {string} editableDirectory - Separate companion directory.
|
|
26
|
+
* @param {readonly string[]} selectedVariantIds - Selected original variants; defaults to the complete editable subset.
|
|
27
|
+
* @returns {Promise<LoadedEditableRawHtml>} Detached selected items, literal-input provenance, and all-companion edit inventory.
|
|
28
|
+
*/
|
|
29
|
+
export async function loadEditableRawHtml(source, editableDirectory, selectedVariantIds) {
|
|
30
|
+
if (!source.integrity.verified)
|
|
31
|
+
throw new TypeError('Source integrity must be verified first');
|
|
32
|
+
await assertEditableDirectoryPath(source.sourceDirectory, false);
|
|
33
|
+
// Recheck all baseline files, including unselected items, before reading any editable input.
|
|
34
|
+
const baseline = await loadWorkspaceExport(source.sourceDirectory, {
|
|
35
|
+
allowPartial: source.isPartial,
|
|
36
|
+
});
|
|
37
|
+
if (baseline.manifestSha256 !== source.manifestSha256) {
|
|
38
|
+
throw new TypeError('Original source manifest changed since integrity loading');
|
|
39
|
+
}
|
|
40
|
+
const rawItems = [];
|
|
41
|
+
for (const entry of baseline.manifest.entries) {
|
|
42
|
+
const bytes = await readStableRegularFile(path.join(baseline.sourceDirectory, entry.file), `Original item ${entry.variantId}`);
|
|
43
|
+
const declared = baseline.manifest.items.find((item) => item.path === entry.file);
|
|
44
|
+
if (sha256(bytes) !== declared?.sha256) {
|
|
45
|
+
throw new TypeError(`Original item ${entry.variantId} failed SHA-256 verification`);
|
|
46
|
+
}
|
|
47
|
+
rawItems.push({
|
|
48
|
+
variantId: entry.variantId,
|
|
49
|
+
raw: JSON.parse(bytes.toString()),
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
const projection = projectEditableRawHtml(rawItems, baseline.manifestSha256);
|
|
53
|
+
await assertEditableDirectoryPath(editableDirectory, false);
|
|
54
|
+
const directory = path.resolve(editableDirectory);
|
|
55
|
+
const files = await enumeratePackageFiles(directory, directory);
|
|
56
|
+
const expectedFiles = [
|
|
57
|
+
'editable.json',
|
|
58
|
+
...projection.items.flatMap((item) => [item.metadataPath, item.htmlPath]),
|
|
59
|
+
].toSorted();
|
|
60
|
+
if (!isDeepStrictEqual(files, expectedFiles)) {
|
|
61
|
+
throw new TypeError('Editable companion contains missing, substituted, or unlisted regular files');
|
|
62
|
+
}
|
|
63
|
+
const descriptorBytes = await readStableRegularFile(path.join(directory, 'editable.json'), 'Editable descriptor');
|
|
64
|
+
const descriptor = JSON.parse(utf8(descriptorBytes, 'Editable descriptor'));
|
|
65
|
+
if (!isDeepStrictEqual(descriptor, projection.descriptor)) {
|
|
66
|
+
throw new TypeError('Editable descriptor does not match the verified original baseline');
|
|
67
|
+
}
|
|
68
|
+
const html = new Map();
|
|
69
|
+
const entries = [];
|
|
70
|
+
for (const item of projection.items) {
|
|
71
|
+
const metadata = await readStableRegularFile(path.join(directory, item.metadataPath), `Editable metadata ${item.variantId}`);
|
|
72
|
+
if (!metadata.equals(item.metadataBytes)) {
|
|
73
|
+
throw new TypeError(`Editable metadata ${item.variantId} differs from the original baseline; only HTML edits are supported`);
|
|
74
|
+
}
|
|
75
|
+
const bytes = await readStableRegularFile(path.join(directory, item.htmlPath), `Editable HTML ${item.variantId}`);
|
|
76
|
+
html.set(item.variantId, utf8(bytes, `Editable HTML ${item.variantId}`));
|
|
77
|
+
const originalHtmlSha256 = sha256(item.htmlBytes);
|
|
78
|
+
const currentHtmlSha256 = sha256(bytes);
|
|
79
|
+
entries.push({
|
|
80
|
+
variantId: item.variantId,
|
|
81
|
+
originalHtmlSha256,
|
|
82
|
+
currentHtmlSha256,
|
|
83
|
+
changed: currentHtmlSha256 !== originalHtmlSha256,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
const selected = selectedVariantIds ?? projection.items.map((item) => item.variantId);
|
|
87
|
+
if (new Set(selected).size !== selected.length)
|
|
88
|
+
throw new TypeError('Duplicate selected editable variant');
|
|
89
|
+
const items = selected.map((id) => {
|
|
90
|
+
const original = baseline.items.find((item) => item.id === id);
|
|
91
|
+
const rawHtml = html.get(id);
|
|
92
|
+
if (!original || rawHtml === undefined)
|
|
93
|
+
throw new TypeError(`Selected variant ${id} is missing from the editable companion`);
|
|
94
|
+
const detached = structuredClone(original);
|
|
95
|
+
return { ...detached, contentBody: { ...detached.contentBody, rawHtml } };
|
|
96
|
+
});
|
|
97
|
+
return {
|
|
98
|
+
items,
|
|
99
|
+
literalHtmlVariantIds: new Set(selected),
|
|
100
|
+
editableSource: {
|
|
101
|
+
contract: 'sf-cms-editable-raw-html',
|
|
102
|
+
sourceManifestSha256: baseline.manifestSha256,
|
|
103
|
+
entries,
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=editable-raw-html-import.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editable-raw-html-import.js","sourceRoot":"","sources":["../../src/services/editable-raw-html-import.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAwB,MAAM,wBAAwB,CAAC;AACtF,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,GAGtB,MAAM,uBAAuB,CAAC;AAmB/B,SAAS,MAAM,CAAC,KAAa;IAC3B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,IAAI,CAAC,KAAa,EAAE,KAAa;IACxC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,8BAA8B,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,2BAA2B,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAA6B,EAC7B,iBAAyB,EACzB,kBAAsC;IAEtC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ;QAAE,MAAM,IAAI,SAAS,CAAC,yCAAyC,CAAC,CAAC;IAC/F,MAAM,2BAA2B,CAAC,MAAM,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACjE,6FAA6F;IAC7F,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,MAAM,CAAC,eAAe,EAAE;QACjE,YAAY,EAAE,MAAM,CAAC,SAAS;KAC/B,CAAC,CAAC;IACH,IAAI,QAAQ,CAAC,cAAc,KAAK,MAAM,CAAC,cAAc,EAAE,CAAC;QACtD,MAAM,IAAI,SAAS,CAAC,0DAA0D,CAAC,CAAC;IAClF,CAAC;IACD,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,MAAM,qBAAqB,CACvC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,KAAK,CAAC,IAAI,CAAC,EAC/C,iBAAiB,KAAK,CAAC,SAAS,EAAE,CACnC,CAAC;QACF,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC;QAClF,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE,MAAM,EAAE,CAAC;YACvC,MAAM,IAAI,SAAS,CAAC,iBAAiB,KAAK,CAAC,SAAS,8BAA8B,CAAC,CAAC;QACtF,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC;YACZ,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAA4B;SAC7D,CAAC,CAAC;IACL,CAAC;IACD,MAAM,UAAU,GAAG,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IAC7E,MAAM,2BAA2B,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,MAAM,qBAAqB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAChE,MAAM,aAAa,GAAG;QACpB,eAAe;QACf,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC1E,CAAC,QAAQ,EAAE,CAAC;IACb,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,SAAS,CACjB,6EAA6E,CAC9E,CAAC;IACJ,CAAC;IACD,MAAM,eAAe,GAAG,MAAM,qBAAqB,CACjD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,EACrC,qBAAqB,CACtB,CAAC;IACF,MAAM,UAAU,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,qBAAqB,CAAC,CAAC,CAAC;IACrF,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,SAAS,CAAC,mEAAmE,CAAC,CAAC;IAC3F,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,MAAM,OAAO,GAA8C,EAAE,CAAC;IAC9D,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAC1C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,EACvC,qBAAqB,IAAI,CAAC,SAAS,EAAE,CACtC,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,SAAS,CACjB,qBAAqB,IAAI,CAAC,SAAS,oEAAoE,CACxG,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,qBAAqB,CACvC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,EACnC,iBAAiB,IAAI,CAAC,SAAS,EAAE,CAClC,CAAC;QACF,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,iBAAiB,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACzE,MAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClD,MAAM,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,kBAAkB;YAClB,iBAAiB;YACjB,OAAO,EAAE,iBAAiB,KAAK,kBAAkB;SAClD,CAAC,CAAC;IACL,CAAC;IACD,MAAM,QAAQ,GAAG,kBAAkB,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtF,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,MAAM;QAC5C,MAAM,IAAI,SAAS,CAAC,qCAAqC,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QAChC,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,QAAQ,IAAI,OAAO,KAAK,SAAS;YACpC,MAAM,IAAI,SAAS,CAAC,oBAAoB,EAAE,yCAAyC,CAAC,CAAC;QACvF,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC3C,OAAO,EAAE,GAAG,QAAQ,EAAE,WAAW,EAAE,EAAE,GAAG,QAAQ,CAAC,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;IAC5E,CAAC,CAAC,CAAC;IACH,OAAO;QACL,KAAK;QACL,qBAAqB,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC;QACxC,cAAc,EAAE;YACd,QAAQ,EAAE,0BAA0B;YACpC,oBAAoB,EAAE,QAAQ,CAAC,cAAc;YAC7C,OAAO;SACR;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export type EditableRawItem = {
|
|
2
|
+
readonly variantId: string;
|
|
3
|
+
readonly raw: Readonly<Record<string, unknown>>;
|
|
4
|
+
};
|
|
5
|
+
export type EditableRawHtmlEntry = {
|
|
6
|
+
readonly variantId: string;
|
|
7
|
+
readonly metadataSha256: string;
|
|
8
|
+
readonly originalHtmlSha256: string;
|
|
9
|
+
};
|
|
10
|
+
export type EditableRawHtmlDescriptor = {
|
|
11
|
+
readonly contract: 'sf-cms-editable-raw-html';
|
|
12
|
+
readonly contractVersion: '1.0.0';
|
|
13
|
+
readonly sourceManifestSha256: string;
|
|
14
|
+
readonly entries: readonly EditableRawHtmlEntry[];
|
|
15
|
+
};
|
|
16
|
+
export type EditableRawHtmlProjection = {
|
|
17
|
+
readonly descriptor: EditableRawHtmlDescriptor;
|
|
18
|
+
readonly descriptorBytes: Buffer;
|
|
19
|
+
readonly items: readonly {
|
|
20
|
+
readonly variantId: string;
|
|
21
|
+
readonly metadataPath: string;
|
|
22
|
+
readonly htmlPath: string;
|
|
23
|
+
readonly metadataBytes: Buffer;
|
|
24
|
+
readonly htmlBytes: Buffer;
|
|
25
|
+
}[];
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Project the native raw-HTML subset of verified original variant JSON without changing it.
|
|
29
|
+
* This is not an integrity loader or a native-copy readiness check.
|
|
30
|
+
* @param {readonly EditableRawItem[]} rawItems - Manifest IDs paired with original parsed JSON, never normalized import items.
|
|
31
|
+
* @param {string} sourceManifestSha256 - SHA-256 of the verified original manifest bytes.
|
|
32
|
+
* @returns {EditableRawHtmlProjection} Deterministic companion descriptor and fixed-path UTF-8 file bytes.
|
|
33
|
+
*/
|
|
34
|
+
export declare function projectEditableRawHtml(rawItems: readonly EditableRawItem[], sourceManifestSha256: string): EditableRawHtmlProjection;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { decodeNativeHtml } from './import-identities.js';
|
|
3
|
+
import { variantIdentity } from './variant-identity.js';
|
|
4
|
+
function record(value) {
|
|
5
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
6
|
+
}
|
|
7
|
+
function jsonBytes(value) {
|
|
8
|
+
return Buffer.from(`${JSON.stringify(value, null, 2)}\n`, 'utf8');
|
|
9
|
+
}
|
|
10
|
+
function sha256(value) {
|
|
11
|
+
return createHash('sha256').update(value).digest('hex');
|
|
12
|
+
}
|
|
13
|
+
function literalHtml(value) {
|
|
14
|
+
// Literal HTML may itself contain entities: never decode those a second time.
|
|
15
|
+
if (value.includes('<'))
|
|
16
|
+
return value;
|
|
17
|
+
if (value.includes('&') &&
|
|
18
|
+
(!value.includes('<') || value.replaceAll(/&(?:lt|gt|quot|amp|#39);/gu, '').includes('&'))) {
|
|
19
|
+
throw new TypeError('Unsupported or ambiguous rawHtml encoding; expected literal HTML or one GET entity layer');
|
|
20
|
+
}
|
|
21
|
+
return decodeNativeHtml(value);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Project the native raw-HTML subset of verified original variant JSON without changing it.
|
|
25
|
+
* This is not an integrity loader or a native-copy readiness check.
|
|
26
|
+
* @param {readonly EditableRawItem[]} rawItems - Manifest IDs paired with original parsed JSON, never normalized import items.
|
|
27
|
+
* @param {string} sourceManifestSha256 - SHA-256 of the verified original manifest bytes.
|
|
28
|
+
* @returns {EditableRawHtmlProjection} Deterministic companion descriptor and fixed-path UTF-8 file bytes.
|
|
29
|
+
*/
|
|
30
|
+
export function projectEditableRawHtml(rawItems, sourceManifestSha256) {
|
|
31
|
+
if (!/^[a-f0-9]{64}$/u.test(sourceManifestSha256)) {
|
|
32
|
+
throw new TypeError('Expected original manifest SHA-256');
|
|
33
|
+
}
|
|
34
|
+
const seen = new Set();
|
|
35
|
+
const items = [];
|
|
36
|
+
for (const { variantId, raw } of rawItems) {
|
|
37
|
+
if (!/^[A-Za-z0-9_-]+$/u.test(variantId) ||
|
|
38
|
+
/^(?:con|prn|aux|nul|com[1-9]|lpt[1-9])$/iu.test(variantId)) {
|
|
39
|
+
throw new TypeError('Unsafe editable variant ID');
|
|
40
|
+
}
|
|
41
|
+
if (seen.has(variantId))
|
|
42
|
+
throw new TypeError('Duplicate editable variant ID');
|
|
43
|
+
seen.add(variantId);
|
|
44
|
+
variantIdentity(raw, variantId);
|
|
45
|
+
const contentType = record(raw.contentType)
|
|
46
|
+
? raw.contentType.fullyQualifiedName
|
|
47
|
+
: raw.contentType;
|
|
48
|
+
const body = raw.contentBody;
|
|
49
|
+
if (!['sfdc_cms__email', 'sfdc_cms__emailTemplate'].includes(contentType) ||
|
|
50
|
+
!record(body) ||
|
|
51
|
+
typeof body.rawHtml !== 'string' ||
|
|
52
|
+
'sfdc_cms:block' in body)
|
|
53
|
+
continue;
|
|
54
|
+
const metadataBody = { ...body };
|
|
55
|
+
delete metadataBody.rawHtml;
|
|
56
|
+
items.push({
|
|
57
|
+
variantId,
|
|
58
|
+
metadataPath: `items/${variantId}.json`,
|
|
59
|
+
htmlPath: `items/${variantId}.html`,
|
|
60
|
+
metadataBytes: jsonBytes({ ...raw, contentBody: metadataBody }),
|
|
61
|
+
htmlBytes: Buffer.from(literalHtml(body.rawHtml), 'utf8'),
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
if (items.length === 0)
|
|
65
|
+
throw new TypeError('No editable native raw-HTML variants');
|
|
66
|
+
items.sort((left, right) => {
|
|
67
|
+
if (left.variantId < right.variantId)
|
|
68
|
+
return -1;
|
|
69
|
+
return left.variantId > right.variantId ? 1 : 0;
|
|
70
|
+
});
|
|
71
|
+
const descriptor = {
|
|
72
|
+
contract: 'sf-cms-editable-raw-html',
|
|
73
|
+
contractVersion: '1.0.0',
|
|
74
|
+
sourceManifestSha256,
|
|
75
|
+
entries: items.map(({ variantId, metadataBytes, htmlBytes }) => ({
|
|
76
|
+
variantId,
|
|
77
|
+
metadataSha256: sha256(metadataBytes),
|
|
78
|
+
originalHtmlSha256: sha256(htmlBytes),
|
|
79
|
+
})),
|
|
80
|
+
};
|
|
81
|
+
return { descriptor, descriptorBytes: jsonBytes(descriptor), items };
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=editable-raw-html.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editable-raw-html.js","sourceRoot":"","sources":["../../src/services/editable-raw-html.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAgCxD,SAAS,MAAM,CAAC,KAAc;IAC5B,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,MAAM,CAAC,KAAa;IAC3B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,8EAA8E;IAC9E,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,IACE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QACnB,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,4BAA4B,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAC7F,CAAC;QACD,MAAM,IAAI,SAAS,CACjB,0FAA0F,CAC3F,CAAC;IACJ,CAAC;IACD,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CACpC,QAAoC,EACpC,oBAA4B;IAE5B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC;IAC5D,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,KAAK,GAAiD,EAAE,CAAC;IAC/D,KAAK,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC1C,IACE,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC;YACpC,2CAA2C,CAAC,IAAI,CAAC,SAAS,CAAC,EAC3D,CAAC;YACD,MAAM,IAAI,SAAS,CAAC,4BAA4B,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,+BAA+B,CAAC,CAAC;QAC9E,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACpB,eAAe,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAChC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC;YACzC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,kBAAkB;YACpC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC;QACpB,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC;QAC7B,IACE,CAAC,CAAC,iBAAiB,EAAE,yBAAyB,CAAC,CAAC,QAAQ,CAAC,WAAqB,CAAC;YAC/E,CAAC,MAAM,CAAC,IAAI,CAAC;YACb,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ;YAChC,gBAAgB,IAAI,IAAI;YAExB,SAAS;QACX,MAAM,YAAY,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;QACjC,OAAO,YAAY,CAAC,OAAO,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC;YACT,SAAS;YACT,YAAY,EAAE,SAAS,SAAS,OAAO;YACvC,QAAQ,EAAE,SAAS,SAAS,OAAO;YACnC,aAAa,EAAE,SAAS,CAAC,EAAE,GAAG,GAAG,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;YAC/D,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;SAC1D,CAAC,CAAC;IACL,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;IACpF,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACzB,IAAI,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS;YAAE,OAAO,CAAC,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IACH,MAAM,UAAU,GAA8B;QAC5C,QAAQ,EAAE,0BAA0B;QACpC,eAAe,EAAE,OAAO;QACxB,oBAAoB;QACpB,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;YAC/D,SAAS;YACT,cAAc,EAAE,MAAM,CAAC,aAAa,CAAC;YACrC,kBAAkB,EAAE,MAAM,CAAC,SAAS,CAAC;SACtC,CAAC,CAAC;KACJ,CAAC;IACF,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,SAAS,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC;AACvE,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createHash } from 'node:crypto';
|
|
2
|
+
import { variantIdentity } from './variant-identity.js';
|
|
2
3
|
function nonemptyString(value) {
|
|
3
4
|
return typeof value === 'string' && value.length > 0;
|
|
4
5
|
}
|
|
@@ -57,10 +58,11 @@ export function inventoryExportReferences(workspaceId, details) {
|
|
|
57
58
|
variantIds: [variantId],
|
|
58
59
|
});
|
|
59
60
|
}
|
|
61
|
+
const identity = variantIdentity(detail, variantId);
|
|
60
62
|
if (!nonemptyString(detail.contentKey))
|
|
61
63
|
continue;
|
|
62
64
|
candidates.push({
|
|
63
|
-
contentId:
|
|
65
|
+
contentId: identity.contentId,
|
|
64
66
|
contentKey: detail.contentKey,
|
|
65
67
|
variantId,
|
|
66
68
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export-references.js","sourceRoot":"","sources":["../../src/services/export-references.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"export-references.js","sourceRoot":"","sources":["../../src/services/export-references.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import type { Connection } from '@salesforce/core';
|
|
2
|
+
import { mkdtemp } from 'node:fs/promises';
|
|
2
3
|
import { type WorkspaceExportManifest } from '../contracts/workspace-export.js';
|
|
3
4
|
export type { WorkspaceExportManifest } from '../contracts/workspace-export.js';
|
|
4
5
|
import { type JsonRequestOptions } from '../transport/json-request.js';
|
|
6
|
+
import { type CleanupOptions, type DirectoryPublishOptions } from './atomic-publish.js';
|
|
7
|
+
import { type EditablePublishOptions } from './editable-raw-html-export.js';
|
|
5
8
|
export type WorkspaceExportWarning = {
|
|
6
9
|
code: 'COUNT_MISMATCH' | 'DETAIL_FAILED' | 'DUPLICATE_VARIANTS' | 'OWNERSHIP_MISMATCH' | 'PREMATURE_EMPTY_PAGE' | 'REFERENCE_UNRESOLVED' | 'REFERENCE_UNSUPPORTED' | 'UNSUPPORTED_WILDCARD';
|
|
7
10
|
message: string;
|
|
@@ -20,6 +23,11 @@ export type ExportWorkspaceOptions = JsonRequestOptions & {
|
|
|
20
23
|
sourceOrgId?: string;
|
|
21
24
|
pluginVersion?: string;
|
|
22
25
|
generatedAt?: string;
|
|
26
|
+
editableDirectory?: string;
|
|
27
|
+
editablePublish?: EditablePublishOptions;
|
|
28
|
+
atomicPublish?: DirectoryPublishOptions & CleanupOptions & {
|
|
29
|
+
readonly makeTemporaryDirectory?: typeof mkdtemp;
|
|
30
|
+
};
|
|
23
31
|
};
|
|
24
32
|
type RequestConnection = Pick<Connection, 'request'>;
|
|
25
33
|
export declare function safeWorkspaceDirectoryName(workspaceName: string): string;
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { createHash } from 'node:crypto';
|
|
2
|
-
import { lstat, mkdir, open, readdir, readFile,
|
|
2
|
+
import { lstat, mkdir, mkdtemp, open, readdir, readFile, stat } from 'node:fs/promises';
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import { assertWorkspaceExportManifest, WORKSPACE_EXPORT_MANIFEST_CONTRACT, } from '../contracts/workspace-export.js';
|
|
5
5
|
import { getSelectedOperation, requestJson, } from '../transport/json-request.js';
|
|
6
|
+
import { getPluginVersion } from '../runtime-version.js';
|
|
7
|
+
import { cleanupOwnedPath, publishDirectoryNoClobber, } from './atomic-publish.js';
|
|
6
8
|
import { inventoryExportReferences } from './export-references.js';
|
|
9
|
+
import { preflightEditableExport, writeEditableRawHtml, } from './editable-raw-html-export.js';
|
|
7
10
|
import { getVariant } from './read.js';
|
|
8
11
|
const PAGE_SIZE = 250;
|
|
9
12
|
const ABSOLUTE_PAGE_CAP = 1000;
|
|
@@ -14,17 +17,20 @@ function nonemptyString(value) {
|
|
|
14
17
|
return typeof value === 'string' && value.length > 0;
|
|
15
18
|
}
|
|
16
19
|
function responseItems(value) {
|
|
17
|
-
|
|
20
|
+
if (!isRecord(value) || !Array.isArray(value.items)) {
|
|
21
|
+
throw new TypeError('Workspace variant search response must contain an items array.');
|
|
22
|
+
}
|
|
23
|
+
return value.items;
|
|
18
24
|
}
|
|
19
25
|
function responseCount(value) {
|
|
20
|
-
if (
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
+
if (isRecord(value)) {
|
|
27
|
+
for (const key of ['total', 'totalCount', 'count']) {
|
|
28
|
+
const count = value[key];
|
|
29
|
+
if (typeof count === 'number' && Number.isInteger(count) && count >= 0)
|
|
30
|
+
return count;
|
|
31
|
+
}
|
|
26
32
|
}
|
|
27
|
-
|
|
33
|
+
throw new TypeError('Workspace variant search response must contain a nonnegative integer count.');
|
|
28
34
|
}
|
|
29
35
|
function searchRow(value) {
|
|
30
36
|
if (!isRecord(value))
|
|
@@ -120,6 +126,9 @@ export async function exportWorkspace(connection, workspaceId, destination, opti
|
|
|
120
126
|
throw new TypeError('workspaceId must be a nonempty string');
|
|
121
127
|
if (!nonemptyString(destination))
|
|
122
128
|
throw new TypeError('destination must be a nonempty string');
|
|
129
|
+
if (options.editableDirectory !== undefined) {
|
|
130
|
+
await preflightEditableExport(destination, options.editableDirectory);
|
|
131
|
+
}
|
|
123
132
|
if (await exists(destination))
|
|
124
133
|
throw new Error(`Export destination already exists: ${destination}`);
|
|
125
134
|
const warnings = [
|
|
@@ -271,7 +280,7 @@ export async function exportWorkspace(connection, workspaceId, destination, opti
|
|
|
271
280
|
producer: 'sf-plugin-cms',
|
|
272
281
|
sourceOrgId: options.sourceOrgId ?? 'unknown-org',
|
|
273
282
|
sourceWorkspaceId: workspaceId,
|
|
274
|
-
pluginVersion: options.pluginVersion ??
|
|
283
|
+
pluginVersion: options.pluginVersion ?? getPluginVersion(),
|
|
275
284
|
generatedAt: options.generatedAt ?? new Date().toISOString(),
|
|
276
285
|
},
|
|
277
286
|
completeness,
|
|
@@ -280,24 +289,46 @@ export async function exportWorkspace(connection, workspaceId, destination, opti
|
|
|
280
289
|
items: manifestItems,
|
|
281
290
|
};
|
|
282
291
|
assertWorkspaceExportManifest(manifest);
|
|
292
|
+
if (options.editableDirectory !== undefined) {
|
|
293
|
+
await preflightEditableExport(destination, options.editableDirectory);
|
|
294
|
+
}
|
|
283
295
|
const parent = path.dirname(destination);
|
|
284
296
|
await mkdir(parent, { recursive: true });
|
|
285
|
-
const temporary = path.join(parent, `.${path.basename(destination)}.tmp
|
|
297
|
+
const temporary = await (options.atomicPublish?.makeTemporaryDirectory ?? mkdtemp)(path.join(parent, `.${path.basename(destination)}.tmp-`));
|
|
286
298
|
try {
|
|
287
|
-
await mkdir(temporary);
|
|
288
299
|
await mkdir(path.join(temporary, 'items'));
|
|
289
300
|
for (const entry of entries) {
|
|
290
301
|
await writeExclusive(path.join(temporary, entry.file), details.get(entry.variantId));
|
|
291
302
|
}
|
|
292
303
|
await assertRegularPackageFiles(temporary, new Set(manifest.items.map(({ path }) => path)));
|
|
293
304
|
await writeExclusive(path.join(temporary, 'manifest.json'), manifest);
|
|
294
|
-
await
|
|
305
|
+
await publishDirectoryNoClobber(temporary, destination, options.atomicPublish);
|
|
295
306
|
}
|
|
296
307
|
catch (error) {
|
|
297
|
-
await
|
|
298
|
-
throw error;
|
|
308
|
+
await cleanupOwnedPath(temporary, error, options.atomicPublish);
|
|
299
309
|
}
|
|
300
310
|
const manifestSha256 = sha256(await readFile(path.join(destination, 'manifest.json')));
|
|
311
|
+
if (options.editableDirectory !== undefined) {
|
|
312
|
+
try {
|
|
313
|
+
await assertRegularPackageFiles(destination, new Set(manifest.items.map(({ path }) => path)));
|
|
314
|
+
if (manifestSha256 !== sha256(jsonBytes(manifest)))
|
|
315
|
+
throw new Error('Published manifest changed');
|
|
316
|
+
const rawItems = [];
|
|
317
|
+
for (const [index, entry] of entries.entries()) {
|
|
318
|
+
const bytes = await readFile(path.join(destination, entry.file));
|
|
319
|
+
if (sha256(bytes) !== manifest.items[index].sha256)
|
|
320
|
+
throw new Error('Published variant changed');
|
|
321
|
+
rawItems.push({
|
|
322
|
+
variantId: entry.variantId,
|
|
323
|
+
raw: JSON.parse(bytes.toString('utf8')),
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
await writeEditableRawHtml(rawItems, manifestSha256, options.editableDirectory, options.editablePublish);
|
|
327
|
+
}
|
|
328
|
+
catch (error) {
|
|
329
|
+
throw new Error(`Baseline export retained at ${destination}; editable output unavailable: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
|
|
330
|
+
}
|
|
331
|
+
}
|
|
301
332
|
return { destination, manifest, manifestSha256 };
|
|
302
333
|
}
|
|
303
334
|
//# sourceMappingURL=export-workspace.js.map
|
|
@@ -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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"}
|