@makeswift/runtime 0.28.7-canary.6 → 0.28.7-canary.7

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 (40) hide show
  1. package/dist/cjs/api/graphql-api-client.js +1 -1
  2. package/dist/cjs/api/rest-api-client.js +1 -1
  3. package/dist/cjs/api-handler/handlers/manifest.js +1 -1
  4. package/dist/cjs/client/index.js +2 -2
  5. package/dist/cjs/client/index.js.map +1 -1
  6. package/dist/cjs/testing/fixtures/index.js +27 -0
  7. package/dist/cjs/testing/fixtures/index.js.map +1 -0
  8. package/dist/cjs/testing/fixtures/origins.js +32 -0
  9. package/dist/cjs/testing/fixtures/origins.js.map +1 -0
  10. package/dist/cjs/testing/fixtures/resources.js +105 -0
  11. package/dist/cjs/testing/fixtures/resources.js.map +1 -0
  12. package/dist/cjs/testing/{fixtures.js → fixtures/site-version.js} +4 -10
  13. package/dist/cjs/testing/fixtures/site-version.js.map +1 -0
  14. package/dist/esm/api/graphql-api-client.js +1 -1
  15. package/dist/esm/api/rest-api-client.js +1 -1
  16. package/dist/esm/api-handler/handlers/manifest.js +1 -1
  17. package/dist/esm/client/index.js +2 -2
  18. package/dist/esm/client/index.js.map +1 -1
  19. package/dist/esm/testing/fixtures/index.js +4 -0
  20. package/dist/esm/testing/fixtures/index.js.map +1 -0
  21. package/dist/esm/testing/fixtures/origins.js +8 -0
  22. package/dist/esm/testing/fixtures/origins.js.map +1 -0
  23. package/dist/esm/testing/fixtures/resources.js +75 -0
  24. package/dist/esm/testing/fixtures/resources.js.map +1 -0
  25. package/dist/esm/testing/{fixtures.js → fixtures/site-version.js} +1 -6
  26. package/dist/esm/testing/fixtures/site-version.js.map +1 -0
  27. package/dist/types/api/__tests__/host-api-resource-client.test.d.ts +2 -0
  28. package/dist/types/api/__tests__/host-api-resource-client.test.d.ts.map +1 -0
  29. package/dist/types/testing/fixtures/index.d.ts +4 -0
  30. package/dist/types/testing/fixtures/index.d.ts.map +1 -0
  31. package/dist/types/testing/{fixtures.d.ts → fixtures/origins.d.ts} +1 -3
  32. package/dist/types/testing/fixtures/origins.d.ts.map +1 -0
  33. package/dist/types/testing/fixtures/resources.d.ts +16 -0
  34. package/dist/types/testing/fixtures/resources.d.ts.map +1 -0
  35. package/dist/types/testing/fixtures/site-version.d.ts +3 -0
  36. package/dist/types/testing/fixtures/site-version.d.ts.map +1 -0
  37. package/package.json +1 -1
  38. package/dist/cjs/testing/fixtures.js.map +0 -1
  39. package/dist/esm/testing/fixtures.js.map +0 -1
  40. package/dist/types/testing/fixtures.d.ts.map +0 -1
@@ -27,7 +27,7 @@ class MakeswiftGraphQLApiClient {
27
27
  graphqlClient;
28
28
  constructor({ endpoint }) {
29
29
  this.graphqlClient = new import_client.GraphQLClient(endpoint, {
30
- "makeswift-runtime-version": "0.28.7-canary.6"
30
+ "makeswift-runtime-version": "0.28.7-canary.7"
31
31
  });
32
32
  }
33
33
  async createTableRecord(tableId, columns) {
@@ -147,7 +147,7 @@ class MakeswiftRestAPIClient {
147
147
  const requestHeaders = new Headers({
148
148
  "x-api-key": this.apiKey,
149
149
  "makeswift-site-api-key": this.apiKey,
150
- "makeswift-runtime-version": "0.28.7-canary.6"
150
+ "makeswift-runtime-version": "0.28.7-canary.7"
151
151
  });
152
152
  if (siteVersion?.token) {
153
153
  requestUrl.searchParams.set("version", siteVersion.version);
@@ -28,7 +28,7 @@ async function manifestHandler(req, { apiKey, manifest }) {
28
28
  return import_request_response.ApiResponse.json({ message: "Unauthorized" }, { status: 401 });
29
29
  }
30
30
  return import_request_response.ApiResponse.json({
31
- version: "0.28.7-canary.6",
31
+ version: "0.28.7-canary.7",
32
32
  interactionMode: true,
33
33
  clientSideNavigation: false,
34
34
  elementFromPoint: false,
@@ -588,7 +588,7 @@ Received "${apiKey}" instead.`
588
588
  throw new Error(`Failed to get component snapshot for '${id}': ${responseError(response)}`);
589
589
  }
590
590
  const document = Schema.componentDocument.parse(await response.json());
591
- const cacheData = await this.introspect(document.data, siteVersion, locale ?? null);
591
+ const cacheData = await this.introspect(document.data, siteVersion, document.locale);
592
592
  return {
593
593
  document,
594
594
  cacheData,
@@ -669,7 +669,7 @@ Received "${apiKey}" instead.`
669
669
  headers: {
670
670
  "x-api-key": this.apiKey,
671
671
  "makeswift-site-api-key": this.apiKey,
672
- "makeswift-runtime-version": "0.28.7-canary.6",
672
+ "makeswift-runtime-version": "0.28.7-canary.7",
673
673
  "content-type": "application/json"
674
674
  },
675
675
  body: JSON.stringify({ token }),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/client/index.ts"],"sourcesContent":["import { z } from 'zod'\n\nimport {\n type UnversionedResourcesQueryResult,\n type UnversionedResourcesQueryVariables,\n} from '../api/graphql/generated/types'\n\nimport {\n APIResourceType,\n type File,\n type GlobalElement,\n type LocalizedGlobalElement,\n type Swatch,\n type Table,\n type Typography,\n} from '../api/types'\n\nimport { CacheData } from '../api/api-resources-client'\n\nimport { MakeswiftGraphQLApiClient } from '../api/graphql-api-client'\nimport { MakeswiftRestAPIClient, failedResponseBody } from '../api/rest-api-client'\nimport { type SiteVersion } from '../api/site-version'\n\nimport { Descriptor as PropControllerDescriptor } from '../prop-controllers/descriptors'\nimport {\n getElementChildren,\n getSwatchIds,\n getFileIds,\n getPageIds,\n getTableIds,\n getTypographyIds,\n} from '../prop-controllers/introspection'\n\nimport { type ReactRuntimeCore } from '../runtimes/react/react-runtime-core'\n\nimport {\n type Element,\n type ElementData,\n type Data,\n getPropControllerDescriptors,\n isElementReference,\n} from '../state/read-only-state'\n\nimport { mergeTranslatedContent } from '../state/translations/merge'\nimport { getTranslatableContent } from '../state/translations/get'\n\nimport { deterministicUUID } from '../utils/deterministic-uuid'\nimport { toIterablePaginationResult } from '../utils/pagination'\nimport { isNonNullable } from '../utils/isNonNullable'\n\nimport {\n type MakeswiftComponentDocument,\n type MakeswiftComponentSnapshot,\n} from './component-snapshot'\n\nimport { type MakeswiftPageDocument, type MakeswiftPageSnapshot } from './page-snapshot'\n\nimport * as Schema from './schema'\n\nexport { SnippetLocation } from '../api/graphql/generated/types'\n\n// TODO: clean up the exports below, as most of them are for internal consumptions only\n// and should not be publicly exposed\nexport {\n type MakeswiftComponentDocument,\n type MakeswiftComponentDocumentFallback,\n type MakeswiftComponentSnapshot,\n type MakeswiftComponentMetadata as MakeswiftComponentSnapshotMetadata,\n componentDocumentToRootEmbeddedDocument,\n} from './component-snapshot'\n\nexport {\n type Snippet,\n type Font,\n type MakeswiftPageDocument,\n type MakeswiftPageSnapshot,\n pageToRootDocument,\n} from './page-snapshot'\n\n// TODO: remove, leftover from the `getSitemap` method removed in 0.25.0:\n// https://github.com/makeswift/makeswift/releases/tag/%40makeswift%2Fruntime%400.25.0\nexport type Sitemap = {\n id: string\n loc: string\n lastmod?: string\n changefreq?: 'always' | 'hourly' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'never'\n priority?: number\n alternateRefs?: {\n hreflang: string\n href: string\n }[]\n}[]\n\nexport type MakeswiftPage = z.infer<typeof Schema.pageData>\nexport type MakeswiftGetPagesResult = z.infer<typeof Schema.getPagesResult>\nexport type PreviewTokenPayload = z.infer<typeof Schema.previewTokenPayload>\nexport type GetFontsAPI = z.infer<typeof Schema.fonts>\n\ntype GetPagesParams = z.infer<typeof Schema.getPagesParams>\ntype GetPageResult = z.infer<typeof Schema.getPageResult>\n\nexport class MakeswiftClient extends MakeswiftRestAPIClient {\n private graphqlClient: MakeswiftGraphQLApiClient\n private runtime: ReactRuntimeCore\n\n constructor(\n apiKey: string,\n {\n runtime,\n }: {\n runtime: ReactRuntimeCore\n },\n ) {\n if (typeof apiKey !== 'string') {\n throw new Error(\n 'The Makeswift client must be passed a valid Makeswift site API key: ' +\n \"`new Makeswift('<makeswift_site_api_key>')`\\n\" +\n `Received \"${apiKey}\" instead.`,\n )\n }\n\n super({\n fetch: runtime.fetch,\n apiKey,\n apiOrigin: runtime.apiOrigin,\n })\n\n this.graphqlClient = new MakeswiftGraphQLApiClient({\n endpoint: runtime.graphqlApiEndpoint,\n })\n\n this.runtime = runtime\n }\n\n private getPagesInternal = async ({\n siteVersion = null,\n ...params\n }: {\n siteVersion?: SiteVersion | null\n } & GetPagesParams = {}): Promise<MakeswiftGetPagesResult> => {\n const queryParams = getPagesQueryParams(params)\n\n const response = await this.fetch(`v5/pages?${queryParams.toString()}`, siteVersion)\n if (!response.ok) {\n console.error('Failed to get pages', {\n response: await failedResponseBody(response),\n siteVersion,\n params,\n })\n\n throw new Error(`Failed to get pages: ${responseError(response)}`)\n }\n\n const result = await response.json()\n const parsedResponse = Schema.getPagesResult.safeParse(result)\n if (!parsedResponse.success) {\n throw new Error(\n `Failed to parse 'getPages' response: ${parsedResponse.error.errors.map(e => e.message).join('; ')}`,\n )\n }\n return parsedResponse.data\n }\n\n getPages = toIterablePaginationResult(this.getPagesInternal)\n\n async getPage(\n pathname: string,\n { siteVersion = null, locale }: { siteVersion?: SiteVersion | null; locale?: string } = {},\n ): Promise<GetPageResult | null> {\n const url = new URL(`v3/pages/${encodeURIComponent(pathname)}`, this.apiOrigin)\n if (locale) url.searchParams.set('locale', locale)\n\n const response = await this.fetch(url.pathname + url.search, siteVersion)\n\n if (!response.ok) {\n const failedBody = await failedResponseBody(response)\n if (response.status === 404) return null\n\n console.error(`Failed to get page snapshot for '${pathname}'`, {\n response: failedBody,\n siteVersion,\n locale,\n })\n\n throw new Error(`Failed to get page snapshot for '${pathname}': ${responseError(response)}`)\n }\n\n const json = await response.json()\n\n return Schema.getPageResult.parse(json)\n }\n\n private async getTypographies(\n typographyIds: string[],\n siteVersion: SiteVersion | null,\n ): Promise<(Typography | null)[]> {\n if (typographyIds.length === 0) return []\n\n const url = new URL(`v3/typographies/bulk`, this.apiOrigin)\n\n typographyIds.forEach(id => {\n url.searchParams.append('ids', id)\n })\n\n const response = await this.fetch(url.pathname + url.search, siteVersion)\n\n if (!response.ok) {\n console.error(`Failed to get typographies for [${typographyIds.join(', ')}]`, {\n response: await failedResponseBody(response),\n siteVersion,\n })\n\n return []\n }\n\n const body = await response.json()\n\n return body\n }\n\n private async getSwatches(\n ids: string[],\n siteVersion: SiteVersion | null,\n ): Promise<(Swatch | null)[]> {\n if (ids.length === 0) return []\n\n const url = new URL(`v3/swatches/bulk`, this.apiOrigin)\n\n ids.forEach(id => {\n url.searchParams.append('ids', id)\n })\n\n const response = await this.fetch(url.pathname + url.search, siteVersion)\n\n if (!response.ok) {\n console.error(`Failed to get swatches for ${ids.join(', ')}`, {\n response: await failedResponseBody(response),\n siteVersion,\n })\n\n return []\n }\n\n return await response.json()\n }\n\n private async getElementTreesBulk(\n ids: string[],\n siteVersion: SiteVersion | null,\n locale?: string,\n ): Promise<(MakeswiftComponentDocument | null)[]> {\n if (ids.length === 0) return []\n\n const requestBody: { ids: string[]; locale?: string } = { ids }\n if (locale != null) requestBody.locale = locale\n\n const response = await this.fetch('v0/element-trees/bulk', siteVersion, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(requestBody),\n })\n\n if (!response.ok) {\n const failedBody = await failedResponseBody(response)\n\n // 404 can mean the requested version has no commit (e.g., site never published)\n if (response.status === 404) return ids.map(() => null)\n\n console.error(`Failed to get element trees for [${ids.join(', ')}]`, {\n response: failedBody,\n siteVersion,\n locale,\n })\n\n throw new Error(`Failed to get element trees: ${responseError(response)}`)\n }\n\n const responseBody = await response.json()\n\n return responseBody.map((item: unknown) =>\n item != null ? Schema.componentDocument.parse(item) : null,\n )\n }\n\n private async getIntrospectedResources(\n {\n swatchIds,\n ...unversionedResourceIds\n }: UnversionedResourcesQueryVariables & { swatchIds: string[] },\n siteVersion: SiteVersion | null,\n ): Promise<UnversionedResourcesQueryResult & { swatches: (Swatch | null)[] }> {\n const unversionedResources =\n await this.graphqlClient.getUnversionedResources(unversionedResourceIds)\n\n const swatches = await this.getSwatches(swatchIds, siteVersion)\n\n return { ...unversionedResources, swatches }\n }\n\n // TODO: Consolidate this method with the introspectMany method once the\n // unstable_getComponentSnapshots method is stable and tested in production.\n private async introspect(\n element: Element,\n siteVersion: SiteVersion | null,\n locale: string | null,\n ): Promise<CacheData> {\n const descriptors = this.getElementDescriptors()\n const swatchIds = new Set<string>()\n const fileIds = new Set<string>()\n const typographyIds = new Set<string>()\n const tableIds = new Set<string>()\n const pageIds = new Set<string>()\n const globalElements = new Map<string, GlobalElement | null>()\n const localizedGlobalElements = new Map<string, LocalizedGlobalElement | null>()\n const localizedResourcesMap = new Map<string, string | null>()\n\n const remaining = [element]\n const seen = new Set<string>()\n let current: Element | undefined\n\n while ((current = remaining.pop())) {\n let element: ElementData\n\n if (isElementReference(current)) {\n const globalElementId = current.value\n const globalElement = await this.getGlobalElement(globalElementId, siteVersion)\n let elementData = globalElement?.data\n\n if (locale) {\n const localizedGlobalElement = await this.getLocalizedGlobalElement(\n globalElementId,\n locale,\n siteVersion,\n )\n\n if (localizedGlobalElement) {\n // Update the logic here when we can merge element trees\n elementData = localizedGlobalElement.data\n\n localizedResourcesMap.set(globalElementId, localizedGlobalElement.id)\n localizedGlobalElements.set(localizedGlobalElement.id, localizedGlobalElement)\n } else {\n // Record that this localized global element doesn't exist so the\n // client won't try to fetch it again (which would result in a 404).\n localizedResourcesMap.set(globalElementId, null)\n }\n }\n\n globalElements.set(globalElementId, globalElement)\n\n if (elementData == null) continue\n\n element = elementData as ElementData\n } else {\n element = current\n }\n\n const elementDescriptors = descriptors.get(element.type)\n\n if (elementDescriptors == null) continue\n\n getResourcesFromElementDescriptors(elementDescriptors, element.props)\n\n function getResourcesFromElementDescriptors(\n elementDescriptors: Record<string, PropControllerDescriptor>,\n props: ElementData['props'],\n ) {\n Object.entries(elementDescriptors).forEach(([propName, descriptor]) => {\n getSwatchIds(descriptor, props[propName]).forEach(swatchId => {\n swatchIds.add(swatchId)\n })\n\n getFileIds(descriptor, props[propName]).forEach(fileId => fileIds.add(fileId))\n\n getTypographyIds(descriptor, props[propName]).forEach(typographyId =>\n typographyIds.add(typographyId),\n )\n\n getTableIds(descriptor, props[propName]).forEach(tableId => tableIds.add(tableId))\n\n getPageIds(descriptor, props[propName]).forEach(pageId => pageIds.add(pageId))\n\n getElementChildren(descriptor, props[propName]).forEach(child => {\n if (!seen.has(child.key)) {\n seen.add(child.key)\n\n remaining.push(child)\n }\n })\n })\n }\n }\n\n const typographies = await this.getTypographies([...typographyIds], siteVersion)\n\n typographies.forEach(typography => {\n typography?.style.forEach(style => {\n const swatchId = style.value.color?.swatchId\n\n if (swatchId != null) swatchIds.add(swatchId)\n })\n })\n\n const pagePathnames = await this.getPagePathnameSlices([...pageIds], siteVersion, { locale })\n\n const { swatches, files, tables } = await this.getIntrospectedResources(\n {\n swatchIds: [...swatchIds],\n fileIds: [...fileIds],\n tableIds: [...tableIds],\n },\n siteVersion,\n )\n\n const apiResources = {\n [APIResourceType.Swatch]: [...swatchIds].map(id => ({\n id,\n value: swatches.find(swatch => swatch?.id === id) ?? null,\n })),\n [APIResourceType.File]: [...fileIds].map(id => ({\n id,\n value: files.find(file => file?.id === id) ?? null,\n })),\n [APIResourceType.Typography]: [...typographyIds].map(id => ({\n id,\n value: typographies.find(typography => typography?.id === id) ?? null,\n })),\n [APIResourceType.Table]: [...tableIds].map(id => ({\n id,\n value: tables.find(table => table?.id === id) ?? null,\n })),\n [APIResourceType.PagePathnameSlice]: [...pageIds].map(id => ({\n id,\n value: pagePathnames.find(pagePathnameSlice => pagePathnameSlice?.id === id) ?? null,\n locale,\n })),\n [APIResourceType.GlobalElement]: [...globalElements.entries()].map(([id, value]) => ({\n id,\n value,\n })),\n [APIResourceType.LocalizedGlobalElement]: [...localizedGlobalElements.entries()].map(\n ([id, value]) => ({\n id,\n value,\n locale,\n }),\n ),\n }\n\n return {\n apiResources,\n localizedResourcesMap:\n locale != null ? { [locale]: Object.fromEntries(localizedResourcesMap.entries()) } : {},\n }\n }\n\n private async introspectMany(\n trees: { id: string; data: Element }[],\n siteVersion: SiteVersion | null,\n locale: string | null,\n ): Promise<Map<string, CacheData>> {\n if (trees.length === 0) return new Map()\n\n const descriptors = this.getElementDescriptors()\n\n // Shared caches for global elements (deduplication across trees)\n const globalElementCache = new Map<string, GlobalElement | null>()\n const localizedGlobalElementCache = new Map<string, LocalizedGlobalElement | null>()\n\n // Per-tree tracking, keyed by tree ID\n const treeCaches = new Map(\n trees.map(tree => [\n tree.id,\n {\n data: tree.data,\n swatchIds: new Set<string>(),\n fileIds: new Set<string>(),\n typographyIds: new Set<string>(),\n tableIds: new Set<string>(),\n pageIds: new Set<string>(),\n globalElements: new Map<string, GlobalElement | null>(),\n localizedGlobalElements: new Map<string, LocalizedGlobalElement | null>(),\n localizedResourcesMap: new Map<string, string | null>(),\n },\n ]),\n )\n\n // DFS traversal per tree\n for (const currentTreeCache of treeCaches.values()) {\n const remaining = [currentTreeCache.data]\n const seen = new Set<string>()\n let current: Element | undefined\n\n while ((current = remaining.pop())) {\n let element: ElementData\n\n if (isElementReference(current)) {\n const globalElementId = current.value\n\n // Fetch global element, using cache if already fetched for another tree\n let globalElement: GlobalElement | null\n if (globalElementCache.has(globalElementId)) {\n globalElement = globalElementCache.get(globalElementId)!\n } else {\n globalElement = await this.getGlobalElement(globalElementId, siteVersion)\n globalElementCache.set(globalElementId, globalElement)\n }\n\n let elementData = globalElement?.data\n\n if (locale) {\n let localizedGlobalElement: LocalizedGlobalElement | null\n if (localizedGlobalElementCache.has(globalElementId)) {\n localizedGlobalElement = localizedGlobalElementCache.get(globalElementId)!\n } else {\n localizedGlobalElement = await this.getLocalizedGlobalElement(\n globalElementId,\n locale,\n siteVersion,\n )\n localizedGlobalElementCache.set(globalElementId, localizedGlobalElement)\n }\n\n if (localizedGlobalElement) {\n // Update the logic here when we can merge element trees\n elementData = localizedGlobalElement.data\n\n currentTreeCache.localizedResourcesMap.set(globalElementId, localizedGlobalElement.id)\n currentTreeCache.localizedGlobalElements.set(\n localizedGlobalElement.id,\n localizedGlobalElement,\n )\n } else {\n // Record that this localized global element doesn't exist so the\n // client won't try to fetch it again (which would result in a 404).\n currentTreeCache.localizedResourcesMap.set(globalElementId, null)\n }\n }\n\n currentTreeCache.globalElements.set(globalElementId, globalElement)\n\n if (elementData == null) continue\n\n element = elementData as ElementData\n } else {\n element = current\n }\n\n const elementDescriptors = descriptors.get(element.type)\n\n if (elementDescriptors == null) continue\n\n getResourcesFromElementDescriptors(elementDescriptors, element.props)\n\n function getResourcesFromElementDescriptors(\n elementDescriptors: Record<string, PropControllerDescriptor>,\n props: ElementData['props'],\n ) {\n Object.entries(elementDescriptors).forEach(([propName, descriptor]) => {\n getSwatchIds(descriptor, props[propName]).forEach(swatchId => {\n currentTreeCache.swatchIds.add(swatchId)\n })\n\n getFileIds(descriptor, props[propName]).forEach(fileId => {\n currentTreeCache.fileIds.add(fileId)\n })\n\n getTypographyIds(descriptor, props[propName]).forEach(typographyId => {\n currentTreeCache.typographyIds.add(typographyId)\n })\n\n getTableIds(descriptor, props[propName]).forEach(tableId => {\n currentTreeCache.tableIds.add(tableId)\n })\n\n getPageIds(descriptor, props[propName]).forEach(pageId => {\n currentTreeCache.pageIds.add(pageId)\n })\n\n getElementChildren(descriptor, props[propName]).forEach(child => {\n if (!seen.has(child.key)) {\n seen.add(child.key)\n remaining.push(child)\n }\n })\n })\n }\n }\n }\n\n // Accumulate shared sets from per-tree state for bulk calls\n const allSwatchIds = new Set<string>()\n const allFileIds = new Set<string>()\n const allTypographyIds = new Set<string>()\n const allTableIds = new Set<string>()\n const allPageIds = new Set<string>()\n\n for (const currentTreeCache of treeCaches.values()) {\n currentTreeCache.swatchIds.forEach(id => allSwatchIds.add(id))\n currentTreeCache.fileIds.forEach(id => allFileIds.add(id))\n currentTreeCache.typographyIds.forEach(id => allTypographyIds.add(id))\n currentTreeCache.tableIds.forEach(id => allTableIds.add(id))\n currentTreeCache.pageIds.forEach(id => allPageIds.add(id))\n }\n\n // One combined round of bulk sub-resource calls\n\n // 1. Fetch typographies first (needed for secondary swatch discovery)\n const typographies = await this.getTypographies([...allTypographyIds], siteVersion)\n\n // 2. Secondary discovery: check for additional swatch IDs in typography styles\n typographies.forEach(typography => {\n if (typography == null) return\n\n const secondarySwatchIds: string[] = []\n typography.style.forEach(style => {\n const swatchId = style.value.color?.swatchId\n if (swatchId != null) {\n secondarySwatchIds.push(swatchId)\n allSwatchIds.add(swatchId)\n }\n })\n\n if (secondarySwatchIds.length > 0) {\n // Add discovered swatches to per-tree sets for trees that reference this typography\n for (const currentTreeCache of treeCaches.values()) {\n if (currentTreeCache.typographyIds.has(typography.id)) {\n secondarySwatchIds.forEach(id => currentTreeCache.swatchIds.add(id))\n }\n }\n }\n })\n\n // 3. Fetch remaining resources in parallel\n const [pagePathnames, { swatches, files, tables }] = await Promise.all([\n this.getPagePathnameSlices([...allPageIds], siteVersion, { locale }),\n this.getIntrospectedResources(\n {\n swatchIds: [...allSwatchIds],\n fileIds: [...allFileIds],\n tableIds: [...allTableIds],\n },\n siteVersion,\n ),\n ])\n\n // Build per-tree CacheData using only the resources that tree references\n const result = new Map<string, CacheData>()\n\n for (const [treeId, currentTreeCache] of treeCaches) {\n const apiResources = {\n [APIResourceType.Swatch]: [...currentTreeCache.swatchIds].map(id => ({\n id,\n value: swatches.find(swatch => swatch?.id === id) ?? null,\n })),\n [APIResourceType.File]: [...currentTreeCache.fileIds].map(id => ({\n id,\n value: files.find(file => file?.id === id) ?? null,\n })),\n [APIResourceType.Typography]: [...currentTreeCache.typographyIds].map(id => ({\n id,\n value: typographies.find(typography => typography?.id === id) ?? null,\n })),\n [APIResourceType.Table]: [...currentTreeCache.tableIds].map(id => ({\n id,\n value: tables.find(table => table?.id === id) ?? null,\n })),\n [APIResourceType.PagePathnameSlice]: [...currentTreeCache.pageIds].map(id => ({\n id,\n value: pagePathnames.find(pagePathnameSlice => pagePathnameSlice?.id === id) ?? null,\n locale,\n })),\n [APIResourceType.GlobalElement]: [...currentTreeCache.globalElements.entries()].map(\n ([id, value]) => ({\n id,\n value,\n }),\n ),\n [APIResourceType.LocalizedGlobalElement]: [\n ...currentTreeCache.localizedGlobalElements.entries(),\n ].map(([id, value]) => ({\n id,\n value,\n locale,\n })),\n }\n\n result.set(treeId, {\n apiResources,\n localizedResourcesMap:\n locale != null\n ? { [locale]: Object.fromEntries(currentTreeCache.localizedResourcesMap.entries()) }\n : {},\n })\n }\n\n return result\n }\n\n async getPageSnapshot(\n pathname: string,\n {\n siteVersion: siteVersionPromise,\n locale,\n allowLocaleFallback = true,\n }: {\n siteVersion: SiteVersion | null | Promise<SiteVersion | null>\n locale?: string\n allowLocaleFallback?: boolean\n },\n ): Promise<MakeswiftPageSnapshot | null> {\n const queryParams = (): string => {\n const params = new URLSearchParams()\n if (locale) params.set('locale', locale)\n if (allowLocaleFallback != null) params.set('allowLocaleFallback', `${allowLocaleFallback}`)\n return params.toString()\n }\n\n const siteVersion = await siteVersionPromise\n const response = await this.fetch(\n `v4/pages/${encodeURIComponent(pathname)}/document?${queryParams()}`,\n siteVersion,\n )\n\n if (!response.ok) {\n const failedBody = await failedResponseBody(response)\n if (response.status === 404) return null\n\n console.error(`Failed to get page snapshot for '${pathname}'`, {\n response: failedBody,\n siteVersion,\n locale,\n })\n\n throw new Error(`Failed to get page snapshot for '${pathname}': ${responseError(response)}`)\n }\n\n const document: MakeswiftPageDocument = await response.json()\n const baseLocalizedPage = document.localizedPages.find(({ parentId }) => parentId == null)\n\n const cacheData = await this.introspect(\n baseLocalizedPage?.data ?? document.data,\n siteVersion,\n // The /v3/pages endpoint returns null for document.locale when the requested locale is the default.\n // This legacy behavior is set to change with the upcoming /v4/pages endpoint.\n // We rely on document.locale when reading from the API cache, so ensure the cache is built during\n // introspection using the same value.\n document.locale,\n )\n\n return {\n document,\n cacheData,\n }\n }\n\n async getComponentSnapshot(\n id: string,\n {\n siteVersion: siteVersionPromise,\n locale,\n allowLocaleFallback = true,\n }: {\n siteVersion: SiteVersion | null | Promise<SiteVersion | null>\n locale?: string\n allowLocaleFallback?: boolean\n },\n ): Promise<MakeswiftComponentSnapshot> {\n const searchParams = new URLSearchParams()\n if (locale) searchParams.set('locale', locale)\n\n const siteVersion = await siteVersionPromise\n const key = deterministicUUID({ id, locale, seed: this.apiKey.split('-').at(0) })\n const baseLocaleWasRequested = locale == null\n const canAttemptLocaleFallback = !baseLocaleWasRequested && allowLocaleFallback\n\n let response\n const responseForRequestedLocale = await this.fetch(\n `v2/element-trees/${encodeURIComponent(id)}?${searchParams.toString()}`,\n siteVersion,\n )\n\n if (responseForRequestedLocale.status === 404 && canAttemptLocaleFallback) {\n await failedResponseBody(responseForRequestedLocale)\n response = await this.fetch(`v2/element-trees/${encodeURIComponent(id)}`, siteVersion)\n } else {\n response = responseForRequestedLocale\n }\n\n if (!response.ok) {\n // See comment on `failedResponseBody` for why we always consume the\n // response body of failed responses.\n const failedBody = await failedResponseBody(response)\n if (response.status === 404) {\n return {\n document: {\n id,\n locale: locale ?? null,\n data: null,\n },\n key,\n cacheData: CacheData.empty(),\n meta: {\n allowLocaleFallback,\n requestedLocale: locale ?? null,\n },\n }\n }\n\n console.error(`Failed to get component snapshot for '${id}':`, {\n response: failedBody,\n siteVersion,\n locale,\n })\n\n throw new Error(`Failed to get component snapshot for '${id}': ${responseError(response)}`)\n }\n\n const document = Schema.componentDocument.parse(await response.json())\n const cacheData = await this.introspect(document.data, siteVersion, locale ?? null)\n\n return {\n document,\n cacheData,\n key,\n meta: {\n allowLocaleFallback,\n requestedLocale: locale ?? null,\n },\n }\n }\n\n /**\n * Fetches multiple component snapshots in a single bulk request with unified introspection.\n *\n * @param ids - Element tree IDs to fetch. Maximum 100 IDs per call.\n */\n // TODO: Make getComponentSnapshot use this method under the hood once the v0 bulk endpoint is stable.\n async unstable_getComponentSnapshots(\n ids: string[],\n {\n siteVersion: siteVersionPromise,\n locale,\n allowLocaleFallback = true,\n }: {\n siteVersion: SiteVersion | null | Promise<SiteVersion | null>\n locale?: string\n allowLocaleFallback?: boolean\n },\n ): Promise<MakeswiftComponentSnapshot[]> {\n if (ids.length === 0) return []\n const siteVersion = await siteVersionPromise\n\n // Step 1: Bulk fetch\n let documents = await this.getElementTreesBulk(ids, siteVersion, locale)\n\n // Step 2: Locale fallback — second-pass for IDs that returned null\n const baseLocaleWasRequested = locale == null\n const canAttemptLocaleFallback = !baseLocaleWasRequested && allowLocaleFallback\n const fallbackIndices: number[] = []\n\n if (canAttemptLocaleFallback) {\n documents.forEach((doc, i) => {\n if (doc == null) fallbackIndices.push(i)\n })\n\n if (fallbackIndices.length > 0) {\n const fallbackIds = fallbackIndices.map(i => ids[i])\n const fallbackDocuments = await this.getElementTreesBulk(fallbackIds, siteVersion)\n\n fallbackIndices.forEach((originalIndex, fallbackIndex) => {\n documents[originalIndex] = fallbackDocuments[fallbackIndex]\n })\n }\n }\n\n // Step 3: Unified introspection for all trees that have data\n const treesToIntrospect = documents\n .map(doc => (doc?.data != null ? { id: doc.id, data: doc.data } : null))\n .filter(isNonNullable)\n\n const cacheDataMap = await this.introspectMany(treesToIntrospect, siteVersion, locale ?? null)\n\n // Step 4: Build per-component results\n return ids.map((id, i) => {\n const document = documents[i]\n const key = deterministicUUID({ id, locale, seed: this.apiKey.split('-').at(0) })\n\n if (document == null || document.data == null) {\n return {\n document: { id, locale: locale ?? null, data: null },\n key,\n cacheData: CacheData.empty(),\n meta: { allowLocaleFallback, requestedLocale: locale ?? null },\n }\n }\n\n return {\n document,\n key,\n cacheData: cacheDataMap.get(id) ?? CacheData.empty(),\n meta: { allowLocaleFallback, requestedLocale: locale ?? null },\n }\n })\n }\n\n async getFile(fileId: string): Promise<File | null> {\n return this.graphqlClient.getFile(fileId)\n }\n\n async getTable(tableId: string): Promise<Table | null> {\n return this.graphqlClient.getTable(tableId)\n }\n\n getTranslatableData(elementTree: ElementData): Record<string, Data> {\n return getTranslatableContent(this.getElementDescriptors(), elementTree)\n }\n\n mergeTranslatedData(elementTree: ElementData, translatedData: Record<string, Data>): Element {\n return mergeTranslatedContent(this.getElementDescriptors(), elementTree, translatedData)\n }\n\n async readPreviewToken(token: string): Promise<PreviewTokenPayload | null> {\n const response = await fetch(new URL('v1/preview-tokens/reads', this.apiOrigin).toString(), {\n method: 'POST',\n headers: {\n 'x-api-key': this.apiKey,\n 'makeswift-site-api-key': this.apiKey,\n 'makeswift-runtime-version': PACKAGE_VERSION,\n 'content-type': 'application/json',\n },\n body: JSON.stringify({ token }),\n cache: 'no-store',\n })\n\n if (!response.ok) {\n const failedBody = await failedResponseBody(response)\n if (response.status === 401) {\n console.error(`Preview token is invalid or expired`, {\n response: failedBody,\n })\n } else if (response.status !== 404) {\n console.error(`Failed to verify preview token`, {\n response: failedBody,\n })\n }\n\n return null\n }\n\n const json = await response.json()\n\n const parsed = Schema.previewTokenPayload.safeParse(json)\n if (!parsed.success) {\n throw new Error(\n `Failed to parse preview token payload: ${parsed.error.errors.map(e => e.message).join('; ')}`,\n )\n }\n\n return parsed.data\n }\n\n async unstable_getFonts(siteVersion: SiteVersion | null = null): Promise<GetFontsAPI | null> {\n const response = await this.fetch('v1_unstable/fonts', siteVersion)\n\n if (!response.ok) {\n console.error('Failed to fetch fonts', {\n response: await failedResponseBody(response),\n siteVersion,\n })\n\n return null\n }\n\n const json = await response.json()\n\n const parsed = Schema.fonts.safeParse(json)\n if (!parsed.success) {\n console.error('Failed to parse fonts API response', {\n response: json,\n siteVersion,\n })\n\n return null\n }\n\n return parsed.data\n }\n\n private getElementDescriptors() {\n return getPropControllerDescriptors(this.runtime.protoStore.getState())\n }\n}\n\nfunction getPagesQueryParams({\n limit = 100,\n after,\n sortBy,\n sortDirection,\n includeOffline,\n pathPrefix,\n locale,\n}: GetPagesParams): URLSearchParams {\n const params = new URLSearchParams()\n\n if (limit != null) params.set('limit', limit.toString())\n if (after != null) params.set('after', after)\n if (sortBy != null) params.set('sortBy', sortBy)\n if (sortDirection != null) params.set('sortDirection', sortDirection)\n if (includeOffline != null) params.set('includeOffline', includeOffline.toString())\n if (pathPrefix != null) params.set('pathPrefix', pathPrefix)\n if (locale != null) params.set('locale', locale)\n\n return params\n}\n\nfunction responseError(response: Response): string {\n return `${response.status} ${response.statusText}`\n}\n"],"mappings":"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","names":["import_types","import_component_snapshot","import_page_snapshot","getResourcesFromElementDescriptors","elementDescriptors","element"]}
1
+ {"version":3,"sources":["../../../src/client/index.ts"],"sourcesContent":["import { z } from 'zod'\n\nimport {\n type UnversionedResourcesQueryResult,\n type UnversionedResourcesQueryVariables,\n} from '../api/graphql/generated/types'\n\nimport {\n APIResourceType,\n type File,\n type GlobalElement,\n type LocalizedGlobalElement,\n type Swatch,\n type Table,\n type Typography,\n} from '../api/types'\n\nimport { CacheData } from '../api/api-resources-client'\n\nimport { MakeswiftGraphQLApiClient } from '../api/graphql-api-client'\nimport { MakeswiftRestAPIClient, failedResponseBody } from '../api/rest-api-client'\nimport { type SiteVersion } from '../api/site-version'\n\nimport { Descriptor as PropControllerDescriptor } from '../prop-controllers/descriptors'\nimport {\n getElementChildren,\n getSwatchIds,\n getFileIds,\n getPageIds,\n getTableIds,\n getTypographyIds,\n} from '../prop-controllers/introspection'\n\nimport { type ReactRuntimeCore } from '../runtimes/react/react-runtime-core'\n\nimport {\n type Element,\n type ElementData,\n type Data,\n getPropControllerDescriptors,\n isElementReference,\n} from '../state/read-only-state'\n\nimport { mergeTranslatedContent } from '../state/translations/merge'\nimport { getTranslatableContent } from '../state/translations/get'\n\nimport { deterministicUUID } from '../utils/deterministic-uuid'\nimport { toIterablePaginationResult } from '../utils/pagination'\nimport { isNonNullable } from '../utils/isNonNullable'\n\nimport {\n type MakeswiftComponentDocument,\n type MakeswiftComponentSnapshot,\n} from './component-snapshot'\n\nimport { type MakeswiftPageDocument, type MakeswiftPageSnapshot } from './page-snapshot'\n\nimport * as Schema from './schema'\n\nexport { SnippetLocation } from '../api/graphql/generated/types'\n\n// TODO: clean up the exports below, as most of them are for internal consumptions only\n// and should not be publicly exposed\nexport {\n type MakeswiftComponentDocument,\n type MakeswiftComponentDocumentFallback,\n type MakeswiftComponentSnapshot,\n type MakeswiftComponentMetadata as MakeswiftComponentSnapshotMetadata,\n componentDocumentToRootEmbeddedDocument,\n} from './component-snapshot'\n\nexport {\n type Snippet,\n type Font,\n type MakeswiftPageDocument,\n type MakeswiftPageSnapshot,\n pageToRootDocument,\n} from './page-snapshot'\n\n// TODO: remove, leftover from the `getSitemap` method removed in 0.25.0:\n// https://github.com/makeswift/makeswift/releases/tag/%40makeswift%2Fruntime%400.25.0\nexport type Sitemap = {\n id: string\n loc: string\n lastmod?: string\n changefreq?: 'always' | 'hourly' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'never'\n priority?: number\n alternateRefs?: {\n hreflang: string\n href: string\n }[]\n}[]\n\nexport type MakeswiftPage = z.infer<typeof Schema.pageData>\nexport type MakeswiftGetPagesResult = z.infer<typeof Schema.getPagesResult>\nexport type PreviewTokenPayload = z.infer<typeof Schema.previewTokenPayload>\nexport type GetFontsAPI = z.infer<typeof Schema.fonts>\n\ntype GetPagesParams = z.infer<typeof Schema.getPagesParams>\ntype GetPageResult = z.infer<typeof Schema.getPageResult>\n\nexport class MakeswiftClient extends MakeswiftRestAPIClient {\n private graphqlClient: MakeswiftGraphQLApiClient\n private runtime: ReactRuntimeCore\n\n constructor(\n apiKey: string,\n {\n runtime,\n }: {\n runtime: ReactRuntimeCore\n },\n ) {\n if (typeof apiKey !== 'string') {\n throw new Error(\n 'The Makeswift client must be passed a valid Makeswift site API key: ' +\n \"`new Makeswift('<makeswift_site_api_key>')`\\n\" +\n `Received \"${apiKey}\" instead.`,\n )\n }\n\n super({\n fetch: runtime.fetch,\n apiKey,\n apiOrigin: runtime.apiOrigin,\n })\n\n this.graphqlClient = new MakeswiftGraphQLApiClient({\n endpoint: runtime.graphqlApiEndpoint,\n })\n\n this.runtime = runtime\n }\n\n private getPagesInternal = async ({\n siteVersion = null,\n ...params\n }: {\n siteVersion?: SiteVersion | null\n } & GetPagesParams = {}): Promise<MakeswiftGetPagesResult> => {\n const queryParams = getPagesQueryParams(params)\n\n const response = await this.fetch(`v5/pages?${queryParams.toString()}`, siteVersion)\n if (!response.ok) {\n console.error('Failed to get pages', {\n response: await failedResponseBody(response),\n siteVersion,\n params,\n })\n\n throw new Error(`Failed to get pages: ${responseError(response)}`)\n }\n\n const result = await response.json()\n const parsedResponse = Schema.getPagesResult.safeParse(result)\n if (!parsedResponse.success) {\n throw new Error(\n `Failed to parse 'getPages' response: ${parsedResponse.error.errors.map(e => e.message).join('; ')}`,\n )\n }\n return parsedResponse.data\n }\n\n getPages = toIterablePaginationResult(this.getPagesInternal)\n\n async getPage(\n pathname: string,\n { siteVersion = null, locale }: { siteVersion?: SiteVersion | null; locale?: string } = {},\n ): Promise<GetPageResult | null> {\n const url = new URL(`v3/pages/${encodeURIComponent(pathname)}`, this.apiOrigin)\n if (locale) url.searchParams.set('locale', locale)\n\n const response = await this.fetch(url.pathname + url.search, siteVersion)\n\n if (!response.ok) {\n const failedBody = await failedResponseBody(response)\n if (response.status === 404) return null\n\n console.error(`Failed to get page snapshot for '${pathname}'`, {\n response: failedBody,\n siteVersion,\n locale,\n })\n\n throw new Error(`Failed to get page snapshot for '${pathname}': ${responseError(response)}`)\n }\n\n const json = await response.json()\n\n return Schema.getPageResult.parse(json)\n }\n\n private async getTypographies(\n typographyIds: string[],\n siteVersion: SiteVersion | null,\n ): Promise<(Typography | null)[]> {\n if (typographyIds.length === 0) return []\n\n const url = new URL(`v3/typographies/bulk`, this.apiOrigin)\n\n typographyIds.forEach(id => {\n url.searchParams.append('ids', id)\n })\n\n const response = await this.fetch(url.pathname + url.search, siteVersion)\n\n if (!response.ok) {\n console.error(`Failed to get typographies for [${typographyIds.join(', ')}]`, {\n response: await failedResponseBody(response),\n siteVersion,\n })\n\n return []\n }\n\n const body = await response.json()\n\n return body\n }\n\n private async getSwatches(\n ids: string[],\n siteVersion: SiteVersion | null,\n ): Promise<(Swatch | null)[]> {\n if (ids.length === 0) return []\n\n const url = new URL(`v3/swatches/bulk`, this.apiOrigin)\n\n ids.forEach(id => {\n url.searchParams.append('ids', id)\n })\n\n const response = await this.fetch(url.pathname + url.search, siteVersion)\n\n if (!response.ok) {\n console.error(`Failed to get swatches for ${ids.join(', ')}`, {\n response: await failedResponseBody(response),\n siteVersion,\n })\n\n return []\n }\n\n return await response.json()\n }\n\n private async getElementTreesBulk(\n ids: string[],\n siteVersion: SiteVersion | null,\n locale?: string,\n ): Promise<(MakeswiftComponentDocument | null)[]> {\n if (ids.length === 0) return []\n\n const requestBody: { ids: string[]; locale?: string } = { ids }\n if (locale != null) requestBody.locale = locale\n\n const response = await this.fetch('v0/element-trees/bulk', siteVersion, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(requestBody),\n })\n\n if (!response.ok) {\n const failedBody = await failedResponseBody(response)\n\n // 404 can mean the requested version has no commit (e.g., site never published)\n if (response.status === 404) return ids.map(() => null)\n\n console.error(`Failed to get element trees for [${ids.join(', ')}]`, {\n response: failedBody,\n siteVersion,\n locale,\n })\n\n throw new Error(`Failed to get element trees: ${responseError(response)}`)\n }\n\n const responseBody = await response.json()\n\n return responseBody.map((item: unknown) =>\n item != null ? Schema.componentDocument.parse(item) : null,\n )\n }\n\n private async getIntrospectedResources(\n {\n swatchIds,\n ...unversionedResourceIds\n }: UnversionedResourcesQueryVariables & { swatchIds: string[] },\n siteVersion: SiteVersion | null,\n ): Promise<UnversionedResourcesQueryResult & { swatches: (Swatch | null)[] }> {\n const unversionedResources =\n await this.graphqlClient.getUnversionedResources(unversionedResourceIds)\n\n const swatches = await this.getSwatches(swatchIds, siteVersion)\n\n return { ...unversionedResources, swatches }\n }\n\n // TODO: Consolidate this method with the introspectMany method once the\n // unstable_getComponentSnapshots method is stable and tested in production.\n private async introspect(\n element: Element,\n siteVersion: SiteVersion | null,\n locale: string | null,\n ): Promise<CacheData> {\n const descriptors = this.getElementDescriptors()\n const swatchIds = new Set<string>()\n const fileIds = new Set<string>()\n const typographyIds = new Set<string>()\n const tableIds = new Set<string>()\n const pageIds = new Set<string>()\n const globalElements = new Map<string, GlobalElement | null>()\n const localizedGlobalElements = new Map<string, LocalizedGlobalElement | null>()\n const localizedResourcesMap = new Map<string, string | null>()\n\n const remaining = [element]\n const seen = new Set<string>()\n let current: Element | undefined\n\n while ((current = remaining.pop())) {\n let element: ElementData\n\n if (isElementReference(current)) {\n const globalElementId = current.value\n const globalElement = await this.getGlobalElement(globalElementId, siteVersion)\n let elementData = globalElement?.data\n\n if (locale) {\n const localizedGlobalElement = await this.getLocalizedGlobalElement(\n globalElementId,\n locale,\n siteVersion,\n )\n\n if (localizedGlobalElement) {\n // Update the logic here when we can merge element trees\n elementData = localizedGlobalElement.data\n\n localizedResourcesMap.set(globalElementId, localizedGlobalElement.id)\n localizedGlobalElements.set(localizedGlobalElement.id, localizedGlobalElement)\n } else {\n // Record that this localized global element doesn't exist so the\n // client won't try to fetch it again (which would result in a 404).\n localizedResourcesMap.set(globalElementId, null)\n }\n }\n\n globalElements.set(globalElementId, globalElement)\n\n if (elementData == null) continue\n\n element = elementData as ElementData\n } else {\n element = current\n }\n\n const elementDescriptors = descriptors.get(element.type)\n\n if (elementDescriptors == null) continue\n\n getResourcesFromElementDescriptors(elementDescriptors, element.props)\n\n function getResourcesFromElementDescriptors(\n elementDescriptors: Record<string, PropControllerDescriptor>,\n props: ElementData['props'],\n ) {\n Object.entries(elementDescriptors).forEach(([propName, descriptor]) => {\n getSwatchIds(descriptor, props[propName]).forEach(swatchId => {\n swatchIds.add(swatchId)\n })\n\n getFileIds(descriptor, props[propName]).forEach(fileId => fileIds.add(fileId))\n\n getTypographyIds(descriptor, props[propName]).forEach(typographyId =>\n typographyIds.add(typographyId),\n )\n\n getTableIds(descriptor, props[propName]).forEach(tableId => tableIds.add(tableId))\n\n getPageIds(descriptor, props[propName]).forEach(pageId => pageIds.add(pageId))\n\n getElementChildren(descriptor, props[propName]).forEach(child => {\n if (!seen.has(child.key)) {\n seen.add(child.key)\n\n remaining.push(child)\n }\n })\n })\n }\n }\n\n const typographies = await this.getTypographies([...typographyIds], siteVersion)\n\n typographies.forEach(typography => {\n typography?.style.forEach(style => {\n const swatchId = style.value.color?.swatchId\n\n if (swatchId != null) swatchIds.add(swatchId)\n })\n })\n\n const pagePathnames = await this.getPagePathnameSlices([...pageIds], siteVersion, { locale })\n\n const { swatches, files, tables } = await this.getIntrospectedResources(\n {\n swatchIds: [...swatchIds],\n fileIds: [...fileIds],\n tableIds: [...tableIds],\n },\n siteVersion,\n )\n\n const apiResources = {\n [APIResourceType.Swatch]: [...swatchIds].map(id => ({\n id,\n value: swatches.find(swatch => swatch?.id === id) ?? null,\n })),\n [APIResourceType.File]: [...fileIds].map(id => ({\n id,\n value: files.find(file => file?.id === id) ?? null,\n })),\n [APIResourceType.Typography]: [...typographyIds].map(id => ({\n id,\n value: typographies.find(typography => typography?.id === id) ?? null,\n })),\n [APIResourceType.Table]: [...tableIds].map(id => ({\n id,\n value: tables.find(table => table?.id === id) ?? null,\n })),\n [APIResourceType.PagePathnameSlice]: [...pageIds].map(id => ({\n id,\n value: pagePathnames.find(pagePathnameSlice => pagePathnameSlice?.id === id) ?? null,\n locale,\n })),\n [APIResourceType.GlobalElement]: [...globalElements.entries()].map(([id, value]) => ({\n id,\n value,\n })),\n [APIResourceType.LocalizedGlobalElement]: [...localizedGlobalElements.entries()].map(\n ([id, value]) => ({\n id,\n value,\n locale,\n }),\n ),\n }\n\n return {\n apiResources,\n localizedResourcesMap:\n locale != null ? { [locale]: Object.fromEntries(localizedResourcesMap.entries()) } : {},\n }\n }\n\n private async introspectMany(\n trees: { id: string; data: Element }[],\n siteVersion: SiteVersion | null,\n locale: string | null,\n ): Promise<Map<string, CacheData>> {\n if (trees.length === 0) return new Map()\n\n const descriptors = this.getElementDescriptors()\n\n // Shared caches for global elements (deduplication across trees)\n const globalElementCache = new Map<string, GlobalElement | null>()\n const localizedGlobalElementCache = new Map<string, LocalizedGlobalElement | null>()\n\n // Per-tree tracking, keyed by tree ID\n const treeCaches = new Map(\n trees.map(tree => [\n tree.id,\n {\n data: tree.data,\n swatchIds: new Set<string>(),\n fileIds: new Set<string>(),\n typographyIds: new Set<string>(),\n tableIds: new Set<string>(),\n pageIds: new Set<string>(),\n globalElements: new Map<string, GlobalElement | null>(),\n localizedGlobalElements: new Map<string, LocalizedGlobalElement | null>(),\n localizedResourcesMap: new Map<string, string | null>(),\n },\n ]),\n )\n\n // DFS traversal per tree\n for (const currentTreeCache of treeCaches.values()) {\n const remaining = [currentTreeCache.data]\n const seen = new Set<string>()\n let current: Element | undefined\n\n while ((current = remaining.pop())) {\n let element: ElementData\n\n if (isElementReference(current)) {\n const globalElementId = current.value\n\n // Fetch global element, using cache if already fetched for another tree\n let globalElement: GlobalElement | null\n if (globalElementCache.has(globalElementId)) {\n globalElement = globalElementCache.get(globalElementId)!\n } else {\n globalElement = await this.getGlobalElement(globalElementId, siteVersion)\n globalElementCache.set(globalElementId, globalElement)\n }\n\n let elementData = globalElement?.data\n\n if (locale) {\n let localizedGlobalElement: LocalizedGlobalElement | null\n if (localizedGlobalElementCache.has(globalElementId)) {\n localizedGlobalElement = localizedGlobalElementCache.get(globalElementId)!\n } else {\n localizedGlobalElement = await this.getLocalizedGlobalElement(\n globalElementId,\n locale,\n siteVersion,\n )\n localizedGlobalElementCache.set(globalElementId, localizedGlobalElement)\n }\n\n if (localizedGlobalElement) {\n // Update the logic here when we can merge element trees\n elementData = localizedGlobalElement.data\n\n currentTreeCache.localizedResourcesMap.set(globalElementId, localizedGlobalElement.id)\n currentTreeCache.localizedGlobalElements.set(\n localizedGlobalElement.id,\n localizedGlobalElement,\n )\n } else {\n // Record that this localized global element doesn't exist so the\n // client won't try to fetch it again (which would result in a 404).\n currentTreeCache.localizedResourcesMap.set(globalElementId, null)\n }\n }\n\n currentTreeCache.globalElements.set(globalElementId, globalElement)\n\n if (elementData == null) continue\n\n element = elementData as ElementData\n } else {\n element = current\n }\n\n const elementDescriptors = descriptors.get(element.type)\n\n if (elementDescriptors == null) continue\n\n getResourcesFromElementDescriptors(elementDescriptors, element.props)\n\n function getResourcesFromElementDescriptors(\n elementDescriptors: Record<string, PropControllerDescriptor>,\n props: ElementData['props'],\n ) {\n Object.entries(elementDescriptors).forEach(([propName, descriptor]) => {\n getSwatchIds(descriptor, props[propName]).forEach(swatchId => {\n currentTreeCache.swatchIds.add(swatchId)\n })\n\n getFileIds(descriptor, props[propName]).forEach(fileId => {\n currentTreeCache.fileIds.add(fileId)\n })\n\n getTypographyIds(descriptor, props[propName]).forEach(typographyId => {\n currentTreeCache.typographyIds.add(typographyId)\n })\n\n getTableIds(descriptor, props[propName]).forEach(tableId => {\n currentTreeCache.tableIds.add(tableId)\n })\n\n getPageIds(descriptor, props[propName]).forEach(pageId => {\n currentTreeCache.pageIds.add(pageId)\n })\n\n getElementChildren(descriptor, props[propName]).forEach(child => {\n if (!seen.has(child.key)) {\n seen.add(child.key)\n remaining.push(child)\n }\n })\n })\n }\n }\n }\n\n // Accumulate shared sets from per-tree state for bulk calls\n const allSwatchIds = new Set<string>()\n const allFileIds = new Set<string>()\n const allTypographyIds = new Set<string>()\n const allTableIds = new Set<string>()\n const allPageIds = new Set<string>()\n\n for (const currentTreeCache of treeCaches.values()) {\n currentTreeCache.swatchIds.forEach(id => allSwatchIds.add(id))\n currentTreeCache.fileIds.forEach(id => allFileIds.add(id))\n currentTreeCache.typographyIds.forEach(id => allTypographyIds.add(id))\n currentTreeCache.tableIds.forEach(id => allTableIds.add(id))\n currentTreeCache.pageIds.forEach(id => allPageIds.add(id))\n }\n\n // One combined round of bulk sub-resource calls\n\n // 1. Fetch typographies first (needed for secondary swatch discovery)\n const typographies = await this.getTypographies([...allTypographyIds], siteVersion)\n\n // 2. Secondary discovery: check for additional swatch IDs in typography styles\n typographies.forEach(typography => {\n if (typography == null) return\n\n const secondarySwatchIds: string[] = []\n typography.style.forEach(style => {\n const swatchId = style.value.color?.swatchId\n if (swatchId != null) {\n secondarySwatchIds.push(swatchId)\n allSwatchIds.add(swatchId)\n }\n })\n\n if (secondarySwatchIds.length > 0) {\n // Add discovered swatches to per-tree sets for trees that reference this typography\n for (const currentTreeCache of treeCaches.values()) {\n if (currentTreeCache.typographyIds.has(typography.id)) {\n secondarySwatchIds.forEach(id => currentTreeCache.swatchIds.add(id))\n }\n }\n }\n })\n\n // 3. Fetch remaining resources in parallel\n const [pagePathnames, { swatches, files, tables }] = await Promise.all([\n this.getPagePathnameSlices([...allPageIds], siteVersion, { locale }),\n this.getIntrospectedResources(\n {\n swatchIds: [...allSwatchIds],\n fileIds: [...allFileIds],\n tableIds: [...allTableIds],\n },\n siteVersion,\n ),\n ])\n\n // Build per-tree CacheData using only the resources that tree references\n const result = new Map<string, CacheData>()\n\n for (const [treeId, currentTreeCache] of treeCaches) {\n const apiResources = {\n [APIResourceType.Swatch]: [...currentTreeCache.swatchIds].map(id => ({\n id,\n value: swatches.find(swatch => swatch?.id === id) ?? null,\n })),\n [APIResourceType.File]: [...currentTreeCache.fileIds].map(id => ({\n id,\n value: files.find(file => file?.id === id) ?? null,\n })),\n [APIResourceType.Typography]: [...currentTreeCache.typographyIds].map(id => ({\n id,\n value: typographies.find(typography => typography?.id === id) ?? null,\n })),\n [APIResourceType.Table]: [...currentTreeCache.tableIds].map(id => ({\n id,\n value: tables.find(table => table?.id === id) ?? null,\n })),\n [APIResourceType.PagePathnameSlice]: [...currentTreeCache.pageIds].map(id => ({\n id,\n value: pagePathnames.find(pagePathnameSlice => pagePathnameSlice?.id === id) ?? null,\n locale,\n })),\n [APIResourceType.GlobalElement]: [...currentTreeCache.globalElements.entries()].map(\n ([id, value]) => ({\n id,\n value,\n }),\n ),\n [APIResourceType.LocalizedGlobalElement]: [\n ...currentTreeCache.localizedGlobalElements.entries(),\n ].map(([id, value]) => ({\n id,\n value,\n locale,\n })),\n }\n\n result.set(treeId, {\n apiResources,\n localizedResourcesMap:\n locale != null\n ? { [locale]: Object.fromEntries(currentTreeCache.localizedResourcesMap.entries()) }\n : {},\n })\n }\n\n return result\n }\n\n async getPageSnapshot(\n pathname: string,\n {\n siteVersion: siteVersionPromise,\n locale,\n allowLocaleFallback = true,\n }: {\n siteVersion: SiteVersion | null | Promise<SiteVersion | null>\n locale?: string\n allowLocaleFallback?: boolean\n },\n ): Promise<MakeswiftPageSnapshot | null> {\n const queryParams = (): string => {\n const params = new URLSearchParams()\n if (locale) params.set('locale', locale)\n if (allowLocaleFallback != null) params.set('allowLocaleFallback', `${allowLocaleFallback}`)\n return params.toString()\n }\n\n const siteVersion = await siteVersionPromise\n const response = await this.fetch(\n `v4/pages/${encodeURIComponent(pathname)}/document?${queryParams()}`,\n siteVersion,\n )\n\n if (!response.ok) {\n const failedBody = await failedResponseBody(response)\n if (response.status === 404) return null\n\n console.error(`Failed to get page snapshot for '${pathname}'`, {\n response: failedBody,\n siteVersion,\n locale,\n })\n\n throw new Error(`Failed to get page snapshot for '${pathname}': ${responseError(response)}`)\n }\n\n const document: MakeswiftPageDocument = await response.json()\n const baseLocalizedPage = document.localizedPages.find(({ parentId }) => parentId == null)\n\n const cacheData = await this.introspect(\n baseLocalizedPage?.data ?? document.data,\n siteVersion,\n // The /v3/pages endpoint returns null for document.locale when the requested locale is the default.\n // This legacy behavior is set to change with the upcoming /v4/pages endpoint.\n // We rely on document.locale when reading from the API cache, so ensure the cache is built during\n // introspection using the same value.\n document.locale,\n )\n\n return {\n document,\n cacheData,\n }\n }\n\n async getComponentSnapshot(\n id: string,\n {\n siteVersion: siteVersionPromise,\n locale,\n allowLocaleFallback = true,\n }: {\n siteVersion: SiteVersion | null | Promise<SiteVersion | null>\n locale?: string\n allowLocaleFallback?: boolean\n },\n ): Promise<MakeswiftComponentSnapshot> {\n const searchParams = new URLSearchParams()\n if (locale) searchParams.set('locale', locale)\n\n const siteVersion = await siteVersionPromise\n const key = deterministicUUID({ id, locale, seed: this.apiKey.split('-').at(0) })\n const baseLocaleWasRequested = locale == null\n const canAttemptLocaleFallback = !baseLocaleWasRequested && allowLocaleFallback\n\n let response\n const responseForRequestedLocale = await this.fetch(\n `v2/element-trees/${encodeURIComponent(id)}?${searchParams.toString()}`,\n siteVersion,\n )\n\n if (responseForRequestedLocale.status === 404 && canAttemptLocaleFallback) {\n await failedResponseBody(responseForRequestedLocale)\n response = await this.fetch(`v2/element-trees/${encodeURIComponent(id)}`, siteVersion)\n } else {\n response = responseForRequestedLocale\n }\n\n if (!response.ok) {\n // See comment on `failedResponseBody` for why we always consume the\n // response body of failed responses.\n const failedBody = await failedResponseBody(response)\n if (response.status === 404) {\n return {\n document: {\n id,\n locale: locale ?? null,\n data: null,\n },\n key,\n cacheData: CacheData.empty(),\n meta: {\n allowLocaleFallback,\n requestedLocale: locale ?? null,\n },\n }\n }\n\n console.error(`Failed to get component snapshot for '${id}':`, {\n response: failedBody,\n siteVersion,\n locale,\n })\n\n throw new Error(`Failed to get component snapshot for '${id}': ${responseError(response)}`)\n }\n\n const document = Schema.componentDocument.parse(await response.json())\n const cacheData = await this.introspect(document.data, siteVersion, document.locale)\n\n return {\n document,\n cacheData,\n key,\n meta: {\n allowLocaleFallback,\n requestedLocale: locale ?? null,\n },\n }\n }\n\n /**\n * Fetches multiple component snapshots in a single bulk request with unified introspection.\n *\n * @param ids - Element tree IDs to fetch. Maximum 100 IDs per call.\n */\n // TODO: Make getComponentSnapshot use this method under the hood once the v0 bulk endpoint is stable.\n async unstable_getComponentSnapshots(\n ids: string[],\n {\n siteVersion: siteVersionPromise,\n locale,\n allowLocaleFallback = true,\n }: {\n siteVersion: SiteVersion | null | Promise<SiteVersion | null>\n locale?: string\n allowLocaleFallback?: boolean\n },\n ): Promise<MakeswiftComponentSnapshot[]> {\n if (ids.length === 0) return []\n const siteVersion = await siteVersionPromise\n\n // Step 1: Bulk fetch\n let documents = await this.getElementTreesBulk(ids, siteVersion, locale)\n\n // Step 2: Locale fallback — second-pass for IDs that returned null\n const baseLocaleWasRequested = locale == null\n const canAttemptLocaleFallback = !baseLocaleWasRequested && allowLocaleFallback\n const fallbackIndices: number[] = []\n\n if (canAttemptLocaleFallback) {\n documents.forEach((doc, i) => {\n if (doc == null) fallbackIndices.push(i)\n })\n\n if (fallbackIndices.length > 0) {\n const fallbackIds = fallbackIndices.map(i => ids[i])\n const fallbackDocuments = await this.getElementTreesBulk(fallbackIds, siteVersion)\n\n fallbackIndices.forEach((originalIndex, fallbackIndex) => {\n documents[originalIndex] = fallbackDocuments[fallbackIndex]\n })\n }\n }\n\n // Step 3: Unified introspection for all trees that have data\n const treesToIntrospect = documents\n .map(doc => (doc?.data != null ? { id: doc.id, data: doc.data } : null))\n .filter(isNonNullable)\n\n const cacheDataMap = await this.introspectMany(treesToIntrospect, siteVersion, locale ?? null)\n\n // Step 4: Build per-component results\n return ids.map((id, i) => {\n const document = documents[i]\n const key = deterministicUUID({ id, locale, seed: this.apiKey.split('-').at(0) })\n\n if (document == null || document.data == null) {\n return {\n document: { id, locale: locale ?? null, data: null },\n key,\n cacheData: CacheData.empty(),\n meta: { allowLocaleFallback, requestedLocale: locale ?? null },\n }\n }\n\n return {\n document,\n key,\n cacheData: cacheDataMap.get(id) ?? CacheData.empty(),\n meta: { allowLocaleFallback, requestedLocale: locale ?? null },\n }\n })\n }\n\n async getFile(fileId: string): Promise<File | null> {\n return this.graphqlClient.getFile(fileId)\n }\n\n async getTable(tableId: string): Promise<Table | null> {\n return this.graphqlClient.getTable(tableId)\n }\n\n getTranslatableData(elementTree: ElementData): Record<string, Data> {\n return getTranslatableContent(this.getElementDescriptors(), elementTree)\n }\n\n mergeTranslatedData(elementTree: ElementData, translatedData: Record<string, Data>): Element {\n return mergeTranslatedContent(this.getElementDescriptors(), elementTree, translatedData)\n }\n\n async readPreviewToken(token: string): Promise<PreviewTokenPayload | null> {\n const response = await fetch(new URL('v1/preview-tokens/reads', this.apiOrigin).toString(), {\n method: 'POST',\n headers: {\n 'x-api-key': this.apiKey,\n 'makeswift-site-api-key': this.apiKey,\n 'makeswift-runtime-version': PACKAGE_VERSION,\n 'content-type': 'application/json',\n },\n body: JSON.stringify({ token }),\n cache: 'no-store',\n })\n\n if (!response.ok) {\n const failedBody = await failedResponseBody(response)\n if (response.status === 401) {\n console.error(`Preview token is invalid or expired`, {\n response: failedBody,\n })\n } else if (response.status !== 404) {\n console.error(`Failed to verify preview token`, {\n response: failedBody,\n })\n }\n\n return null\n }\n\n const json = await response.json()\n\n const parsed = Schema.previewTokenPayload.safeParse(json)\n if (!parsed.success) {\n throw new Error(\n `Failed to parse preview token payload: ${parsed.error.errors.map(e => e.message).join('; ')}`,\n )\n }\n\n return parsed.data\n }\n\n async unstable_getFonts(siteVersion: SiteVersion | null = null): Promise<GetFontsAPI | null> {\n const response = await this.fetch('v1_unstable/fonts', siteVersion)\n\n if (!response.ok) {\n console.error('Failed to fetch fonts', {\n response: await failedResponseBody(response),\n siteVersion,\n })\n\n return null\n }\n\n const json = await response.json()\n\n const parsed = Schema.fonts.safeParse(json)\n if (!parsed.success) {\n console.error('Failed to parse fonts API response', {\n response: json,\n siteVersion,\n })\n\n return null\n }\n\n return parsed.data\n }\n\n private getElementDescriptors() {\n return getPropControllerDescriptors(this.runtime.protoStore.getState())\n }\n}\n\nfunction getPagesQueryParams({\n limit = 100,\n after,\n sortBy,\n sortDirection,\n includeOffline,\n pathPrefix,\n locale,\n}: GetPagesParams): URLSearchParams {\n const params = new URLSearchParams()\n\n if (limit != null) params.set('limit', limit.toString())\n if (after != null) params.set('after', after)\n if (sortBy != null) params.set('sortBy', sortBy)\n if (sortDirection != null) params.set('sortDirection', sortDirection)\n if (includeOffline != null) params.set('includeOffline', includeOffline.toString())\n if (pathPrefix != null) params.set('pathPrefix', pathPrefix)\n if (locale != null) params.set('locale', locale)\n\n return params\n}\n\nfunction responseError(response: Response): string {\n return `${response.status} ${response.statusText}`\n}\n"],"mappings":"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","names":["import_types","import_component_snapshot","import_page_snapshot","getResourcesFromElementDescriptors","elementDescriptors","element"]}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
15
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
16
+ var fixtures_exports = {};
17
+ module.exports = __toCommonJS(fixtures_exports);
18
+ __reExport(fixtures_exports, require("./origins"), module.exports);
19
+ __reExport(fixtures_exports, require("./site-version"), module.exports);
20
+ __reExport(fixtures_exports, require("./resources"), module.exports);
21
+ // Annotate the CommonJS export names for ESM import in node:
22
+ 0 && (module.exports = {
23
+ ...require("./origins"),
24
+ ...require("./site-version"),
25
+ ...require("./resources")
26
+ });
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/testing/fixtures/index.ts"],"sourcesContent":["export * from './origins'\nexport * from './site-version'\nexport * from './resources'\n"],"mappings":";;;;;;;;;;;;;;;AAAA;AAAA;AAAA,6BAAc,sBAAd;AACA,6BAAc,2BADd;AAEA,6BAAc,wBAFd;","names":[]}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var origins_exports = {};
20
+ __export(origins_exports, {
21
+ TestOrigins: () => TestOrigins
22
+ });
23
+ module.exports = __toCommonJS(origins_exports);
24
+ const TestOrigins = {
25
+ apiOrigin: "https://api.fakeswift.com",
26
+ appOrigin: "https://app.fakeswift.com"
27
+ };
28
+ // Annotate the CommonJS export names for ESM import in node:
29
+ 0 && (module.exports = {
30
+ TestOrigins
31
+ });
32
+ //# sourceMappingURL=origins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/testing/fixtures/origins.ts"],"sourcesContent":["export const TestOrigins = {\n apiOrigin: 'https://api.fakeswift.com',\n appOrigin: 'https://app.fakeswift.com',\n} as const\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,MAAM,cAAc;AAAA,EACzB,WAAW;AAAA,EACX,WAAW;AACb;","names":[]}
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var resources_exports = {};
20
+ __export(resources_exports, {
21
+ makeFile: () => makeFile,
22
+ makeGlobalElement: () => makeGlobalElement,
23
+ makeLocalizedGlobalElement: () => makeLocalizedGlobalElement,
24
+ makePagePathnameSlice: () => makePagePathnameSlice,
25
+ makeSwatch: () => makeSwatch,
26
+ makeTable: () => makeTable,
27
+ makeTypography: () => makeTypography
28
+ });
29
+ module.exports = __toCommonJS(resources_exports);
30
+ const makeSwatch = (id, { hue = 0 } = {}) => ({
31
+ __typename: "Swatch",
32
+ id,
33
+ hue,
34
+ saturation: 100,
35
+ lightness: 50
36
+ });
37
+ const makeFile = (id) => ({
38
+ __typename: "File",
39
+ id,
40
+ name: `file ${id}`,
41
+ extension: "png",
42
+ publicUrl: `https://example.com/${id}`,
43
+ dimensions: { width: 100, height: 100 }
44
+ });
45
+ const makeTable = (id) => ({
46
+ __typename: "Table",
47
+ id,
48
+ name: `table ${id}`,
49
+ columns: []
50
+ });
51
+ const emptyStyle = {
52
+ fontFamily: null,
53
+ lineHeight: null,
54
+ letterSpacing: null,
55
+ fontWeight: null,
56
+ textAlign: null,
57
+ uppercase: null,
58
+ underline: null,
59
+ strikethrough: null,
60
+ italic: null,
61
+ fontSize: null,
62
+ color: null
63
+ };
64
+ const makeTypography = (id, { swatchId } = {}) => ({
65
+ __typename: "Typography",
66
+ id,
67
+ name: `typography ${id}`,
68
+ style: [
69
+ {
70
+ deviceId: "desktop",
71
+ value: swatchId != null ? { ...emptyStyle, color: { swatchId, alpha: 1 } } : emptyStyle
72
+ }
73
+ ]
74
+ });
75
+ const makeGlobalElement = (id) => ({
76
+ __typename: "GlobalElement",
77
+ id,
78
+ data: {}
79
+ });
80
+ const makeLocalizedGlobalElement = (id) => ({
81
+ __typename: "LocalizedGlobalElement",
82
+ id,
83
+ data: {}
84
+ });
85
+ const makePagePathnameSlice = (pageId, {
86
+ pathname = `/${pageId}`,
87
+ localizedPathname
88
+ } = {}) => ({
89
+ __typename: "PagePathnameSlice",
90
+ id: pageId,
91
+ basePageId: pageId,
92
+ pathname,
93
+ ...localizedPathname === void 0 ? {} : { localizedPathname }
94
+ });
95
+ // Annotate the CommonJS export names for ESM import in node:
96
+ 0 && (module.exports = {
97
+ makeFile,
98
+ makeGlobalElement,
99
+ makeLocalizedGlobalElement,
100
+ makePagePathnameSlice,
101
+ makeSwatch,
102
+ makeTable,
103
+ makeTypography
104
+ });
105
+ //# sourceMappingURL=resources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/testing/fixtures/resources.ts"],"sourcesContent":["import {\n type Swatch,\n type File,\n type GlobalElement,\n type LocalizedGlobalElement,\n type Table,\n type Typography,\n type PagePathnameSlice,\n} from '../../api'\n\nexport const makeSwatch = (id: string, { hue = 0 }: { hue?: number } = {}): Swatch => ({\n __typename: 'Swatch',\n id,\n hue,\n saturation: 100,\n lightness: 50,\n})\n\nexport const makeFile = (id: string): File => ({\n __typename: 'File',\n id,\n name: `file ${id}`,\n extension: 'png',\n publicUrl: `https://example.com/${id}`,\n dimensions: { width: 100, height: 100 },\n})\n\nexport const makeTable = (id: string): Table => ({\n __typename: 'Table',\n id,\n name: `table ${id}`,\n columns: [],\n})\n\nconst emptyStyle = {\n fontFamily: null,\n lineHeight: null,\n letterSpacing: null,\n fontWeight: null,\n textAlign: null,\n uppercase: null,\n underline: null,\n strikethrough: null,\n italic: null,\n fontSize: null,\n color: null,\n}\n\nexport const makeTypography = (\n id: string,\n { swatchId }: { swatchId?: string } = {},\n): Typography => ({\n __typename: 'Typography',\n id,\n name: `typography ${id}`,\n style: [\n {\n deviceId: 'desktop',\n value:\n swatchId != null ? { ...emptyStyle, color: { swatchId: swatchId, alpha: 1 } } : emptyStyle,\n },\n ],\n})\n\nexport const makeGlobalElement = (id: string): GlobalElement => ({\n __typename: 'GlobalElement',\n id,\n data: {},\n})\n\nexport const makeLocalizedGlobalElement = (id: string): LocalizedGlobalElement => ({\n __typename: 'LocalizedGlobalElement',\n id,\n data: {},\n})\n\nexport const makePagePathnameSlice = (\n pageId: string,\n {\n pathname = `/${pageId}`,\n localizedPathname,\n }: { pathname?: string; localizedPathname?: string | null } = {},\n): PagePathnameSlice => ({\n __typename: 'PagePathnameSlice',\n id: pageId,\n basePageId: pageId,\n pathname,\n ...(localizedPathname === undefined ? {} : { localizedPathname }),\n})\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUO,MAAM,aAAa,CAAC,IAAY,EAAE,MAAM,EAAE,IAAsB,CAAC,OAAe;AAAA,EACrF,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,WAAW;AACb;AAEO,MAAM,WAAW,CAAC,QAAsB;AAAA,EAC7C,YAAY;AAAA,EACZ;AAAA,EACA,MAAM,QAAQ,EAAE;AAAA,EAChB,WAAW;AAAA,EACX,WAAW,uBAAuB,EAAE;AAAA,EACpC,YAAY,EAAE,OAAO,KAAK,QAAQ,IAAI;AACxC;AAEO,MAAM,YAAY,CAAC,QAAuB;AAAA,EAC/C,YAAY;AAAA,EACZ;AAAA,EACA,MAAM,SAAS,EAAE;AAAA,EACjB,SAAS,CAAC;AACZ;AAEA,MAAM,aAAa;AAAA,EACjB,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,eAAe;AAAA,EACf,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,OAAO;AACT;AAEO,MAAM,iBAAiB,CAC5B,IACA,EAAE,SAAS,IAA2B,CAAC,OACvB;AAAA,EAChB,YAAY;AAAA,EACZ;AAAA,EACA,MAAM,cAAc,EAAE;AAAA,EACtB,OAAO;AAAA,IACL;AAAA,MACE,UAAU;AAAA,MACV,OACE,YAAY,OAAO,EAAE,GAAG,YAAY,OAAO,EAAE,UAAoB,OAAO,EAAE,EAAE,IAAI;AAAA,IACpF;AAAA,EACF;AACF;AAEO,MAAM,oBAAoB,CAAC,QAA+B;AAAA,EAC/D,YAAY;AAAA,EACZ;AAAA,EACA,MAAM,CAAC;AACT;AAEO,MAAM,6BAA6B,CAAC,QAAwC;AAAA,EACjF,YAAY;AAAA,EACZ;AAAA,EACA,MAAM,CAAC;AACT;AAEO,MAAM,wBAAwB,CACnC,QACA;AAAA,EACE,WAAW,IAAI,MAAM;AAAA,EACrB;AACF,IAA8D,CAAC,OACxC;AAAA,EACvB,YAAY;AAAA,EACZ,IAAI;AAAA,EACJ,YAAY;AAAA,EACZ;AAAA,EACA,GAAI,sBAAsB,SAAY,CAAC,IAAI,EAAE,kBAAkB;AACjE;","names":[]}
@@ -16,23 +16,17 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var fixtures_exports = {};
20
- __export(fixtures_exports, {
21
- TestOrigins: () => TestOrigins,
19
+ var site_version_exports = {};
20
+ __export(site_version_exports, {
22
21
  TestWorkingSiteVersion: () => TestWorkingSiteVersion
23
22
  });
24
- module.exports = __toCommonJS(fixtures_exports);
23
+ module.exports = __toCommonJS(site_version_exports);
25
24
  const TestWorkingSiteVersion = {
26
25
  version: "draft",
27
26
  token: "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJtYWtlc3dpZnQtcnVudGltZSIsImlhdCI6MTc1NDU5OTE0OSwiZXhwIjo0MTAyNDMyNzQ5LCJhdWQiOiJ0ZXN0Iiwic3ViIjoibWFrZXN3aWZ0LXJ1bnRpbWUifQ.-1BDOmEN1Q1QeKP7qfjPyAkrKRjb4q4qaqyhPBvMnhg"
28
27
  };
29
- const TestOrigins = {
30
- apiOrigin: "https://api.fakeswift.com",
31
- appOrigin: "https://app.fakeswift.com"
32
- };
33
28
  // Annotate the CommonJS export names for ESM import in node:
34
29
  0 && (module.exports = {
35
- TestOrigins,
36
30
  TestWorkingSiteVersion
37
31
  });
38
- //# sourceMappingURL=fixtures.js.map
32
+ //# sourceMappingURL=site-version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/testing/fixtures/site-version.ts"],"sourcesContent":["import { type SiteVersion } from '../../api/site-version'\n\nexport const TestWorkingSiteVersion: SiteVersion = {\n version: 'draft',\n token:\n 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJtYWtlc3dpZnQtcnVudGltZSIsImlhdCI6MTc1NDU5OTE0OSwiZXhwIjo0MTAyNDMyNzQ5LCJhdWQiOiJ0ZXN0Iiwic3ViIjoibWFrZXN3aWZ0LXJ1bnRpbWUifQ.-1BDOmEN1Q1QeKP7qfjPyAkrKRjb4q4qaqyhPBvMnhg',\n} as const\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,MAAM,yBAAsC;AAAA,EACjD,SAAS;AAAA,EACT,OACE;AACJ;","names":[]}
@@ -9,7 +9,7 @@ class MakeswiftGraphQLApiClient {
9
9
  graphqlClient;
10
10
  constructor({ endpoint }) {
11
11
  this.graphqlClient = new GraphQLClient(endpoint, {
12
- "makeswift-runtime-version": "0.28.7-canary.6"
12
+ "makeswift-runtime-version": "0.28.7-canary.7"
13
13
  });
14
14
  }
15
15
  async createTableRecord(tableId, columns) {
@@ -113,7 +113,7 @@ class MakeswiftRestAPIClient {
113
113
  const requestHeaders = new Headers({
114
114
  "x-api-key": this.apiKey,
115
115
  "makeswift-site-api-key": this.apiKey,
116
- "makeswift-runtime-version": "0.28.7-canary.6"
116
+ "makeswift-runtime-version": "0.28.7-canary.7"
117
117
  });
118
118
  if (siteVersion?.token) {
119
119
  requestUrl.searchParams.set("version", siteVersion.version);
@@ -8,7 +8,7 @@ async function manifestHandler(req, { apiKey, manifest }) {
8
8
  return ApiResponse.json({ message: "Unauthorized" }, { status: 401 });
9
9
  }
10
10
  return ApiResponse.json({
11
- version: "0.28.7-canary.6",
11
+ version: "0.28.7-canary.7",
12
12
  interactionMode: true,
13
13
  clientSideNavigation: false,
14
14
  elementFromPoint: false,
@@ -568,7 +568,7 @@ Received "${apiKey}" instead.`
568
568
  throw new Error(`Failed to get component snapshot for '${id}': ${responseError(response)}`);
569
569
  }
570
570
  const document = Schema.componentDocument.parse(await response.json());
571
- const cacheData = await this.introspect(document.data, siteVersion, locale ?? null);
571
+ const cacheData = await this.introspect(document.data, siteVersion, document.locale);
572
572
  return {
573
573
  document,
574
574
  cacheData,
@@ -649,7 +649,7 @@ Received "${apiKey}" instead.`
649
649
  headers: {
650
650
  "x-api-key": this.apiKey,
651
651
  "makeswift-site-api-key": this.apiKey,
652
- "makeswift-runtime-version": "0.28.7-canary.6",
652
+ "makeswift-runtime-version": "0.28.7-canary.7",
653
653
  "content-type": "application/json"
654
654
  },
655
655
  body: JSON.stringify({ token }),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/client/index.ts"],"sourcesContent":["import { z } from 'zod'\n\nimport {\n type UnversionedResourcesQueryResult,\n type UnversionedResourcesQueryVariables,\n} from '../api/graphql/generated/types'\n\nimport {\n APIResourceType,\n type File,\n type GlobalElement,\n type LocalizedGlobalElement,\n type Swatch,\n type Table,\n type Typography,\n} from '../api/types'\n\nimport { CacheData } from '../api/api-resources-client'\n\nimport { MakeswiftGraphQLApiClient } from '../api/graphql-api-client'\nimport { MakeswiftRestAPIClient, failedResponseBody } from '../api/rest-api-client'\nimport { type SiteVersion } from '../api/site-version'\n\nimport { Descriptor as PropControllerDescriptor } from '../prop-controllers/descriptors'\nimport {\n getElementChildren,\n getSwatchIds,\n getFileIds,\n getPageIds,\n getTableIds,\n getTypographyIds,\n} from '../prop-controllers/introspection'\n\nimport { type ReactRuntimeCore } from '../runtimes/react/react-runtime-core'\n\nimport {\n type Element,\n type ElementData,\n type Data,\n getPropControllerDescriptors,\n isElementReference,\n} from '../state/read-only-state'\n\nimport { mergeTranslatedContent } from '../state/translations/merge'\nimport { getTranslatableContent } from '../state/translations/get'\n\nimport { deterministicUUID } from '../utils/deterministic-uuid'\nimport { toIterablePaginationResult } from '../utils/pagination'\nimport { isNonNullable } from '../utils/isNonNullable'\n\nimport {\n type MakeswiftComponentDocument,\n type MakeswiftComponentSnapshot,\n} from './component-snapshot'\n\nimport { type MakeswiftPageDocument, type MakeswiftPageSnapshot } from './page-snapshot'\n\nimport * as Schema from './schema'\n\nexport { SnippetLocation } from '../api/graphql/generated/types'\n\n// TODO: clean up the exports below, as most of them are for internal consumptions only\n// and should not be publicly exposed\nexport {\n type MakeswiftComponentDocument,\n type MakeswiftComponentDocumentFallback,\n type MakeswiftComponentSnapshot,\n type MakeswiftComponentMetadata as MakeswiftComponentSnapshotMetadata,\n componentDocumentToRootEmbeddedDocument,\n} from './component-snapshot'\n\nexport {\n type Snippet,\n type Font,\n type MakeswiftPageDocument,\n type MakeswiftPageSnapshot,\n pageToRootDocument,\n} from './page-snapshot'\n\n// TODO: remove, leftover from the `getSitemap` method removed in 0.25.0:\n// https://github.com/makeswift/makeswift/releases/tag/%40makeswift%2Fruntime%400.25.0\nexport type Sitemap = {\n id: string\n loc: string\n lastmod?: string\n changefreq?: 'always' | 'hourly' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'never'\n priority?: number\n alternateRefs?: {\n hreflang: string\n href: string\n }[]\n}[]\n\nexport type MakeswiftPage = z.infer<typeof Schema.pageData>\nexport type MakeswiftGetPagesResult = z.infer<typeof Schema.getPagesResult>\nexport type PreviewTokenPayload = z.infer<typeof Schema.previewTokenPayload>\nexport type GetFontsAPI = z.infer<typeof Schema.fonts>\n\ntype GetPagesParams = z.infer<typeof Schema.getPagesParams>\ntype GetPageResult = z.infer<typeof Schema.getPageResult>\n\nexport class MakeswiftClient extends MakeswiftRestAPIClient {\n private graphqlClient: MakeswiftGraphQLApiClient\n private runtime: ReactRuntimeCore\n\n constructor(\n apiKey: string,\n {\n runtime,\n }: {\n runtime: ReactRuntimeCore\n },\n ) {\n if (typeof apiKey !== 'string') {\n throw new Error(\n 'The Makeswift client must be passed a valid Makeswift site API key: ' +\n \"`new Makeswift('<makeswift_site_api_key>')`\\n\" +\n `Received \"${apiKey}\" instead.`,\n )\n }\n\n super({\n fetch: runtime.fetch,\n apiKey,\n apiOrigin: runtime.apiOrigin,\n })\n\n this.graphqlClient = new MakeswiftGraphQLApiClient({\n endpoint: runtime.graphqlApiEndpoint,\n })\n\n this.runtime = runtime\n }\n\n private getPagesInternal = async ({\n siteVersion = null,\n ...params\n }: {\n siteVersion?: SiteVersion | null\n } & GetPagesParams = {}): Promise<MakeswiftGetPagesResult> => {\n const queryParams = getPagesQueryParams(params)\n\n const response = await this.fetch(`v5/pages?${queryParams.toString()}`, siteVersion)\n if (!response.ok) {\n console.error('Failed to get pages', {\n response: await failedResponseBody(response),\n siteVersion,\n params,\n })\n\n throw new Error(`Failed to get pages: ${responseError(response)}`)\n }\n\n const result = await response.json()\n const parsedResponse = Schema.getPagesResult.safeParse(result)\n if (!parsedResponse.success) {\n throw new Error(\n `Failed to parse 'getPages' response: ${parsedResponse.error.errors.map(e => e.message).join('; ')}`,\n )\n }\n return parsedResponse.data\n }\n\n getPages = toIterablePaginationResult(this.getPagesInternal)\n\n async getPage(\n pathname: string,\n { siteVersion = null, locale }: { siteVersion?: SiteVersion | null; locale?: string } = {},\n ): Promise<GetPageResult | null> {\n const url = new URL(`v3/pages/${encodeURIComponent(pathname)}`, this.apiOrigin)\n if (locale) url.searchParams.set('locale', locale)\n\n const response = await this.fetch(url.pathname + url.search, siteVersion)\n\n if (!response.ok) {\n const failedBody = await failedResponseBody(response)\n if (response.status === 404) return null\n\n console.error(`Failed to get page snapshot for '${pathname}'`, {\n response: failedBody,\n siteVersion,\n locale,\n })\n\n throw new Error(`Failed to get page snapshot for '${pathname}': ${responseError(response)}`)\n }\n\n const json = await response.json()\n\n return Schema.getPageResult.parse(json)\n }\n\n private async getTypographies(\n typographyIds: string[],\n siteVersion: SiteVersion | null,\n ): Promise<(Typography | null)[]> {\n if (typographyIds.length === 0) return []\n\n const url = new URL(`v3/typographies/bulk`, this.apiOrigin)\n\n typographyIds.forEach(id => {\n url.searchParams.append('ids', id)\n })\n\n const response = await this.fetch(url.pathname + url.search, siteVersion)\n\n if (!response.ok) {\n console.error(`Failed to get typographies for [${typographyIds.join(', ')}]`, {\n response: await failedResponseBody(response),\n siteVersion,\n })\n\n return []\n }\n\n const body = await response.json()\n\n return body\n }\n\n private async getSwatches(\n ids: string[],\n siteVersion: SiteVersion | null,\n ): Promise<(Swatch | null)[]> {\n if (ids.length === 0) return []\n\n const url = new URL(`v3/swatches/bulk`, this.apiOrigin)\n\n ids.forEach(id => {\n url.searchParams.append('ids', id)\n })\n\n const response = await this.fetch(url.pathname + url.search, siteVersion)\n\n if (!response.ok) {\n console.error(`Failed to get swatches for ${ids.join(', ')}`, {\n response: await failedResponseBody(response),\n siteVersion,\n })\n\n return []\n }\n\n return await response.json()\n }\n\n private async getElementTreesBulk(\n ids: string[],\n siteVersion: SiteVersion | null,\n locale?: string,\n ): Promise<(MakeswiftComponentDocument | null)[]> {\n if (ids.length === 0) return []\n\n const requestBody: { ids: string[]; locale?: string } = { ids }\n if (locale != null) requestBody.locale = locale\n\n const response = await this.fetch('v0/element-trees/bulk', siteVersion, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(requestBody),\n })\n\n if (!response.ok) {\n const failedBody = await failedResponseBody(response)\n\n // 404 can mean the requested version has no commit (e.g., site never published)\n if (response.status === 404) return ids.map(() => null)\n\n console.error(`Failed to get element trees for [${ids.join(', ')}]`, {\n response: failedBody,\n siteVersion,\n locale,\n })\n\n throw new Error(`Failed to get element trees: ${responseError(response)}`)\n }\n\n const responseBody = await response.json()\n\n return responseBody.map((item: unknown) =>\n item != null ? Schema.componentDocument.parse(item) : null,\n )\n }\n\n private async getIntrospectedResources(\n {\n swatchIds,\n ...unversionedResourceIds\n }: UnversionedResourcesQueryVariables & { swatchIds: string[] },\n siteVersion: SiteVersion | null,\n ): Promise<UnversionedResourcesQueryResult & { swatches: (Swatch | null)[] }> {\n const unversionedResources =\n await this.graphqlClient.getUnversionedResources(unversionedResourceIds)\n\n const swatches = await this.getSwatches(swatchIds, siteVersion)\n\n return { ...unversionedResources, swatches }\n }\n\n // TODO: Consolidate this method with the introspectMany method once the\n // unstable_getComponentSnapshots method is stable and tested in production.\n private async introspect(\n element: Element,\n siteVersion: SiteVersion | null,\n locale: string | null,\n ): Promise<CacheData> {\n const descriptors = this.getElementDescriptors()\n const swatchIds = new Set<string>()\n const fileIds = new Set<string>()\n const typographyIds = new Set<string>()\n const tableIds = new Set<string>()\n const pageIds = new Set<string>()\n const globalElements = new Map<string, GlobalElement | null>()\n const localizedGlobalElements = new Map<string, LocalizedGlobalElement | null>()\n const localizedResourcesMap = new Map<string, string | null>()\n\n const remaining = [element]\n const seen = new Set<string>()\n let current: Element | undefined\n\n while ((current = remaining.pop())) {\n let element: ElementData\n\n if (isElementReference(current)) {\n const globalElementId = current.value\n const globalElement = await this.getGlobalElement(globalElementId, siteVersion)\n let elementData = globalElement?.data\n\n if (locale) {\n const localizedGlobalElement = await this.getLocalizedGlobalElement(\n globalElementId,\n locale,\n siteVersion,\n )\n\n if (localizedGlobalElement) {\n // Update the logic here when we can merge element trees\n elementData = localizedGlobalElement.data\n\n localizedResourcesMap.set(globalElementId, localizedGlobalElement.id)\n localizedGlobalElements.set(localizedGlobalElement.id, localizedGlobalElement)\n } else {\n // Record that this localized global element doesn't exist so the\n // client won't try to fetch it again (which would result in a 404).\n localizedResourcesMap.set(globalElementId, null)\n }\n }\n\n globalElements.set(globalElementId, globalElement)\n\n if (elementData == null) continue\n\n element = elementData as ElementData\n } else {\n element = current\n }\n\n const elementDescriptors = descriptors.get(element.type)\n\n if (elementDescriptors == null) continue\n\n getResourcesFromElementDescriptors(elementDescriptors, element.props)\n\n function getResourcesFromElementDescriptors(\n elementDescriptors: Record<string, PropControllerDescriptor>,\n props: ElementData['props'],\n ) {\n Object.entries(elementDescriptors).forEach(([propName, descriptor]) => {\n getSwatchIds(descriptor, props[propName]).forEach(swatchId => {\n swatchIds.add(swatchId)\n })\n\n getFileIds(descriptor, props[propName]).forEach(fileId => fileIds.add(fileId))\n\n getTypographyIds(descriptor, props[propName]).forEach(typographyId =>\n typographyIds.add(typographyId),\n )\n\n getTableIds(descriptor, props[propName]).forEach(tableId => tableIds.add(tableId))\n\n getPageIds(descriptor, props[propName]).forEach(pageId => pageIds.add(pageId))\n\n getElementChildren(descriptor, props[propName]).forEach(child => {\n if (!seen.has(child.key)) {\n seen.add(child.key)\n\n remaining.push(child)\n }\n })\n })\n }\n }\n\n const typographies = await this.getTypographies([...typographyIds], siteVersion)\n\n typographies.forEach(typography => {\n typography?.style.forEach(style => {\n const swatchId = style.value.color?.swatchId\n\n if (swatchId != null) swatchIds.add(swatchId)\n })\n })\n\n const pagePathnames = await this.getPagePathnameSlices([...pageIds], siteVersion, { locale })\n\n const { swatches, files, tables } = await this.getIntrospectedResources(\n {\n swatchIds: [...swatchIds],\n fileIds: [...fileIds],\n tableIds: [...tableIds],\n },\n siteVersion,\n )\n\n const apiResources = {\n [APIResourceType.Swatch]: [...swatchIds].map(id => ({\n id,\n value: swatches.find(swatch => swatch?.id === id) ?? null,\n })),\n [APIResourceType.File]: [...fileIds].map(id => ({\n id,\n value: files.find(file => file?.id === id) ?? null,\n })),\n [APIResourceType.Typography]: [...typographyIds].map(id => ({\n id,\n value: typographies.find(typography => typography?.id === id) ?? null,\n })),\n [APIResourceType.Table]: [...tableIds].map(id => ({\n id,\n value: tables.find(table => table?.id === id) ?? null,\n })),\n [APIResourceType.PagePathnameSlice]: [...pageIds].map(id => ({\n id,\n value: pagePathnames.find(pagePathnameSlice => pagePathnameSlice?.id === id) ?? null,\n locale,\n })),\n [APIResourceType.GlobalElement]: [...globalElements.entries()].map(([id, value]) => ({\n id,\n value,\n })),\n [APIResourceType.LocalizedGlobalElement]: [...localizedGlobalElements.entries()].map(\n ([id, value]) => ({\n id,\n value,\n locale,\n }),\n ),\n }\n\n return {\n apiResources,\n localizedResourcesMap:\n locale != null ? { [locale]: Object.fromEntries(localizedResourcesMap.entries()) } : {},\n }\n }\n\n private async introspectMany(\n trees: { id: string; data: Element }[],\n siteVersion: SiteVersion | null,\n locale: string | null,\n ): Promise<Map<string, CacheData>> {\n if (trees.length === 0) return new Map()\n\n const descriptors = this.getElementDescriptors()\n\n // Shared caches for global elements (deduplication across trees)\n const globalElementCache = new Map<string, GlobalElement | null>()\n const localizedGlobalElementCache = new Map<string, LocalizedGlobalElement | null>()\n\n // Per-tree tracking, keyed by tree ID\n const treeCaches = new Map(\n trees.map(tree => [\n tree.id,\n {\n data: tree.data,\n swatchIds: new Set<string>(),\n fileIds: new Set<string>(),\n typographyIds: new Set<string>(),\n tableIds: new Set<string>(),\n pageIds: new Set<string>(),\n globalElements: new Map<string, GlobalElement | null>(),\n localizedGlobalElements: new Map<string, LocalizedGlobalElement | null>(),\n localizedResourcesMap: new Map<string, string | null>(),\n },\n ]),\n )\n\n // DFS traversal per tree\n for (const currentTreeCache of treeCaches.values()) {\n const remaining = [currentTreeCache.data]\n const seen = new Set<string>()\n let current: Element | undefined\n\n while ((current = remaining.pop())) {\n let element: ElementData\n\n if (isElementReference(current)) {\n const globalElementId = current.value\n\n // Fetch global element, using cache if already fetched for another tree\n let globalElement: GlobalElement | null\n if (globalElementCache.has(globalElementId)) {\n globalElement = globalElementCache.get(globalElementId)!\n } else {\n globalElement = await this.getGlobalElement(globalElementId, siteVersion)\n globalElementCache.set(globalElementId, globalElement)\n }\n\n let elementData = globalElement?.data\n\n if (locale) {\n let localizedGlobalElement: LocalizedGlobalElement | null\n if (localizedGlobalElementCache.has(globalElementId)) {\n localizedGlobalElement = localizedGlobalElementCache.get(globalElementId)!\n } else {\n localizedGlobalElement = await this.getLocalizedGlobalElement(\n globalElementId,\n locale,\n siteVersion,\n )\n localizedGlobalElementCache.set(globalElementId, localizedGlobalElement)\n }\n\n if (localizedGlobalElement) {\n // Update the logic here when we can merge element trees\n elementData = localizedGlobalElement.data\n\n currentTreeCache.localizedResourcesMap.set(globalElementId, localizedGlobalElement.id)\n currentTreeCache.localizedGlobalElements.set(\n localizedGlobalElement.id,\n localizedGlobalElement,\n )\n } else {\n // Record that this localized global element doesn't exist so the\n // client won't try to fetch it again (which would result in a 404).\n currentTreeCache.localizedResourcesMap.set(globalElementId, null)\n }\n }\n\n currentTreeCache.globalElements.set(globalElementId, globalElement)\n\n if (elementData == null) continue\n\n element = elementData as ElementData\n } else {\n element = current\n }\n\n const elementDescriptors = descriptors.get(element.type)\n\n if (elementDescriptors == null) continue\n\n getResourcesFromElementDescriptors(elementDescriptors, element.props)\n\n function getResourcesFromElementDescriptors(\n elementDescriptors: Record<string, PropControllerDescriptor>,\n props: ElementData['props'],\n ) {\n Object.entries(elementDescriptors).forEach(([propName, descriptor]) => {\n getSwatchIds(descriptor, props[propName]).forEach(swatchId => {\n currentTreeCache.swatchIds.add(swatchId)\n })\n\n getFileIds(descriptor, props[propName]).forEach(fileId => {\n currentTreeCache.fileIds.add(fileId)\n })\n\n getTypographyIds(descriptor, props[propName]).forEach(typographyId => {\n currentTreeCache.typographyIds.add(typographyId)\n })\n\n getTableIds(descriptor, props[propName]).forEach(tableId => {\n currentTreeCache.tableIds.add(tableId)\n })\n\n getPageIds(descriptor, props[propName]).forEach(pageId => {\n currentTreeCache.pageIds.add(pageId)\n })\n\n getElementChildren(descriptor, props[propName]).forEach(child => {\n if (!seen.has(child.key)) {\n seen.add(child.key)\n remaining.push(child)\n }\n })\n })\n }\n }\n }\n\n // Accumulate shared sets from per-tree state for bulk calls\n const allSwatchIds = new Set<string>()\n const allFileIds = new Set<string>()\n const allTypographyIds = new Set<string>()\n const allTableIds = new Set<string>()\n const allPageIds = new Set<string>()\n\n for (const currentTreeCache of treeCaches.values()) {\n currentTreeCache.swatchIds.forEach(id => allSwatchIds.add(id))\n currentTreeCache.fileIds.forEach(id => allFileIds.add(id))\n currentTreeCache.typographyIds.forEach(id => allTypographyIds.add(id))\n currentTreeCache.tableIds.forEach(id => allTableIds.add(id))\n currentTreeCache.pageIds.forEach(id => allPageIds.add(id))\n }\n\n // One combined round of bulk sub-resource calls\n\n // 1. Fetch typographies first (needed for secondary swatch discovery)\n const typographies = await this.getTypographies([...allTypographyIds], siteVersion)\n\n // 2. Secondary discovery: check for additional swatch IDs in typography styles\n typographies.forEach(typography => {\n if (typography == null) return\n\n const secondarySwatchIds: string[] = []\n typography.style.forEach(style => {\n const swatchId = style.value.color?.swatchId\n if (swatchId != null) {\n secondarySwatchIds.push(swatchId)\n allSwatchIds.add(swatchId)\n }\n })\n\n if (secondarySwatchIds.length > 0) {\n // Add discovered swatches to per-tree sets for trees that reference this typography\n for (const currentTreeCache of treeCaches.values()) {\n if (currentTreeCache.typographyIds.has(typography.id)) {\n secondarySwatchIds.forEach(id => currentTreeCache.swatchIds.add(id))\n }\n }\n }\n })\n\n // 3. Fetch remaining resources in parallel\n const [pagePathnames, { swatches, files, tables }] = await Promise.all([\n this.getPagePathnameSlices([...allPageIds], siteVersion, { locale }),\n this.getIntrospectedResources(\n {\n swatchIds: [...allSwatchIds],\n fileIds: [...allFileIds],\n tableIds: [...allTableIds],\n },\n siteVersion,\n ),\n ])\n\n // Build per-tree CacheData using only the resources that tree references\n const result = new Map<string, CacheData>()\n\n for (const [treeId, currentTreeCache] of treeCaches) {\n const apiResources = {\n [APIResourceType.Swatch]: [...currentTreeCache.swatchIds].map(id => ({\n id,\n value: swatches.find(swatch => swatch?.id === id) ?? null,\n })),\n [APIResourceType.File]: [...currentTreeCache.fileIds].map(id => ({\n id,\n value: files.find(file => file?.id === id) ?? null,\n })),\n [APIResourceType.Typography]: [...currentTreeCache.typographyIds].map(id => ({\n id,\n value: typographies.find(typography => typography?.id === id) ?? null,\n })),\n [APIResourceType.Table]: [...currentTreeCache.tableIds].map(id => ({\n id,\n value: tables.find(table => table?.id === id) ?? null,\n })),\n [APIResourceType.PagePathnameSlice]: [...currentTreeCache.pageIds].map(id => ({\n id,\n value: pagePathnames.find(pagePathnameSlice => pagePathnameSlice?.id === id) ?? null,\n locale,\n })),\n [APIResourceType.GlobalElement]: [...currentTreeCache.globalElements.entries()].map(\n ([id, value]) => ({\n id,\n value,\n }),\n ),\n [APIResourceType.LocalizedGlobalElement]: [\n ...currentTreeCache.localizedGlobalElements.entries(),\n ].map(([id, value]) => ({\n id,\n value,\n locale,\n })),\n }\n\n result.set(treeId, {\n apiResources,\n localizedResourcesMap:\n locale != null\n ? { [locale]: Object.fromEntries(currentTreeCache.localizedResourcesMap.entries()) }\n : {},\n })\n }\n\n return result\n }\n\n async getPageSnapshot(\n pathname: string,\n {\n siteVersion: siteVersionPromise,\n locale,\n allowLocaleFallback = true,\n }: {\n siteVersion: SiteVersion | null | Promise<SiteVersion | null>\n locale?: string\n allowLocaleFallback?: boolean\n },\n ): Promise<MakeswiftPageSnapshot | null> {\n const queryParams = (): string => {\n const params = new URLSearchParams()\n if (locale) params.set('locale', locale)\n if (allowLocaleFallback != null) params.set('allowLocaleFallback', `${allowLocaleFallback}`)\n return params.toString()\n }\n\n const siteVersion = await siteVersionPromise\n const response = await this.fetch(\n `v4/pages/${encodeURIComponent(pathname)}/document?${queryParams()}`,\n siteVersion,\n )\n\n if (!response.ok) {\n const failedBody = await failedResponseBody(response)\n if (response.status === 404) return null\n\n console.error(`Failed to get page snapshot for '${pathname}'`, {\n response: failedBody,\n siteVersion,\n locale,\n })\n\n throw new Error(`Failed to get page snapshot for '${pathname}': ${responseError(response)}`)\n }\n\n const document: MakeswiftPageDocument = await response.json()\n const baseLocalizedPage = document.localizedPages.find(({ parentId }) => parentId == null)\n\n const cacheData = await this.introspect(\n baseLocalizedPage?.data ?? document.data,\n siteVersion,\n // The /v3/pages endpoint returns null for document.locale when the requested locale is the default.\n // This legacy behavior is set to change with the upcoming /v4/pages endpoint.\n // We rely on document.locale when reading from the API cache, so ensure the cache is built during\n // introspection using the same value.\n document.locale,\n )\n\n return {\n document,\n cacheData,\n }\n }\n\n async getComponentSnapshot(\n id: string,\n {\n siteVersion: siteVersionPromise,\n locale,\n allowLocaleFallback = true,\n }: {\n siteVersion: SiteVersion | null | Promise<SiteVersion | null>\n locale?: string\n allowLocaleFallback?: boolean\n },\n ): Promise<MakeswiftComponentSnapshot> {\n const searchParams = new URLSearchParams()\n if (locale) searchParams.set('locale', locale)\n\n const siteVersion = await siteVersionPromise\n const key = deterministicUUID({ id, locale, seed: this.apiKey.split('-').at(0) })\n const baseLocaleWasRequested = locale == null\n const canAttemptLocaleFallback = !baseLocaleWasRequested && allowLocaleFallback\n\n let response\n const responseForRequestedLocale = await this.fetch(\n `v2/element-trees/${encodeURIComponent(id)}?${searchParams.toString()}`,\n siteVersion,\n )\n\n if (responseForRequestedLocale.status === 404 && canAttemptLocaleFallback) {\n await failedResponseBody(responseForRequestedLocale)\n response = await this.fetch(`v2/element-trees/${encodeURIComponent(id)}`, siteVersion)\n } else {\n response = responseForRequestedLocale\n }\n\n if (!response.ok) {\n // See comment on `failedResponseBody` for why we always consume the\n // response body of failed responses.\n const failedBody = await failedResponseBody(response)\n if (response.status === 404) {\n return {\n document: {\n id,\n locale: locale ?? null,\n data: null,\n },\n key,\n cacheData: CacheData.empty(),\n meta: {\n allowLocaleFallback,\n requestedLocale: locale ?? null,\n },\n }\n }\n\n console.error(`Failed to get component snapshot for '${id}':`, {\n response: failedBody,\n siteVersion,\n locale,\n })\n\n throw new Error(`Failed to get component snapshot for '${id}': ${responseError(response)}`)\n }\n\n const document = Schema.componentDocument.parse(await response.json())\n const cacheData = await this.introspect(document.data, siteVersion, locale ?? null)\n\n return {\n document,\n cacheData,\n key,\n meta: {\n allowLocaleFallback,\n requestedLocale: locale ?? null,\n },\n }\n }\n\n /**\n * Fetches multiple component snapshots in a single bulk request with unified introspection.\n *\n * @param ids - Element tree IDs to fetch. Maximum 100 IDs per call.\n */\n // TODO: Make getComponentSnapshot use this method under the hood once the v0 bulk endpoint is stable.\n async unstable_getComponentSnapshots(\n ids: string[],\n {\n siteVersion: siteVersionPromise,\n locale,\n allowLocaleFallback = true,\n }: {\n siteVersion: SiteVersion | null | Promise<SiteVersion | null>\n locale?: string\n allowLocaleFallback?: boolean\n },\n ): Promise<MakeswiftComponentSnapshot[]> {\n if (ids.length === 0) return []\n const siteVersion = await siteVersionPromise\n\n // Step 1: Bulk fetch\n let documents = await this.getElementTreesBulk(ids, siteVersion, locale)\n\n // Step 2: Locale fallback — second-pass for IDs that returned null\n const baseLocaleWasRequested = locale == null\n const canAttemptLocaleFallback = !baseLocaleWasRequested && allowLocaleFallback\n const fallbackIndices: number[] = []\n\n if (canAttemptLocaleFallback) {\n documents.forEach((doc, i) => {\n if (doc == null) fallbackIndices.push(i)\n })\n\n if (fallbackIndices.length > 0) {\n const fallbackIds = fallbackIndices.map(i => ids[i])\n const fallbackDocuments = await this.getElementTreesBulk(fallbackIds, siteVersion)\n\n fallbackIndices.forEach((originalIndex, fallbackIndex) => {\n documents[originalIndex] = fallbackDocuments[fallbackIndex]\n })\n }\n }\n\n // Step 3: Unified introspection for all trees that have data\n const treesToIntrospect = documents\n .map(doc => (doc?.data != null ? { id: doc.id, data: doc.data } : null))\n .filter(isNonNullable)\n\n const cacheDataMap = await this.introspectMany(treesToIntrospect, siteVersion, locale ?? null)\n\n // Step 4: Build per-component results\n return ids.map((id, i) => {\n const document = documents[i]\n const key = deterministicUUID({ id, locale, seed: this.apiKey.split('-').at(0) })\n\n if (document == null || document.data == null) {\n return {\n document: { id, locale: locale ?? null, data: null },\n key,\n cacheData: CacheData.empty(),\n meta: { allowLocaleFallback, requestedLocale: locale ?? null },\n }\n }\n\n return {\n document,\n key,\n cacheData: cacheDataMap.get(id) ?? CacheData.empty(),\n meta: { allowLocaleFallback, requestedLocale: locale ?? null },\n }\n })\n }\n\n async getFile(fileId: string): Promise<File | null> {\n return this.graphqlClient.getFile(fileId)\n }\n\n async getTable(tableId: string): Promise<Table | null> {\n return this.graphqlClient.getTable(tableId)\n }\n\n getTranslatableData(elementTree: ElementData): Record<string, Data> {\n return getTranslatableContent(this.getElementDescriptors(), elementTree)\n }\n\n mergeTranslatedData(elementTree: ElementData, translatedData: Record<string, Data>): Element {\n return mergeTranslatedContent(this.getElementDescriptors(), elementTree, translatedData)\n }\n\n async readPreviewToken(token: string): Promise<PreviewTokenPayload | null> {\n const response = await fetch(new URL('v1/preview-tokens/reads', this.apiOrigin).toString(), {\n method: 'POST',\n headers: {\n 'x-api-key': this.apiKey,\n 'makeswift-site-api-key': this.apiKey,\n 'makeswift-runtime-version': PACKAGE_VERSION,\n 'content-type': 'application/json',\n },\n body: JSON.stringify({ token }),\n cache: 'no-store',\n })\n\n if (!response.ok) {\n const failedBody = await failedResponseBody(response)\n if (response.status === 401) {\n console.error(`Preview token is invalid or expired`, {\n response: failedBody,\n })\n } else if (response.status !== 404) {\n console.error(`Failed to verify preview token`, {\n response: failedBody,\n })\n }\n\n return null\n }\n\n const json = await response.json()\n\n const parsed = Schema.previewTokenPayload.safeParse(json)\n if (!parsed.success) {\n throw new Error(\n `Failed to parse preview token payload: ${parsed.error.errors.map(e => e.message).join('; ')}`,\n )\n }\n\n return parsed.data\n }\n\n async unstable_getFonts(siteVersion: SiteVersion | null = null): Promise<GetFontsAPI | null> {\n const response = await this.fetch('v1_unstable/fonts', siteVersion)\n\n if (!response.ok) {\n console.error('Failed to fetch fonts', {\n response: await failedResponseBody(response),\n siteVersion,\n })\n\n return null\n }\n\n const json = await response.json()\n\n const parsed = Schema.fonts.safeParse(json)\n if (!parsed.success) {\n console.error('Failed to parse fonts API response', {\n response: json,\n siteVersion,\n })\n\n return null\n }\n\n return parsed.data\n }\n\n private getElementDescriptors() {\n return getPropControllerDescriptors(this.runtime.protoStore.getState())\n }\n}\n\nfunction getPagesQueryParams({\n limit = 100,\n after,\n sortBy,\n sortDirection,\n includeOffline,\n pathPrefix,\n locale,\n}: GetPagesParams): URLSearchParams {\n const params = new URLSearchParams()\n\n if (limit != null) params.set('limit', limit.toString())\n if (after != null) params.set('after', after)\n if (sortBy != null) params.set('sortBy', sortBy)\n if (sortDirection != null) params.set('sortDirection', sortDirection)\n if (includeOffline != null) params.set('includeOffline', includeOffline.toString())\n if (pathPrefix != null) params.set('pathPrefix', pathPrefix)\n if (locale != null) params.set('locale', locale)\n\n return params\n}\n\nfunction responseError(response: Response): string {\n return `${response.status} ${response.statusText}`\n}\n"],"mappings":"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","names":["getResourcesFromElementDescriptors","elementDescriptors","element"]}
1
+ {"version":3,"sources":["../../../src/client/index.ts"],"sourcesContent":["import { z } from 'zod'\n\nimport {\n type UnversionedResourcesQueryResult,\n type UnversionedResourcesQueryVariables,\n} from '../api/graphql/generated/types'\n\nimport {\n APIResourceType,\n type File,\n type GlobalElement,\n type LocalizedGlobalElement,\n type Swatch,\n type Table,\n type Typography,\n} from '../api/types'\n\nimport { CacheData } from '../api/api-resources-client'\n\nimport { MakeswiftGraphQLApiClient } from '../api/graphql-api-client'\nimport { MakeswiftRestAPIClient, failedResponseBody } from '../api/rest-api-client'\nimport { type SiteVersion } from '../api/site-version'\n\nimport { Descriptor as PropControllerDescriptor } from '../prop-controllers/descriptors'\nimport {\n getElementChildren,\n getSwatchIds,\n getFileIds,\n getPageIds,\n getTableIds,\n getTypographyIds,\n} from '../prop-controllers/introspection'\n\nimport { type ReactRuntimeCore } from '../runtimes/react/react-runtime-core'\n\nimport {\n type Element,\n type ElementData,\n type Data,\n getPropControllerDescriptors,\n isElementReference,\n} from '../state/read-only-state'\n\nimport { mergeTranslatedContent } from '../state/translations/merge'\nimport { getTranslatableContent } from '../state/translations/get'\n\nimport { deterministicUUID } from '../utils/deterministic-uuid'\nimport { toIterablePaginationResult } from '../utils/pagination'\nimport { isNonNullable } from '../utils/isNonNullable'\n\nimport {\n type MakeswiftComponentDocument,\n type MakeswiftComponentSnapshot,\n} from './component-snapshot'\n\nimport { type MakeswiftPageDocument, type MakeswiftPageSnapshot } from './page-snapshot'\n\nimport * as Schema from './schema'\n\nexport { SnippetLocation } from '../api/graphql/generated/types'\n\n// TODO: clean up the exports below, as most of them are for internal consumptions only\n// and should not be publicly exposed\nexport {\n type MakeswiftComponentDocument,\n type MakeswiftComponentDocumentFallback,\n type MakeswiftComponentSnapshot,\n type MakeswiftComponentMetadata as MakeswiftComponentSnapshotMetadata,\n componentDocumentToRootEmbeddedDocument,\n} from './component-snapshot'\n\nexport {\n type Snippet,\n type Font,\n type MakeswiftPageDocument,\n type MakeswiftPageSnapshot,\n pageToRootDocument,\n} from './page-snapshot'\n\n// TODO: remove, leftover from the `getSitemap` method removed in 0.25.0:\n// https://github.com/makeswift/makeswift/releases/tag/%40makeswift%2Fruntime%400.25.0\nexport type Sitemap = {\n id: string\n loc: string\n lastmod?: string\n changefreq?: 'always' | 'hourly' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'never'\n priority?: number\n alternateRefs?: {\n hreflang: string\n href: string\n }[]\n}[]\n\nexport type MakeswiftPage = z.infer<typeof Schema.pageData>\nexport type MakeswiftGetPagesResult = z.infer<typeof Schema.getPagesResult>\nexport type PreviewTokenPayload = z.infer<typeof Schema.previewTokenPayload>\nexport type GetFontsAPI = z.infer<typeof Schema.fonts>\n\ntype GetPagesParams = z.infer<typeof Schema.getPagesParams>\ntype GetPageResult = z.infer<typeof Schema.getPageResult>\n\nexport class MakeswiftClient extends MakeswiftRestAPIClient {\n private graphqlClient: MakeswiftGraphQLApiClient\n private runtime: ReactRuntimeCore\n\n constructor(\n apiKey: string,\n {\n runtime,\n }: {\n runtime: ReactRuntimeCore\n },\n ) {\n if (typeof apiKey !== 'string') {\n throw new Error(\n 'The Makeswift client must be passed a valid Makeswift site API key: ' +\n \"`new Makeswift('<makeswift_site_api_key>')`\\n\" +\n `Received \"${apiKey}\" instead.`,\n )\n }\n\n super({\n fetch: runtime.fetch,\n apiKey,\n apiOrigin: runtime.apiOrigin,\n })\n\n this.graphqlClient = new MakeswiftGraphQLApiClient({\n endpoint: runtime.graphqlApiEndpoint,\n })\n\n this.runtime = runtime\n }\n\n private getPagesInternal = async ({\n siteVersion = null,\n ...params\n }: {\n siteVersion?: SiteVersion | null\n } & GetPagesParams = {}): Promise<MakeswiftGetPagesResult> => {\n const queryParams = getPagesQueryParams(params)\n\n const response = await this.fetch(`v5/pages?${queryParams.toString()}`, siteVersion)\n if (!response.ok) {\n console.error('Failed to get pages', {\n response: await failedResponseBody(response),\n siteVersion,\n params,\n })\n\n throw new Error(`Failed to get pages: ${responseError(response)}`)\n }\n\n const result = await response.json()\n const parsedResponse = Schema.getPagesResult.safeParse(result)\n if (!parsedResponse.success) {\n throw new Error(\n `Failed to parse 'getPages' response: ${parsedResponse.error.errors.map(e => e.message).join('; ')}`,\n )\n }\n return parsedResponse.data\n }\n\n getPages = toIterablePaginationResult(this.getPagesInternal)\n\n async getPage(\n pathname: string,\n { siteVersion = null, locale }: { siteVersion?: SiteVersion | null; locale?: string } = {},\n ): Promise<GetPageResult | null> {\n const url = new URL(`v3/pages/${encodeURIComponent(pathname)}`, this.apiOrigin)\n if (locale) url.searchParams.set('locale', locale)\n\n const response = await this.fetch(url.pathname + url.search, siteVersion)\n\n if (!response.ok) {\n const failedBody = await failedResponseBody(response)\n if (response.status === 404) return null\n\n console.error(`Failed to get page snapshot for '${pathname}'`, {\n response: failedBody,\n siteVersion,\n locale,\n })\n\n throw new Error(`Failed to get page snapshot for '${pathname}': ${responseError(response)}`)\n }\n\n const json = await response.json()\n\n return Schema.getPageResult.parse(json)\n }\n\n private async getTypographies(\n typographyIds: string[],\n siteVersion: SiteVersion | null,\n ): Promise<(Typography | null)[]> {\n if (typographyIds.length === 0) return []\n\n const url = new URL(`v3/typographies/bulk`, this.apiOrigin)\n\n typographyIds.forEach(id => {\n url.searchParams.append('ids', id)\n })\n\n const response = await this.fetch(url.pathname + url.search, siteVersion)\n\n if (!response.ok) {\n console.error(`Failed to get typographies for [${typographyIds.join(', ')}]`, {\n response: await failedResponseBody(response),\n siteVersion,\n })\n\n return []\n }\n\n const body = await response.json()\n\n return body\n }\n\n private async getSwatches(\n ids: string[],\n siteVersion: SiteVersion | null,\n ): Promise<(Swatch | null)[]> {\n if (ids.length === 0) return []\n\n const url = new URL(`v3/swatches/bulk`, this.apiOrigin)\n\n ids.forEach(id => {\n url.searchParams.append('ids', id)\n })\n\n const response = await this.fetch(url.pathname + url.search, siteVersion)\n\n if (!response.ok) {\n console.error(`Failed to get swatches for ${ids.join(', ')}`, {\n response: await failedResponseBody(response),\n siteVersion,\n })\n\n return []\n }\n\n return await response.json()\n }\n\n private async getElementTreesBulk(\n ids: string[],\n siteVersion: SiteVersion | null,\n locale?: string,\n ): Promise<(MakeswiftComponentDocument | null)[]> {\n if (ids.length === 0) return []\n\n const requestBody: { ids: string[]; locale?: string } = { ids }\n if (locale != null) requestBody.locale = locale\n\n const response = await this.fetch('v0/element-trees/bulk', siteVersion, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(requestBody),\n })\n\n if (!response.ok) {\n const failedBody = await failedResponseBody(response)\n\n // 404 can mean the requested version has no commit (e.g., site never published)\n if (response.status === 404) return ids.map(() => null)\n\n console.error(`Failed to get element trees for [${ids.join(', ')}]`, {\n response: failedBody,\n siteVersion,\n locale,\n })\n\n throw new Error(`Failed to get element trees: ${responseError(response)}`)\n }\n\n const responseBody = await response.json()\n\n return responseBody.map((item: unknown) =>\n item != null ? Schema.componentDocument.parse(item) : null,\n )\n }\n\n private async getIntrospectedResources(\n {\n swatchIds,\n ...unversionedResourceIds\n }: UnversionedResourcesQueryVariables & { swatchIds: string[] },\n siteVersion: SiteVersion | null,\n ): Promise<UnversionedResourcesQueryResult & { swatches: (Swatch | null)[] }> {\n const unversionedResources =\n await this.graphqlClient.getUnversionedResources(unversionedResourceIds)\n\n const swatches = await this.getSwatches(swatchIds, siteVersion)\n\n return { ...unversionedResources, swatches }\n }\n\n // TODO: Consolidate this method with the introspectMany method once the\n // unstable_getComponentSnapshots method is stable and tested in production.\n private async introspect(\n element: Element,\n siteVersion: SiteVersion | null,\n locale: string | null,\n ): Promise<CacheData> {\n const descriptors = this.getElementDescriptors()\n const swatchIds = new Set<string>()\n const fileIds = new Set<string>()\n const typographyIds = new Set<string>()\n const tableIds = new Set<string>()\n const pageIds = new Set<string>()\n const globalElements = new Map<string, GlobalElement | null>()\n const localizedGlobalElements = new Map<string, LocalizedGlobalElement | null>()\n const localizedResourcesMap = new Map<string, string | null>()\n\n const remaining = [element]\n const seen = new Set<string>()\n let current: Element | undefined\n\n while ((current = remaining.pop())) {\n let element: ElementData\n\n if (isElementReference(current)) {\n const globalElementId = current.value\n const globalElement = await this.getGlobalElement(globalElementId, siteVersion)\n let elementData = globalElement?.data\n\n if (locale) {\n const localizedGlobalElement = await this.getLocalizedGlobalElement(\n globalElementId,\n locale,\n siteVersion,\n )\n\n if (localizedGlobalElement) {\n // Update the logic here when we can merge element trees\n elementData = localizedGlobalElement.data\n\n localizedResourcesMap.set(globalElementId, localizedGlobalElement.id)\n localizedGlobalElements.set(localizedGlobalElement.id, localizedGlobalElement)\n } else {\n // Record that this localized global element doesn't exist so the\n // client won't try to fetch it again (which would result in a 404).\n localizedResourcesMap.set(globalElementId, null)\n }\n }\n\n globalElements.set(globalElementId, globalElement)\n\n if (elementData == null) continue\n\n element = elementData as ElementData\n } else {\n element = current\n }\n\n const elementDescriptors = descriptors.get(element.type)\n\n if (elementDescriptors == null) continue\n\n getResourcesFromElementDescriptors(elementDescriptors, element.props)\n\n function getResourcesFromElementDescriptors(\n elementDescriptors: Record<string, PropControllerDescriptor>,\n props: ElementData['props'],\n ) {\n Object.entries(elementDescriptors).forEach(([propName, descriptor]) => {\n getSwatchIds(descriptor, props[propName]).forEach(swatchId => {\n swatchIds.add(swatchId)\n })\n\n getFileIds(descriptor, props[propName]).forEach(fileId => fileIds.add(fileId))\n\n getTypographyIds(descriptor, props[propName]).forEach(typographyId =>\n typographyIds.add(typographyId),\n )\n\n getTableIds(descriptor, props[propName]).forEach(tableId => tableIds.add(tableId))\n\n getPageIds(descriptor, props[propName]).forEach(pageId => pageIds.add(pageId))\n\n getElementChildren(descriptor, props[propName]).forEach(child => {\n if (!seen.has(child.key)) {\n seen.add(child.key)\n\n remaining.push(child)\n }\n })\n })\n }\n }\n\n const typographies = await this.getTypographies([...typographyIds], siteVersion)\n\n typographies.forEach(typography => {\n typography?.style.forEach(style => {\n const swatchId = style.value.color?.swatchId\n\n if (swatchId != null) swatchIds.add(swatchId)\n })\n })\n\n const pagePathnames = await this.getPagePathnameSlices([...pageIds], siteVersion, { locale })\n\n const { swatches, files, tables } = await this.getIntrospectedResources(\n {\n swatchIds: [...swatchIds],\n fileIds: [...fileIds],\n tableIds: [...tableIds],\n },\n siteVersion,\n )\n\n const apiResources = {\n [APIResourceType.Swatch]: [...swatchIds].map(id => ({\n id,\n value: swatches.find(swatch => swatch?.id === id) ?? null,\n })),\n [APIResourceType.File]: [...fileIds].map(id => ({\n id,\n value: files.find(file => file?.id === id) ?? null,\n })),\n [APIResourceType.Typography]: [...typographyIds].map(id => ({\n id,\n value: typographies.find(typography => typography?.id === id) ?? null,\n })),\n [APIResourceType.Table]: [...tableIds].map(id => ({\n id,\n value: tables.find(table => table?.id === id) ?? null,\n })),\n [APIResourceType.PagePathnameSlice]: [...pageIds].map(id => ({\n id,\n value: pagePathnames.find(pagePathnameSlice => pagePathnameSlice?.id === id) ?? null,\n locale,\n })),\n [APIResourceType.GlobalElement]: [...globalElements.entries()].map(([id, value]) => ({\n id,\n value,\n })),\n [APIResourceType.LocalizedGlobalElement]: [...localizedGlobalElements.entries()].map(\n ([id, value]) => ({\n id,\n value,\n locale,\n }),\n ),\n }\n\n return {\n apiResources,\n localizedResourcesMap:\n locale != null ? { [locale]: Object.fromEntries(localizedResourcesMap.entries()) } : {},\n }\n }\n\n private async introspectMany(\n trees: { id: string; data: Element }[],\n siteVersion: SiteVersion | null,\n locale: string | null,\n ): Promise<Map<string, CacheData>> {\n if (trees.length === 0) return new Map()\n\n const descriptors = this.getElementDescriptors()\n\n // Shared caches for global elements (deduplication across trees)\n const globalElementCache = new Map<string, GlobalElement | null>()\n const localizedGlobalElementCache = new Map<string, LocalizedGlobalElement | null>()\n\n // Per-tree tracking, keyed by tree ID\n const treeCaches = new Map(\n trees.map(tree => [\n tree.id,\n {\n data: tree.data,\n swatchIds: new Set<string>(),\n fileIds: new Set<string>(),\n typographyIds: new Set<string>(),\n tableIds: new Set<string>(),\n pageIds: new Set<string>(),\n globalElements: new Map<string, GlobalElement | null>(),\n localizedGlobalElements: new Map<string, LocalizedGlobalElement | null>(),\n localizedResourcesMap: new Map<string, string | null>(),\n },\n ]),\n )\n\n // DFS traversal per tree\n for (const currentTreeCache of treeCaches.values()) {\n const remaining = [currentTreeCache.data]\n const seen = new Set<string>()\n let current: Element | undefined\n\n while ((current = remaining.pop())) {\n let element: ElementData\n\n if (isElementReference(current)) {\n const globalElementId = current.value\n\n // Fetch global element, using cache if already fetched for another tree\n let globalElement: GlobalElement | null\n if (globalElementCache.has(globalElementId)) {\n globalElement = globalElementCache.get(globalElementId)!\n } else {\n globalElement = await this.getGlobalElement(globalElementId, siteVersion)\n globalElementCache.set(globalElementId, globalElement)\n }\n\n let elementData = globalElement?.data\n\n if (locale) {\n let localizedGlobalElement: LocalizedGlobalElement | null\n if (localizedGlobalElementCache.has(globalElementId)) {\n localizedGlobalElement = localizedGlobalElementCache.get(globalElementId)!\n } else {\n localizedGlobalElement = await this.getLocalizedGlobalElement(\n globalElementId,\n locale,\n siteVersion,\n )\n localizedGlobalElementCache.set(globalElementId, localizedGlobalElement)\n }\n\n if (localizedGlobalElement) {\n // Update the logic here when we can merge element trees\n elementData = localizedGlobalElement.data\n\n currentTreeCache.localizedResourcesMap.set(globalElementId, localizedGlobalElement.id)\n currentTreeCache.localizedGlobalElements.set(\n localizedGlobalElement.id,\n localizedGlobalElement,\n )\n } else {\n // Record that this localized global element doesn't exist so the\n // client won't try to fetch it again (which would result in a 404).\n currentTreeCache.localizedResourcesMap.set(globalElementId, null)\n }\n }\n\n currentTreeCache.globalElements.set(globalElementId, globalElement)\n\n if (elementData == null) continue\n\n element = elementData as ElementData\n } else {\n element = current\n }\n\n const elementDescriptors = descriptors.get(element.type)\n\n if (elementDescriptors == null) continue\n\n getResourcesFromElementDescriptors(elementDescriptors, element.props)\n\n function getResourcesFromElementDescriptors(\n elementDescriptors: Record<string, PropControllerDescriptor>,\n props: ElementData['props'],\n ) {\n Object.entries(elementDescriptors).forEach(([propName, descriptor]) => {\n getSwatchIds(descriptor, props[propName]).forEach(swatchId => {\n currentTreeCache.swatchIds.add(swatchId)\n })\n\n getFileIds(descriptor, props[propName]).forEach(fileId => {\n currentTreeCache.fileIds.add(fileId)\n })\n\n getTypographyIds(descriptor, props[propName]).forEach(typographyId => {\n currentTreeCache.typographyIds.add(typographyId)\n })\n\n getTableIds(descriptor, props[propName]).forEach(tableId => {\n currentTreeCache.tableIds.add(tableId)\n })\n\n getPageIds(descriptor, props[propName]).forEach(pageId => {\n currentTreeCache.pageIds.add(pageId)\n })\n\n getElementChildren(descriptor, props[propName]).forEach(child => {\n if (!seen.has(child.key)) {\n seen.add(child.key)\n remaining.push(child)\n }\n })\n })\n }\n }\n }\n\n // Accumulate shared sets from per-tree state for bulk calls\n const allSwatchIds = new Set<string>()\n const allFileIds = new Set<string>()\n const allTypographyIds = new Set<string>()\n const allTableIds = new Set<string>()\n const allPageIds = new Set<string>()\n\n for (const currentTreeCache of treeCaches.values()) {\n currentTreeCache.swatchIds.forEach(id => allSwatchIds.add(id))\n currentTreeCache.fileIds.forEach(id => allFileIds.add(id))\n currentTreeCache.typographyIds.forEach(id => allTypographyIds.add(id))\n currentTreeCache.tableIds.forEach(id => allTableIds.add(id))\n currentTreeCache.pageIds.forEach(id => allPageIds.add(id))\n }\n\n // One combined round of bulk sub-resource calls\n\n // 1. Fetch typographies first (needed for secondary swatch discovery)\n const typographies = await this.getTypographies([...allTypographyIds], siteVersion)\n\n // 2. Secondary discovery: check for additional swatch IDs in typography styles\n typographies.forEach(typography => {\n if (typography == null) return\n\n const secondarySwatchIds: string[] = []\n typography.style.forEach(style => {\n const swatchId = style.value.color?.swatchId\n if (swatchId != null) {\n secondarySwatchIds.push(swatchId)\n allSwatchIds.add(swatchId)\n }\n })\n\n if (secondarySwatchIds.length > 0) {\n // Add discovered swatches to per-tree sets for trees that reference this typography\n for (const currentTreeCache of treeCaches.values()) {\n if (currentTreeCache.typographyIds.has(typography.id)) {\n secondarySwatchIds.forEach(id => currentTreeCache.swatchIds.add(id))\n }\n }\n }\n })\n\n // 3. Fetch remaining resources in parallel\n const [pagePathnames, { swatches, files, tables }] = await Promise.all([\n this.getPagePathnameSlices([...allPageIds], siteVersion, { locale }),\n this.getIntrospectedResources(\n {\n swatchIds: [...allSwatchIds],\n fileIds: [...allFileIds],\n tableIds: [...allTableIds],\n },\n siteVersion,\n ),\n ])\n\n // Build per-tree CacheData using only the resources that tree references\n const result = new Map<string, CacheData>()\n\n for (const [treeId, currentTreeCache] of treeCaches) {\n const apiResources = {\n [APIResourceType.Swatch]: [...currentTreeCache.swatchIds].map(id => ({\n id,\n value: swatches.find(swatch => swatch?.id === id) ?? null,\n })),\n [APIResourceType.File]: [...currentTreeCache.fileIds].map(id => ({\n id,\n value: files.find(file => file?.id === id) ?? null,\n })),\n [APIResourceType.Typography]: [...currentTreeCache.typographyIds].map(id => ({\n id,\n value: typographies.find(typography => typography?.id === id) ?? null,\n })),\n [APIResourceType.Table]: [...currentTreeCache.tableIds].map(id => ({\n id,\n value: tables.find(table => table?.id === id) ?? null,\n })),\n [APIResourceType.PagePathnameSlice]: [...currentTreeCache.pageIds].map(id => ({\n id,\n value: pagePathnames.find(pagePathnameSlice => pagePathnameSlice?.id === id) ?? null,\n locale,\n })),\n [APIResourceType.GlobalElement]: [...currentTreeCache.globalElements.entries()].map(\n ([id, value]) => ({\n id,\n value,\n }),\n ),\n [APIResourceType.LocalizedGlobalElement]: [\n ...currentTreeCache.localizedGlobalElements.entries(),\n ].map(([id, value]) => ({\n id,\n value,\n locale,\n })),\n }\n\n result.set(treeId, {\n apiResources,\n localizedResourcesMap:\n locale != null\n ? { [locale]: Object.fromEntries(currentTreeCache.localizedResourcesMap.entries()) }\n : {},\n })\n }\n\n return result\n }\n\n async getPageSnapshot(\n pathname: string,\n {\n siteVersion: siteVersionPromise,\n locale,\n allowLocaleFallback = true,\n }: {\n siteVersion: SiteVersion | null | Promise<SiteVersion | null>\n locale?: string\n allowLocaleFallback?: boolean\n },\n ): Promise<MakeswiftPageSnapshot | null> {\n const queryParams = (): string => {\n const params = new URLSearchParams()\n if (locale) params.set('locale', locale)\n if (allowLocaleFallback != null) params.set('allowLocaleFallback', `${allowLocaleFallback}`)\n return params.toString()\n }\n\n const siteVersion = await siteVersionPromise\n const response = await this.fetch(\n `v4/pages/${encodeURIComponent(pathname)}/document?${queryParams()}`,\n siteVersion,\n )\n\n if (!response.ok) {\n const failedBody = await failedResponseBody(response)\n if (response.status === 404) return null\n\n console.error(`Failed to get page snapshot for '${pathname}'`, {\n response: failedBody,\n siteVersion,\n locale,\n })\n\n throw new Error(`Failed to get page snapshot for '${pathname}': ${responseError(response)}`)\n }\n\n const document: MakeswiftPageDocument = await response.json()\n const baseLocalizedPage = document.localizedPages.find(({ parentId }) => parentId == null)\n\n const cacheData = await this.introspect(\n baseLocalizedPage?.data ?? document.data,\n siteVersion,\n // The /v3/pages endpoint returns null for document.locale when the requested locale is the default.\n // This legacy behavior is set to change with the upcoming /v4/pages endpoint.\n // We rely on document.locale when reading from the API cache, so ensure the cache is built during\n // introspection using the same value.\n document.locale,\n )\n\n return {\n document,\n cacheData,\n }\n }\n\n async getComponentSnapshot(\n id: string,\n {\n siteVersion: siteVersionPromise,\n locale,\n allowLocaleFallback = true,\n }: {\n siteVersion: SiteVersion | null | Promise<SiteVersion | null>\n locale?: string\n allowLocaleFallback?: boolean\n },\n ): Promise<MakeswiftComponentSnapshot> {\n const searchParams = new URLSearchParams()\n if (locale) searchParams.set('locale', locale)\n\n const siteVersion = await siteVersionPromise\n const key = deterministicUUID({ id, locale, seed: this.apiKey.split('-').at(0) })\n const baseLocaleWasRequested = locale == null\n const canAttemptLocaleFallback = !baseLocaleWasRequested && allowLocaleFallback\n\n let response\n const responseForRequestedLocale = await this.fetch(\n `v2/element-trees/${encodeURIComponent(id)}?${searchParams.toString()}`,\n siteVersion,\n )\n\n if (responseForRequestedLocale.status === 404 && canAttemptLocaleFallback) {\n await failedResponseBody(responseForRequestedLocale)\n response = await this.fetch(`v2/element-trees/${encodeURIComponent(id)}`, siteVersion)\n } else {\n response = responseForRequestedLocale\n }\n\n if (!response.ok) {\n // See comment on `failedResponseBody` for why we always consume the\n // response body of failed responses.\n const failedBody = await failedResponseBody(response)\n if (response.status === 404) {\n return {\n document: {\n id,\n locale: locale ?? null,\n data: null,\n },\n key,\n cacheData: CacheData.empty(),\n meta: {\n allowLocaleFallback,\n requestedLocale: locale ?? null,\n },\n }\n }\n\n console.error(`Failed to get component snapshot for '${id}':`, {\n response: failedBody,\n siteVersion,\n locale,\n })\n\n throw new Error(`Failed to get component snapshot for '${id}': ${responseError(response)}`)\n }\n\n const document = Schema.componentDocument.parse(await response.json())\n const cacheData = await this.introspect(document.data, siteVersion, document.locale)\n\n return {\n document,\n cacheData,\n key,\n meta: {\n allowLocaleFallback,\n requestedLocale: locale ?? null,\n },\n }\n }\n\n /**\n * Fetches multiple component snapshots in a single bulk request with unified introspection.\n *\n * @param ids - Element tree IDs to fetch. Maximum 100 IDs per call.\n */\n // TODO: Make getComponentSnapshot use this method under the hood once the v0 bulk endpoint is stable.\n async unstable_getComponentSnapshots(\n ids: string[],\n {\n siteVersion: siteVersionPromise,\n locale,\n allowLocaleFallback = true,\n }: {\n siteVersion: SiteVersion | null | Promise<SiteVersion | null>\n locale?: string\n allowLocaleFallback?: boolean\n },\n ): Promise<MakeswiftComponentSnapshot[]> {\n if (ids.length === 0) return []\n const siteVersion = await siteVersionPromise\n\n // Step 1: Bulk fetch\n let documents = await this.getElementTreesBulk(ids, siteVersion, locale)\n\n // Step 2: Locale fallback — second-pass for IDs that returned null\n const baseLocaleWasRequested = locale == null\n const canAttemptLocaleFallback = !baseLocaleWasRequested && allowLocaleFallback\n const fallbackIndices: number[] = []\n\n if (canAttemptLocaleFallback) {\n documents.forEach((doc, i) => {\n if (doc == null) fallbackIndices.push(i)\n })\n\n if (fallbackIndices.length > 0) {\n const fallbackIds = fallbackIndices.map(i => ids[i])\n const fallbackDocuments = await this.getElementTreesBulk(fallbackIds, siteVersion)\n\n fallbackIndices.forEach((originalIndex, fallbackIndex) => {\n documents[originalIndex] = fallbackDocuments[fallbackIndex]\n })\n }\n }\n\n // Step 3: Unified introspection for all trees that have data\n const treesToIntrospect = documents\n .map(doc => (doc?.data != null ? { id: doc.id, data: doc.data } : null))\n .filter(isNonNullable)\n\n const cacheDataMap = await this.introspectMany(treesToIntrospect, siteVersion, locale ?? null)\n\n // Step 4: Build per-component results\n return ids.map((id, i) => {\n const document = documents[i]\n const key = deterministicUUID({ id, locale, seed: this.apiKey.split('-').at(0) })\n\n if (document == null || document.data == null) {\n return {\n document: { id, locale: locale ?? null, data: null },\n key,\n cacheData: CacheData.empty(),\n meta: { allowLocaleFallback, requestedLocale: locale ?? null },\n }\n }\n\n return {\n document,\n key,\n cacheData: cacheDataMap.get(id) ?? CacheData.empty(),\n meta: { allowLocaleFallback, requestedLocale: locale ?? null },\n }\n })\n }\n\n async getFile(fileId: string): Promise<File | null> {\n return this.graphqlClient.getFile(fileId)\n }\n\n async getTable(tableId: string): Promise<Table | null> {\n return this.graphqlClient.getTable(tableId)\n }\n\n getTranslatableData(elementTree: ElementData): Record<string, Data> {\n return getTranslatableContent(this.getElementDescriptors(), elementTree)\n }\n\n mergeTranslatedData(elementTree: ElementData, translatedData: Record<string, Data>): Element {\n return mergeTranslatedContent(this.getElementDescriptors(), elementTree, translatedData)\n }\n\n async readPreviewToken(token: string): Promise<PreviewTokenPayload | null> {\n const response = await fetch(new URL('v1/preview-tokens/reads', this.apiOrigin).toString(), {\n method: 'POST',\n headers: {\n 'x-api-key': this.apiKey,\n 'makeswift-site-api-key': this.apiKey,\n 'makeswift-runtime-version': PACKAGE_VERSION,\n 'content-type': 'application/json',\n },\n body: JSON.stringify({ token }),\n cache: 'no-store',\n })\n\n if (!response.ok) {\n const failedBody = await failedResponseBody(response)\n if (response.status === 401) {\n console.error(`Preview token is invalid or expired`, {\n response: failedBody,\n })\n } else if (response.status !== 404) {\n console.error(`Failed to verify preview token`, {\n response: failedBody,\n })\n }\n\n return null\n }\n\n const json = await response.json()\n\n const parsed = Schema.previewTokenPayload.safeParse(json)\n if (!parsed.success) {\n throw new Error(\n `Failed to parse preview token payload: ${parsed.error.errors.map(e => e.message).join('; ')}`,\n )\n }\n\n return parsed.data\n }\n\n async unstable_getFonts(siteVersion: SiteVersion | null = null): Promise<GetFontsAPI | null> {\n const response = await this.fetch('v1_unstable/fonts', siteVersion)\n\n if (!response.ok) {\n console.error('Failed to fetch fonts', {\n response: await failedResponseBody(response),\n siteVersion,\n })\n\n return null\n }\n\n const json = await response.json()\n\n const parsed = Schema.fonts.safeParse(json)\n if (!parsed.success) {\n console.error('Failed to parse fonts API response', {\n response: json,\n siteVersion,\n })\n\n return null\n }\n\n return parsed.data\n }\n\n private getElementDescriptors() {\n return getPropControllerDescriptors(this.runtime.protoStore.getState())\n }\n}\n\nfunction getPagesQueryParams({\n limit = 100,\n after,\n sortBy,\n sortDirection,\n includeOffline,\n pathPrefix,\n locale,\n}: GetPagesParams): URLSearchParams {\n const params = new URLSearchParams()\n\n if (limit != null) params.set('limit', limit.toString())\n if (after != null) params.set('after', after)\n if (sortBy != null) params.set('sortBy', sortBy)\n if (sortDirection != null) params.set('sortDirection', sortDirection)\n if (includeOffline != null) params.set('includeOffline', includeOffline.toString())\n if (pathPrefix != null) params.set('pathPrefix', pathPrefix)\n if (locale != null) params.set('locale', locale)\n\n return params\n}\n\nfunction responseError(response: Response): string {\n return `${response.status} ${response.statusText}`\n}\n"],"mappings":"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","names":["getResourcesFromElementDescriptors","elementDescriptors","element"]}
@@ -0,0 +1,4 @@
1
+ export * from "./origins";
2
+ export * from "./site-version";
3
+ export * from "./resources";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/testing/fixtures/index.ts"],"sourcesContent":["export * from './origins'\nexport * from './site-version'\nexport * from './resources'\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
@@ -0,0 +1,8 @@
1
+ const TestOrigins = {
2
+ apiOrigin: "https://api.fakeswift.com",
3
+ appOrigin: "https://app.fakeswift.com"
4
+ };
5
+ export {
6
+ TestOrigins
7
+ };
8
+ //# sourceMappingURL=origins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/testing/fixtures/origins.ts"],"sourcesContent":["export const TestOrigins = {\n apiOrigin: 'https://api.fakeswift.com',\n appOrigin: 'https://app.fakeswift.com',\n} as const\n"],"mappings":"AAAO,MAAM,cAAc;AAAA,EACzB,WAAW;AAAA,EACX,WAAW;AACb;","names":[]}
@@ -0,0 +1,75 @@
1
+ const makeSwatch = (id, { hue = 0 } = {}) => ({
2
+ __typename: "Swatch",
3
+ id,
4
+ hue,
5
+ saturation: 100,
6
+ lightness: 50
7
+ });
8
+ const makeFile = (id) => ({
9
+ __typename: "File",
10
+ id,
11
+ name: `file ${id}`,
12
+ extension: "png",
13
+ publicUrl: `https://example.com/${id}`,
14
+ dimensions: { width: 100, height: 100 }
15
+ });
16
+ const makeTable = (id) => ({
17
+ __typename: "Table",
18
+ id,
19
+ name: `table ${id}`,
20
+ columns: []
21
+ });
22
+ const emptyStyle = {
23
+ fontFamily: null,
24
+ lineHeight: null,
25
+ letterSpacing: null,
26
+ fontWeight: null,
27
+ textAlign: null,
28
+ uppercase: null,
29
+ underline: null,
30
+ strikethrough: null,
31
+ italic: null,
32
+ fontSize: null,
33
+ color: null
34
+ };
35
+ const makeTypography = (id, { swatchId } = {}) => ({
36
+ __typename: "Typography",
37
+ id,
38
+ name: `typography ${id}`,
39
+ style: [
40
+ {
41
+ deviceId: "desktop",
42
+ value: swatchId != null ? { ...emptyStyle, color: { swatchId, alpha: 1 } } : emptyStyle
43
+ }
44
+ ]
45
+ });
46
+ const makeGlobalElement = (id) => ({
47
+ __typename: "GlobalElement",
48
+ id,
49
+ data: {}
50
+ });
51
+ const makeLocalizedGlobalElement = (id) => ({
52
+ __typename: "LocalizedGlobalElement",
53
+ id,
54
+ data: {}
55
+ });
56
+ const makePagePathnameSlice = (pageId, {
57
+ pathname = `/${pageId}`,
58
+ localizedPathname
59
+ } = {}) => ({
60
+ __typename: "PagePathnameSlice",
61
+ id: pageId,
62
+ basePageId: pageId,
63
+ pathname,
64
+ ...localizedPathname === void 0 ? {} : { localizedPathname }
65
+ });
66
+ export {
67
+ makeFile,
68
+ makeGlobalElement,
69
+ makeLocalizedGlobalElement,
70
+ makePagePathnameSlice,
71
+ makeSwatch,
72
+ makeTable,
73
+ makeTypography
74
+ };
75
+ //# sourceMappingURL=resources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/testing/fixtures/resources.ts"],"sourcesContent":["import {\n type Swatch,\n type File,\n type GlobalElement,\n type LocalizedGlobalElement,\n type Table,\n type Typography,\n type PagePathnameSlice,\n} from '../../api'\n\nexport const makeSwatch = (id: string, { hue = 0 }: { hue?: number } = {}): Swatch => ({\n __typename: 'Swatch',\n id,\n hue,\n saturation: 100,\n lightness: 50,\n})\n\nexport const makeFile = (id: string): File => ({\n __typename: 'File',\n id,\n name: `file ${id}`,\n extension: 'png',\n publicUrl: `https://example.com/${id}`,\n dimensions: { width: 100, height: 100 },\n})\n\nexport const makeTable = (id: string): Table => ({\n __typename: 'Table',\n id,\n name: `table ${id}`,\n columns: [],\n})\n\nconst emptyStyle = {\n fontFamily: null,\n lineHeight: null,\n letterSpacing: null,\n fontWeight: null,\n textAlign: null,\n uppercase: null,\n underline: null,\n strikethrough: null,\n italic: null,\n fontSize: null,\n color: null,\n}\n\nexport const makeTypography = (\n id: string,\n { swatchId }: { swatchId?: string } = {},\n): Typography => ({\n __typename: 'Typography',\n id,\n name: `typography ${id}`,\n style: [\n {\n deviceId: 'desktop',\n value:\n swatchId != null ? { ...emptyStyle, color: { swatchId: swatchId, alpha: 1 } } : emptyStyle,\n },\n ],\n})\n\nexport const makeGlobalElement = (id: string): GlobalElement => ({\n __typename: 'GlobalElement',\n id,\n data: {},\n})\n\nexport const makeLocalizedGlobalElement = (id: string): LocalizedGlobalElement => ({\n __typename: 'LocalizedGlobalElement',\n id,\n data: {},\n})\n\nexport const makePagePathnameSlice = (\n pageId: string,\n {\n pathname = `/${pageId}`,\n localizedPathname,\n }: { pathname?: string; localizedPathname?: string | null } = {},\n): PagePathnameSlice => ({\n __typename: 'PagePathnameSlice',\n id: pageId,\n basePageId: pageId,\n pathname,\n ...(localizedPathname === undefined ? {} : { localizedPathname }),\n})\n"],"mappings":"AAUO,MAAM,aAAa,CAAC,IAAY,EAAE,MAAM,EAAE,IAAsB,CAAC,OAAe;AAAA,EACrF,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,WAAW;AACb;AAEO,MAAM,WAAW,CAAC,QAAsB;AAAA,EAC7C,YAAY;AAAA,EACZ;AAAA,EACA,MAAM,QAAQ,EAAE;AAAA,EAChB,WAAW;AAAA,EACX,WAAW,uBAAuB,EAAE;AAAA,EACpC,YAAY,EAAE,OAAO,KAAK,QAAQ,IAAI;AACxC;AAEO,MAAM,YAAY,CAAC,QAAuB;AAAA,EAC/C,YAAY;AAAA,EACZ;AAAA,EACA,MAAM,SAAS,EAAE;AAAA,EACjB,SAAS,CAAC;AACZ;AAEA,MAAM,aAAa;AAAA,EACjB,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,eAAe;AAAA,EACf,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,OAAO;AACT;AAEO,MAAM,iBAAiB,CAC5B,IACA,EAAE,SAAS,IAA2B,CAAC,OACvB;AAAA,EAChB,YAAY;AAAA,EACZ;AAAA,EACA,MAAM,cAAc,EAAE;AAAA,EACtB,OAAO;AAAA,IACL;AAAA,MACE,UAAU;AAAA,MACV,OACE,YAAY,OAAO,EAAE,GAAG,YAAY,OAAO,EAAE,UAAoB,OAAO,EAAE,EAAE,IAAI;AAAA,IACpF;AAAA,EACF;AACF;AAEO,MAAM,oBAAoB,CAAC,QAA+B;AAAA,EAC/D,YAAY;AAAA,EACZ;AAAA,EACA,MAAM,CAAC;AACT;AAEO,MAAM,6BAA6B,CAAC,QAAwC;AAAA,EACjF,YAAY;AAAA,EACZ;AAAA,EACA,MAAM,CAAC;AACT;AAEO,MAAM,wBAAwB,CACnC,QACA;AAAA,EACE,WAAW,IAAI,MAAM;AAAA,EACrB;AACF,IAA8D,CAAC,OACxC;AAAA,EACvB,YAAY;AAAA,EACZ,IAAI;AAAA,EACJ,YAAY;AAAA,EACZ;AAAA,EACA,GAAI,sBAAsB,SAAY,CAAC,IAAI,EAAE,kBAAkB;AACjE;","names":[]}
@@ -2,12 +2,7 @@ const TestWorkingSiteVersion = {
2
2
  version: "draft",
3
3
  token: "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJtYWtlc3dpZnQtcnVudGltZSIsImlhdCI6MTc1NDU5OTE0OSwiZXhwIjo0MTAyNDMyNzQ5LCJhdWQiOiJ0ZXN0Iiwic3ViIjoibWFrZXN3aWZ0LXJ1bnRpbWUifQ.-1BDOmEN1Q1QeKP7qfjPyAkrKRjb4q4qaqyhPBvMnhg"
4
4
  };
5
- const TestOrigins = {
6
- apiOrigin: "https://api.fakeswift.com",
7
- appOrigin: "https://app.fakeswift.com"
8
- };
9
5
  export {
10
- TestOrigins,
11
6
  TestWorkingSiteVersion
12
7
  };
13
- //# sourceMappingURL=fixtures.js.map
8
+ //# sourceMappingURL=site-version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/testing/fixtures/site-version.ts"],"sourcesContent":["import { type SiteVersion } from '../../api/site-version'\n\nexport const TestWorkingSiteVersion: SiteVersion = {\n version: 'draft',\n token:\n 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJtYWtlc3dpZnQtcnVudGltZSIsImlhdCI6MTc1NDU5OTE0OSwiZXhwIjo0MTAyNDMyNzQ5LCJhdWQiOiJ0ZXN0Iiwic3ViIjoibWFrZXN3aWZ0LXJ1bnRpbWUifQ.-1BDOmEN1Q1QeKP7qfjPyAkrKRjb4q4qaqyhPBvMnhg',\n} as const\n"],"mappings":"AAEO,MAAM,yBAAsC;AAAA,EACjD,SAAS;AAAA,EACT,OACE;AACJ;","names":[]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=host-api-resource-client.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-api-resource-client.test.d.ts","sourceRoot":"","sources":["../../../../src/api/__tests__/host-api-resource-client.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export * from './origins';
2
+ export * from './site-version';
3
+ export * from './resources';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/testing/fixtures/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA"}
@@ -1,7 +1,5 @@
1
- import { type SiteVersion } from '../next';
2
- export declare const TestWorkingSiteVersion: SiteVersion;
3
1
  export declare const TestOrigins: {
4
2
  readonly apiOrigin: "https://api.fakeswift.com";
5
3
  readonly appOrigin: "https://app.fakeswift.com";
6
4
  };
7
- //# sourceMappingURL=fixtures.d.ts.map
5
+ //# sourceMappingURL=origins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"origins.d.ts","sourceRoot":"","sources":["../../../../src/testing/fixtures/origins.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW;;;CAGd,CAAA"}
@@ -0,0 +1,16 @@
1
+ import { type Swatch, type File, type GlobalElement, type LocalizedGlobalElement, type Table, type Typography, type PagePathnameSlice } from '../../api';
2
+ export declare const makeSwatch: (id: string, { hue }?: {
3
+ hue?: number;
4
+ }) => Swatch;
5
+ export declare const makeFile: (id: string) => File;
6
+ export declare const makeTable: (id: string) => Table;
7
+ export declare const makeTypography: (id: string, { swatchId }?: {
8
+ swatchId?: string;
9
+ }) => Typography;
10
+ export declare const makeGlobalElement: (id: string) => GlobalElement;
11
+ export declare const makeLocalizedGlobalElement: (id: string) => LocalizedGlobalElement;
12
+ export declare const makePagePathnameSlice: (pageId: string, { pathname, localizedPathname, }?: {
13
+ pathname?: string;
14
+ localizedPathname?: string | null;
15
+ }) => PagePathnameSlice;
16
+ //# sourceMappingURL=resources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../../../src/testing/fixtures/resources.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,MAAM,EACX,KAAK,IAAI,EACT,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAC3B,KAAK,KAAK,EACV,KAAK,UAAU,EACf,KAAK,iBAAiB,EACvB,MAAM,WAAW,CAAA;AAElB,eAAO,MAAM,UAAU,GAAI,IAAI,MAAM,EAAE,UAAa;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,KAAG,MAM1E,CAAA;AAEF,eAAO,MAAM,QAAQ,GAAI,IAAI,MAAM,KAAG,IAOpC,CAAA;AAEF,eAAO,MAAM,SAAS,GAAI,IAAI,MAAM,KAAG,KAKrC,CAAA;AAgBF,eAAO,MAAM,cAAc,GACzB,IAAI,MAAM,EACV,eAAc;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,KACvC,UAWD,CAAA;AAEF,eAAO,MAAM,iBAAiB,GAAI,IAAI,MAAM,KAAG,aAI7C,CAAA;AAEF,eAAO,MAAM,0BAA0B,GAAI,IAAI,MAAM,KAAG,sBAItD,CAAA;AAEF,eAAO,MAAM,qBAAqB,GAChC,QAAQ,MAAM,EACd,mCAGG;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAO,KAC/D,iBAMD,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { type SiteVersion } from '../../api/site-version';
2
+ export declare const TestWorkingSiteVersion: SiteVersion;
3
+ //# sourceMappingURL=site-version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"site-version.d.ts","sourceRoot":"","sources":["../../../../src/testing/fixtures/site-version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAEzD,eAAO,MAAM,sBAAsB,EAAE,WAI3B,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@makeswift/runtime",
3
- "version": "0.28.7-canary.6",
3
+ "version": "0.28.7-canary.7",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "url": "makeswift/makeswift",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/testing/fixtures.ts"],"sourcesContent":["import { type SiteVersion } from '../next'\n\nexport const TestWorkingSiteVersion: SiteVersion = {\n version: 'draft',\n token:\n 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJtYWtlc3dpZnQtcnVudGltZSIsImlhdCI6MTc1NDU5OTE0OSwiZXhwIjo0MTAyNDMyNzQ5LCJhdWQiOiJ0ZXN0Iiwic3ViIjoibWFrZXN3aWZ0LXJ1bnRpbWUifQ.-1BDOmEN1Q1QeKP7qfjPyAkrKRjb4q4qaqyhPBvMnhg',\n} as const\n\nexport const TestOrigins = {\n apiOrigin: 'https://api.fakeswift.com',\n appOrigin: 'https://app.fakeswift.com',\n} as const\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,MAAM,yBAAsC;AAAA,EACjD,SAAS;AAAA,EACT,OACE;AACJ;AAEO,MAAM,cAAc;AAAA,EACzB,WAAW;AAAA,EACX,WAAW;AACb;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/testing/fixtures.ts"],"sourcesContent":["import { type SiteVersion } from '../next'\n\nexport const TestWorkingSiteVersion: SiteVersion = {\n version: 'draft',\n token:\n 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJtYWtlc3dpZnQtcnVudGltZSIsImlhdCI6MTc1NDU5OTE0OSwiZXhwIjo0MTAyNDMyNzQ5LCJhdWQiOiJ0ZXN0Iiwic3ViIjoibWFrZXN3aWZ0LXJ1bnRpbWUifQ.-1BDOmEN1Q1QeKP7qfjPyAkrKRjb4q4qaqyhPBvMnhg',\n} as const\n\nexport const TestOrigins = {\n apiOrigin: 'https://api.fakeswift.com',\n appOrigin: 'https://app.fakeswift.com',\n} as const\n"],"mappings":"AAEO,MAAM,yBAAsC;AAAA,EACjD,SAAS;AAAA,EACT,OACE;AACJ;AAEO,MAAM,cAAc;AAAA,EACzB,WAAW;AAAA,EACX,WAAW;AACb;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../../src/testing/fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAA;AAE1C,eAAO,MAAM,sBAAsB,EAAE,WAI3B,CAAA;AAEV,eAAO,MAAM,WAAW;;;CAGd,CAAA"}