sf-plugin-cms 0.4.0 → 0.6.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 (71) hide show
  1. package/README.md +276 -20
  2. package/lib/commands/cms/export/workspace.d.ts +7 -1
  3. package/lib/commands/cms/export/workspace.js +113 -2
  4. package/lib/commands/cms/export/workspace.js.map +1 -1
  5. package/lib/commands/cms/import/workspace.d.ts +12 -4
  6. package/lib/commands/cms/import/workspace.js +167 -20
  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 +41 -3
  17. package/lib/contracts/workspace-export.js +171 -5
  18. package/lib/contracts/workspace-export.js.map +1 -1
  19. package/lib/contracts/workspace-import.d.ts +65 -0
  20. package/lib/contracts/workspace-import.js +132 -1
  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/cms-prerequisite-lookup.d.ts +16 -0
  26. package/lib/services/cms-prerequisite-lookup.js +89 -0
  27. package/lib/services/cms-prerequisite-lookup.js.map +1 -0
  28. package/lib/services/content-key.d.ts +9 -0
  29. package/lib/services/content-key.js +15 -0
  30. package/lib/services/content-key.js.map +1 -0
  31. package/lib/services/email-fragment.d.ts +15 -0
  32. package/lib/services/email-fragment.js +203 -0
  33. package/lib/services/email-fragment.js.map +1 -0
  34. package/lib/services/export-workspace.d.ts +15 -1
  35. package/lib/services/export-workspace.js +284 -51
  36. package/lib/services/export-workspace.js.map +1 -1
  37. package/lib/services/image-import.d.ts +91 -0
  38. package/lib/services/image-import.js +575 -0
  39. package/lib/services/image-import.js.map +1 -0
  40. package/lib/services/import-identities.js +5 -1
  41. package/lib/services/import-identities.js.map +1 -1
  42. package/lib/services/import-workspace.d.ts +63 -3
  43. package/lib/services/import-workspace.js +277 -26
  44. package/lib/services/import-workspace.js.map +1 -1
  45. package/lib/services/landing-page-pair-export.d.ts +31 -0
  46. package/lib/services/landing-page-pair-export.js +122 -0
  47. package/lib/services/landing-page-pair-export.js.map +1 -0
  48. package/lib/services/landing-page-template.d.ts +62 -0
  49. package/lib/services/landing-page-template.js +372 -0
  50. package/lib/services/landing-page-template.js.map +1 -0
  51. package/lib/services/landing-page.d.ts +87 -0
  52. package/lib/services/landing-page.js +355 -0
  53. package/lib/services/landing-page.js.map +1 -0
  54. package/lib/services/variant-identity.d.ts +14 -0
  55. package/lib/services/variant-identity.js +24 -0
  56. package/lib/services/variant-identity.js.map +1 -1
  57. package/lib/services/web-fragment.d.ts +47 -0
  58. package/lib/services/web-fragment.js +286 -0
  59. package/lib/services/web-fragment.js.map +1 -0
  60. package/lib/transport/experimental-media.d.ts +30 -0
  61. package/lib/transport/experimental-media.js +224 -0
  62. package/lib/transport/experimental-media.js.map +1 -0
  63. package/lib/transport/json-request.d.ts +9 -1
  64. package/lib/transport/json-request.js +30 -3
  65. package/lib/transport/json-request.js.map +1 -1
  66. package/lib/transport/multipart-image-create.d.ts +28 -0
  67. package/lib/transport/multipart-image-create.js +189 -0
  68. package/lib/transport/multipart-image-create.js.map +1 -0
  69. package/messages/cms.export.workspace.md +20 -0
  70. package/messages/cms.import.workspace.md +12 -2
  71. package/package.json +1 -1
@@ -0,0 +1,372 @@
1
+ import { isDeepStrictEqual } from 'node:util';
2
+ import { assertCanonicalContentKey } from './content-key.js';
3
+ import { lookupExactCmsVariants } from './cms-prerequisite-lookup.js';
4
+ import { validateDataGraphPrerequisites, } from './web-fragment.js';
5
+ const TEMPLATE_TYPE = 'sfdc_cms__landingPageTemplate';
6
+ const SALESFORCE_LABEL_MAX_LENGTH = 80;
7
+ const DATA_GRAPH_PROVIDER = 'sfdc_cms__dataGraphDataProvider';
8
+ const BODY_KEYS = [
9
+ 'lightning:backgroundImage',
10
+ 'lightning:brandSource',
11
+ 'lightning:dataProviders',
12
+ 'lightning:expressions',
13
+ 'sfdc_cms:block',
14
+ 'sfdc_cms:description',
15
+ 'sfdc_cms:seoProperties',
16
+ 'sfdc_cms:title',
17
+ 'sfdc_cms:variants',
18
+ ];
19
+ const OPTIONAL_BODY_KEYS = ['sfdc_cms:urlName'];
20
+ const CMS_DEPENDENCY_TYPES = new Map([
21
+ ['image', 'sfdc_cms__image'],
22
+ ['webFragment', 'sfdc_cms__webFragment'],
23
+ ]);
24
+ function record(value) {
25
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
26
+ }
27
+ function nonempty(value, label) {
28
+ if (typeof value !== 'string' || value.trim().length === 0) {
29
+ throw new TypeError(`${label} must be a nonempty string`);
30
+ }
31
+ }
32
+ function identifier(value, label) {
33
+ nonempty(value, label);
34
+ if (!/^[A-Za-z][A-Za-z\d_]*$/u.test(value)) {
35
+ throw new TypeError(`${label} must be an exact developer/API name`);
36
+ }
37
+ }
38
+ export function assertDerivedLabelLength(apiName, contentType, label) {
39
+ const derivedLabel = `${apiName}--${contentType}`;
40
+ if (derivedLabel.length > SALESFORCE_LABEL_MAX_LENGTH) {
41
+ throw new TypeError(`${label} ${apiName} produces Salesforce label ${derivedLabel} with length ${derivedLabel.length}; maximum is ${SALESFORCE_LABEL_MAX_LENGTH}`);
42
+ }
43
+ }
44
+ function exactKeys(value, required, optional, label) {
45
+ const keys = Object.keys(value);
46
+ if (required.some((key) => !keys.includes(key)) ||
47
+ keys.some((key) => !required.includes(key) && !optional.includes(key))) {
48
+ throw new TypeError(`${label} contains unsupported or missing fields`);
49
+ }
50
+ }
51
+ function dataGraphProvider(value, label) {
52
+ if (!record(value))
53
+ throw new TypeError(`${label} must be an object`);
54
+ if (Object.keys(value).toSorted().join('\0') !==
55
+ ['attributes', 'definition', 'sfdcExpressionKey'].toSorted().join('\0') ||
56
+ value.definition !== DATA_GRAPH_PROVIDER ||
57
+ value.sfdcExpressionKey !== '$dataGraph' ||
58
+ !record(value.attributes)) {
59
+ throw new TypeError(`${label} must use the exact Data Graph provider shape`);
60
+ }
61
+ if (Object.keys(value.attributes).toSorted().join('\0') !==
62
+ ['dataGraphApiName', 'dataspace'].toSorted().join('\0')) {
63
+ throw new TypeError(`${label}.attributes is unsupported`);
64
+ }
65
+ identifier(value.attributes.dataGraphApiName, `${label}.attributes.dataGraphApiName`);
66
+ identifier(value.attributes.dataspace, `${label}.attributes.dataspace`);
67
+ return {
68
+ developerName: value.attributes.dataGraphApiName,
69
+ dataSpace: value.attributes.dataspace,
70
+ };
71
+ }
72
+ function collectCmsReferences(value, references) {
73
+ if (Array.isArray(value)) {
74
+ for (const child of value)
75
+ collectCmsReferences(child, references);
76
+ return;
77
+ }
78
+ if (!record(value))
79
+ return;
80
+ if ('ref' in value || (typeof value.type === 'string' && value.type.endsWith('Reference'))) {
81
+ if (value.type !== 'imageReference' ||
82
+ !record(value.ref) ||
83
+ Object.keys(value.ref).length !== 1 ||
84
+ typeof value.ref.contentKey !== 'string' ||
85
+ value.ref.contentKey.length === 0) {
86
+ throw new TypeError('Landing-page template contains an unsupported CMS dependency shape');
87
+ }
88
+ references.add(value.ref.contentKey);
89
+ }
90
+ for (const child of Object.values(value))
91
+ collectCmsReferences(child, references);
92
+ }
93
+ /**
94
+ * Validate the captured landing-page-template authoring shape.
95
+ * @param {WorkspaceImportItem} item - Captured workspace item to validate.
96
+ * @returns {object} Extracted prerequisite identities.
97
+ */
98
+ export function assertLandingPageTemplateItem(item) {
99
+ if (item.contentType !== TEMPLATE_TYPE) {
100
+ throw new TypeError(`Landing-page-template profile requires exact content type ${TEMPLATE_TYPE}`);
101
+ }
102
+ identifier(item.apiName, 'Landing-page template apiName');
103
+ nonempty(item.title, 'Landing-page template title');
104
+ exactKeys(item.contentBody, BODY_KEYS, OPTIONAL_BODY_KEYS, 'Landing-page template body');
105
+ if (item.contentBody['sfdc_cms:title'] !== item.title) {
106
+ throw new TypeError('Landing-page template body title must match the top-level title');
107
+ }
108
+ if (item.contentBody['sfdc_cms:urlName'] !== undefined &&
109
+ item.contentBody['sfdc_cms:urlName'] !== item.urlName) {
110
+ throw new TypeError('Landing-page template body URL name must match the top-level URL name');
111
+ }
112
+ if (!isDeepStrictEqual(item.contentBody['lightning:brandSource'], {
113
+ defaultBrandOption: 'sfdcBrand',
114
+ })) {
115
+ throw new TypeError('Landing-page template brand source is unsupported');
116
+ }
117
+ for (const key of ['lightning:expressions', 'sfdc_cms:variants']) {
118
+ if (!Array.isArray(item.contentBody[key]))
119
+ throw new TypeError(`${key} must be an array`);
120
+ }
121
+ if (!record(item.contentBody['sfdc_cms:block'])) {
122
+ throw new TypeError('Landing-page template root block must be an object');
123
+ }
124
+ const providers = item.contentBody['lightning:dataProviders'];
125
+ if (!Array.isArray(providers))
126
+ throw new TypeError('Landing-page template data providers must be an array');
127
+ const dataGraphs = providers.map((value, index) => dataGraphProvider(value, `Data Graph provider ${index}`));
128
+ if (new Set(dataGraphs.map((value) => `${value.developerName}\0${value.dataSpace}`)).size !==
129
+ dataGraphs.length) {
130
+ throw new TypeError('Landing-page template Data Graph providers must be unique');
131
+ }
132
+ const references = new Set();
133
+ collectCmsReferences(item.contentBody, references);
134
+ return { cmsContentKeys: [...references].toSorted(), dataGraphs };
135
+ }
136
+ function rows(value) {
137
+ if (!Array.isArray(value) || value.length === 0 || value.some((row) => !record(row))) {
138
+ throw new TypeError('Landing-page template mappings must be a nonempty array of objects');
139
+ }
140
+ return value;
141
+ }
142
+ /**
143
+ * Plan exact type-qualified template creates and their explicit prerequisites.
144
+ * @param {LoadedWorkspaceExport} source - Verified source workspace package.
145
+ * @param {unknown} input - User-supplied template mapping JSON.
146
+ * @returns {PlannedLandingPageTemplateCopies} Validated create proposal.
147
+ */
148
+ export function planLandingPageTemplateCopies(source, input) {
149
+ return planLandingPageTemplateCopiesForType(source, input, TEMPLATE_TYPE, 'Template mapping');
150
+ }
151
+ /**
152
+ * Plan template-shaped creates while validating the actual outgoing content type.
153
+ * @param {LoadedWorkspaceExport} source - Verified source workspace package.
154
+ * @param {unknown} input - User-supplied template-shaped mapping JSON.
155
+ * @param {string} targetContentType - Outgoing Salesforce content type.
156
+ * @param {string} targetMappingLabel - User-facing mapping label.
157
+ * @returns {PlannedLandingPageTemplateCopies} Validated create proposal.
158
+ */
159
+ export function planLandingPageTemplateCopiesForType(source, input, targetContentType, targetMappingLabel) {
160
+ if (!source.integrity.verified)
161
+ throw new TypeError('Source integrity must be verified first');
162
+ const sourceKeys = new Set(source.items.map((item) => item.contentKey));
163
+ const sourceNames = new Set(source.items.flatMap((item) => (item.apiName === undefined ? [] : [item.apiName])));
164
+ const targetKeys = new Set();
165
+ const targetNames = new Set();
166
+ const selected = new Set();
167
+ const items = [];
168
+ const cmsPrerequisites = [];
169
+ const dataGraphs = [];
170
+ for (const [index, row] of rows(input).entries()) {
171
+ exactKeys(row, ['source', 'target', 'cmsDependencies', 'dataGraphs'], [], `Template mapping ${index}`);
172
+ if (!record(row.source))
173
+ throw new TypeError(`Template mapping ${index}.source must be an object`);
174
+ exactKeys(row.source, ['family', 'type', 'apiName'], [], `Template mapping ${index}.source`);
175
+ if (row.source.family !== 'cms' || row.source.type !== 'landingPageTemplate') {
176
+ throw new TypeError(`Template mapping ${index}.source must select cms/landingPageTemplate`);
177
+ }
178
+ identifier(row.source.apiName, `Template mapping ${index}.source.apiName`);
179
+ const sourceApiName = row.source.apiName;
180
+ if (selected.has(sourceApiName))
181
+ throw new TypeError(`Duplicate template selection: ${sourceApiName}`);
182
+ const matches = source.items.filter((item) => item.contentType === TEMPLATE_TYPE && item.apiName === sourceApiName);
183
+ if (matches.length !== 1) {
184
+ throw new TypeError(`Typed source API name must match exactly one landing-page template: ${sourceApiName}`);
185
+ }
186
+ const item = matches[0];
187
+ const prerequisites = assertLandingPageTemplateItem(item);
188
+ if (!record(row.target))
189
+ throw new TypeError(`Template mapping ${index}.target must be an object`);
190
+ exactKeys(row.target, ['contentKey', 'apiName'], [], `Template mapping ${index}.target`);
191
+ nonempty(row.target.contentKey, `Template mapping ${index}.target.contentKey`);
192
+ assertCanonicalContentKey(row.target.contentKey, `Template mapping ${index}.target.contentKey`);
193
+ identifier(row.target.apiName, `Template mapping ${index}.target.apiName`);
194
+ assertDerivedLabelLength(row.target.apiName, targetContentType, `${targetMappingLabel} ${index}.target.apiName`);
195
+ if (sourceKeys.has(row.target.contentKey) || targetKeys.has(row.target.contentKey)) {
196
+ throw new TypeError('Target template content keys must be fresh and unique');
197
+ }
198
+ if (sourceNames.has(row.target.apiName) || targetNames.has(row.target.apiName)) {
199
+ throw new TypeError('Target template API names must be fresh and unique');
200
+ }
201
+ if (!Array.isArray(row.cmsDependencies) ||
202
+ row.cmsDependencies.length !== prerequisites.cmsContentKeys.length) {
203
+ throw new TypeError('Each CMS content prerequisite requires exactly one mapping row');
204
+ }
205
+ const dependencyMap = new Map();
206
+ for (const [dependencyIndex, raw] of row.cmsDependencies.entries()) {
207
+ if (!record(raw))
208
+ throw new TypeError(`Template dependency ${dependencyIndex} must be an object`);
209
+ exactKeys(raw, ['sourceContentKey', 'sourceType', 'targetApiName'], ['targetTitle'], `Template dependency ${dependencyIndex}`);
210
+ nonempty(raw.sourceContentKey, 'sourceContentKey');
211
+ identifier(raw.targetApiName, 'targetApiName');
212
+ if (raw.targetTitle !== undefined)
213
+ nonempty(raw.targetTitle, 'targetTitle');
214
+ const targetContentType = CMS_DEPENDENCY_TYPES.get(String(raw.sourceType));
215
+ if (targetContentType === undefined)
216
+ throw new TypeError('Template CMS dependency type is unsupported');
217
+ if (dependencyMap.has(raw.sourceContentKey))
218
+ throw new TypeError('Duplicate template CMS dependency mapping');
219
+ dependencyMap.set(raw.sourceContentKey, {
220
+ sourceContentKey: raw.sourceContentKey,
221
+ sourceType: raw.sourceType,
222
+ targetApiName: raw.targetApiName,
223
+ ...(raw.targetTitle === undefined ? {} : { targetTitle: raw.targetTitle }),
224
+ targetContentType,
225
+ resolution: 'pending',
226
+ validationStatus: 'pending',
227
+ });
228
+ }
229
+ for (const contentKey of prerequisites.cmsContentKeys) {
230
+ if (!dependencyMap.has(contentKey))
231
+ throw new TypeError(`Missing exact CMS dependency mapping for ${contentKey}`);
232
+ }
233
+ if (!Array.isArray(row.dataGraphs) ||
234
+ row.dataGraphs.length !== prerequisites.dataGraphs.length) {
235
+ throw new TypeError('Each Data Graph prerequisite requires exactly one mapping row');
236
+ }
237
+ const graphMap = new Map();
238
+ for (const raw of row.dataGraphs) {
239
+ if (!record(raw))
240
+ throw new TypeError('Template Data Graph mapping must be an object');
241
+ exactKeys(raw, ['sourceDeveloperName', 'sourceDataSpace', 'targetDeveloperName', 'targetDataSpace'], [], 'Template Data Graph mapping');
242
+ for (const key of [
243
+ 'sourceDeveloperName',
244
+ 'sourceDataSpace',
245
+ 'targetDeveloperName',
246
+ 'targetDataSpace',
247
+ ])
248
+ identifier(raw[key], key);
249
+ const sourceDeveloperName = raw.sourceDeveloperName;
250
+ const sourceDataSpace = raw.sourceDataSpace;
251
+ const targetDeveloperName = raw.targetDeveloperName;
252
+ const targetDataSpace = raw.targetDataSpace;
253
+ const key = `${sourceDeveloperName}\0${sourceDataSpace}`;
254
+ if (graphMap.has(key))
255
+ throw new TypeError('Duplicate template Data Graph source mapping');
256
+ graphMap.set(key, {
257
+ sourceDeveloperName,
258
+ sourceDataSpace,
259
+ targetDeveloperName,
260
+ targetDataSpace,
261
+ resolution: sourceDeveloperName === targetDeveloperName && sourceDataSpace === targetDataSpace
262
+ ? 'preserved'
263
+ : 'explicit-map',
264
+ validationStatus: 'pending',
265
+ });
266
+ }
267
+ for (const prerequisite of prerequisites.dataGraphs) {
268
+ if (!graphMap.has(`${prerequisite.developerName}\0${prerequisite.dataSpace}`)) {
269
+ throw new TypeError(`Missing exact Data Graph mapping for ${prerequisite.developerName}/${prerequisite.dataSpace}`);
270
+ }
271
+ }
272
+ const providers = item.contentBody['lightning:dataProviders'].map((value) => {
273
+ const identity = dataGraphProvider(value, 'Data Graph provider');
274
+ const target = graphMap.get(`${identity.developerName}\0${identity.dataSpace}`);
275
+ return {
276
+ ...value,
277
+ attributes: {
278
+ dataGraphApiName: target.targetDeveloperName,
279
+ dataspace: target.targetDataSpace,
280
+ },
281
+ };
282
+ });
283
+ selected.add(sourceApiName);
284
+ targetKeys.add(row.target.contentKey);
285
+ targetNames.add(row.target.apiName);
286
+ cmsPrerequisites.push(...dependencyMap.values());
287
+ dataGraphs.push(...graphMap.values());
288
+ items.push({
289
+ ...item,
290
+ apiName: row.target.apiName,
291
+ contentKey: row.target.contentKey,
292
+ contentBody: { ...item.contentBody, 'lightning:dataProviders': providers },
293
+ });
294
+ }
295
+ return {
296
+ items: items.toSorted((left, right) => left.apiName.localeCompare(right.apiName)),
297
+ targetContentKeys: [...targetKeys].toSorted(),
298
+ cmsPrerequisites,
299
+ dataGraphs,
300
+ };
301
+ }
302
+ /**
303
+ * Resolve exact typed CMS dependencies, with title fallback only after zero API-name matches.
304
+ * @param {RequestConnection & QueryConnection} connection - Destination org connection.
305
+ * @param {string} workspaceId - Exact destination workspace ID.
306
+ * @param {PlannedLandingPageTemplateCopies} proposal - Template create proposal to validate.
307
+ * @param {JsonRequestOptions} options - Optional request metadata and signal.
308
+ * @returns {Promise<void>} Resolves after every prerequisite is validated and rewritten.
309
+ */
310
+ export async function validateLandingPageTemplatePrerequisites(connection, workspaceId, proposal, options = {}) {
311
+ await validateDataGraphPrerequisites(connection, proposal.dataGraphs);
312
+ const resolved = new Map();
313
+ for (const prerequisite of proposal.cmsPrerequisites) {
314
+ try {
315
+ const apiMatches = await lookupExactCmsVariants(connection, workspaceId, prerequisite.targetContentType, prerequisite.targetApiName, (detail) => detail.apiName === prerequisite.targetApiName, options);
316
+ let match;
317
+ if (apiMatches.length === 1) {
318
+ match = apiMatches[0];
319
+ prerequisite.resolution = 'api-name';
320
+ }
321
+ else if (apiMatches.length > 1) {
322
+ throw new TypeError(`CMS prerequisite API name is ambiguous: ${prerequisite.targetApiName}`);
323
+ }
324
+ else {
325
+ if (prerequisite.targetTitle === undefined) {
326
+ throw new TypeError(`CMS prerequisite API name was not found and no title fallback was provided: ${prerequisite.targetApiName}`);
327
+ }
328
+ const titleMatches = await lookupExactCmsVariants(connection, workspaceId, prerequisite.targetContentType, prerequisite.targetTitle, (detail) => detail.title === prerequisite.targetTitle, options);
329
+ if (titleMatches.length !== 1) {
330
+ throw new TypeError(`CMS prerequisite title fallback must resolve exactly once: ${prerequisite.targetTitle}`);
331
+ }
332
+ match = titleMatches[0];
333
+ prerequisite.resolution = 'title-fallback';
334
+ }
335
+ nonempty(match.contentKey, 'Resolved CMS prerequisite contentKey');
336
+ prerequisite.targetContentKey = match.contentKey;
337
+ prerequisite.validationStatus = 'passed';
338
+ resolved.set(prerequisite.sourceContentKey, match.contentKey);
339
+ }
340
+ catch (error) {
341
+ prerequisite.validationStatus = 'failed';
342
+ throw error;
343
+ }
344
+ }
345
+ const rewrite = (value) => {
346
+ if (Array.isArray(value))
347
+ return value.map((child) => rewrite(child));
348
+ if (!record(value))
349
+ return value;
350
+ const next = Object.fromEntries(Object.entries(value).map(([key, child]) => [key, rewrite(child)]));
351
+ if (record(next.ref) && typeof next.ref.contentKey === 'string') {
352
+ const target = resolved.get(next.ref.contentKey);
353
+ if (target !== undefined)
354
+ next.ref = { ...next.ref, contentKey: target };
355
+ }
356
+ if (typeof next.url === 'string') {
357
+ let rewrittenUrl = next.url;
358
+ for (const [sourceKey, targetKey] of resolved) {
359
+ rewrittenUrl = rewrittenUrl.replaceAll(sourceKey, targetKey);
360
+ }
361
+ next.url = rewrittenUrl;
362
+ }
363
+ return next;
364
+ };
365
+ for (const [index, item] of proposal.items.entries()) {
366
+ proposal.items[index] = {
367
+ ...item,
368
+ contentBody: rewrite(item.contentBody),
369
+ };
370
+ }
371
+ }
372
+ //# sourceMappingURL=landing-page-template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"landing-page-template.js","sourceRoot":"","sources":["../../src/services/landing-page-template.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ import type { Connection } from '@salesforce/core';
2
+ import type { JsonRequestOptions } from '../transport/json-request.js';
3
+ import type { LandingPageTemplatePair } from '../contracts/workspace-export.js';
4
+ import type { LoadedWorkspaceExport, WorkspaceImportItem } from './import-workspace.js';
5
+ import { type LandingPageTemplateCmsPrerequisite, type PlannedLandingPageTemplateCopies } from './landing-page-template.js';
6
+ declare const TEMPLATE_TYPE = "sfdc_cms__landingPageTemplate";
7
+ type RequestConnection = Pick<Connection, 'request'> & Partial<Pick<Connection, 'version'>> & {
8
+ readonly query?: Connection['query'];
9
+ };
10
+ export type LandingPageImagePrerequisite = LandingPageTemplateCmsPrerequisite & {
11
+ readonly sourceType: 'image';
12
+ readonly targetContentType: 'sfdc_cms__image';
13
+ };
14
+ export type LandingPageResolvedTemplateIdentity = {
15
+ readonly apiName: string;
16
+ readonly contentKey: string;
17
+ readonly contentId: string;
18
+ readonly variantId: string;
19
+ readonly title: string;
20
+ readonly contentType: typeof TEMPLATE_TYPE;
21
+ readonly workspaceId: string;
22
+ readonly status: 'Draft';
23
+ readonly isPublished: false;
24
+ readonly bodySha256: string;
25
+ };
26
+ export type LandingPageTemplateDependency = {
27
+ readonly source: LandingPageTemplatePair['template'];
28
+ readonly targetContentKey?: string;
29
+ readonly targetApiName?: string;
30
+ readonly targetTitle?: string;
31
+ resolution: 'content-key' | 'api-name' | 'title-fallback' | 'pending';
32
+ target?: LandingPageResolvedTemplateIdentity;
33
+ validationStatus: 'failed' | 'passed' | 'pending';
34
+ };
35
+ export type LandingPageCompatibilityPlan = {
36
+ readonly pageVariantId: string;
37
+ readonly sourceTemplateVariantId: string;
38
+ readonly relationshipReferenceId: string;
39
+ readonly relationshipDescriptorSha256: string;
40
+ readonly normalizationVersion: 'landing-page-template-compatibility-v1';
41
+ readonly normalizedPageBodySha256: string;
42
+ readonly normalizedTemplateBodySha256: string;
43
+ status: 'failed' | 'passed' | 'pending';
44
+ };
45
+ export type PlannedLandingPageCopies = Omit<PlannedLandingPageTemplateCopies, 'cmsPrerequisites'> & {
46
+ readonly cmsPrerequisites: LandingPageImagePrerequisite[];
47
+ readonly compatibility: LandingPageCompatibilityPlan[];
48
+ readonly templateDependencies: LandingPageTemplateDependency[];
49
+ };
50
+ /**
51
+ * Validate the exact captured landing-page authoring shape.
52
+ * @param {WorkspaceImportItem} item - Captured workspace item to validate.
53
+ * @returns {object} Extracted image and Data Graph prerequisites.
54
+ */
55
+ export declare function assertLandingPageItem(item: WorkspaceImportItem): {
56
+ cmsContentKeys: readonly string[];
57
+ dataGraphs: readonly {
58
+ developerName: string;
59
+ dataSpace: string;
60
+ }[];
61
+ };
62
+ /**
63
+ * Plan exact type-qualified landing-page creates using only evidenced image references.
64
+ * @param {LoadedWorkspaceExport} source - Verified source workspace package.
65
+ * @param {unknown} input - User-supplied landing-page mapping JSON.
66
+ * @returns {PlannedLandingPageCopies} Validated create proposal.
67
+ */
68
+ export declare function planLandingPageCopies(source: LoadedWorkspaceExport, input: unknown): PlannedLandingPageCopies;
69
+ /**
70
+ * Resolve exact destination landing-page templates without mutating page bodies.
71
+ * @param {RequestConnection} connection - Destination org connection.
72
+ * @param {string} workspaceId - Exact destination workspace ID.
73
+ * @param {PlannedLandingPageCopies} proposal - Landing-page dependency plan.
74
+ * @param {JsonRequestOptions} options - Optional request metadata and signal.
75
+ * @returns {Promise<void>} Resolves after every target template is proven.
76
+ */
77
+ export declare function resolveLandingPageTemplateDependencies(connection: RequestConnection, workspaceId: string, proposal: PlannedLandingPageCopies, options?: JsonRequestOptions): Promise<void>;
78
+ /**
79
+ * Resolve exact typed images, validate Data Graph identities, and rewrite evidenced references.
80
+ * @param {RequestConnection} connection - Destination org connection.
81
+ * @param {string} workspaceId - Exact destination workspace ID.
82
+ * @param {PlannedLandingPageCopies} proposal - Landing-page proposal to validate.
83
+ * @param {JsonRequestOptions} options - Optional request metadata and signal.
84
+ * @returns {Promise<void>} Resolves after every prerequisite is validated and rewritten.
85
+ */
86
+ export declare function validateLandingPagePrerequisites(connection: RequestConnection, workspaceId: string, proposal: PlannedLandingPageCopies, options?: JsonRequestOptions): Promise<void>;
87
+ export {};