sf-plugin-cms 0.3.1 → 0.5.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.
Files changed (79) hide show
  1. package/README.md +334 -28
  2. package/lib/commands/cms/export/workspace.d.ts +6 -1
  3. package/lib/commands/cms/export/workspace.js +80 -3
  4. package/lib/commands/cms/export/workspace.js.map +1 -1
  5. package/lib/commands/cms/import/workspace.d.ts +14 -4
  6. package/lib/commands/cms/import/workspace.js +199 -24
  7. package/lib/commands/cms/import/workspace.js.map +1 -1
  8. package/lib/commands/cms/info.js +21 -2
  9. package/lib/commands/cms/info.js.map +1 -1
  10. package/lib/contracts/info.d.ts +7 -4
  11. package/lib/contracts/info.js +17 -8
  12. package/lib/contracts/info.js.map +1 -1
  13. package/lib/contracts/shared.d.ts +2 -1
  14. package/lib/contracts/shared.js +11 -3
  15. package/lib/contracts/shared.js.map +1 -1
  16. package/lib/contracts/workspace-export.d.ts +23 -3
  17. package/lib/contracts/workspace-export.js +118 -5
  18. package/lib/contracts/workspace-export.js.map +1 -1
  19. package/lib/contracts/workspace-import.d.ts +64 -0
  20. package/lib/contracts/workspace-import.js +119 -0
  21. package/lib/contracts/workspace-import.js.map +1 -1
  22. package/lib/index.d.ts +3 -1
  23. package/lib/index.js +2 -0
  24. package/lib/index.js.map +1 -1
  25. package/lib/services/bulk-export-workspaces.js +10 -4
  26. package/lib/services/bulk-export-workspaces.js.map +1 -1
  27. package/lib/services/editable-raw-html-export.d.ts +26 -0
  28. package/lib/services/editable-raw-html-export.js +100 -0
  29. package/lib/services/editable-raw-html-export.js.map +1 -0
  30. package/lib/services/editable-raw-html-import.d.ts +25 -0
  31. package/lib/services/editable-raw-html-import.js +107 -0
  32. package/lib/services/editable-raw-html-import.js.map +1 -0
  33. package/lib/services/editable-raw-html.d.ts +34 -0
  34. package/lib/services/editable-raw-html.js +83 -0
  35. package/lib/services/editable-raw-html.js.map +1 -0
  36. package/lib/services/email-fragment.d.ts +15 -0
  37. package/lib/services/email-fragment.js +199 -0
  38. package/lib/services/email-fragment.js.map +1 -0
  39. package/lib/services/export-references.js +3 -1
  40. package/lib/services/export-references.js.map +1 -1
  41. package/lib/services/export-workspace.d.ts +16 -1
  42. package/lib/services/export-workspace.js +222 -15
  43. package/lib/services/export-workspace.js.map +1 -1
  44. package/lib/services/image-import.d.ts +91 -0
  45. package/lib/services/image-import.js +579 -0
  46. package/lib/services/image-import.js.map +1 -0
  47. package/lib/services/import-identities.d.ts +33 -0
  48. package/lib/services/import-identities.js +287 -0
  49. package/lib/services/import-identities.js.map +1 -0
  50. package/lib/services/import-workspace.d.ts +50 -1
  51. package/lib/services/import-workspace.js +445 -21
  52. package/lib/services/import-workspace.js.map +1 -1
  53. package/lib/services/landing-page-template.d.ts +52 -0
  54. package/lib/services/landing-page-template.js +421 -0
  55. package/lib/services/landing-page-template.js.map +1 -0
  56. package/lib/services/landing-page.d.ts +43 -0
  57. package/lib/services/landing-page.js +117 -0
  58. package/lib/services/landing-page.js.map +1 -0
  59. package/lib/services/resolve-workspace.d.ts +6 -1
  60. package/lib/services/resolve-workspace.js +51 -4
  61. package/lib/services/resolve-workspace.js.map +1 -1
  62. package/lib/services/variant-identity.d.ts +13 -0
  63. package/lib/services/variant-identity.js +34 -0
  64. package/lib/services/variant-identity.js.map +1 -0
  65. package/lib/services/web-fragment.d.ts +41 -0
  66. package/lib/services/web-fragment.js +245 -0
  67. package/lib/services/web-fragment.js.map +1 -0
  68. package/lib/transport/experimental-media.d.ts +30 -0
  69. package/lib/transport/experimental-media.js +224 -0
  70. package/lib/transport/experimental-media.js.map +1 -0
  71. package/lib/transport/json-request.d.ts +9 -1
  72. package/lib/transport/json-request.js +30 -3
  73. package/lib/transport/json-request.js.map +1 -1
  74. package/lib/transport/multipart-image-create.d.ts +28 -0
  75. package/lib/transport/multipart-image-create.js +189 -0
  76. package/lib/transport/multipart-image-create.js.map +1 -0
  77. package/messages/cms.export.workspace.md +12 -2
  78. package/messages/cms.import.workspace.md +29 -3
  79. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editable-raw-html-import.js","sourceRoot":"","sources":["../../src/services/editable-raw-html-import.ts"],"names":[],"mappings":"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"}
@@ -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('&lt;') || 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":"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"}
@@ -0,0 +1,15 @@
1
+ import type { LoadedWorkspaceExport, WorkspaceImportItem } from './import-workspace.js';
2
+ import type { PlannedImportIdentities } from './import-identities.js';
3
+ /**
4
+ * Validate the first evidenced, create-only email-fragment body shape.
5
+ * @param {WorkspaceImportItem} item - Integrity-verified import item to validate.
6
+ * @returns {void}
7
+ */
8
+ export declare function assertEmailFragmentItem(item: WorkspaceImportItem): void;
9
+ /**
10
+ * Plan detached fresh identities for one default-language email-fragment variant per parent.
11
+ * @param {LoadedWorkspaceExport} source - Integrity-verified original workspace export.
12
+ * @param {unknown} input - Explicit selected source and fresh target identities.
13
+ * @returns {PlannedImportIdentities} Detached bounded fragment proposal.
14
+ */
15
+ export declare function planEmailFragmentCopies(source: LoadedWorkspaceExport, input: unknown): PlannedImportIdentities;
@@ -0,0 +1,199 @@
1
+ import { isDeepStrictEqual } from 'node:util';
2
+ const EMAIL_FRAGMENT_TYPE = 'sfdc_cms__emailFragment';
3
+ const BLOCK_KEY = 'sfdc_cms:block';
4
+ const TITLE_KEY = 'sfdc_cms:title';
5
+ const URL_NAME_KEY = 'sfdc_cms:urlName';
6
+ const BODY_KEYS = [
7
+ 'backgroundColor',
8
+ 'lightning:backgroundImage',
9
+ 'lightning:brandSource',
10
+ 'lightning:colorScheme',
11
+ 'lightning:dataProviders',
12
+ 'lightning:expressions',
13
+ 'lightning:padding',
14
+ 'sfdc_cms:attachments',
15
+ BLOCK_KEY,
16
+ TITLE_KEY,
17
+ URL_NAME_KEY,
18
+ 'sfdc_cms:variants',
19
+ ];
20
+ const COMPONENT_DEFINITIONS = {
21
+ root: 'sfdc_cms/rootContentBlock',
22
+ section: 'lightning/section',
23
+ column: 'lightning/column',
24
+ };
25
+ const BACKGROUND_IMAGE = { position: 'center center', repeat: 'no-repeat', size: 'cover' };
26
+ const SECTION_ATTRIBUTES = {
27
+ 'lightning:backgroundImage': BACKGROUND_IMAGE,
28
+ 'lightning:borderRadius': '{!$brand.borderRadius.square}',
29
+ 'lightning:borderWidth': '{!$brand.borderWeight.none}',
30
+ 'lightning:colorScheme': '{!$brand.colorScheme}',
31
+ 'lightning:margin': '{!$brand.spacing.none}',
32
+ 'lightning:padding': '{!$brand.spacing.xSmall}',
33
+ reverseOrderOnMobile: false,
34
+ stackOnMobile: true,
35
+ };
36
+ const COLUMN_ATTRIBUTES = {
37
+ 'lightning:backgroundImage': BACKGROUND_IMAGE,
38
+ 'lightning:borderRadius': '{!$brand.borderRadius.square}',
39
+ 'lightning:borderWidth': '{!$brand.borderWeight.none}',
40
+ 'lightning:colorScheme': '{!$brand.colorScheme}',
41
+ 'lightning:margin': '{!$brand.spacing.none}',
42
+ 'lightning:padding': '{!$brand.spacing.xSmall}',
43
+ columnWidth: 12,
44
+ 'lightning:verticalAlignment': 'top',
45
+ };
46
+ function record(value) {
47
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
48
+ }
49
+ function identity(value, label) {
50
+ if (typeof value !== 'string' || !/^[A-Za-z0-9_-]+$/u.test(value)) {
51
+ throw new TypeError(`${label} must be a nonempty identifier without whitespace or separators`);
52
+ }
53
+ }
54
+ function exactKeys(value, keys, label) {
55
+ if (Object.keys(value).toSorted().join('\0') !== [...keys].toSorted().join('\0')) {
56
+ throw new TypeError(`${label} must contain exactly ${keys.join(', ')}`);
57
+ }
58
+ }
59
+ function exactValue(value, expected, label) {
60
+ if (!isDeepStrictEqual(value, expected)) {
61
+ throw new TypeError(`${label} must match the evidenced dependency-free profile`);
62
+ }
63
+ }
64
+ function emptyArray(value, label) {
65
+ if (!Array.isArray(value) || value.length > 0) {
66
+ throw new TypeError(`${label} must be an empty array`);
67
+ }
68
+ }
69
+ function children(value, label) {
70
+ if (!Array.isArray(value.children))
71
+ throw new TypeError(`${label}.children must be an array`);
72
+ return value.children;
73
+ }
74
+ function assertComponent(value, expected, label) {
75
+ if (!record(value))
76
+ throw new TypeError(`${label} must be an object`);
77
+ const expectedKeys = expected === 'root'
78
+ ? ['children', 'definition', 'id', 'type']
79
+ : ['attributes', 'children', 'definition', 'id', 'type'];
80
+ exactKeys(value, expectedKeys, label);
81
+ if (value.definition !== COMPONENT_DEFINITIONS[expected] || value.type !== 'block') {
82
+ throw new TypeError(`${label} must use exact definition ${COMPONENT_DEFINITIONS[expected]} and type block`);
83
+ }
84
+ identity(value.id, `${label}.id`);
85
+ if (expected !== 'root') {
86
+ exactValue(value.attributes, expected === 'section' ? SECTION_ATTRIBUTES : COLUMN_ATTRIBUTES, `${label}.attributes`);
87
+ }
88
+ return value;
89
+ }
90
+ /**
91
+ * Validate the first evidenced, create-only email-fragment body shape.
92
+ * @param {WorkspaceImportItem} item - Integrity-verified import item to validate.
93
+ * @returns {void}
94
+ */
95
+ export function assertEmailFragmentItem(item) {
96
+ if (item.contentType !== EMAIL_FRAGMENT_TYPE) {
97
+ throw new TypeError(`Email fragment profile requires exact content type ${EMAIL_FRAGMENT_TYPE}`);
98
+ }
99
+ if (typeof item.apiName !== 'string' || item.apiName.length === 0 || item.title.length === 0) {
100
+ throw new TypeError('Email fragment identity and title are required');
101
+ }
102
+ exactKeys(item.contentBody, BODY_KEYS, 'Email fragment contentBody');
103
+ if (typeof item.contentBody[TITLE_KEY] !== 'string' || item.contentBody[TITLE_KEY].length === 0) {
104
+ throw new TypeError(`Email fragment body requires ${TITLE_KEY}`);
105
+ }
106
+ if (typeof item.contentBody[URL_NAME_KEY] !== 'string' ||
107
+ item.contentBody[URL_NAME_KEY].length === 0) {
108
+ throw new TypeError(`Email fragment body requires nonempty ${URL_NAME_KEY}`);
109
+ }
110
+ if (item.urlName !== item.contentBody[URL_NAME_KEY]) {
111
+ throw new TypeError(`Email fragment ${URL_NAME_KEY} must match the top-level urlName`);
112
+ }
113
+ if (item.contentBody.backgroundColor !== '#f3f3f3') {
114
+ throw new TypeError('Email fragment backgroundColor must match the evidenced profile');
115
+ }
116
+ exactValue(item.contentBody['lightning:backgroundImage'], BACKGROUND_IMAGE, 'lightning:backgroundImage');
117
+ exactValue(item.contentBody['lightning:brandSource'], { defaultBrandOption: 'sfdcBrand' }, 'lightning:brandSource');
118
+ if (item.contentBody['lightning:colorScheme'] !== '{!$brand.colorScheme}') {
119
+ throw new TypeError('lightning:colorScheme must match the evidenced profile');
120
+ }
121
+ if (item.contentBody['lightning:padding'] !== '{!$brand.spacing.none}') {
122
+ throw new TypeError('lightning:padding must match the evidenced profile');
123
+ }
124
+ emptyArray(item.contentBody['lightning:dataProviders'], 'lightning:dataProviders');
125
+ emptyArray(item.contentBody['lightning:expressions'], 'lightning:expressions');
126
+ emptyArray(item.contentBody['sfdc_cms:attachments'], 'sfdc_cms:attachments');
127
+ emptyArray(item.contentBody['sfdc_cms:variants'], 'sfdc_cms:variants');
128
+ const root = assertComponent(item.contentBody[BLOCK_KEY], 'root', `Email fragment ${BLOCK_KEY}`);
129
+ const rootChildren = children(root, `Email fragment ${BLOCK_KEY}`);
130
+ if (rootChildren.length !== 1)
131
+ throw new TypeError('Email fragment root must contain one section');
132
+ const section = assertComponent(rootChildren[0], 'section', 'Email fragment section');
133
+ const sectionChildren = children(section, 'Email fragment section');
134
+ if (sectionChildren.length !== 1)
135
+ throw new TypeError('Email fragment section must contain one column');
136
+ const column = assertComponent(sectionChildren[0], 'column', 'Email fragment column');
137
+ if (children(column, 'Email fragment column').length > 0) {
138
+ throw new TypeError('Email fragment column must be empty in this bounded profile');
139
+ }
140
+ }
141
+ /**
142
+ * Plan detached fresh identities for one default-language email-fragment variant per parent.
143
+ * @param {LoadedWorkspaceExport} source - Integrity-verified original workspace export.
144
+ * @param {unknown} input - Explicit selected source and fresh target identities.
145
+ * @returns {PlannedImportIdentities} Detached bounded fragment proposal.
146
+ */
147
+ export function planEmailFragmentCopies(source, input) {
148
+ if (!source.integrity.verified)
149
+ throw new TypeError('Source integrity must be verified first');
150
+ if (!Array.isArray(input) || input.length === 0) {
151
+ throw new TypeError('Email fragment mappings must be a nonempty array');
152
+ }
153
+ const sourceKeys = new Set(source.items.map((item) => item.contentKey));
154
+ const sourceApiNames = new Set(source.items.map((item) => item.apiName));
155
+ const selected = new Set();
156
+ const targetKeys = new Set();
157
+ const targetApiNames = new Set();
158
+ const items = [];
159
+ for (const [index, row] of input.entries()) {
160
+ if (!record(row))
161
+ throw new TypeError('Email fragment mapping must be an object');
162
+ exactKeys(row, ['source', 'target'], `Email fragment mapping ${index}`);
163
+ if (!record(row.source))
164
+ throw new TypeError(`Email fragment mapping ${index}.source must be an object`);
165
+ exactKeys(row.source, ['family', 'type', 'apiName'], `Email fragment mapping ${index}.source`);
166
+ if (row.source.family !== 'cms' || row.source.type !== 'emailFragment') {
167
+ throw new TypeError(`Email fragment mapping ${index}.source must select cms/emailFragment`);
168
+ }
169
+ identity(row.source.apiName, `Email fragment mapping ${index}.source.apiName`);
170
+ const sourceApiName = row.source.apiName;
171
+ if (selected.has(sourceApiName)) {
172
+ throw new TypeError(`Duplicate email fragment selection: ${sourceApiName}`);
173
+ }
174
+ const matches = source.items.filter((item) => item.contentType === EMAIL_FRAGMENT_TYPE && item.apiName === sourceApiName);
175
+ if (matches.length !== 1) {
176
+ throw new TypeError(`Typed source API name must match exactly one email fragment: ${sourceApiName}`);
177
+ }
178
+ if (!record(row.target))
179
+ throw new TypeError(`Email fragment mapping ${index}.target must be an object`);
180
+ exactKeys(row.target, ['contentKey', 'apiName'], `Email fragment mapping ${index}.target`);
181
+ identity(row.target.contentKey, `Email fragment mapping ${index}.target.contentKey`);
182
+ identity(row.target.apiName, `Email fragment mapping ${index}.target.apiName`);
183
+ const contentKey = row.target.contentKey;
184
+ const apiName = row.target.apiName;
185
+ if (sourceKeys.has(contentKey) || targetKeys.has(contentKey)) {
186
+ throw new TypeError('Target email fragment content keys must be fresh and unique');
187
+ }
188
+ if (sourceApiNames.has(apiName) || targetApiNames.has(apiName)) {
189
+ throw new TypeError('Target email fragment API names must be fresh and unique');
190
+ }
191
+ assertEmailFragmentItem(matches[0]);
192
+ selected.add(sourceApiName);
193
+ targetKeys.add(contentKey);
194
+ targetApiNames.add(apiName);
195
+ items.push({ ...matches[0], contentKey, apiName });
196
+ }
197
+ return { items, targetContentKeys: [...targetKeys].toSorted() };
198
+ }
199
+ //# sourceMappingURL=email-fragment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-fragment.js","sourceRoot":"","sources":["../../src/services/email-fragment.ts"],"names":[],"mappings":"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"}
@@ -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: nonemptyString(detail.contentId) ? detail.contentId : undefined,
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":"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"}
1
+ {"version":3,"file":"export-references.js","sourceRoot":"","sources":["../../src/services/export-references.ts"],"names":[],"mappings":"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"}
@@ -4,8 +4,10 @@ import { type WorkspaceExportManifest } from '../contracts/workspace-export.js';
4
4
  export type { WorkspaceExportManifest } from '../contracts/workspace-export.js';
5
5
  import { type JsonRequestOptions } from '../transport/json-request.js';
6
6
  import { type CleanupOptions, type DirectoryPublishOptions } from './atomic-publish.js';
7
+ import { type EditablePublishOptions } from './editable-raw-html-export.js';
8
+ import { type ExperimentalMediaDownloadOptions } from '../transport/experimental-media.js';
7
9
  export type WorkspaceExportWarning = {
8
- code: 'COUNT_MISMATCH' | 'DETAIL_FAILED' | 'DUPLICATE_VARIANTS' | 'OWNERSHIP_MISMATCH' | 'PREMATURE_EMPTY_PAGE' | 'REFERENCE_UNRESOLVED' | 'REFERENCE_UNSUPPORTED' | 'UNSUPPORTED_WILDCARD';
10
+ code: 'COUNT_MISMATCH' | 'DETAIL_FAILED' | 'DUPLICATE_VARIANTS' | 'OWNERSHIP_MISMATCH' | 'PREMATURE_EMPTY_PAGE' | 'MEDIA_EXPORT_FAILED' | 'REFERENCE_UNRESOLVED' | 'REFERENCE_UNSUPPORTED' | 'UNSUPPORTED_WILDCARD';
9
11
  message: string;
10
12
  variantIds?: string[];
11
13
  };
@@ -22,9 +24,22 @@ export type ExportWorkspaceOptions = JsonRequestOptions & {
22
24
  sourceOrgId?: string;
23
25
  pluginVersion?: string;
24
26
  generatedAt?: string;
27
+ editableDirectory?: string;
28
+ editablePublish?: EditablePublishOptions;
29
+ selection?: {
30
+ readonly contentType: string;
31
+ readonly apiNames: readonly string[];
32
+ };
25
33
  atomicPublish?: DirectoryPublishOptions & CleanupOptions & {
26
34
  readonly makeTemporaryDirectory?: typeof mkdtemp;
27
35
  };
36
+ experimentalMedia?: {
37
+ readonly accessToken: string;
38
+ readonly instanceUrl: string;
39
+ readonly fetch?: ExperimentalMediaDownloadOptions['fetch'];
40
+ readonly perImageBytes?: number;
41
+ readonly totalBytes?: number;
42
+ };
28
43
  };
29
44
  type RequestConnection = Pick<Connection, 'request'>;
30
45
  export declare function safeWorkspaceDirectoryName(workspaceName: string): string;