@makeswift/runtime 0.29.0-canary.20 → 0.29.0-canary.22

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 (91) 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/api-handler/handlers/merge-translated-data.js +2 -12
  5. package/dist/cjs/api-handler/handlers/merge-translated-data.js.map +1 -1
  6. package/dist/cjs/api-handler/handlers/revalidate.js +2 -12
  7. package/dist/cjs/api-handler/handlers/revalidate.js.map +1 -1
  8. package/dist/cjs/api-handler/handlers/table-record.js +2 -12
  9. package/dist/cjs/api-handler/handlers/table-record.js.map +1 -1
  10. package/dist/cjs/client/index.js +23 -61
  11. package/dist/cjs/client/index.js.map +1 -1
  12. package/dist/cjs/client/schema/component-document.js +1 -7
  13. package/dist/cjs/client/schema/component-document.js.map +1 -1
  14. package/dist/cjs/runtimes/react/hooks/use-async-effect.js +4 -3
  15. package/dist/cjs/runtimes/react/hooks/use-async-effect.js.map +1 -1
  16. package/dist/cjs/runtimes/react/hooks/use-server-element-refresh.js +10 -20
  17. package/dist/cjs/runtimes/react/hooks/use-server-element-refresh.js.map +1 -1
  18. package/dist/cjs/runtimes/react/server/components/editable-server-element.js +18 -14
  19. package/dist/cjs/runtimes/react/server/components/editable-server-element.js.map +1 -1
  20. package/dist/cjs/runtimes/react/server/components/server-elements-cache.js +75 -25
  21. package/dist/cjs/runtimes/react/server/components/server-elements-cache.js.map +1 -1
  22. package/dist/cjs/state/actions/internal/read-write-action-types.js +1 -1
  23. package/dist/cjs/state/actions/internal/read-write-action-types.js.map +1 -1
  24. package/dist/cjs/state/actions/internal/read-write-actions.js +4 -4
  25. package/dist/cjs/state/actions/internal/read-write-actions.js.map +1 -1
  26. package/dist/cjs/state/modules/read-write/resolved-value-overrides.js +32 -14
  27. package/dist/cjs/state/modules/read-write/resolved-value-overrides.js.map +1 -1
  28. package/dist/cjs/state/read-write-state.js +5 -0
  29. package/dist/cjs/state/read-write-state.js.map +1 -1
  30. package/dist/cjs/utils/{isErrorWithMessage.js → error-message.js} +12 -5
  31. package/dist/cjs/utils/error-message.js.map +1 -0
  32. package/dist/esm/api/graphql-api-client.js +1 -1
  33. package/dist/esm/api/rest-api-client.js +1 -1
  34. package/dist/esm/api-handler/handlers/manifest.js +1 -1
  35. package/dist/esm/api-handler/handlers/merge-translated-data.js +1 -1
  36. package/dist/esm/api-handler/handlers/merge-translated-data.js.map +1 -1
  37. package/dist/esm/api-handler/handlers/revalidate.js +1 -1
  38. package/dist/esm/api-handler/handlers/revalidate.js.map +1 -1
  39. package/dist/esm/api-handler/handlers/table-record.js +1 -1
  40. package/dist/esm/api-handler/handlers/table-record.js.map +1 -1
  41. package/dist/esm/client/index.js +23 -61
  42. package/dist/esm/client/index.js.map +1 -1
  43. package/dist/esm/client/schema/component-document.js +1 -7
  44. package/dist/esm/client/schema/component-document.js.map +1 -1
  45. package/dist/esm/runtimes/react/hooks/use-async-effect.js +4 -3
  46. package/dist/esm/runtimes/react/hooks/use-async-effect.js.map +1 -1
  47. package/dist/esm/runtimes/react/hooks/use-server-element-refresh.js +11 -21
  48. package/dist/esm/runtimes/react/hooks/use-server-element-refresh.js.map +1 -1
  49. package/dist/esm/runtimes/react/server/components/editable-server-element.js +19 -15
  50. package/dist/esm/runtimes/react/server/components/editable-server-element.js.map +1 -1
  51. package/dist/esm/runtimes/react/server/components/server-elements-cache.js +83 -26
  52. package/dist/esm/runtimes/react/server/components/server-elements-cache.js.map +1 -1
  53. package/dist/esm/state/actions/internal/read-write-action-types.js +1 -1
  54. package/dist/esm/state/actions/internal/read-write-action-types.js.map +1 -1
  55. package/dist/esm/state/actions/internal/read-write-actions.js +3 -3
  56. package/dist/esm/state/actions/internal/read-write-actions.js.map +1 -1
  57. package/dist/esm/state/modules/read-write/resolved-value-overrides.js +31 -14
  58. package/dist/esm/state/modules/read-write/resolved-value-overrides.js.map +1 -1
  59. package/dist/esm/state/read-write-state.js +4 -0
  60. package/dist/esm/state/read-write-state.js.map +1 -1
  61. package/dist/esm/utils/error-message.js +9 -0
  62. package/dist/esm/utils/error-message.js.map +1 -0
  63. package/dist/types/client/index.d.ts +1 -2
  64. package/dist/types/client/index.d.ts.map +1 -1
  65. package/dist/types/client/schema/component-document.d.ts +12 -6
  66. package/dist/types/client/schema/component-document.d.ts.map +1 -1
  67. package/dist/types/runtimes/react/hooks/use-async-effect.d.ts.map +1 -1
  68. package/dist/types/runtimes/react/hooks/use-server-element-refresh.d.ts +3 -4
  69. package/dist/types/runtimes/react/hooks/use-server-element-refresh.d.ts.map +1 -1
  70. package/dist/types/runtimes/react/server/components/editable-server-element.d.ts.map +1 -1
  71. package/dist/types/runtimes/react/server/components/server-elements-cache.d.ts +2 -2
  72. package/dist/types/runtimes/react/server/components/server-elements-cache.d.ts.map +1 -1
  73. package/dist/types/state/actions/index.d.ts +1 -1
  74. package/dist/types/state/actions/internal/action-types.d.ts +1 -1
  75. package/dist/types/state/actions/internal/read-write-action-types.d.ts +1 -1
  76. package/dist/types/state/actions/internal/read-write-actions.d.ts +6 -5
  77. package/dist/types/state/actions/internal/read-write-actions.d.ts.map +1 -1
  78. package/dist/types/state/modules/read-write/resolved-value-overrides.d.ts +9 -3
  79. package/dist/types/state/modules/read-write/resolved-value-overrides.d.ts.map +1 -1
  80. package/dist/types/state/read-write-state.d.ts +1 -0
  81. package/dist/types/state/read-write-state.d.ts.map +1 -1
  82. package/dist/types/utils/__tests__/error-message.test.d.ts +2 -0
  83. package/dist/types/utils/__tests__/error-message.test.d.ts.map +1 -0
  84. package/dist/types/utils/error-message.d.ts +7 -0
  85. package/dist/types/utils/error-message.d.ts.map +1 -0
  86. package/package.json +3 -3
  87. package/dist/cjs/utils/isErrorWithMessage.js.map +0 -1
  88. package/dist/esm/utils/isErrorWithMessage.js +0 -7
  89. package/dist/esm/utils/isErrorWithMessage.js.map +0 -1
  90. package/dist/types/utils/isErrorWithMessage.d.ts +0 -6
  91. package/dist/types/utils/isErrorWithMessage.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.29.0-canary.20"
30
+ "makeswift-runtime-version": "0.29.0-canary.22"
31
31
  });
32
32
  }
33
33
  async getUnversionedResources({
@@ -223,7 +223,7 @@ class MakeswiftRestAPIClient {
223
223
  const requestHeaders = new Headers({
224
224
  "x-api-key": this.apiKey,
225
225
  "makeswift-site-api-key": this.apiKey,
226
- "makeswift-runtime-version": "0.29.0-canary.20"
226
+ "makeswift-runtime-version": "0.29.0-canary.22"
227
227
  });
228
228
  if (siteVersion?.token) {
229
229
  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.29.0-canary.20",
31
+ version: "0.29.0-canary.22",
32
32
  interactionMode: true,
33
33
  clientSideNavigation: false,
34
34
  elementFromPoint: false,
@@ -1,9 +1,7 @@
1
1
  "use strict";
2
- var __create = Object.create;
3
2
  var __defProp = Object.defineProperty;
4
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
6
  var __export = (target, all) => {
9
7
  for (var name in all)
@@ -17,14 +15,6 @@ var __copyProps = (to, from, except, desc) => {
17
15
  }
18
16
  return to;
19
17
  };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
19
  var merge_translated_data_exports = {};
30
20
  __export(merge_translated_data_exports, {
@@ -32,7 +22,7 @@ __export(merge_translated_data_exports, {
32
22
  });
33
23
  module.exports = __toCommonJS(merge_translated_data_exports);
34
24
  var import_request_response = require("../request-response");
35
- var import_isErrorWithMessage = __toESM(require("../../utils/isErrorWithMessage"));
25
+ var import_error_message = require("../../utils/error-message");
36
26
  async function mergeTranslatedDataHandler(req, { client }) {
37
27
  const body = await req.json();
38
28
  const { translatedData, elementTree } = body;
@@ -46,7 +36,7 @@ async function mergeTranslatedDataHandler(req, { client }) {
46
36
  const translatedElementTree = client.mergeTranslatedData(elementTree, translatedData);
47
37
  return import_request_response.ApiResponse.json({ elementTree: translatedElementTree });
48
38
  } catch (error) {
49
- if ((0, import_isErrorWithMessage.default)(error)) {
39
+ if ((0, import_error_message.isErrorWithMessage)(error)) {
50
40
  return import_request_response.ApiResponse.json({ message: error.message }, { status: 500 });
51
41
  }
52
42
  return import_request_response.ApiResponse.json({ message: "Error merging translated data" }, { status: 500 });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/api-handler/handlers/merge-translated-data.ts"],"sourcesContent":["import { type Element } from '../../state/read-only-state'\nimport { MakeswiftClient } from '../../client'\nimport { type ApiRequest, ApiResponse, type ErrorResponseBody } from '../request-response'\nimport isErrorWithMessage from '../../utils/isErrorWithMessage'\n\ntype TranslatedData = { elementTree: Element }\n\nexport async function mergeTranslatedDataHandler(\n req: ApiRequest,\n { client }: { client: MakeswiftClient },\n): Promise<ApiResponse<TranslatedData | ErrorResponseBody>> {\n const body = await req.json()\n const { translatedData, elementTree } = body\n\n if (translatedData == null) {\n return ApiResponse.json({ message: 'translatedData must be defined' }, { status: 400 })\n }\n\n if (elementTree == null) {\n return ApiResponse.json({ message: 'elementTree must be defined' }, { status: 400 })\n }\n\n try {\n const translatedElementTree = client.mergeTranslatedData(elementTree, translatedData)\n return ApiResponse.json({ elementTree: translatedElementTree })\n } catch (error) {\n if (isErrorWithMessage(error)) {\n return ApiResponse.json({ message: error.message }, { status: 500 })\n }\n return ApiResponse.json({ message: 'Error merging translated data' }, { status: 500 })\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,8BAAqE;AACrE,gCAA+B;AAI/B,eAAsB,2BACpB,KACA,EAAE,OAAO,GACiD;AAC1D,QAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,QAAM,EAAE,gBAAgB,YAAY,IAAI;AAExC,MAAI,kBAAkB,MAAM;AAC1B,WAAO,oCAAY,KAAK,EAAE,SAAS,iCAAiC,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACxF;AAEA,MAAI,eAAe,MAAM;AACvB,WAAO,oCAAY,KAAK,EAAE,SAAS,8BAA8B,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACrF;AAEA,MAAI;AACF,UAAM,wBAAwB,OAAO,oBAAoB,aAAa,cAAc;AACpF,WAAO,oCAAY,KAAK,EAAE,aAAa,sBAAsB,CAAC;AAAA,EAChE,SAAS,OAAO;AACd,YAAI,0BAAAA,SAAmB,KAAK,GAAG;AAC7B,aAAO,oCAAY,KAAK,EAAE,SAAS,MAAM,QAAQ,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,IACrE;AACA,WAAO,oCAAY,KAAK,EAAE,SAAS,gCAAgC,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACvF;AACF;","names":["isErrorWithMessage"]}
1
+ {"version":3,"sources":["../../../../src/api-handler/handlers/merge-translated-data.ts"],"sourcesContent":["import { type Element } from '../../state/read-only-state'\nimport { MakeswiftClient } from '../../client'\nimport { type ApiRequest, ApiResponse, type ErrorResponseBody } from '../request-response'\nimport { isErrorWithMessage } from '../../utils/error-message'\n\ntype TranslatedData = { elementTree: Element }\n\nexport async function mergeTranslatedDataHandler(\n req: ApiRequest,\n { client }: { client: MakeswiftClient },\n): Promise<ApiResponse<TranslatedData | ErrorResponseBody>> {\n const body = await req.json()\n const { translatedData, elementTree } = body\n\n if (translatedData == null) {\n return ApiResponse.json({ message: 'translatedData must be defined' }, { status: 400 })\n }\n\n if (elementTree == null) {\n return ApiResponse.json({ message: 'elementTree must be defined' }, { status: 400 })\n }\n\n try {\n const translatedElementTree = client.mergeTranslatedData(elementTree, translatedData)\n return ApiResponse.json({ elementTree: translatedElementTree })\n } catch (error) {\n if (isErrorWithMessage(error)) {\n return ApiResponse.json({ message: error.message }, { status: 500 })\n }\n return ApiResponse.json({ message: 'Error merging translated data' }, { status: 500 })\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,8BAAqE;AACrE,2BAAmC;AAInC,eAAsB,2BACpB,KACA,EAAE,OAAO,GACiD;AAC1D,QAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,QAAM,EAAE,gBAAgB,YAAY,IAAI;AAExC,MAAI,kBAAkB,MAAM;AAC1B,WAAO,oCAAY,KAAK,EAAE,SAAS,iCAAiC,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACxF;AAEA,MAAI,eAAe,MAAM;AACvB,WAAO,oCAAY,KAAK,EAAE,SAAS,8BAA8B,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACrF;AAEA,MAAI;AACF,UAAM,wBAAwB,OAAO,oBAAoB,aAAa,cAAc;AACpF,WAAO,oCAAY,KAAK,EAAE,aAAa,sBAAsB,CAAC;AAAA,EAChE,SAAS,OAAO;AACd,YAAI,yCAAmB,KAAK,GAAG;AAC7B,aAAO,oCAAY,KAAK,EAAE,SAAS,MAAM,QAAQ,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,IACrE;AACA,WAAO,oCAAY,KAAK,EAAE,SAAS,gCAAgC,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACvF;AACF;","names":[]}
@@ -1,9 +1,7 @@
1
1
  "use strict";
2
- var __create = Object.create;
3
2
  var __defProp = Object.defineProperty;
4
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
6
  var __export = (target, all) => {
9
7
  for (var name in all)
@@ -17,21 +15,13 @@ var __copyProps = (to, from, except, desc) => {
17
15
  }
18
16
  return to;
19
17
  };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
19
  var revalidate_exports = {};
30
20
  __export(revalidate_exports, {
31
21
  revalidateHandler: () => revalidateHandler
32
22
  });
33
23
  module.exports = __toCommonJS(revalidate_exports);
34
- var import_isErrorWithMessage = __toESM(require("../../utils/isErrorWithMessage"));
24
+ var import_error_message = require("../../utils/error-message");
35
25
  var import_request_response = require("../request-response");
36
26
  async function revalidateHandler(req, { apiKey, revalidatePath }) {
37
27
  const params = (0, import_request_response.searchParams)(req);
@@ -47,7 +37,7 @@ async function revalidateHandler(req, { apiKey, revalidatePath }) {
47
37
  await revalidatePath(path);
48
38
  return import_request_response.ApiResponse.json({ revalidated: true });
49
39
  } catch (error) {
50
- if ((0, import_isErrorWithMessage.default)(error)) {
40
+ if ((0, import_error_message.isErrorWithMessage)(error)) {
51
41
  return import_request_response.ApiResponse.json({ message: error.message }, { status: 500 });
52
42
  }
53
43
  return import_request_response.ApiResponse.json({ message: "Error Revalidating" }, { status: 500 });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/api-handler/handlers/revalidate.ts"],"sourcesContent":["import isErrorWithMessage from '../../utils/isErrorWithMessage'\nimport {\n type ApiRequest,\n type ErrorResponseBody,\n ApiResponse,\n searchParams,\n} from '../request-response'\n\ntype RevalidationResult = { revalidated: boolean }\n\nexport async function revalidateHandler(\n req: ApiRequest,\n { apiKey, revalidatePath }: { apiKey: string; revalidatePath: (path: string) => Promise<void> },\n): Promise<ApiResponse<RevalidationResult | ErrorResponseBody>> {\n const params = searchParams(req)\n\n const secret = params.get('secret')\n if (secret !== apiKey) {\n return ApiResponse.json({ message: 'Unauthorized' }, { status: 401 })\n }\n\n const path = params.get('path')\n if (typeof path !== 'string') {\n return ApiResponse.json({ message: 'Bad Request' }, { status: 400 })\n }\n\n try {\n await revalidatePath(path)\n return ApiResponse.json({ revalidated: true })\n } catch (error) {\n if (isErrorWithMessage(error)) {\n return ApiResponse.json({ message: error.message }, { status: 500 })\n }\n\n return ApiResponse.json({ message: 'Error Revalidating' }, { status: 500 })\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAA+B;AAC/B,8BAKO;AAIP,eAAsB,kBACpB,KACA,EAAE,QAAQ,eAAe,GACqC;AAC9D,QAAM,aAAS,sCAAa,GAAG;AAE/B,QAAM,SAAS,OAAO,IAAI,QAAQ;AAClC,MAAI,WAAW,QAAQ;AACrB,WAAO,oCAAY,KAAK,EAAE,SAAS,eAAe,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACtE;AAEA,QAAM,OAAO,OAAO,IAAI,MAAM;AAC9B,MAAI,OAAO,SAAS,UAAU;AAC5B,WAAO,oCAAY,KAAK,EAAE,SAAS,cAAc,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACrE;AAEA,MAAI;AACF,UAAM,eAAe,IAAI;AACzB,WAAO,oCAAY,KAAK,EAAE,aAAa,KAAK,CAAC;AAAA,EAC/C,SAAS,OAAO;AACd,YAAI,0BAAAA,SAAmB,KAAK,GAAG;AAC7B,aAAO,oCAAY,KAAK,EAAE,SAAS,MAAM,QAAQ,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,IACrE;AAEA,WAAO,oCAAY,KAAK,EAAE,SAAS,qBAAqB,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EAC5E;AACF;","names":["isErrorWithMessage"]}
1
+ {"version":3,"sources":["../../../../src/api-handler/handlers/revalidate.ts"],"sourcesContent":["import { isErrorWithMessage } from '../../utils/error-message'\nimport {\n type ApiRequest,\n type ErrorResponseBody,\n ApiResponse,\n searchParams,\n} from '../request-response'\n\ntype RevalidationResult = { revalidated: boolean }\n\nexport async function revalidateHandler(\n req: ApiRequest,\n { apiKey, revalidatePath }: { apiKey: string; revalidatePath: (path: string) => Promise<void> },\n): Promise<ApiResponse<RevalidationResult | ErrorResponseBody>> {\n const params = searchParams(req)\n\n const secret = params.get('secret')\n if (secret !== apiKey) {\n return ApiResponse.json({ message: 'Unauthorized' }, { status: 401 })\n }\n\n const path = params.get('path')\n if (typeof path !== 'string') {\n return ApiResponse.json({ message: 'Bad Request' }, { status: 400 })\n }\n\n try {\n await revalidatePath(path)\n return ApiResponse.json({ revalidated: true })\n } catch (error) {\n if (isErrorWithMessage(error)) {\n return ApiResponse.json({ message: error.message }, { status: 500 })\n }\n\n return ApiResponse.json({ message: 'Error Revalidating' }, { status: 500 })\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAAmC;AACnC,8BAKO;AAIP,eAAsB,kBACpB,KACA,EAAE,QAAQ,eAAe,GACqC;AAC9D,QAAM,aAAS,sCAAa,GAAG;AAE/B,QAAM,SAAS,OAAO,IAAI,QAAQ;AAClC,MAAI,WAAW,QAAQ;AACrB,WAAO,oCAAY,KAAK,EAAE,SAAS,eAAe,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACtE;AAEA,QAAM,OAAO,OAAO,IAAI,MAAM;AAC9B,MAAI,OAAO,SAAS,UAAU;AAC5B,WAAO,oCAAY,KAAK,EAAE,SAAS,cAAc,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACrE;AAEA,MAAI;AACF,UAAM,eAAe,IAAI;AACzB,WAAO,oCAAY,KAAK,EAAE,aAAa,KAAK,CAAC;AAAA,EAC/C,SAAS,OAAO;AACd,YAAI,yCAAmB,KAAK,GAAG;AAC7B,aAAO,oCAAY,KAAK,EAAE,SAAS,MAAM,QAAQ,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,IACrE;AAEA,WAAO,oCAAY,KAAK,EAAE,SAAS,qBAAqB,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EAC5E;AACF;","names":[]}
@@ -1,9 +1,7 @@
1
1
  "use strict";
2
- var __create = Object.create;
3
2
  var __defProp = Object.defineProperty;
4
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
6
  var __export = (target, all) => {
9
7
  for (var name in all)
@@ -17,14 +15,6 @@ var __copyProps = (to, from, except, desc) => {
17
15
  }
18
16
  return to;
19
17
  };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
19
  var table_record_exports = {};
30
20
  __export(table_record_exports, {
@@ -33,7 +23,7 @@ __export(table_record_exports, {
33
23
  module.exports = __toCommonJS(table_record_exports);
34
24
  var import_rest_api_client = require("../../api/rest-api-client");
35
25
  var import_request_response = require("../request-response");
36
- var import_isErrorWithMessage = __toESM(require("../../utils/isErrorWithMessage"));
26
+ var import_error_message = require("../../utils/error-message");
37
27
  async function tableRecordHandler(req, { client }) {
38
28
  const body = await req.json();
39
29
  const { tableId, columns } = body;
@@ -50,7 +40,7 @@ async function tableRecordHandler(req, { client }) {
50
40
  if (error instanceof import_rest_api_client.RestApiClientError) {
51
41
  return import_request_response.ApiResponse.json({ message: error.message }, { status: error.status });
52
42
  }
53
- if ((0, import_isErrorWithMessage.default)(error)) {
43
+ if ((0, import_error_message.isErrorWithMessage)(error)) {
54
44
  return import_request_response.ApiResponse.json({ message: error.message }, { status: 500 });
55
45
  }
56
46
  return import_request_response.ApiResponse.json({ message: "Error creating table record" }, { status: 500 });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/api-handler/handlers/table-record.ts"],"sourcesContent":["import { MakeswiftClient } from '../../client'\nimport { RestApiClientError } from '../../api/rest-api-client'\nimport { type ApiRequest, ApiResponse, type ErrorResponseBody } from '../request-response'\nimport isErrorWithMessage from '../../utils/isErrorWithMessage'\n\nexport async function tableRecordHandler(\n req: ApiRequest,\n { client }: { client: MakeswiftClient },\n): Promise<ApiResponse<ErrorResponseBody> | Response> {\n const body = await req.json()\n const { tableId, columns } = body\n\n if (typeof tableId !== 'string') {\n return ApiResponse.json({ message: 'tableId must be a string' }, { status: 400 })\n }\n\n if (!Array.isArray(columns)) {\n return ApiResponse.json({ message: 'columns must be an array' }, { status: 400 })\n }\n\n try {\n await client.createTableRecord(tableId, columns)\n return new Response(null, { status: 204 })\n } catch (error) {\n if (error instanceof RestApiClientError) {\n return ApiResponse.json({ message: error.message }, { status: error.status })\n }\n\n if (isErrorWithMessage(error)) {\n return ApiResponse.json({ message: error.message }, { status: 500 })\n }\n\n return ApiResponse.json({ message: 'Error creating table record' }, { status: 500 })\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,6BAAmC;AACnC,8BAAqE;AACrE,gCAA+B;AAE/B,eAAsB,mBACpB,KACA,EAAE,OAAO,GAC2C;AACpD,QAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,QAAM,EAAE,SAAS,QAAQ,IAAI;AAE7B,MAAI,OAAO,YAAY,UAAU;AAC/B,WAAO,oCAAY,KAAK,EAAE,SAAS,2BAA2B,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EAClF;AAEA,MAAI,CAAC,MAAM,QAAQ,OAAO,GAAG;AAC3B,WAAO,oCAAY,KAAK,EAAE,SAAS,2BAA2B,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EAClF;AAEA,MAAI;AACF,UAAM,OAAO,kBAAkB,SAAS,OAAO;AAC/C,WAAO,IAAI,SAAS,MAAM,EAAE,QAAQ,IAAI,CAAC;AAAA,EAC3C,SAAS,OAAO;AACd,QAAI,iBAAiB,2CAAoB;AACvC,aAAO,oCAAY,KAAK,EAAE,SAAS,MAAM,QAAQ,GAAG,EAAE,QAAQ,MAAM,OAAO,CAAC;AAAA,IAC9E;AAEA,YAAI,0BAAAA,SAAmB,KAAK,GAAG;AAC7B,aAAO,oCAAY,KAAK,EAAE,SAAS,MAAM,QAAQ,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,IACrE;AAEA,WAAO,oCAAY,KAAK,EAAE,SAAS,8BAA8B,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACrF;AACF;","names":["isErrorWithMessage"]}
1
+ {"version":3,"sources":["../../../../src/api-handler/handlers/table-record.ts"],"sourcesContent":["import { MakeswiftClient } from '../../client'\nimport { RestApiClientError } from '../../api/rest-api-client'\nimport { type ApiRequest, ApiResponse, type ErrorResponseBody } from '../request-response'\nimport { isErrorWithMessage } from '../../utils/error-message'\n\nexport async function tableRecordHandler(\n req: ApiRequest,\n { client }: { client: MakeswiftClient },\n): Promise<ApiResponse<ErrorResponseBody> | Response> {\n const body = await req.json()\n const { tableId, columns } = body\n\n if (typeof tableId !== 'string') {\n return ApiResponse.json({ message: 'tableId must be a string' }, { status: 400 })\n }\n\n if (!Array.isArray(columns)) {\n return ApiResponse.json({ message: 'columns must be an array' }, { status: 400 })\n }\n\n try {\n await client.createTableRecord(tableId, columns)\n return new Response(null, { status: 204 })\n } catch (error) {\n if (error instanceof RestApiClientError) {\n return ApiResponse.json({ message: error.message }, { status: error.status })\n }\n\n if (isErrorWithMessage(error)) {\n return ApiResponse.json({ message: error.message }, { status: 500 })\n }\n\n return ApiResponse.json({ message: 'Error creating table record' }, { status: 500 })\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,6BAAmC;AACnC,8BAAqE;AACrE,2BAAmC;AAEnC,eAAsB,mBACpB,KACA,EAAE,OAAO,GAC2C;AACpD,QAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,QAAM,EAAE,SAAS,QAAQ,IAAI;AAE7B,MAAI,OAAO,YAAY,UAAU;AAC/B,WAAO,oCAAY,KAAK,EAAE,SAAS,2BAA2B,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EAClF;AAEA,MAAI,CAAC,MAAM,QAAQ,OAAO,GAAG;AAC3B,WAAO,oCAAY,KAAK,EAAE,SAAS,2BAA2B,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EAClF;AAEA,MAAI;AACF,UAAM,OAAO,kBAAkB,SAAS,OAAO;AAC/C,WAAO,IAAI,SAAS,MAAM,EAAE,QAAQ,IAAI,CAAC;AAAA,EAC3C,SAAS,OAAO;AACd,QAAI,iBAAiB,2CAAoB;AACvC,aAAO,oCAAY,KAAK,EAAE,SAAS,MAAM,QAAQ,GAAG,EAAE,QAAQ,MAAM,OAAO,CAAC;AAAA,IAC9E;AAEA,YAAI,yCAAmB,KAAK,GAAG;AAC7B,aAAO,oCAAY,KAAK,EAAE,SAAS,MAAM,QAAQ,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,IACrE;AAEA,WAAO,oCAAY,KAAK,EAAE,SAAS,8BAA8B,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACrF;AACF;","names":[]}
@@ -441,71 +441,33 @@ Received "${apiKey}" instead.`
441
441
  async getComponentSnapshot(id, {
442
442
  siteVersion: siteVersionPromise,
443
443
  locale,
444
- allowLocaleFallback = true,
445
- unstable_enforceSuccess = false
444
+ allowLocaleFallback = true
446
445
  }) {
447
446
  const siteVersion = await siteVersionPromise;
448
447
  const key = (0, import_deterministic_uuid.deterministicUUID)({ id, locale, seed: this.apiKey.split("-").at(0) });
449
- const baseLocaleWasRequested = locale == null;
450
- const canAttemptLocaleFallback = !baseLocaleWasRequested && allowLocaleFallback;
451
- const parseElementTreeResponse = async (response) => {
452
- if (!response.ok) {
453
- const failedBody = await (0, import_rest_api_client.failedResponseBody)(response);
454
- if (response.status === 404) {
455
- return null;
456
- }
457
- throw new import_rest_api_client.RestApiClientError(`Failed to get component snapshot for '${id}'`, response, {
458
- body: failedBody,
459
- siteVersion,
460
- locale
461
- });
462
- }
463
- const responseBody = await response.json();
464
- const parsed = Schema.componentDocumentResponse.parse(responseBody);
465
- if ("notFound" in parsed)
466
- return null;
467
- return parsed;
468
- };
469
- const getElementTree = async (searchParams) => {
470
- const response = await this.fetch(
471
- `v2/element-trees/${encodeURIComponent(id)}?${searchParams.toString()}`,
472
- siteVersion
473
- );
474
- return await parseElementTreeResponse(response);
475
- };
476
- const getPrimaryTree = async () => {
477
- const searchParams = new URLSearchParams();
478
- if (locale)
479
- searchParams.set("locale", locale);
480
- if (unstable_enforceSuccess)
481
- searchParams.set("unstable_enforceSuccess", "true");
482
- return await getElementTree(searchParams);
483
- };
484
- const getFallbackTree = async () => {
485
- const searchParams = new URLSearchParams();
486
- if (unstable_enforceSuccess)
487
- searchParams.set("unstable_enforceSuccess", "true");
488
- return await getElementTree(searchParams);
489
- };
490
- const primaryTree = await getPrimaryTree();
491
- const result = primaryTree == null && canAttemptLocaleFallback ? await getFallbackTree() : primaryTree;
492
- if (result == null) {
493
- return {
494
- document: {
495
- id,
496
- locale: locale ?? null,
497
- data: null
498
- },
499
- key,
500
- cacheData: import_api_resources_client.CacheData.empty(),
501
- meta: {
502
- allowLocaleFallback,
503
- requestedLocale: locale ?? null
504
- }
505
- };
448
+ const searchParams = new URLSearchParams();
449
+ if (locale)
450
+ searchParams.set("locale", locale);
451
+ const response = await this.fetch(
452
+ `content/v1/element-trees/${encodeURIComponent(id)}?${searchParams.toString()}`,
453
+ siteVersion
454
+ );
455
+ if (!response.ok) {
456
+ const failedBody = await (0, import_rest_api_client.failedResponseBody)(response);
457
+ throw new import_rest_api_client.RestApiClientError(`Failed to get component snapshot for '${id}'`, response, {
458
+ body: failedBody,
459
+ siteVersion,
460
+ locale
461
+ });
506
462
  }
507
- const document = result;
508
- const cacheData = await this.introspect(document.data, siteVersion, document.locale);
463
+ const responseBody = await response.json();
464
+ const documentResponse = Schema.componentDocumentResponse.parse(responseBody);
465
+ const document = !allowLocaleFallback && documentResponse.locale != locale ? {
466
+ id,
467
+ locale: locale ?? null,
468
+ data: null
469
+ } : documentResponse;
470
+ const cacheData = document.data == null ? import_api_resources_client.CacheData.empty() : await this.introspect(document.data, siteVersion, document.locale);
509
471
  return {
510
472
  document,
511
473
  cacheData,
@@ -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 GlobalElement,\n type LocalizedGlobalElement,\n type Swatch,\n type Typography,\n} from '../api/types'\n\nimport { CacheData } from '../api/api-resources-client'\n\nimport { MakeswiftGraphQLApiClient } from '../api/graphql-api-client'\nimport {\n MakeswiftRestAPIClient,\n failedResponseBody,\n RestApiClientError,\n} 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 const body = await failedResponseBody(response)\n throw new RestApiClientError('Failed to get pages', response, {\n body: body,\n siteVersion,\n params,\n })\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 throw new RestApiClientError(`Failed to get page snapshot for '${pathname}'`, response, {\n body: failedBody,\n siteVersion,\n locale,\n })\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 const failedBody = await failedResponseBody(response)\n if (response.status === 404) return []\n\n throw new RestApiClientError(\n `Failed to get typographies for [${typographyIds.join(', ')}]`,\n response,\n { body: failedBody, siteVersion },\n )\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 const failedBody = await failedResponseBody(response)\n if (response.status === 404) return []\n\n throw new RestApiClientError(`Failed to get swatches for ${ids.join(', ')}`, response, {\n body: failedBody,\n siteVersion,\n })\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 throw new RestApiClientError(\n `Failed to get element trees for [${ids.join(', ')}]`,\n response,\n { body: failedBody, siteVersion, locale },\n )\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 private async introspect(\n element: Element,\n siteVersion: SiteVersion | null,\n locale: string | null,\n ): Promise<CacheData> {\n const treeId = 'root'\n const cacheDataMap = await this.introspectMany(\n [{ id: treeId, data: element }],\n siteVersion,\n locale,\n )\n\n return cacheDataMap.get(treeId)!\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 function createTreeCache() {\n return {\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 // Per-tree tracking, keyed by tree ID\n const traversals = new Map(\n trees.map(tree => [\n tree.id,\n {\n cache: createTreeCache(),\n remaining: [tree.data],\n seen: new Set<string>(),\n },\n ]),\n )\n\n // Layered DFS traversal: each pass walks every tree as far as the caches allow, then\n // fetches every newly discovered global element in one bulk round-trip before resuming.\n while (true) {\n const pendingGlobalElementIds = new Set<string>()\n const deferred: { treeId: string; element: Element }[] = []\n\n for (const [treeId, traversal] of traversals) {\n const { remaining, seen, cache: currentTreeCache } = traversal\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 // Defer until the global element is fetched as part of this layer's bulk request\n if (!globalElementCache.has(globalElementId)) {\n pendingGlobalElementIds.add(globalElementId)\n deferred.push({ treeId, element: current })\n continue\n }\n\n const globalElement = globalElementCache.get(globalElementId) ?? null\n\n let elementData = globalElement?.data\n\n if (locale) {\n const localizedGlobalElement =\n localizedGlobalElementCache.get(globalElementId) ?? null\n\n if (localizedGlobalElement) {\n // Update the logic here when we can merge element trees\n elementData = localizedGlobalElement.data\n\n currentTreeCache.localizedResourcesMap.set(\n globalElementId,\n localizedGlobalElement.id,\n )\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 // If there are no pendingGlobalElementIds then all elements have been traversed completely\n if (pendingGlobalElementIds.size === 0) break\n\n const ids = [...pendingGlobalElementIds]\n const results = await this.getGlobalElements(ids, siteVersion, { locale })\n\n ids.forEach((id, index) => {\n globalElementCache.set(id, results[index]?.base ?? null)\n localizedGlobalElementCache.set(id, results[index]?.localized ?? null)\n })\n\n deferred.forEach(({ treeId, element }) => traversals.get(treeId)!.remaining.push(element))\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 { cache: currentTreeCache } of traversals.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 { cache: currentTreeCache } of traversals.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, { cache: currentTreeCache }] of traversals) {\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 throw new RestApiClientError(`Failed to get page snapshot for '${pathname}'`, response, {\n body: failedBody,\n siteVersion,\n locale,\n })\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 unstable_enforceSuccess = false,\n }: {\n siteVersion: SiteVersion | null | Promise<SiteVersion | null>\n locale?: string\n allowLocaleFallback?: boolean\n unstable_enforceSuccess?: boolean\n },\n ): Promise<MakeswiftComponentSnapshot> {\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 const parseElementTreeResponse = async (\n response: Response,\n ): Promise<MakeswiftComponentDocument | null> => {\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 null\n }\n\n throw new RestApiClientError(`Failed to get component snapshot for '${id}'`, response, {\n body: failedBody,\n siteVersion,\n locale,\n })\n }\n\n const responseBody = await response.json()\n const parsed = Schema.componentDocumentResponse.parse(responseBody)\n if ('notFound' in parsed) return null\n return parsed\n }\n\n const getElementTree = async (\n searchParams: URLSearchParams,\n ): Promise<MakeswiftComponentDocument | null> => {\n const response = await this.fetch(\n `v2/element-trees/${encodeURIComponent(id)}?${searchParams.toString()}`,\n siteVersion,\n )\n return await parseElementTreeResponse(response)\n }\n\n const getPrimaryTree = async (): Promise<MakeswiftComponentDocument | null> => {\n const searchParams = new URLSearchParams()\n if (locale) searchParams.set('locale', locale)\n if (unstable_enforceSuccess) searchParams.set('unstable_enforceSuccess', 'true')\n return await getElementTree(searchParams)\n }\n\n const getFallbackTree = async (): Promise<MakeswiftComponentDocument | null> => {\n const searchParams = new URLSearchParams()\n if (unstable_enforceSuccess) searchParams.set('unstable_enforceSuccess', 'true')\n return await getElementTree(searchParams)\n }\n\n const primaryTree = await getPrimaryTree()\n\n const result =\n primaryTree == null && canAttemptLocaleFallback ? await getFallbackTree() : primaryTree\n\n if (result == null) {\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 const document = result\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 createTableRecord(\n tableId: string,\n columns: { columnId: string; data: unknown }[],\n ): Promise<void> {\n const response = await this.fetch('v1/table-records', null, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ tableId, columns }),\n })\n\n if (!response.ok) {\n const failedBody = await failedResponseBody(response)\n\n throw new RestApiClientError(\n `Failed to create table record for table '${tableId}'`,\n response,\n {\n body: failedBody,\n tableId,\n },\n )\n }\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 this.fetch('v1/preview-tokens/reads', null, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\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\n return null\n }\n\n if (response.status === 404) return null\n\n throw new RestApiClientError(`Failed to verify preview token`, response, {\n body: failedBody,\n })\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 const failedBody = await failedResponseBody(response)\n if (response.status === 404) return null\n\n throw new RestApiClientError('Failed to fetch fonts', response, {\n body: failedBody,\n siteVersion,\n })\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"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,IAAAA,gBAMO;AAEP,kCAA0B;AAE1B,gCAA0C;AAC1C,6BAIO;AAIP,2BAOO;AAIP,6BAMO;AAEP,mBAAuC;AACvC,iBAAuC;AAEvC,gCAAkC;AAClC,wBAA2C;AAC3C,2BAA8B;AAS9B,aAAwB;AAExB,IAAAA,gBAAgC;AAIhC,IAAAC,6BAMO;AAEP,IAAAC,wBAMO;AAwBA,MAAM,wBAAwB,8CAAuB;AAAA,EAClD;AAAA,EACA;AAAA,EAER,YACE,QACA;AAAA,IACE;AAAA,EACF,GAGA;AACA,QAAI,OAAO,WAAW,UAAU;AAC9B,YAAM,IAAI;AAAA,QACR;AAAA,YAEe,MAAM;AAAA,MACvB;AAAA,IACF;AAEA,UAAM;AAAA,MACJ,OAAO,QAAQ;AAAA,MACf;AAAA,MACA,WAAW,QAAQ;AAAA,IACrB,CAAC;AAED,SAAK,gBAAgB,IAAI,oDAA0B;AAAA,MACjD,UAAU,QAAQ;AAAA,IACpB,CAAC;AAED,SAAK,UAAU;AAAA,EACjB;AAAA,EAEQ,mBAAmB,OAAO;AAAA,IAChC,cAAc;AAAA,IACd,GAAG;AAAA,EACL,IAEqB,CAAC,MAAwC;AAC5D,UAAM,cAAc,oBAAoB,MAAM;AAE9C,UAAM,WAAW,MAAM,KAAK,MAAM,YAAY,YAAY,SAAS,CAAC,IAAI,WAAW;AACnF,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,OAAO,UAAM,2CAAmB,QAAQ;AAC9C,YAAM,IAAI,0CAAmB,uBAAuB,UAAU;AAAA,QAC5D;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAEA,UAAM,SAAS,MAAM,SAAS,KAAK;AACnC,UAAM,iBAAiB,OAAO,eAAe,UAAU,MAAM;AAC7D,QAAI,CAAC,eAAe,SAAS;AAC3B,YAAM,IAAI;AAAA,QACR,wCAAwC,eAAe,MAAM,OAAO,IAAI,OAAK,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;AAAA,MACpG;AAAA,IACF;AACA,WAAO,eAAe;AAAA,EACxB;AAAA,EAEA,eAAW,8CAA2B,KAAK,gBAAgB;AAAA,EAE3D,MAAM,QACJ,UACA,EAAE,cAAc,MAAM,OAAO,IAA2D,CAAC,GAC1D;AAC/B,UAAM,MAAM,IAAI,IAAI,YAAY,mBAAmB,QAAQ,CAAC,IAAI,KAAK,SAAS;AAC9E,QAAI;AAAQ,UAAI,aAAa,IAAI,UAAU,MAAM;AAEjD,UAAM,WAAW,MAAM,KAAK,MAAM,IAAI,WAAW,IAAI,QAAQ,WAAW;AAExE,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,aAAa,UAAM,2CAAmB,QAAQ;AACpD,UAAI,SAAS,WAAW;AAAK,eAAO;AAEpC,YAAM,IAAI,0CAAmB,oCAAoC,QAAQ,KAAK,UAAU;AAAA,QACtF,MAAM;AAAA,QACN;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAEA,UAAM,OAAO,MAAM,SAAS,KAAK;AAEjC,WAAO,OAAO,cAAc,MAAM,IAAI;AAAA,EACxC;AAAA,EAEA,MAAc,gBACZ,eACA,aACgC;AAChC,QAAI,cAAc,WAAW;AAAG,aAAO,CAAC;AAExC,UAAM,MAAM,IAAI,IAAI,wBAAwB,KAAK,SAAS;AAE1D,kBAAc,QAAQ,QAAM;AAC1B,UAAI,aAAa,OAAO,OAAO,EAAE;AAAA,IACnC,CAAC;AAED,UAAM,WAAW,MAAM,KAAK,MAAM,IAAI,WAAW,IAAI,QAAQ,WAAW;AAExE,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,aAAa,UAAM,2CAAmB,QAAQ;AACpD,UAAI,SAAS,WAAW;AAAK,eAAO,CAAC;AAErC,YAAM,IAAI;AAAA,QACR,mCAAmC,cAAc,KAAK,IAAI,CAAC;AAAA,QAC3D;AAAA,QACA,EAAE,MAAM,YAAY,YAAY;AAAA,MAClC;AAAA,IACF;AAEA,UAAM,OAAO,MAAM,SAAS,KAAK;AAEjC,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,YACZ,KACA,aAC4B;AAC5B,QAAI,IAAI,WAAW;AAAG,aAAO,CAAC;AAE9B,UAAM,MAAM,IAAI,IAAI,oBAAoB,KAAK,SAAS;AAEtD,QAAI,QAAQ,QAAM;AAChB,UAAI,aAAa,OAAO,OAAO,EAAE;AAAA,IACnC,CAAC;AAED,UAAM,WAAW,MAAM,KAAK,MAAM,IAAI,WAAW,IAAI,QAAQ,WAAW;AAExE,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,aAAa,UAAM,2CAAmB,QAAQ;AACpD,UAAI,SAAS,WAAW;AAAK,eAAO,CAAC;AAErC,YAAM,IAAI,0CAAmB,8BAA8B,IAAI,KAAK,IAAI,CAAC,IAAI,UAAU;AAAA,QACrF,MAAM;AAAA,QACN;AAAA,MACF,CAAC;AAAA,IACH;AAEA,WAAO,MAAM,SAAS,KAAK;AAAA,EAC7B;AAAA,EAEA,MAAc,oBACZ,KACA,aACA,QACgD;AAChD,QAAI,IAAI,WAAW;AAAG,aAAO,CAAC;AAE9B,UAAM,cAAkD,EAAE,IAAI;AAC9D,QAAI,UAAU;AAAM,kBAAY,SAAS;AAEzC,UAAM,WAAW,MAAM,KAAK,MAAM,yBAAyB,aAAa;AAAA,MACtE,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM,KAAK,UAAU,WAAW;AAAA,IAClC,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,aAAa,UAAM,2CAAmB,QAAQ;AAGpD,UAAI,SAAS,WAAW;AAAK,eAAO,IAAI,IAAI,MAAM,IAAI;AAEtD,YAAM,IAAI;AAAA,QACR,oCAAoC,IAAI,KAAK,IAAI,CAAC;AAAA,QAClD;AAAA,QACA,EAAE,MAAM,YAAY,aAAa,OAAO;AAAA,MAC1C;AAAA,IACF;AAEA,UAAM,eAAe,MAAM,SAAS,KAAK;AAEzC,WAAO,aAAa;AAAA,MAAI,CAAC,SACvB,QAAQ,OAAO,OAAO,kBAAkB,MAAM,IAAI,IAAI;AAAA,IACxD;AAAA,EACF;AAAA,EAEA,MAAc,yBACZ;AAAA,IACE;AAAA,IACA,GAAG;AAAA,EACL,GACA,aAC4E;AAC5E,UAAM,uBACJ,MAAM,KAAK,cAAc,wBAAwB,sBAAsB;AAEzE,UAAM,WAAW,MAAM,KAAK,YAAY,WAAW,WAAW;AAE9D,WAAO,EAAE,GAAG,sBAAsB,SAAS;AAAA,EAC7C;AAAA,EAEA,MAAc,WACZ,SACA,aACA,QACoB;AACpB,UAAM,SAAS;AACf,UAAM,eAAe,MAAM,KAAK;AAAA,MAC9B,CAAC,EAAE,IAAI,QAAQ,MAAM,QAAQ,CAAC;AAAA,MAC9B;AAAA,MACA;AAAA,IACF;AAEA,WAAO,aAAa,IAAI,MAAM;AAAA,EAChC;AAAA,EAEA,MAAc,eACZ,OACA,aACA,QACiC;AACjC,QAAI,MAAM,WAAW;AAAG,aAAO,oBAAI,IAAI;AAEvC,UAAM,cAAc,KAAK,sBAAsB;AAG/C,UAAM,qBAAqB,oBAAI,IAAkC;AACjE,UAAM,8BAA8B,oBAAI,IAA2C;AAEnF,aAAS,kBAAkB;AACzB,aAAO;AAAA,QACL,WAAW,oBAAI,IAAY;AAAA,QAC3B,SAAS,oBAAI,IAAY;AAAA,QACzB,eAAe,oBAAI,IAAY;AAAA,QAC/B,UAAU,oBAAI,IAAY;AAAA,QAC1B,SAAS,oBAAI,IAAY;AAAA,QACzB,gBAAgB,oBAAI,IAAkC;AAAA,QACtD,yBAAyB,oBAAI,IAA2C;AAAA,QACxE,uBAAuB,oBAAI,IAA2B;AAAA,MACxD;AAAA,IACF;AAGA,UAAM,aAAa,IAAI;AAAA,MACrB,MAAM,IAAI,UAAQ;AAAA,QAChB,KAAK;AAAA,QACL;AAAA,UACE,OAAO,gBAAgB;AAAA,UACvB,WAAW,CAAC,KAAK,IAAI;AAAA,UACrB,MAAM,oBAAI,IAAY;AAAA,QACxB;AAAA,MACF,CAAC;AAAA,IACH;AAIA,WAAO,MAAM;AACX,YAAM,0BAA0B,oBAAI,IAAY;AAChD,YAAM,WAAmD,CAAC;AAE1D,iBAAW,CAAC,QAAQ,SAAS,KAAK,YAAY;AAC5C,cAAM,EAAE,WAAW,MAAM,OAAO,iBAAiB,IAAI;AACrD,YAAI;AAEJ,eAAQ,UAAU,UAAU,IAAI,GAAI;AAuDlC,cAASC,sCAAT,SACEC,qBACA,OACA;AACA,mBAAO,QAAQA,mBAAkB,EAAE,QAAQ,CAAC,CAAC,UAAU,UAAU,MAAM;AACrE,qDAAa,YAAY,MAAM,QAAQ,CAAC,EAAE,QAAQ,cAAY;AAC5D,iCAAiB,UAAU,IAAI,QAAQ;AAAA,cACzC,CAAC;AAED,mDAAW,YAAY,MAAM,QAAQ,CAAC,EAAE,QAAQ,YAAU;AACxD,iCAAiB,QAAQ,IAAI,MAAM;AAAA,cACrC,CAAC;AAED,yDAAiB,YAAY,MAAM,QAAQ,CAAC,EAAE,QAAQ,kBAAgB;AACpE,iCAAiB,cAAc,IAAI,YAAY;AAAA,cACjD,CAAC;AAED,oDAAY,YAAY,MAAM,QAAQ,CAAC,EAAE,QAAQ,aAAW;AAC1D,iCAAiB,SAAS,IAAI,OAAO;AAAA,cACvC,CAAC;AAED,mDAAW,YAAY,MAAM,QAAQ,CAAC,EAAE,QAAQ,YAAU;AACxD,iCAAiB,QAAQ,IAAI,MAAM;AAAA,cACrC,CAAC;AAED,2DAAmB,YAAY,MAAM,QAAQ,CAAC,EAAE,QAAQ,WAAS;AAC/D,oBAAI,CAAC,KAAK,IAAI,MAAM,GAAG,GAAG;AACxB,uBAAK,IAAI,MAAM,GAAG;AAClB,4BAAU,KAAK,KAAK;AAAA,gBACtB;AAAA,cACF,CAAC;AAAA,YACH,CAAC;AAAA,UACH;AAhCS,mDAAAD;AAtDT,cAAI;AAEJ,kBAAI,2CAAmB,OAAO,GAAG;AAC/B,kBAAM,kBAAkB,QAAQ;AAGhC,gBAAI,CAAC,mBAAmB,IAAI,eAAe,GAAG;AAC5C,sCAAwB,IAAI,eAAe;AAC3C,uBAAS,KAAK,EAAE,QAAQ,SAAS,QAAQ,CAAC;AAC1C;AAAA,YACF;AAEA,kBAAM,gBAAgB,mBAAmB,IAAI,eAAe,KAAK;AAEjE,gBAAI,cAAc,eAAe;AAEjC,gBAAI,QAAQ;AACV,oBAAM,yBACJ,4BAA4B,IAAI,eAAe,KAAK;AAEtD,kBAAI,wBAAwB;AAE1B,8BAAc,uBAAuB;AAErC,iCAAiB,sBAAsB;AAAA,kBACrC;AAAA,kBACA,uBAAuB;AAAA,gBACzB;AACA,iCAAiB,wBAAwB;AAAA,kBACvC,uBAAuB;AAAA,kBACvB;AAAA,gBACF;AAAA,cACF,OAAO;AAGL,iCAAiB,sBAAsB,IAAI,iBAAiB,IAAI;AAAA,cAClE;AAAA,YACF;AAEA,6BAAiB,eAAe,IAAI,iBAAiB,aAAa;AAElE,gBAAI,eAAe;AAAM;AAEzB,sBAAU;AAAA,UACZ,OAAO;AACL,sBAAU;AAAA,UACZ;AAEA,gBAAM,qBAAqB,YAAY,IAAI,QAAQ,IAAI;AAEvD,cAAI,sBAAsB;AAAM;AAEhC,UAAAA,oCAAmC,oBAAoB,QAAQ,KAAK;AAAA,QAmCtE;AAAA,MACF;AAGA,UAAI,wBAAwB,SAAS;AAAG;AAExC,YAAM,MAAM,CAAC,GAAG,uBAAuB;AACvC,YAAM,UAAU,MAAM,KAAK,kBAAkB,KAAK,aAAa,EAAE,OAAO,CAAC;AAEzE,UAAI,QAAQ,CAAC,IAAI,UAAU;AACzB,2BAAmB,IAAI,IAAI,QAAQ,KAAK,GAAG,QAAQ,IAAI;AACvD,oCAA4B,IAAI,IAAI,QAAQ,KAAK,GAAG,aAAa,IAAI;AAAA,MACvE,CAAC;AAED,eAAS,QAAQ,CAAC,EAAE,QAAQ,QAAQ,MAAM,WAAW,IAAI,MAAM,EAAG,UAAU,KAAK,OAAO,CAAC;AAAA,IAC3F;AAGA,UAAM,eAAe,oBAAI,IAAY;AACrC,UAAM,aAAa,oBAAI,IAAY;AACnC,UAAM,mBAAmB,oBAAI,IAAY;AACzC,UAAM,cAAc,oBAAI,IAAY;AACpC,UAAM,aAAa,oBAAI,IAAY;AAEnC,eAAW,EAAE,OAAO,iBAAiB,KAAK,WAAW,OAAO,GAAG;AAC7D,uBAAiB,UAAU,QAAQ,QAAM,aAAa,IAAI,EAAE,CAAC;AAC7D,uBAAiB,QAAQ,QAAQ,QAAM,WAAW,IAAI,EAAE,CAAC;AACzD,uBAAiB,cAAc,QAAQ,QAAM,iBAAiB,IAAI,EAAE,CAAC;AACrE,uBAAiB,SAAS,QAAQ,QAAM,YAAY,IAAI,EAAE,CAAC;AAC3D,uBAAiB,QAAQ,QAAQ,QAAM,WAAW,IAAI,EAAE,CAAC;AAAA,IAC3D;AAKA,UAAM,eAAe,MAAM,KAAK,gBAAgB,CAAC,GAAG,gBAAgB,GAAG,WAAW;AAGlF,iBAAa,QAAQ,gBAAc;AACjC,UAAI,cAAc;AAAM;AAExB,YAAM,qBAA+B,CAAC;AACtC,iBAAW,MAAM,QAAQ,WAAS;AAChC,cAAM,WAAW,MAAM,MAAM,OAAO;AACpC,YAAI,YAAY,MAAM;AACpB,6BAAmB,KAAK,QAAQ;AAChC,uBAAa,IAAI,QAAQ;AAAA,QAC3B;AAAA,MACF,CAAC;AAED,UAAI,mBAAmB,SAAS,GAAG;AAEjC,mBAAW,EAAE,OAAO,iBAAiB,KAAK,WAAW,OAAO,GAAG;AAC7D,cAAI,iBAAiB,cAAc,IAAI,WAAW,EAAE,GAAG;AACrD,+BAAmB,QAAQ,QAAM,iBAAiB,UAAU,IAAI,EAAE,CAAC;AAAA,UACrE;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAGD,UAAM,CAAC,eAAe,EAAE,UAAU,OAAO,OAAO,CAAC,IAAI,MAAM,QAAQ,IAAI;AAAA,MACrE,KAAK,sBAAsB,CAAC,GAAG,UAAU,GAAG,aAAa,EAAE,OAAO,CAAC;AAAA,MACnE,KAAK;AAAA,QACH;AAAA,UACE,WAAW,CAAC,GAAG,YAAY;AAAA,UAC3B,SAAS,CAAC,GAAG,UAAU;AAAA,UACvB,UAAU,CAAC,GAAG,WAAW;AAAA,QAC3B;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAC;AAGD,UAAM,SAAS,oBAAI,IAAuB;AAE1C,eAAW,CAAC,QAAQ,EAAE,OAAO,iBAAiB,CAAC,KAAK,YAAY;AAC9D,YAAM,eAAe;AAAA,QACnB,CAAC,8BAAgB,MAAM,GAAG,CAAC,GAAG,iBAAiB,SAAS,EAAE,IAAI,SAAO;AAAA,UACnE;AAAA,UACA,OAAO,SAAS,KAAK,YAAU,QAAQ,OAAO,EAAE,KAAK;AAAA,QACvD,EAAE;AAAA,QACF,CAAC,8BAAgB,IAAI,GAAG,CAAC,GAAG,iBAAiB,OAAO,EAAE,IAAI,SAAO;AAAA,UAC/D;AAAA,UACA,OAAO,MAAM,KAAK,UAAQ,MAAM,OAAO,EAAE,KAAK;AAAA,QAChD,EAAE;AAAA,QACF,CAAC,8BAAgB,UAAU,GAAG,CAAC,GAAG,iBAAiB,aAAa,EAAE,IAAI,SAAO;AAAA,UAC3E;AAAA,UACA,OAAO,aAAa,KAAK,gBAAc,YAAY,OAAO,EAAE,KAAK;AAAA,QACnE,EAAE;AAAA,QACF,CAAC,8BAAgB,KAAK,GAAG,CAAC,GAAG,iBAAiB,QAAQ,EAAE,IAAI,SAAO;AAAA,UACjE;AAAA,UACA,OAAO,OAAO,KAAK,WAAS,OAAO,OAAO,EAAE,KAAK;AAAA,QACnD,EAAE;AAAA,QACF,CAAC,8BAAgB,iBAAiB,GAAG,CAAC,GAAG,iBAAiB,OAAO,EAAE,IAAI,SAAO;AAAA,UAC5E;AAAA,UACA,OAAO,cAAc,KAAK,uBAAqB,mBAAmB,OAAO,EAAE,KAAK;AAAA,UAChF;AAAA,QACF,EAAE;AAAA,QACF,CAAC,8BAAgB,aAAa,GAAG,CAAC,GAAG,iBAAiB,eAAe,QAAQ,CAAC,EAAE;AAAA,UAC9E,CAAC,CAAC,IAAI,KAAK,OAAO;AAAA,YAChB;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,QACA,CAAC,8BAAgB,sBAAsB,GAAG;AAAA,UACxC,GAAG,iBAAiB,wBAAwB,QAAQ;AAAA,QACtD,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO;AAAA,UACtB;AAAA,UACA;AAAA,UACA;AAAA,QACF,EAAE;AAAA,MACJ;AAEA,aAAO,IAAI,QAAQ;AAAA,QACjB;AAAA,QACA,uBACE,UAAU,OACN,EAAE,CAAC,MAAM,GAAG,OAAO,YAAY,iBAAiB,sBAAsB,QAAQ,CAAC,EAAE,IACjF,CAAC;AAAA,MACT,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,gBACJ,UACA;AAAA,IACE,aAAa;AAAA,IACb;AAAA,IACA,sBAAsB;AAAA,EACxB,GAKuC;AACvC,UAAM,cAAc,MAAc;AAChC,YAAM,SAAS,IAAI,gBAAgB;AACnC,UAAI;AAAQ,eAAO,IAAI,UAAU,MAAM;AACvC,UAAI,uBAAuB;AAAM,eAAO,IAAI,uBAAuB,GAAG,mBAAmB,EAAE;AAC3F,aAAO,OAAO,SAAS;AAAA,IACzB;AAEA,UAAM,cAAc,MAAM;AAC1B,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B,YAAY,mBAAmB,QAAQ,CAAC,aAAa,YAAY,CAAC;AAAA,MAClE;AAAA,IACF;AAEA,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,aAAa,UAAM,2CAAmB,QAAQ;AACpD,UAAI,SAAS,WAAW;AAAK,eAAO;AAEpC,YAAM,IAAI,0CAAmB,oCAAoC,QAAQ,KAAK,UAAU;AAAA,QACtF,MAAM;AAAA,QACN;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAEA,UAAM,WAAkC,MAAM,SAAS,KAAK;AAC5D,UAAM,oBAAoB,SAAS,eAAe,KAAK,CAAC,EAAE,SAAS,MAAM,YAAY,IAAI;AAEzF,UAAM,YAAY,MAAM,KAAK;AAAA,MAC3B,mBAAmB,QAAQ,SAAS;AAAA,MACpC;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,SAAS;AAAA,IACX;AAEA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,qBACJ,IACA;AAAA,IACE,aAAa;AAAA,IACb;AAAA,IACA,sBAAsB;AAAA,IACtB,0BAA0B;AAAA,EAC5B,GAMqC;AACrC,UAAM,cAAc,MAAM;AAC1B,UAAM,UAAM,6CAAkB,EAAE,IAAI,QAAQ,MAAM,KAAK,OAAO,MAAM,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;AAChF,UAAM,yBAAyB,UAAU;AACzC,UAAM,2BAA2B,CAAC,0BAA0B;AAE5D,UAAM,2BAA2B,OAC/B,aAC+C;AAC/C,UAAI,CAAC,SAAS,IAAI;AAGhB,cAAM,aAAa,UAAM,2CAAmB,QAAQ;AACpD,YAAI,SAAS,WAAW,KAAK;AAC3B,iBAAO;AAAA,QACT;AAEA,cAAM,IAAI,0CAAmB,yCAAyC,EAAE,KAAK,UAAU;AAAA,UACrF,MAAM;AAAA,UACN;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAEA,YAAM,eAAe,MAAM,SAAS,KAAK;AACzC,YAAM,SAAS,OAAO,0BAA0B,MAAM,YAAY;AAClE,UAAI,cAAc;AAAQ,eAAO;AACjC,aAAO;AAAA,IACT;AAEA,UAAM,iBAAiB,OACrB,iBAC+C;AAC/C,YAAM,WAAW,MAAM,KAAK;AAAA,QAC1B,oBAAoB,mBAAmB,EAAE,CAAC,IAAI,aAAa,SAAS,CAAC;AAAA,QACrE;AAAA,MACF;AACA,aAAO,MAAM,yBAAyB,QAAQ;AAAA,IAChD;AAEA,UAAM,iBAAiB,YAAwD;AAC7E,YAAM,eAAe,IAAI,gBAAgB;AACzC,UAAI;AAAQ,qBAAa,IAAI,UAAU,MAAM;AAC7C,UAAI;AAAyB,qBAAa,IAAI,2BAA2B,MAAM;AAC/E,aAAO,MAAM,eAAe,YAAY;AAAA,IAC1C;AAEA,UAAM,kBAAkB,YAAwD;AAC9E,YAAM,eAAe,IAAI,gBAAgB;AACzC,UAAI;AAAyB,qBAAa,IAAI,2BAA2B,MAAM;AAC/E,aAAO,MAAM,eAAe,YAAY;AAAA,IAC1C;AAEA,UAAM,cAAc,MAAM,eAAe;AAEzC,UAAM,SACJ,eAAe,QAAQ,2BAA2B,MAAM,gBAAgB,IAAI;AAE9E,QAAI,UAAU,MAAM;AAClB,aAAO;AAAA,QACL,UAAU;AAAA,UACR;AAAA,UACA,QAAQ,UAAU;AAAA,UAClB,MAAM;AAAA,QACR;AAAA,QACA;AAAA,QACA,WAAW,sCAAU,MAAM;AAAA,QAC3B,MAAM;AAAA,UACJ;AAAA,UACA,iBAAiB,UAAU;AAAA,QAC7B;AAAA,MACF;AAAA,IACF;AAEA,UAAM,WAAW;AACjB,UAAM,YAAY,MAAM,KAAK,WAAW,SAAS,MAAM,aAAa,SAAS,MAAM;AAEnF,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM;AAAA,QACJ;AAAA,QACA,iBAAiB,UAAU;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,+BACJ,KACA;AAAA,IACE,aAAa;AAAA,IACb;AAAA,IACA,sBAAsB;AAAA,EACxB,GAKuC;AACvC,QAAI,IAAI,WAAW;AAAG,aAAO,CAAC;AAC9B,UAAM,cAAc,MAAM;AAG1B,QAAI,YAAY,MAAM,KAAK,oBAAoB,KAAK,aAAa,MAAM;AAGvE,UAAM,yBAAyB,UAAU;AACzC,UAAM,2BAA2B,CAAC,0BAA0B;AAC5D,UAAM,kBAA4B,CAAC;AAEnC,QAAI,0BAA0B;AAC5B,gBAAU,QAAQ,CAAC,KAAK,MAAM;AAC5B,YAAI,OAAO;AAAM,0BAAgB,KAAK,CAAC;AAAA,MACzC,CAAC;AAED,UAAI,gBAAgB,SAAS,GAAG;AAC9B,cAAM,cAAc,gBAAgB,IAAI,OAAK,IAAI,CAAC,CAAC;AACnD,cAAM,oBAAoB,MAAM,KAAK,oBAAoB,aAAa,WAAW;AAEjF,wBAAgB,QAAQ,CAAC,eAAe,kBAAkB;AACxD,oBAAU,aAAa,IAAI,kBAAkB,aAAa;AAAA,QAC5D,CAAC;AAAA,MACH;AAAA,IACF;AAGA,UAAM,oBAAoB,UACvB,IAAI,SAAQ,KAAK,QAAQ,OAAO,EAAE,IAAI,IAAI,IAAI,MAAM,IAAI,KAAK,IAAI,IAAK,EACtE,OAAO,kCAAa;AAEvB,UAAM,eAAe,MAAM,KAAK,eAAe,mBAAmB,aAAa,UAAU,IAAI;AAG7F,WAAO,IAAI,IAAI,CAAC,IAAI,MAAM;AACxB,YAAM,WAAW,UAAU,CAAC;AAC5B,YAAM,UAAM,6CAAkB,EAAE,IAAI,QAAQ,MAAM,KAAK,OAAO,MAAM,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;AAEhF,UAAI,YAAY,QAAQ,SAAS,QAAQ,MAAM;AAC7C,eAAO;AAAA,UACL,UAAU,EAAE,IAAI,QAAQ,UAAU,MAAM,MAAM,KAAK;AAAA,UACnD;AAAA,UACA,WAAW,sCAAU,MAAM;AAAA,UAC3B,MAAM,EAAE,qBAAqB,iBAAiB,UAAU,KAAK;AAAA,QAC/D;AAAA,MACF;AAEA,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,WAAW,aAAa,IAAI,EAAE,KAAK,sCAAU,MAAM;AAAA,QACnD,MAAM,EAAE,qBAAqB,iBAAiB,UAAU,KAAK;AAAA,MAC/D;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,kBACJ,SACA,SACe;AACf,UAAM,WAAW,MAAM,KAAK,MAAM,oBAAoB,MAAM;AAAA,MAC1D,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM,KAAK,UAAU,EAAE,SAAS,QAAQ,CAAC;AAAA,IAC3C,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,aAAa,UAAM,2CAAmB,QAAQ;AAEpD,YAAM,IAAI;AAAA,QACR,4CAA4C,OAAO;AAAA,QACnD;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,oBAAoB,aAAgD;AAClE,eAAO,mCAAuB,KAAK,sBAAsB,GAAG,WAAW;AAAA,EACzE;AAAA,EAEA,oBAAoB,aAA0B,gBAA+C;AAC3F,eAAO,qCAAuB,KAAK,sBAAsB,GAAG,aAAa,cAAc;AAAA,EACzF;AAAA,EAEA,MAAM,iBAAiB,OAAoD;AACzE,UAAM,WAAW,MAAM,KAAK,MAAM,2BAA2B,MAAM;AAAA,MACjE,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM,KAAK,UAAU,EAAE,MAAM,CAAC;AAAA,MAC9B,OAAO;AAAA,IACT,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,aAAa,UAAM,2CAAmB,QAAQ;AACpD,UAAI,SAAS,WAAW,KAAK;AAC3B,gBAAQ,MAAM,uCAAuC;AAAA,UACnD,UAAU;AAAA,QACZ,CAAC;AAED,eAAO;AAAA,MACT;AAEA,UAAI,SAAS,WAAW;AAAK,eAAO;AAEpC,YAAM,IAAI,0CAAmB,kCAAkC,UAAU;AAAA,QACvE,MAAM;AAAA,MACR,CAAC;AAAA,IACH;AAEA,UAAM,OAAO,MAAM,SAAS,KAAK;AAEjC,UAAM,SAAS,OAAO,oBAAoB,UAAU,IAAI;AACxD,QAAI,CAAC,OAAO,SAAS;AACnB,YAAM,IAAI;AAAA,QACR,0CAA0C,OAAO,MAAM,OAAO,IAAI,OAAK,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;AAAA,MAC9F;AAAA,IACF;AAEA,WAAO,OAAO;AAAA,EAChB;AAAA,EAEA,MAAM,kBAAkB,cAAkC,MAAmC;AAC3F,UAAM,WAAW,MAAM,KAAK,MAAM,qBAAqB,WAAW;AAElE,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,aAAa,UAAM,2CAAmB,QAAQ;AACpD,UAAI,SAAS,WAAW;AAAK,eAAO;AAEpC,YAAM,IAAI,0CAAmB,yBAAyB,UAAU;AAAA,QAC9D,MAAM;AAAA,QACN;AAAA,MACF,CAAC;AAAA,IACH;AAEA,UAAM,OAAO,MAAM,SAAS,KAAK;AAEjC,UAAM,SAAS,OAAO,MAAM,UAAU,IAAI;AAC1C,QAAI,CAAC,OAAO,SAAS;AACnB,cAAQ,MAAM,sCAAsC;AAAA,QAClD,UAAU;AAAA,QACV;AAAA,MACF,CAAC;AAED,aAAO;AAAA,IACT;AAEA,WAAO,OAAO;AAAA,EAChB;AAAA,EAEQ,wBAAwB;AAC9B,eAAO,qDAA6B,KAAK,QAAQ,WAAW,SAAS,CAAC;AAAA,EACxE;AACF;AAEA,SAAS,oBAAoB;AAAA,EAC3B,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAoC;AAClC,QAAM,SAAS,IAAI,gBAAgB;AAEnC,MAAI,SAAS;AAAM,WAAO,IAAI,SAAS,MAAM,SAAS,CAAC;AACvD,MAAI,SAAS;AAAM,WAAO,IAAI,SAAS,KAAK;AAC5C,MAAI,UAAU;AAAM,WAAO,IAAI,UAAU,MAAM;AAC/C,MAAI,iBAAiB;AAAM,WAAO,IAAI,iBAAiB,aAAa;AACpE,MAAI,kBAAkB;AAAM,WAAO,IAAI,kBAAkB,eAAe,SAAS,CAAC;AAClF,MAAI,cAAc;AAAM,WAAO,IAAI,cAAc,UAAU;AAC3D,MAAI,UAAU;AAAM,WAAO,IAAI,UAAU,MAAM;AAE/C,SAAO;AACT;","names":["import_types","import_component_snapshot","import_page_snapshot","getResourcesFromElementDescriptors","elementDescriptors"]}
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 GlobalElement,\n type LocalizedGlobalElement,\n type Swatch,\n type Typography,\n} from '../api/types'\n\nimport { CacheData } from '../api/api-resources-client'\n\nimport { MakeswiftGraphQLApiClient } from '../api/graphql-api-client'\nimport {\n MakeswiftRestAPIClient,\n failedResponseBody,\n RestApiClientError,\n} 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 const body = await failedResponseBody(response)\n throw new RestApiClientError('Failed to get pages', response, {\n body: body,\n siteVersion,\n params,\n })\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 throw new RestApiClientError(`Failed to get page snapshot for '${pathname}'`, response, {\n body: failedBody,\n siteVersion,\n locale,\n })\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 const failedBody = await failedResponseBody(response)\n if (response.status === 404) return []\n\n throw new RestApiClientError(\n `Failed to get typographies for [${typographyIds.join(', ')}]`,\n response,\n { body: failedBody, siteVersion },\n )\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 const failedBody = await failedResponseBody(response)\n if (response.status === 404) return []\n\n throw new RestApiClientError(`Failed to get swatches for ${ids.join(', ')}`, response, {\n body: failedBody,\n siteVersion,\n })\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 throw new RestApiClientError(\n `Failed to get element trees for [${ids.join(', ')}]`,\n response,\n { body: failedBody, siteVersion, locale },\n )\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 private async introspect(\n element: Element,\n siteVersion: SiteVersion | null,\n locale: string | null,\n ): Promise<CacheData> {\n const treeId = 'root'\n const cacheDataMap = await this.introspectMany(\n [{ id: treeId, data: element }],\n siteVersion,\n locale,\n )\n\n return cacheDataMap.get(treeId)!\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 function createTreeCache() {\n return {\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 // Per-tree tracking, keyed by tree ID\n const traversals = new Map(\n trees.map(tree => [\n tree.id,\n {\n cache: createTreeCache(),\n remaining: [tree.data],\n seen: new Set<string>(),\n },\n ]),\n )\n\n // Layered DFS traversal: each pass walks every tree as far as the caches allow, then\n // fetches every newly discovered global element in one bulk round-trip before resuming.\n while (true) {\n const pendingGlobalElementIds = new Set<string>()\n const deferred: { treeId: string; element: Element }[] = []\n\n for (const [treeId, traversal] of traversals) {\n const { remaining, seen, cache: currentTreeCache } = traversal\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 // Defer until the global element is fetched as part of this layer's bulk request\n if (!globalElementCache.has(globalElementId)) {\n pendingGlobalElementIds.add(globalElementId)\n deferred.push({ treeId, element: current })\n continue\n }\n\n const globalElement = globalElementCache.get(globalElementId) ?? null\n\n let elementData = globalElement?.data\n\n if (locale) {\n const localizedGlobalElement =\n localizedGlobalElementCache.get(globalElementId) ?? null\n\n if (localizedGlobalElement) {\n // Update the logic here when we can merge element trees\n elementData = localizedGlobalElement.data\n\n currentTreeCache.localizedResourcesMap.set(\n globalElementId,\n localizedGlobalElement.id,\n )\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 // If there are no pendingGlobalElementIds then all elements have been traversed completely\n if (pendingGlobalElementIds.size === 0) break\n\n const ids = [...pendingGlobalElementIds]\n const results = await this.getGlobalElements(ids, siteVersion, { locale })\n\n ids.forEach((id, index) => {\n globalElementCache.set(id, results[index]?.base ?? null)\n localizedGlobalElementCache.set(id, results[index]?.localized ?? null)\n })\n\n deferred.forEach(({ treeId, element }) => traversals.get(treeId)!.remaining.push(element))\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 { cache: currentTreeCache } of traversals.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 { cache: currentTreeCache } of traversals.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, { cache: currentTreeCache }] of traversals) {\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 throw new RestApiClientError(`Failed to get page snapshot for '${pathname}'`, response, {\n body: failedBody,\n siteVersion,\n locale,\n })\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 siteVersion = await siteVersionPromise\n const key = deterministicUUID({ id, locale, seed: this.apiKey.split('-').at(0) })\n const searchParams = new URLSearchParams()\n if (locale) searchParams.set('locale', locale)\n\n const response = await this.fetch(\n `content/v1/element-trees/${encodeURIComponent(id)}?${searchParams.toString()}`,\n siteVersion,\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 throw new RestApiClientError(`Failed to get component snapshot for '${id}'`, response, {\n body: failedBody,\n siteVersion,\n locale,\n })\n }\n\n const responseBody = await response.json()\n const documentResponse = Schema.componentDocumentResponse.parse(responseBody)\n\n const document =\n !allowLocaleFallback && documentResponse.locale != locale\n ? {\n id,\n locale: locale ?? null,\n data: null,\n }\n : documentResponse\n\n const cacheData =\n document.data == null\n ? CacheData.empty()\n : 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 createTableRecord(\n tableId: string,\n columns: { columnId: string; data: unknown }[],\n ): Promise<void> {\n const response = await this.fetch('v1/table-records', null, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ tableId, columns }),\n })\n\n if (!response.ok) {\n const failedBody = await failedResponseBody(response)\n\n throw new RestApiClientError(\n `Failed to create table record for table '${tableId}'`,\n response,\n {\n body: failedBody,\n tableId,\n },\n )\n }\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 this.fetch('v1/preview-tokens/reads', null, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\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\n return null\n }\n\n if (response.status === 404) return null\n\n throw new RestApiClientError(`Failed to verify preview token`, response, {\n body: failedBody,\n })\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 const failedBody = await failedResponseBody(response)\n if (response.status === 404) return null\n\n throw new RestApiClientError('Failed to fetch fonts', response, {\n body: failedBody,\n siteVersion,\n })\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"],"mappings":"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","names":["import_types","import_component_snapshot","import_page_snapshot","getResourcesFromElementDescriptors","elementDescriptors"]}
@@ -38,13 +38,7 @@ const componentDocumentFallback = import_zod.z.object({
38
38
  locale: import_zod.z.string().nullable(),
39
39
  data: import_zod.z.null()
40
40
  });
41
- const unstableNotFoundComponentDocumentResponse = import_zod.z.object({
42
- notFound: import_zod.z.literal(true)
43
- });
44
- const componentDocumentResponse = import_zod.z.union([
45
- unstableNotFoundComponentDocumentResponse,
46
- componentDocument
47
- ]);
41
+ const componentDocumentResponse = import_zod.z.union([componentDocument, componentDocumentFallback]);
48
42
  // Annotate the CommonJS export names for ESM import in node:
49
43
  0 && (module.exports = {
50
44
  componentDocument,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/client/schema/component-document.ts"],"sourcesContent":["import { z } from 'zod'\n\nimport { Schema } from '@makeswift/controls'\n\nexport const componentDocument = z.object({\n id: z.string(),\n name: z.string().nullable(),\n locale: z.string().nullable(),\n data: Schema.element,\n siteId: z.string(),\n inheritsFromParent: z.boolean(),\n})\n\nexport const componentDocumentFallback = z.object({\n id: z.string(),\n locale: z.string().nullable(),\n data: z.null(),\n})\n\nconst unstableNotFoundComponentDocumentResponse = z.object({\n notFound: z.literal(true),\n})\n\nexport const componentDocumentResponse = z.union([\n unstableNotFoundComponentDocumentResponse,\n componentDocument,\n])\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAkB;AAElB,sBAAuB;AAEhB,MAAM,oBAAoB,aAAE,OAAO;AAAA,EACxC,IAAI,aAAE,OAAO;AAAA,EACb,MAAM,aAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,QAAQ,aAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,MAAM,uBAAO;AAAA,EACb,QAAQ,aAAE,OAAO;AAAA,EACjB,oBAAoB,aAAE,QAAQ;AAChC,CAAC;AAEM,MAAM,4BAA4B,aAAE,OAAO;AAAA,EAChD,IAAI,aAAE,OAAO;AAAA,EACb,QAAQ,aAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,MAAM,aAAE,KAAK;AACf,CAAC;AAED,MAAM,4CAA4C,aAAE,OAAO;AAAA,EACzD,UAAU,aAAE,QAAQ,IAAI;AAC1B,CAAC;AAEM,MAAM,4BAA4B,aAAE,MAAM;AAAA,EAC/C;AAAA,EACA;AACF,CAAC;","names":[]}
1
+ {"version":3,"sources":["../../../../src/client/schema/component-document.ts"],"sourcesContent":["import { z } from 'zod'\n\nimport { Schema } from '@makeswift/controls'\n\nexport const componentDocument = z.object({\n id: z.string(),\n name: z.string().nullable(),\n locale: z.string().nullable(),\n data: Schema.element,\n siteId: z.string(),\n inheritsFromParent: z.boolean(),\n})\n\nexport const componentDocumentFallback = z.object({\n id: z.string(),\n locale: z.string().nullable(),\n data: z.null(),\n})\n\nexport const componentDocumentResponse = z.union([componentDocument, componentDocumentFallback])\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAkB;AAElB,sBAAuB;AAEhB,MAAM,oBAAoB,aAAE,OAAO;AAAA,EACxC,IAAI,aAAE,OAAO;AAAA,EACb,MAAM,aAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,QAAQ,aAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,MAAM,uBAAO;AAAA,EACb,QAAQ,aAAE,OAAO;AAAA,EACjB,oBAAoB,aAAE,QAAQ;AAChC,CAAC;AAEM,MAAM,4BAA4B,aAAE,OAAO;AAAA,EAChD,IAAI,aAAE,OAAO;AAAA,EACb,QAAQ,aAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,MAAM,aAAE,KAAK;AACf,CAAC;AAEM,MAAM,4BAA4B,aAAE,MAAM,CAAC,mBAAmB,yBAAyB,CAAC;","names":[]}
@@ -22,6 +22,7 @@ __export(use_async_effect_exports, {
22
22
  });
23
23
  module.exports = __toCommonJS(use_async_effect_exports);
24
24
  var import_react = require("react");
25
+ var import_error_message = require("../../../utils/error-message");
25
26
  function useAsyncEffect(effect, deps) {
26
27
  (0, import_react.useEffect)(() => {
27
28
  let cancelled = false;
@@ -34,16 +35,16 @@ function useAsyncEffect(effect, deps) {
34
35
  cleanup = null;
35
36
  }
36
37
  } catch (error) {
37
- console.error("Async effect error:", { error, deps });
38
+ console.error(`Async effect error: ${(0, import_error_message.errorMessage)(error)}`, { error, deps });
38
39
  }
39
40
  };
40
- runAsyncEffect();
41
+ void runAsyncEffect();
41
42
  return () => {
42
43
  cancelled = true;
43
44
  try {
44
45
  cleanup?.();
45
46
  } catch (error) {
46
- console.error("Async effect cleanup error:", { error, deps });
47
+ console.error(`Async effect cleanup error: ${(0, import_error_message.errorMessage)(error)}`, { error, deps });
47
48
  }
48
49
  };
49
50
  }, deps);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/runtimes/react/hooks/use-async-effect.ts"],"sourcesContent":["import { type DependencyList, useEffect } from 'react'\n\nexport function useAsyncEffect(effect: () => Promise<void | (() => void)>, deps: DependencyList) {\n useEffect(() => {\n let cancelled = false\n let cleanup: void | (() => void) | null = null\n\n const runAsyncEffect = async () => {\n try {\n cleanup = await effect()\n\n if (cancelled) {\n cleanup?.()\n cleanup = null\n }\n } catch (error) {\n console.error('Async effect error:', { error, deps })\n }\n }\n\n runAsyncEffect()\n\n return () => {\n cancelled = true\n try {\n cleanup?.()\n } catch (error) {\n console.error('Async effect cleanup error:', { error, deps })\n }\n }\n }, deps)\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA+C;AAExC,SAAS,eAAe,QAA4C,MAAsB;AAC/F,8BAAU,MAAM;AACd,QAAI,YAAY;AAChB,QAAI,UAAsC;AAE1C,UAAM,iBAAiB,YAAY;AACjC,UAAI;AACF,kBAAU,MAAM,OAAO;AAEvB,YAAI,WAAW;AACb,oBAAU;AACV,oBAAU;AAAA,QACZ;AAAA,MACF,SAAS,OAAO;AACd,gBAAQ,MAAM,uBAAuB,EAAE,OAAO,KAAK,CAAC;AAAA,MACtD;AAAA,IACF;AAEA,mBAAe;AAEf,WAAO,MAAM;AACX,kBAAY;AACZ,UAAI;AACF,kBAAU;AAAA,MACZ,SAAS,OAAO;AACd,gBAAQ,MAAM,+BAA+B,EAAE,OAAO,KAAK,CAAC;AAAA,MAC9D;AAAA,IACF;AAAA,EACF,GAAG,IAAI;AACT;","names":[]}
1
+ {"version":3,"sources":["../../../../../src/runtimes/react/hooks/use-async-effect.ts"],"sourcesContent":["import { type DependencyList, useEffect } from 'react'\n\nimport { errorMessage } from '../../../utils/error-message'\n\nexport function useAsyncEffect(effect: () => Promise<void | (() => void)>, deps: DependencyList) {\n useEffect(() => {\n let cancelled = false\n let cleanup: void | (() => void) | null = null\n\n const runAsyncEffect = async () => {\n try {\n cleanup = await effect()\n\n if (cancelled) {\n cleanup?.()\n cleanup = null\n }\n } catch (error) {\n console.error(`Async effect error: ${errorMessage(error)}`, { error, deps })\n }\n }\n\n void runAsyncEffect()\n\n return () => {\n cancelled = true\n try {\n cleanup?.()\n } catch (error) {\n console.error(`Async effect cleanup error: ${errorMessage(error)}`, { error, deps })\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps)\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA+C;AAE/C,2BAA6B;AAEtB,SAAS,eAAe,QAA4C,MAAsB;AAC/F,8BAAU,MAAM;AACd,QAAI,YAAY;AAChB,QAAI,UAAsC;AAE1C,UAAM,iBAAiB,YAAY;AACjC,UAAI;AACF,kBAAU,MAAM,OAAO;AAEvB,YAAI,WAAW;AACb,oBAAU;AACV,oBAAU;AAAA,QACZ;AAAA,MACF,SAAS,OAAO;AACd,gBAAQ,MAAM,2BAAuB,mCAAa,KAAK,CAAC,IAAI,EAAE,OAAO,KAAK,CAAC;AAAA,MAC7E;AAAA,IACF;AAEA,SAAK,eAAe;AAEpB,WAAO,MAAM;AACX,kBAAY;AACZ,UAAI;AACF,kBAAU;AAAA,MACZ,SAAS,OAAO;AACd,gBAAQ,MAAM,mCAA+B,mCAAa,KAAK,CAAC,IAAI,EAAE,OAAO,KAAK,CAAC;AAAA,MACrF;AAAA,IACF;AAAA,EAEF,GAAG,IAAI;AACT;","names":[]}