@makeswift/runtime 0.24.7-canary.1 → 0.24.7-canary.2

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 (73) hide show
  1. package/client/package.json +5 -0
  2. package/dist/cjs/client/index.js +686 -0
  3. package/dist/cjs/client/index.js.map +1 -0
  4. package/dist/cjs/next/api-handler/handlers/manifest.js +1 -1
  5. package/dist/cjs/next/client.js +8 -654
  6. package/dist/cjs/next/client.js.map +1 -1
  7. package/dist/cjs/next/components/MakeswiftComponent.js +1 -1
  8. package/dist/cjs/next/components/MakeswiftComponent.js.map +1 -1
  9. package/dist/cjs/next/components/Slot.js.map +1 -1
  10. package/dist/cjs/next/components/page.js +1 -1
  11. package/dist/cjs/next/components/page.js.map +1 -1
  12. package/dist/cjs/next/index.js.map +1 -1
  13. package/dist/cjs/runtimes/react/testing/element-data.js.map +1 -1
  14. package/dist/cjs/utils/async-iterable.js.map +1 -0
  15. package/dist/cjs/utils/pagination.js.map +1 -0
  16. package/dist/esm/client/index.js +671 -0
  17. package/dist/esm/client/index.js.map +1 -0
  18. package/dist/esm/next/api-handler/handlers/manifest.js +1 -1
  19. package/dist/esm/next/client.js +7 -662
  20. package/dist/esm/next/client.js.map +1 -1
  21. package/dist/esm/next/components/MakeswiftComponent.js +1 -1
  22. package/dist/esm/next/components/MakeswiftComponent.js.map +1 -1
  23. package/dist/esm/next/components/Slot.js.map +1 -1
  24. package/dist/esm/next/components/page.js +1 -1
  25. package/dist/esm/next/components/page.js.map +1 -1
  26. package/dist/esm/next/index.js.map +1 -1
  27. package/dist/esm/runtimes/react/testing/element-data.js.map +1 -1
  28. package/dist/esm/utils/async-iterable.js.map +1 -0
  29. package/dist/esm/utils/pagination.js.map +1 -0
  30. package/dist/types/client/index.d.ts +697 -0
  31. package/dist/types/client/index.d.ts.map +1 -0
  32. package/dist/types/client/tests/client.error-handling.test.d.ts.map +1 -0
  33. package/dist/types/client/tests/client.get-component-snapshot.test.d.ts.map +1 -0
  34. package/dist/types/client/tests/client.get-page-snapshot.test.d.ts.map +1 -0
  35. package/dist/types/client/tests/client.get-pages.test.d.ts.map +1 -0
  36. package/dist/types/client/tests/client.get-resources.test.d.ts.map +1 -0
  37. package/dist/types/next/client.d.ts +3 -690
  38. package/dist/types/next/client.d.ts.map +1 -1
  39. package/dist/types/next/components/MakeswiftComponent.d.ts +1 -1
  40. package/dist/types/next/components/MakeswiftComponent.d.ts.map +1 -1
  41. package/dist/types/next/components/Slot.d.ts +1 -1
  42. package/dist/types/next/components/Slot.d.ts.map +1 -1
  43. package/dist/types/next/components/page.d.ts +1 -1
  44. package/dist/types/next/components/page.d.ts.map +1 -1
  45. package/dist/types/next/index.d.ts +1 -1
  46. package/dist/types/next/index.d.ts.map +1 -1
  47. package/dist/types/runtimes/react/testing/element-data.d.ts +1 -1
  48. package/dist/types/runtimes/react/testing/element-data.d.ts.map +1 -1
  49. package/dist/types/utils/async-iterable.d.ts.map +1 -0
  50. package/dist/types/utils/pagination.d.ts.map +1 -0
  51. package/package.json +7 -1
  52. package/dist/cjs/next/utils/async-iterable.js.map +0 -1
  53. package/dist/cjs/next/utils/pagination.js.map +0 -1
  54. package/dist/esm/next/utils/async-iterable.js.map +0 -1
  55. package/dist/esm/next/utils/pagination.js.map +0 -1
  56. package/dist/types/next/tests/client.error-handling.test.d.ts.map +0 -1
  57. package/dist/types/next/tests/client.get-component-snapshot.test.d.ts.map +0 -1
  58. package/dist/types/next/tests/client.get-page-snapshot.test.d.ts.map +0 -1
  59. package/dist/types/next/tests/client.get-pages.test.d.ts.map +0 -1
  60. package/dist/types/next/tests/client.get-resources.test.d.ts.map +0 -1
  61. package/dist/types/next/utils/async-iterable.d.ts.map +0 -1
  62. package/dist/types/next/utils/pagination.d.ts.map +0 -1
  63. /package/dist/cjs/{next/utils → utils}/async-iterable.js +0 -0
  64. /package/dist/cjs/{next/utils → utils}/pagination.js +0 -0
  65. /package/dist/esm/{next/utils → utils}/async-iterable.js +0 -0
  66. /package/dist/esm/{next/utils → utils}/pagination.js +0 -0
  67. /package/dist/types/{next → client}/tests/client.error-handling.test.d.ts +0 -0
  68. /package/dist/types/{next → client}/tests/client.get-component-snapshot.test.d.ts +0 -0
  69. /package/dist/types/{next → client}/tests/client.get-page-snapshot.test.d.ts +0 -0
  70. /package/dist/types/{next → client}/tests/client.get-pages.test.d.ts +0 -0
  71. /package/dist/types/{next → client}/tests/client.get-resources.test.d.ts +0 -0
  72. /package/dist/types/{next/utils → utils}/async-iterable.d.ts +0 -0
  73. /package/dist/types/{next/utils → utils}/pagination.d.ts +0 -0
@@ -18,676 +18,30 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var client_exports = {};
20
20
  __export(client_exports, {
21
- Makeswift: () => Makeswift,
22
- componentDocumentToRootEmbeddedDocument: () => componentDocumentToRootEmbeddedDocument,
23
- failedResponseBody: () => failedResponseBody,
24
- pageToRootDocument: () => pageToRootDocument
21
+ Makeswift: () => Makeswift
25
22
  });
26
23
  module.exports = __toCommonJS(client_exports);
27
- var import_zod = require("zod");
28
- var import_api = require("../api");
29
- var import_client = require("../api/graphql/client");
30
- var import_documents = require("../api/graphql/documents");
31
- var import_react = require("../api/react");
32
- var import_introspection = require("../prop-controllers/introspection");
33
- var import_react_page = require("../state/react-page");
34
- var import_preview_mode = require("./preview-mode");
35
24
  var import_site_version = require("../api/site-version");
36
- var import_pagination = require("./utils/pagination");
37
- var import_deterministic_uuid = require("../utils/deterministic-uuid");
38
- var import_controls = require("@makeswift/controls");
39
- var import_read_only_documents = require("../state/modules/read-only-documents");
25
+ var import_preview_mode = require("./preview-mode");
26
+ var import_client = require("../client");
40
27
  var import_cache = require("./cache");
41
- const makeswiftPageResultSchema = import_zod.z.object({
42
- id: import_zod.z.string(),
43
- path: import_zod.z.string(),
44
- title: import_zod.z.string().nullable(),
45
- description: import_zod.z.string().nullable(),
46
- canonicalUrl: import_zod.z.string().nullable(),
47
- socialImageUrl: import_zod.z.string().nullable(),
48
- sitemapPriority: import_zod.z.number().nullable(),
49
- sitemapFrequency: import_zod.z.enum(["always", "hourly", "daily", "weekly", "monthly", "yearly", "never"]).nullable(),
50
- createdAt: import_zod.z.string(),
51
- updatedAt: import_zod.z.string(),
52
- publishedAt: import_zod.z.string().nullable(),
53
- isOnline: import_zod.z.boolean().nullable(),
54
- excludedFromSearch: import_zod.z.boolean().nullable(),
55
- locale: import_zod.z.string(),
56
- localizedVariants: import_zod.z.array(
57
- import_zod.z.object({
58
- locale: import_zod.z.string(),
59
- path: import_zod.z.string()
60
- })
61
- )
62
- });
63
- const makeswiftGetPagesResultAPISchema = import_zod.z.object({
64
- data: import_zod.z.array(makeswiftPageResultSchema),
65
- hasMore: import_zod.z.boolean()
66
- });
67
- const makeswiftGetPagesParamsSchema = import_zod.z.object({
68
- limit: import_zod.z.number().optional(),
69
- after: import_zod.z.string().optional(),
70
- sortBy: import_zod.z.enum(["title", "path", "description", "createdAt", "updatedAt"]).optional(),
71
- sortDirection: import_zod.z.enum(["asc", "desc"]).optional(),
72
- includeOffline: import_zod.z.boolean().optional(),
73
- pathPrefix: import_zod.z.string().optional(),
74
- locale: import_zod.z.string().optional()
75
- });
76
- function getPagesQueryParams({
77
- limit = 20,
78
- after,
79
- sortBy,
80
- sortDirection,
81
- includeOffline,
82
- pathPrefix,
83
- locale
84
- }) {
85
- const params = new URLSearchParams();
86
- if (limit != null)
87
- params.set("limit", limit.toString());
88
- if (after != null)
89
- params.set("after", after);
90
- if (sortBy != null)
91
- params.set("sortBy", sortBy);
92
- if (sortDirection != null)
93
- params.set("sortDirection", sortDirection);
94
- if (includeOffline != null)
95
- params.set("includeOffline", includeOffline.toString());
96
- if (pathPrefix != null)
97
- params.set("pathPrefix", pathPrefix);
98
- if (locale != null)
99
- params.set("locale", locale);
100
- return params;
101
- }
102
- function pageToRootDocument(pageDocument) {
103
- const { locale, localizedPages, id, data } = pageDocument;
104
- const localizedPage = localizedPages.find(({ parentId }) => parentId == null);
105
- return localizedPage ? { key: localizedPage.elementTreeId, rootElement: localizedPage.data, locale } : { key: id, rootElement: data, locale };
106
- }
107
- const makeswiftComponentDocumentSchema = import_zod.z.object({
108
- id: import_zod.z.string(),
109
- name: import_zod.z.string().nullable(),
110
- locale: import_zod.z.string().nullable(),
111
- data: import_controls.Schema.element,
112
- siteId: import_zod.z.string(),
113
- inheritsFromParent: import_zod.z.boolean()
114
- });
115
- const makeswiftComponentDocumentFallbackSchema = import_zod.z.object({
116
- id: import_zod.z.string(),
117
- locale: import_zod.z.string().nullable(),
118
- data: import_zod.z.null()
119
- });
120
- function componentDocumentToRootEmbeddedDocument({
121
- document,
122
- documentKey,
123
- name,
124
- type,
125
- meta
126
- }) {
127
- const { data: rootElement, locale, id } = document;
128
- if (rootElement != null && rootElement.type !== type) {
129
- throw new Error(
130
- `Type "${rootElement.type}" does not match the expected type "${type}" from the snapshot`
131
- );
132
- }
133
- const rootDocument = {
134
- key: documentKey,
135
- rootElement: rootElement ?? {
136
- // Fallback rootElement
137
- // Create a stable uuid so two different clients will have the same empty element data.
138
- // This is needed to make presence feature work for an element that is not yet created.
139
- key: (0, import_deterministic_uuid.deterministicUUID)({ id, locale, seed: documentKey }),
140
- type,
141
- props: {}
142
- },
143
- locale,
144
- id,
145
- type,
146
- name,
147
- meta,
148
- __type: import_read_only_documents.EMBEDDED_DOCUMENT_TYPE
149
- };
150
- return rootDocument;
151
- }
152
- async function failedResponseBody(response) {
153
- try {
154
- const text = await response.text();
155
- try {
156
- return JSON.parse(text);
157
- } catch {
158
- return text;
159
- }
160
- } catch (e) {
161
- return `Failed to extract response body: ${e}`;
162
- }
163
- }
164
- function responseError(response) {
165
- return `${response.status} ${response.statusText}`;
166
- }
167
- const pagePathnameSlicesAPISchema = import_zod.z.array(
168
- import_zod.z.object({
169
- id: import_zod.z.string(),
170
- basePageId: import_zod.z.string(),
171
- pathname: import_zod.z.string(),
172
- localizedPathname: import_zod.z.string().optional(),
173
- __typename: import_zod.z.literal("PagePathnameSlice")
174
- }).nullable()
175
- );
176
- const getPageAPISchema = import_zod.z.object({
177
- pathname: import_zod.z.string(),
178
- locale: import_zod.z.string(),
179
- alternate: import_zod.z.array(
180
- import_zod.z.object({
181
- pathname: import_zod.z.string(),
182
- locale: import_zod.z.string()
183
- })
184
- )
185
- });
186
- class Makeswift {
187
- apiKey;
188
- apiOrigin;
189
- graphqlClient;
190
- runtime;
28
+ class Makeswift extends import_client.MakeswiftClient {
191
29
  static getSiteVersion(previewData) {
192
30
  return (0, import_preview_mode.getMakeswiftSiteVersion)(previewData) ?? import_site_version.MakeswiftSiteVersion.Live;
193
31
  }
194
32
  static getPreviewMode(previewData) {
195
33
  return (0, import_preview_mode.getMakeswiftSiteVersion)(previewData) === import_site_version.MakeswiftSiteVersion.Working;
196
34
  }
197
- constructor(apiKey, { apiOrigin = "https://api.makeswift.com", runtime }) {
198
- if (typeof apiKey !== "string") {
199
- throw new Error(
200
- `The Makeswift client must be passed a valid Makeswift site API key: \`new Makeswift('<makeswift_site_api_key>')\`
201
- Received "${apiKey}" instead.`
202
- );
203
- }
204
- this.apiKey = apiKey;
205
- try {
206
- this.apiOrigin = new URL(apiOrigin);
207
- } catch {
208
- throw new Error(
209
- `The Makeswift client received an invalid \`apiOrigin\` parameter: "${apiOrigin}".`
210
- );
211
- }
212
- this.graphqlClient = new import_client.GraphQLClient(new URL("graphql", apiOrigin).href);
213
- this.runtime = runtime;
214
- }
215
- async fetch(path, siteVersion = import_site_version.MakeswiftSiteVersion.Live, init) {
216
- const response = await fetch(new URL(path, this.apiOrigin).toString(), {
217
- ...init,
218
- headers: {
219
- ["X-API-Key"]: this.apiKey,
220
- "Makeswift-Site-API-Key": this.apiKey,
221
- "Makeswift-Site-Version": siteVersion,
222
- ...init?.headers
223
- },
224
- ...siteVersion === import_site_version.MakeswiftSiteVersion.Working ? { cache: "no-store" } : {},
225
- next: {
226
- ...init?.next,
227
- tags: [...init?.next?.tags ?? [], import_cache.MAKESWIFT_CACHE_TAG]
228
- }
229
- });
230
- return response;
231
- }
232
- getPagesInternal = async ({
233
- siteVersion = import_site_version.MakeswiftSiteVersion.Live,
234
- ...params
235
- } = {}) => {
236
- const queryParams = getPagesQueryParams(params);
237
- const response = await this.fetch(`v4/pages?${queryParams.toString()}`, siteVersion);
238
- if (!response.ok) {
239
- console.error("Failed to get pages", {
240
- response: await failedResponseBody(response),
241
- siteVersion,
242
- params
243
- });
244
- throw new Error(`Failed to get pages: ${responseError(response)}`);
245
- }
246
- const result = await response.json();
247
- const parsedResponse = makeswiftGetPagesResultAPISchema.safeParse(result);
248
- if (!parsedResponse.success) {
249
- throw new Error(
250
- `Failed to parse 'getPages' response: ${parsedResponse.error.errors.map((e) => e.message).join("; ")}`
251
- );
252
- }
253
- return parsedResponse.data;
254
- };
255
- getPages = (0, import_pagination.toIterablePaginationResult)(this.getPagesInternal);
256
- async getPage(pathname, {
257
- siteVersion = import_site_version.MakeswiftSiteVersion.Live,
258
- locale
259
- } = {}) {
260
- const url = new URL(`v2/pages/${encodeURIComponent(pathname)}`, this.apiOrigin);
261
- if (locale)
262
- url.searchParams.set("locale", locale);
263
- const response = await this.fetch(url.pathname + url.search, siteVersion);
264
- if (!response.ok) {
265
- if (response.status === 404)
266
- return null;
267
- console.error(`Failed to get page snapshot for '${pathname}'`, {
268
- response: await failedResponseBody(response),
269
- siteVersion,
270
- locale
271
- });
272
- throw new Error(`Failed to get page snapshot for '${pathname}': ${responseError(response)}`);
273
- }
274
- const json = await response.json();
275
- return getPageAPISchema.parse(json);
276
- }
277
- async getTypographies(typographyIds, siteVersion) {
278
- if (typographyIds.length === 0)
279
- return [];
280
- const url = new URL(`v2/typographies/bulk`, this.apiOrigin);
281
- typographyIds.forEach((id) => {
282
- url.searchParams.append("ids", id);
283
- });
284
- const response = await this.fetch(url.pathname + url.search, siteVersion);
285
- if (!response.ok) {
286
- console.error(`Failed to get typographies for [${typographyIds.join(", ")}]`, {
287
- response: await failedResponseBody(response),
288
- siteVersion
289
- });
290
- return [];
291
- }
292
- const body = await response.json();
293
- return body;
294
- }
295
- async getSwatches(ids, siteVersion) {
296
- if (ids.length === 0)
297
- return [];
298
- const url = new URL(`v2/swatches/bulk`, this.apiOrigin);
299
- ids.forEach((id) => {
300
- url.searchParams.append("ids", id);
301
- });
302
- const response = await this.fetch(url.pathname + url.search, siteVersion);
303
- if (!response.ok) {
304
- console.error(`Failed to get swatches for ${ids.join(", ")}`, {
305
- response: await failedResponseBody(response),
306
- siteVersion
307
- });
308
- return [];
309
- }
310
- return await response.json();
311
- }
312
- async getIntrospectedResources({
313
- swatchIds,
314
- ...introspectedResourceIds
315
- }, siteVersion) {
316
- const result = await this.graphqlClient.request(import_documents.IntrospectedResourcesQuery, introspectedResourceIds);
317
- const swatches = await this.getSwatches(swatchIds, siteVersion);
318
- return { ...result, swatches };
319
- }
320
- async introspect(element, siteVersion, locale) {
321
- const runtime = this.runtime;
322
- const descriptors = (0, import_react_page.getPropControllerDescriptors)(runtime.store.getState());
323
- const swatchIds = /* @__PURE__ */ new Set();
324
- const fileIds = /* @__PURE__ */ new Set();
325
- const typographyIds = /* @__PURE__ */ new Set();
326
- const tableIds = /* @__PURE__ */ new Set();
327
- const pageIds = /* @__PURE__ */ new Set();
328
- const globalElements = /* @__PURE__ */ new Map();
329
- const localizedGlobalElements = /* @__PURE__ */ new Map();
330
- const localizedResourcesMap = /* @__PURE__ */ new Map();
331
- const remaining = [element];
332
- const seen = /* @__PURE__ */ new Set();
333
- let current;
334
- while (current = remaining.pop()) {
335
- let getResourcesFromElementDescriptors2 = function(elementDescriptors2, props) {
336
- Object.entries(elementDescriptors2).forEach(([propName, descriptor]) => {
337
- (0, import_introspection.getSwatchIds)(descriptor, props[propName]).forEach((swatchId) => {
338
- swatchIds.add(swatchId);
339
- });
340
- (0, import_introspection.getFileIds)(descriptor, props[propName]).forEach((fileId) => fileIds.add(fileId));
341
- (0, import_introspection.getTypographyIds)(descriptor, props[propName]).forEach(
342
- (typographyId) => typographyIds.add(typographyId)
343
- );
344
- (0, import_introspection.getTableIds)(descriptor, props[propName]).forEach((tableId) => tableIds.add(tableId));
345
- (0, import_introspection.getPageIds)(descriptor, props[propName]).forEach((pageId) => pageIds.add(pageId));
346
- (0, import_introspection.getElementChildren)(descriptor, props[propName]).forEach((child) => {
347
- if (!seen.has(child.key)) {
348
- seen.add(child.key);
349
- remaining.push(child);
350
- }
351
- });
352
- });
353
- };
354
- var getResourcesFromElementDescriptors = getResourcesFromElementDescriptors2;
355
- let element2;
356
- if ((0, import_react_page.isElementReference)(current)) {
357
- const globalElementId = current.value;
358
- const globalElement = await this.getGlobalElement(globalElementId, siteVersion);
359
- let elementData = globalElement?.data;
360
- if (locale) {
361
- const localizedGlobalElement = await this.getLocalizedGlobalElement(
362
- globalElementId,
363
- locale,
364
- siteVersion
365
- );
366
- if (localizedGlobalElement) {
367
- elementData = localizedGlobalElement.data;
368
- localizedResourcesMap.set(globalElementId, localizedGlobalElement.id);
369
- localizedGlobalElements.set(localizedGlobalElement.id, localizedGlobalElement);
370
- }
371
- }
372
- globalElements.set(globalElementId, globalElement);
373
- if (elementData == null)
374
- continue;
375
- element2 = elementData;
376
- } else {
377
- element2 = current;
378
- }
379
- const elementDescriptors = descriptors.get(element2.type);
380
- if (elementDescriptors == null)
381
- continue;
382
- getResourcesFromElementDescriptors2(elementDescriptors, element2.props);
383
- }
384
- const typographies = await this.getTypographies([...typographyIds], siteVersion);
385
- typographies.forEach((typography) => {
386
- typography?.style.forEach((style) => {
387
- const swatchId = style.value.color?.swatchId;
388
- if (swatchId != null)
389
- swatchIds.add(swatchId);
390
- });
391
- });
392
- const pagePathnames = await this.getPagePathnameSlices([...pageIds], siteVersion, { locale });
393
- const { swatches, files, tables } = await this.getIntrospectedResources(
394
- {
395
- swatchIds: [...swatchIds],
396
- fileIds: [...fileIds],
397
- tableIds: [...tableIds]
398
- },
399
- siteVersion
400
- );
401
- const apiResources = {
402
- [import_api.APIResourceType.Swatch]: [...swatchIds].map((id) => ({
403
- id,
404
- value: swatches.find((swatch) => swatch?.id === id) ?? null
405
- })),
406
- [import_api.APIResourceType.File]: [...fileIds].map((id) => ({
407
- id,
408
- value: files.find((file) => file?.id === id) ?? null
409
- })),
410
- [import_api.APIResourceType.Typography]: [...typographyIds].map((id) => ({
411
- id,
412
- value: typographies.find((typography) => typography?.id === id) ?? null
413
- })),
414
- [import_api.APIResourceType.Table]: [...tableIds].map((id) => ({
415
- id,
416
- value: tables.find((table) => table?.id === id) ?? null
417
- })),
418
- [import_api.APIResourceType.PagePathnameSlice]: [...pageIds].map((id) => ({
419
- id,
420
- value: pagePathnames.find((pagePathnameSlice) => pagePathnameSlice?.id === id) ?? null,
421
- locale
422
- })),
423
- [import_api.APIResourceType.GlobalElement]: [...globalElements.entries()].map(([id, value]) => ({
424
- id,
425
- value
426
- })),
427
- [import_api.APIResourceType.LocalizedGlobalElement]: [...localizedGlobalElements.entries()].map(
428
- ([id, value]) => ({
429
- id,
430
- value,
431
- locale
432
- })
433
- )
434
- };
35
+ fetchOptions(_siteVersion) {
435
36
  return {
436
- apiResources,
437
- localizedResourcesMap: locale != null ? { [locale]: Object.fromEntries(localizedResourcesMap.entries()) } : {}
438
- };
439
- }
440
- async getPageSnapshot(pathname, {
441
- siteVersion: siteVersionPromise,
442
- locale,
443
- allowLocaleFallback = true
444
- }) {
445
- const queryParams = () => {
446
- const params = new URLSearchParams();
447
- if (locale)
448
- params.set("locale", locale);
449
- if (allowLocaleFallback != null)
450
- params.set("allowLocaleFallback", `${allowLocaleFallback}`);
451
- return params.toString();
452
- };
453
- const siteVersion = await siteVersionPromise;
454
- const response = await this.fetch(
455
- `v3/pages/${encodeURIComponent(pathname)}/document?${queryParams()}`,
456
- siteVersion
457
- );
458
- if (!response.ok) {
459
- if (response.status === 404)
460
- return null;
461
- console.error(`Failed to get page snapshot for '${pathname}'`, {
462
- response: await failedResponseBody(response),
463
- siteVersion,
464
- locale
465
- });
466
- throw new Error(`Failed to get page snapshot for '${pathname}': ${responseError(response)}`);
467
- }
468
- const document = await response.json();
469
- const baseLocalizedPage = document.localizedPages.find(({ parentId }) => parentId == null);
470
- const cacheData = await this.introspect(
471
- baseLocalizedPage?.data ?? document.data,
472
- siteVersion,
473
- // The /v3/pages endpoint returns null for document.locale when the requested locale is the default.
474
- // This legacy behavior is set to change with the upcoming /v4/pages endpoint.
475
- // We rely on document.locale when reading from the API cache, so ensure the cache is built during
476
- // introspection using the same value.
477
- document.locale
478
- );
479
- return {
480
- document,
481
- cacheData
482
- };
483
- }
484
- async getComponentSnapshot(id, {
485
- siteVersion: siteVersionPromise,
486
- locale,
487
- allowLocaleFallback = true
488
- }) {
489
- const searchParams = new URLSearchParams();
490
- if (locale)
491
- searchParams.set("locale", locale);
492
- const siteVersion = await siteVersionPromise;
493
- const key = (0, import_deterministic_uuid.deterministicUUID)({ id, locale, seed: this.apiKey.split("-").at(0) });
494
- const baseLocaleWasRequested = locale == null;
495
- const canAttemptLocaleFallback = !baseLocaleWasRequested && allowLocaleFallback;
496
- let response;
497
- const responseForRequestedLocale = await this.fetch(
498
- `v1/element-trees/${encodeURIComponent(id)}?${searchParams.toString()}`,
499
- siteVersion
500
- );
501
- if (responseForRequestedLocale.status === 404 && canAttemptLocaleFallback) {
502
- response = await this.fetch(`v1/element-trees/${encodeURIComponent(id)}`, siteVersion);
503
- } else {
504
- response = responseForRequestedLocale;
505
- }
506
- if (!response.ok) {
507
- if (response.status === 404) {
508
- return {
509
- document: {
510
- id,
511
- locale: locale ?? null,
512
- data: null
513
- },
514
- key,
515
- cacheData: import_react.CacheData.empty(),
516
- meta: {
517
- allowLocaleFallback,
518
- requestedLocale: locale ?? null
519
- }
520
- };
521
- }
522
- console.error(`Failed to get component snapshot for '${id}':`, {
523
- response: await failedResponseBody(response),
524
- siteVersion,
525
- locale
526
- });
527
- throw new Error(`Failed to get component snapshot for '${id}': ${responseError(response)}`);
528
- }
529
- const document = makeswiftComponentDocumentSchema.parse(await response.json());
530
- const cacheData = await this.introspect(document.data, siteVersion, locale ?? null);
531
- return {
532
- document,
533
- cacheData,
534
- key,
535
- meta: {
536
- allowLocaleFallback,
537
- requestedLocale: locale ?? null
37
+ next: {
38
+ tags: [import_cache.MAKESWIFT_CACHE_TAG]
538
39
  }
539
40
  };
540
41
  }
541
- async getSwatch(swatchId, siteVersion) {
542
- const response = await this.fetch(`v2/swatches/${swatchId}`, siteVersion);
543
- if (!response.ok) {
544
- if (response.status !== 404) {
545
- console.error(`Failed to get swatch '${swatchId}'`, {
546
- response: await failedResponseBody(response),
547
- siteVersion
548
- });
549
- }
550
- return null;
551
- }
552
- const swatch = await response.json();
553
- return swatch;
554
- }
555
- async getFile(fileId) {
556
- const result = await this.graphqlClient.request(
557
- import_documents.FileQuery,
558
- { fileId }
559
- );
560
- return result.file;
561
- }
562
- async getTypography(typographyId, siteVersion) {
563
- const response = await this.fetch(`v2/typographies/${typographyId}`, siteVersion);
564
- if (!response.ok) {
565
- if (response.status !== 404) {
566
- console.error(`Failed to get typography '${typographyId}'`, {
567
- response: await failedResponseBody(response),
568
- siteVersion
569
- });
570
- }
571
- return null;
572
- }
573
- const typography = await response.json();
574
- return typography;
575
- }
576
- async getGlobalElement(globalElementId, siteVersion) {
577
- const response = await this.fetch(`v2/global-elements/${globalElementId}`, siteVersion);
578
- if (!response.ok) {
579
- if (response.status !== 404) {
580
- console.error(`Failed to get global element '${globalElementId}'`, {
581
- response: await failedResponseBody(response),
582
- siteVersion
583
- });
584
- }
585
- return null;
586
- }
587
- const globalElement = await response.json();
588
- return globalElement;
589
- }
590
- async getLocalizedGlobalElement(globalElementId, locale, siteVersion) {
591
- const response = await this.fetch(
592
- `v2/localized-global-elements/${globalElementId}?locale=${locale}`,
593
- siteVersion
594
- );
595
- if (!response.ok) {
596
- if (response.status !== 404) {
597
- console.error(`Failed to get localized global element '${globalElementId}'`, {
598
- response: await failedResponseBody(response),
599
- siteVersion,
600
- locale
601
- });
602
- }
603
- return null;
604
- }
605
- const localizedGlobalElement = await response.json();
606
- return localizedGlobalElement;
607
- }
608
- async getPagePathnameSlices(pageIds, siteVersion, { locale }) {
609
- if (pageIds.length === 0)
610
- return [];
611
- const url = new URL(`v2/page-pathname-slices/bulk`, this.apiOrigin);
612
- pageIds.forEach((id) => url.searchParams.append("ids", id));
613
- if (locale != null)
614
- url.searchParams.set("locale", locale);
615
- const response = await this.fetch(url.pathname + url.search, siteVersion);
616
- if (!response.ok) {
617
- console.error(`Failed to get page pathname slice(s) for ${pageIds.join(", ")}`, {
618
- response: await failedResponseBody(response),
619
- siteVersion,
620
- locale
621
- });
622
- return [];
623
- }
624
- const json = await response.json();
625
- const pagePathnameSlices = pagePathnameSlicesAPISchema.parse(json);
626
- return pagePathnameSlices.map((pagePathnameSlice) => {
627
- if (pagePathnameSlice == null)
628
- return null;
629
- return {
630
- ...pagePathnameSlice,
631
- id: pagePathnameSlice.basePageId,
632
- localizedPathname: pagePathnameSlice.localizedPathname ?? null
633
- };
634
- });
635
- }
636
- async getPagePathnameSlice(pageId, siteVersion, { locale } = {}) {
637
- const pagePathnameSlices = await this.getPagePathnameSlices([pageId], siteVersion, { locale });
638
- return pagePathnameSlices.at(0) ?? null;
639
- }
640
- async getTable(tableId) {
641
- const result = await this.graphqlClient.request(
642
- import_documents.TableQuery,
643
- { tableId }
644
- );
645
- return result.table;
646
- }
647
- /**
648
- * @deprecated `getSitemap` is deprecated. We recommend constructing a sitemap
649
- * using data from `getPages` instead.
650
- */
651
- async getSitemap({
652
- limit = 50,
653
- after,
654
- pathnamePrefix,
655
- locale
656
- } = {}) {
657
- const url = new URL("v1/sitemap", this.apiOrigin);
658
- url.searchParams.set("limit", limit.toString());
659
- if (after != null)
660
- url.searchParams.set("after", after);
661
- if (pathnamePrefix != null)
662
- url.searchParams.set("pathnamePrefix", pathnamePrefix);
663
- if (locale != null)
664
- url.searchParams.set("locale", locale);
665
- const response = await this.fetch(url.pathname + url.search);
666
- if (!response.ok) {
667
- console.error("Failed to get sitemap ", {
668
- response: await failedResponseBody(response),
669
- limit,
670
- after,
671
- pathnamePrefix,
672
- locale
673
- });
674
- throw new Error(`Failed to get sitemap with error: ${responseError(response)}`);
675
- }
676
- const sitemap = await response.json();
677
- return sitemap;
678
- }
679
- getTranslatableData(elementTree) {
680
- return this.runtime.getTranslatableData(elementTree);
681
- }
682
- mergeTranslatedData(elementTree, translatedData) {
683
- return this.runtime.mergeTranslatedData(elementTree, translatedData);
684
- }
685
42
  }
686
43
  // Annotate the CommonJS export names for ESM import in node:
687
44
  0 && (module.exports = {
688
- Makeswift,
689
- componentDocumentToRootEmbeddedDocument,
690
- failedResponseBody,
691
- pageToRootDocument
45
+ Makeswift
692
46
  });
693
47
  //# sourceMappingURL=client.js.map