@makeswift/runtime 0.27.0-canary.2 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/cjs/api-handler/handlers/manifest.js +1 -1
  2. package/dist/cjs/client/index.js +3 -3
  3. package/dist/cjs/runtimes/react/components/RuntimeProvider.js +0 -2
  4. package/dist/cjs/runtimes/react/components/RuntimeProvider.js.map +1 -1
  5. package/dist/cjs/runtimes/react/components/preview-switcher/preview-switcher.js +20 -11
  6. package/dist/cjs/runtimes/react/components/preview-switcher/preview-switcher.js.map +1 -1
  7. package/dist/cjs/state/actions/internal/read-write-actions.js +7 -1
  8. package/dist/cjs/state/actions/internal/read-write-actions.js.map +1 -1
  9. package/dist/cjs/state/builder-api/message-channel.js +32 -0
  10. package/dist/cjs/state/builder-api/message-channel.js.map +1 -1
  11. package/dist/cjs/state/makeswift-api-client.js +20 -1
  12. package/dist/cjs/state/makeswift-api-client.js.map +1 -1
  13. package/dist/cjs/state/modules/api-resources.js +3 -0
  14. package/dist/cjs/state/modules/api-resources.js.map +1 -1
  15. package/dist/cjs/state/modules/localized-resources-map.js +3 -0
  16. package/dist/cjs/state/modules/localized-resources-map.js.map +1 -1
  17. package/dist/esm/api-handler/handlers/manifest.js +1 -1
  18. package/dist/esm/client/index.js +3 -3
  19. package/dist/esm/runtimes/react/components/RuntimeProvider.js +0 -2
  20. package/dist/esm/runtimes/react/components/RuntimeProvider.js.map +1 -1
  21. package/dist/esm/runtimes/react/components/preview-switcher/preview-switcher.js +20 -11
  22. package/dist/esm/runtimes/react/components/preview-switcher/preview-switcher.js.map +1 -1
  23. package/dist/esm/state/actions/internal/read-write-actions.js +6 -1
  24. package/dist/esm/state/actions/internal/read-write-actions.js.map +1 -1
  25. package/dist/esm/state/builder-api/message-channel.js +32 -0
  26. package/dist/esm/state/builder-api/message-channel.js.map +1 -1
  27. package/dist/esm/state/makeswift-api-client.js +21 -2
  28. package/dist/esm/state/makeswift-api-client.js.map +1 -1
  29. package/dist/esm/state/modules/api-resources.js +3 -0
  30. package/dist/esm/state/modules/api-resources.js.map +1 -1
  31. package/dist/esm/state/modules/localized-resources-map.js +3 -0
  32. package/dist/esm/state/modules/localized-resources-map.js.map +1 -1
  33. package/dist/types/runtimes/react/components/RuntimeProvider.d.ts.map +1 -1
  34. package/dist/types/runtimes/react/components/preview-switcher/preview-switcher.d.ts.map +1 -1
  35. package/dist/types/state/actions/index.d.ts +1 -0
  36. package/dist/types/state/actions/index.d.ts.map +1 -1
  37. package/dist/types/state/actions/internal/index.d.ts +1 -0
  38. package/dist/types/state/actions/internal/index.d.ts.map +1 -1
  39. package/dist/types/state/actions/internal/read-write-actions.d.ts +6 -1
  40. package/dist/types/state/actions/internal/read-write-actions.d.ts.map +1 -1
  41. package/dist/types/state/builder-api/message-channel.d.ts +4 -0
  42. package/dist/types/state/builder-api/message-channel.d.ts.map +1 -1
  43. package/dist/types/state/makeswift-api-client.d.ts.map +1 -1
  44. package/dist/types/state/modules/api-resources.d.ts.map +1 -1
  45. package/dist/types/state/modules/localized-resources-map.d.ts.map +1 -1
  46. package/package.json +2 -2
  47. package/dist/cjs/runtimes/react/components/hooks/use-builder-connection-ping.js +0 -62
  48. package/dist/cjs/runtimes/react/components/hooks/use-builder-connection-ping.js.map +0 -1
  49. package/dist/esm/runtimes/react/components/hooks/use-builder-connection-ping.js +0 -38
  50. package/dist/esm/runtimes/react/components/hooks/use-builder-connection-ping.js.map +0 -1
  51. package/dist/types/runtimes/react/components/hooks/use-builder-connection-ping.d.ts +0 -4
  52. package/dist/types/runtimes/react/components/hooks/use-builder-connection-ping.d.ts.map +0 -1
@@ -2,7 +2,8 @@ const ReadWriteActionTypes = {
2
2
  CHANGE_ELEMENT_TREE: "CHANGE_ELEMENT_TREE",
3
3
  REGISTER_MEASURABLE: "REGISTER_MEASURABLE",
4
4
  UNREGISTER_MEASURABLE: "UNREGISTER_MEASURABLE",
5
- UPDATE_API_CLIENT_CACHE: "UPDATE_API_CLIENT_CACHE"
5
+ UPDATE_API_CLIENT_CACHE: "UPDATE_API_CLIENT_CACHE",
6
+ CLEAR_API_CLIENT_CACHE: "CLEAR_API_CLIENT_CACHE"
6
7
  };
7
8
  function changeElementTree(payload) {
8
9
  return {
@@ -30,9 +31,13 @@ function registerMeasurableEffect(documentKey, elementKey, measurable) {
30
31
  function updateAPIClientCache(payload) {
31
32
  return { type: ReadWriteActionTypes.UPDATE_API_CLIENT_CACHE, payload };
32
33
  }
34
+ function clearAPIClientCache() {
35
+ return { type: ReadWriteActionTypes.CLEAR_API_CLIENT_CACHE };
36
+ }
33
37
  export {
34
38
  ReadWriteActionTypes,
35
39
  changeElementTree,
40
+ clearAPIClientCache,
36
41
  registerMeasurable,
37
42
  registerMeasurableEffect,
38
43
  unregisterMeasurable,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/state/actions/internal/read-write-actions.ts"],"sourcesContent":["import { type Operation } from 'ot-json0'\nimport { type ThunkAction } from '@reduxjs/toolkit'\n\nimport { type Measurable } from '../../modules/read-write/box-models'\nimport { type DescriptorsByComponentType } from '../../modules/prop-controllers'\n\nimport { type DocumentPayload } from '../../shared-api'\nimport { type SerializedState as APIClientCache } from '../../makeswift-api-client'\n\nexport const ReadWriteActionTypes = {\n CHANGE_ELEMENT_TREE: 'CHANGE_ELEMENT_TREE',\n REGISTER_MEASURABLE: 'REGISTER_MEASURABLE',\n UNREGISTER_MEASURABLE: 'UNREGISTER_MEASURABLE',\n\n UPDATE_API_CLIENT_CACHE: 'UPDATE_API_CLIENT_CACHE',\n} as const\n\ntype ChangeElementTreeAction = {\n type: typeof ReadWriteActionTypes.CHANGE_ELEMENT_TREE\n payload: {\n oldDocument: DocumentPayload\n newDocument: DocumentPayload\n descriptors: DescriptorsByComponentType\n operation: Operation\n }\n}\n\ntype RegisterMeasurableAction = {\n type: typeof ReadWriteActionTypes.REGISTER_MEASURABLE\n payload: { documentKey: string; elementKey: string; measurable: Measurable }\n}\n\ntype UnregisterMeasurableAction = {\n type: typeof ReadWriteActionTypes.UNREGISTER_MEASURABLE\n payload: { documentKey: string; elementKey: string }\n}\n\ntype UpdateAPIClientCache = {\n type: typeof ReadWriteActionTypes.UPDATE_API_CLIENT_CACHE\n payload: APIClientCache\n}\n\nexport type ReadWriteAction =\n | ChangeElementTreeAction\n | RegisterMeasurableAction\n | UnregisterMeasurableAction\n | UpdateAPIClientCache\n\nexport function changeElementTree(\n payload: ChangeElementTreeAction['payload'],\n): ChangeElementTreeAction {\n return {\n type: ReadWriteActionTypes.CHANGE_ELEMENT_TREE,\n payload,\n }\n}\n\nexport function registerMeasurable(\n documentKey: string,\n elementKey: string,\n measurable: Measurable,\n): RegisterMeasurableAction {\n return {\n type: ReadWriteActionTypes.REGISTER_MEASURABLE,\n payload: { documentKey, elementKey, measurable },\n }\n}\n\nexport function unregisterMeasurable(\n documentKey: string,\n elementKey: string,\n): UnregisterMeasurableAction {\n return { type: ReadWriteActionTypes.UNREGISTER_MEASURABLE, payload: { documentKey, elementKey } }\n}\n\nexport function registerMeasurableEffect(\n documentKey: string,\n elementKey: string,\n measurable: Measurable,\n): ThunkAction<() => void, unknown, unknown, ReadWriteAction> {\n return dispatch => {\n dispatch(registerMeasurable(documentKey, elementKey, measurable))\n\n return () => {\n dispatch(unregisterMeasurable(documentKey, elementKey))\n }\n }\n}\n\nexport function updateAPIClientCache(payload: APIClientCache): UpdateAPIClientCache {\n return { type: ReadWriteActionTypes.UPDATE_API_CLIENT_CACHE, payload }\n}\n"],"mappings":"AASO,MAAM,uBAAuB;AAAA,EAClC,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,uBAAuB;AAAA,EAEvB,yBAAyB;AAC3B;AAiCO,SAAS,kBACd,SACyB;AACzB,SAAO;AAAA,IACL,MAAM,qBAAqB;AAAA,IAC3B;AAAA,EACF;AACF;AAEO,SAAS,mBACd,aACA,YACA,YAC0B;AAC1B,SAAO;AAAA,IACL,MAAM,qBAAqB;AAAA,IAC3B,SAAS,EAAE,aAAa,YAAY,WAAW;AAAA,EACjD;AACF;AAEO,SAAS,qBACd,aACA,YAC4B;AAC5B,SAAO,EAAE,MAAM,qBAAqB,uBAAuB,SAAS,EAAE,aAAa,WAAW,EAAE;AAClG;AAEO,SAAS,yBACd,aACA,YACA,YAC4D;AAC5D,SAAO,cAAY;AACjB,aAAS,mBAAmB,aAAa,YAAY,UAAU,CAAC;AAEhE,WAAO,MAAM;AACX,eAAS,qBAAqB,aAAa,UAAU,CAAC;AAAA,IACxD;AAAA,EACF;AACF;AAEO,SAAS,qBAAqB,SAA+C;AAClF,SAAO,EAAE,MAAM,qBAAqB,yBAAyB,QAAQ;AACvE;","names":[]}
1
+ {"version":3,"sources":["../../../../../src/state/actions/internal/read-write-actions.ts"],"sourcesContent":["import { type Operation } from 'ot-json0'\nimport { type ThunkAction } from '@reduxjs/toolkit'\n\nimport { type Measurable } from '../../modules/read-write/box-models'\nimport { type DescriptorsByComponentType } from '../../modules/prop-controllers'\n\nimport { type DocumentPayload } from '../../shared-api'\nimport { type SerializedState as APIClientCache } from '../../makeswift-api-client'\n\nexport const ReadWriteActionTypes = {\n CHANGE_ELEMENT_TREE: 'CHANGE_ELEMENT_TREE',\n REGISTER_MEASURABLE: 'REGISTER_MEASURABLE',\n UNREGISTER_MEASURABLE: 'UNREGISTER_MEASURABLE',\n\n UPDATE_API_CLIENT_CACHE: 'UPDATE_API_CLIENT_CACHE',\n CLEAR_API_CLIENT_CACHE: 'CLEAR_API_CLIENT_CACHE',\n} as const\n\ntype ChangeElementTreeAction = {\n type: typeof ReadWriteActionTypes.CHANGE_ELEMENT_TREE\n payload: {\n oldDocument: DocumentPayload\n newDocument: DocumentPayload\n descriptors: DescriptorsByComponentType\n operation: Operation\n }\n}\n\ntype RegisterMeasurableAction = {\n type: typeof ReadWriteActionTypes.REGISTER_MEASURABLE\n payload: { documentKey: string; elementKey: string; measurable: Measurable }\n}\n\ntype UnregisterMeasurableAction = {\n type: typeof ReadWriteActionTypes.UNREGISTER_MEASURABLE\n payload: { documentKey: string; elementKey: string }\n}\n\ntype UpdateAPIClientCache = {\n type: typeof ReadWriteActionTypes.UPDATE_API_CLIENT_CACHE\n payload: APIClientCache\n}\n\ntype ClearAPIClientCache = {\n type: typeof ReadWriteActionTypes.CLEAR_API_CLIENT_CACHE\n}\n\nexport type ReadWriteAction =\n | ChangeElementTreeAction\n | RegisterMeasurableAction\n | UnregisterMeasurableAction\n | UpdateAPIClientCache\n | ClearAPIClientCache\n\nexport function changeElementTree(\n payload: ChangeElementTreeAction['payload'],\n): ChangeElementTreeAction {\n return {\n type: ReadWriteActionTypes.CHANGE_ELEMENT_TREE,\n payload,\n }\n}\n\nexport function registerMeasurable(\n documentKey: string,\n elementKey: string,\n measurable: Measurable,\n): RegisterMeasurableAction {\n return {\n type: ReadWriteActionTypes.REGISTER_MEASURABLE,\n payload: { documentKey, elementKey, measurable },\n }\n}\n\nexport function unregisterMeasurable(\n documentKey: string,\n elementKey: string,\n): UnregisterMeasurableAction {\n return { type: ReadWriteActionTypes.UNREGISTER_MEASURABLE, payload: { documentKey, elementKey } }\n}\n\nexport function registerMeasurableEffect(\n documentKey: string,\n elementKey: string,\n measurable: Measurable,\n): ThunkAction<() => void, unknown, unknown, ReadWriteAction> {\n return dispatch => {\n dispatch(registerMeasurable(documentKey, elementKey, measurable))\n\n return () => {\n dispatch(unregisterMeasurable(documentKey, elementKey))\n }\n }\n}\n\nexport function updateAPIClientCache(payload: APIClientCache): UpdateAPIClientCache {\n return { type: ReadWriteActionTypes.UPDATE_API_CLIENT_CACHE, payload }\n}\n\nexport function clearAPIClientCache(): ClearAPIClientCache {\n return { type: ReadWriteActionTypes.CLEAR_API_CLIENT_CACHE }\n}\n"],"mappings":"AASO,MAAM,uBAAuB;AAAA,EAClC,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,uBAAuB;AAAA,EAEvB,yBAAyB;AAAA,EACzB,wBAAwB;AAC1B;AAsCO,SAAS,kBACd,SACyB;AACzB,SAAO;AAAA,IACL,MAAM,qBAAqB;AAAA,IAC3B;AAAA,EACF;AACF;AAEO,SAAS,mBACd,aACA,YACA,YAC0B;AAC1B,SAAO;AAAA,IACL,MAAM,qBAAqB;AAAA,IAC3B,SAAS,EAAE,aAAa,YAAY,WAAW;AAAA,EACjD;AACF;AAEO,SAAS,qBACd,aACA,YAC4B;AAC5B,SAAO,EAAE,MAAM,qBAAqB,uBAAuB,SAAS,EAAE,aAAa,WAAW,EAAE;AAClG;AAEO,SAAS,yBACd,aACA,YACA,YAC4D;AAC5D,SAAO,cAAY;AACjB,aAAS,mBAAmB,aAAa,YAAY,UAAU,CAAC;AAEhE,WAAO,MAAM;AACX,eAAS,qBAAqB,aAAa,UAAU,CAAC;AAAA,IACxD;AAAA,EACF;AACF;AAEO,SAAS,qBAAqB,SAA+C;AAClF,SAAO,EAAE,MAAM,qBAAqB,yBAAyB,QAAQ;AACvE;AAEO,SAAS,sBAA2C;AACzD,SAAO,EAAE,MAAM,qBAAqB,uBAAuB;AAC7D;","names":[]}
@@ -1,7 +1,11 @@
1
+ import { SharedActionTypes, makeswiftConnectionInit } from "../shared-api";
2
+ import { makeswiftConnectionCheck } from "./actions";
3
+ const CONNECTION_PING_INTERVAL_MS = 20;
1
4
  class MessageChannel {
2
5
  appOrigin;
3
6
  channel = null;
4
7
  bufferedMessages = [];
8
+ connectionCheckIntervalID = null;
5
9
  constructor({ appOrigin }) {
6
10
  this.appOrigin = appOrigin;
7
11
  }
@@ -13,6 +17,7 @@ class MessageChannel {
13
17
  }
14
18
  }
15
19
  setup(onMessage) {
20
+ this.setupConnectionCheck();
16
21
  const channel = new window.MessageChannel();
17
22
  channel.port1.onmessage = onMessage;
18
23
  window.parent.postMessage(channel.port2, this.appOrigin, [channel.port2]);
@@ -26,11 +31,38 @@ class MessageChannel {
26
31
  this.bufferedMessages = [];
27
32
  }
28
33
  teardown() {
34
+ this.teardownConnectionCheck();
29
35
  if (this.channel) {
30
36
  this.channel.onmessage = null;
31
37
  this.channel.close();
32
38
  }
33
39
  }
40
+ setupConnectionCheck() {
41
+ window.addEventListener("message", this.connectionCheckHandler);
42
+ window.parent.postMessage(makeswiftConnectionInit(), { targetOrigin: this.appOrigin });
43
+ }
44
+ teardownConnectionCheck() {
45
+ window.removeEventListener("message", this.connectionCheckHandler);
46
+ if (this.connectionCheckIntervalID != null) {
47
+ window.clearInterval(this.connectionCheckIntervalID);
48
+ this.connectionCheckIntervalID = null;
49
+ }
50
+ }
51
+ // use class field syntax to preserve the identity of the handler
52
+ // for adding and removing the event listener
53
+ connectionCheckHandler = (event) => {
54
+ if (event.origin === this.appOrigin && event.data.type === SharedActionTypes.MAKESWIFT_CONNECTION_INIT) {
55
+ if (this.connectionCheckIntervalID != null) {
56
+ window.clearInterval(this.connectionCheckIntervalID);
57
+ this.connectionCheckIntervalID = null;
58
+ }
59
+ this.connectionCheckIntervalID = window.setInterval(() => {
60
+ window.parent.postMessage(makeswiftConnectionCheck({ currentUrl: window.location.href }), {
61
+ targetOrigin: this.appOrigin
62
+ });
63
+ }, CONNECTION_PING_INTERVAL_MS);
64
+ }
65
+ };
34
66
  }
35
67
  export {
36
68
  MessageChannel
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/state/builder-api/message-channel.ts"],"sourcesContent":["export class MessageChannel {\n private readonly appOrigin: string\n private channel: MessagePort | null = null\n private bufferedMessages: [any, Transferable[]?][] = []\n\n constructor({ appOrigin }: { appOrigin: string }) {\n this.appOrigin = appOrigin\n }\n\n public postMessage(message: any, transferables?: Transferable[]) {\n if (this.channel) {\n this.channel.postMessage(message, transferables ?? [])\n } else {\n this.bufferedMessages.push([message, transferables])\n }\n }\n\n public setup(onMessage: (event: MessageEvent) => void) {\n const channel = new window.MessageChannel()\n channel.port1.onmessage = onMessage\n\n // connect channel to the parent window, see\n // https://developer.mozilla.org/en-US/docs/Web/API/Channel_Messaging_API\n window.parent.postMessage(channel.port2, this.appOrigin, [channel.port2])\n\n this.channel = channel.port1\n }\n\n public dispatchBuffered() {\n console.assert(this.channel != null, 'channel is not setup')\n\n this.bufferedMessages.forEach(([message, transferables]) => {\n this.channel?.postMessage(message, transferables ?? [])\n })\n\n this.bufferedMessages = []\n }\n\n public teardown() {\n if (this.channel) {\n this.channel.onmessage = null\n this.channel.close()\n }\n }\n}\n"],"mappings":"AAAO,MAAM,eAAe;AAAA,EACT;AAAA,EACT,UAA8B;AAAA,EAC9B,mBAA6C,CAAC;AAAA,EAEtD,YAAY,EAAE,UAAU,GAA0B;AAChD,SAAK,YAAY;AAAA,EACnB;AAAA,EAEO,YAAY,SAAc,eAAgC;AAC/D,QAAI,KAAK,SAAS;AAChB,WAAK,QAAQ,YAAY,SAAS,iBAAiB,CAAC,CAAC;AAAA,IACvD,OAAO;AACL,WAAK,iBAAiB,KAAK,CAAC,SAAS,aAAa,CAAC;AAAA,IACrD;AAAA,EACF;AAAA,EAEO,MAAM,WAA0C;AACrD,UAAM,UAAU,IAAI,OAAO,eAAe;AAC1C,YAAQ,MAAM,YAAY;AAI1B,WAAO,OAAO,YAAY,QAAQ,OAAO,KAAK,WAAW,CAAC,QAAQ,KAAK,CAAC;AAExE,SAAK,UAAU,QAAQ;AAAA,EACzB;AAAA,EAEO,mBAAmB;AACxB,YAAQ,OAAO,KAAK,WAAW,MAAM,sBAAsB;AAE3D,SAAK,iBAAiB,QAAQ,CAAC,CAAC,SAAS,aAAa,MAAM;AAC1D,WAAK,SAAS,YAAY,SAAS,iBAAiB,CAAC,CAAC;AAAA,IACxD,CAAC;AAED,SAAK,mBAAmB,CAAC;AAAA,EAC3B;AAAA,EAEO,WAAW;AAChB,QAAI,KAAK,SAAS;AAChB,WAAK,QAAQ,YAAY;AACzB,WAAK,QAAQ,MAAM;AAAA,IACrB;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../../src/state/builder-api/message-channel.ts"],"sourcesContent":["import { SharedActionTypes, makeswiftConnectionInit } from '../shared-api'\nimport { makeswiftConnectionCheck } from './actions'\n\nconst CONNECTION_PING_INTERVAL_MS = 20\n\nexport class MessageChannel {\n private readonly appOrigin: string\n private channel: MessagePort | null = null\n private bufferedMessages: [any, Transferable[]?][] = []\n private connectionCheckIntervalID: number | null = null\n\n constructor({ appOrigin }: { appOrigin: string }) {\n this.appOrigin = appOrigin\n }\n\n public postMessage(message: any, transferables?: Transferable[]) {\n if (this.channel) {\n this.channel.postMessage(message, transferables ?? [])\n } else {\n this.bufferedMessages.push([message, transferables])\n }\n }\n\n public setup(onMessage: (event: MessageEvent) => void) {\n this.setupConnectionCheck()\n\n const channel = new window.MessageChannel()\n channel.port1.onmessage = onMessage\n\n // connect channel to the parent window, see\n // https://developer.mozilla.org/en-US/docs/Web/API/Channel_Messaging_API\n window.parent.postMessage(channel.port2, this.appOrigin, [channel.port2])\n\n this.channel = channel.port1\n }\n\n public dispatchBuffered() {\n console.assert(this.channel != null, 'channel is not setup')\n\n this.bufferedMessages.forEach(([message, transferables]) => {\n this.channel?.postMessage(message, transferables ?? [])\n })\n\n this.bufferedMessages = []\n }\n\n public teardown() {\n this.teardownConnectionCheck()\n\n if (this.channel) {\n this.channel.onmessage = null\n this.channel.close()\n }\n }\n\n private setupConnectionCheck() {\n window.addEventListener('message', this.connectionCheckHandler)\n window.parent.postMessage(makeswiftConnectionInit(), { targetOrigin: this.appOrigin })\n }\n\n private teardownConnectionCheck() {\n window.removeEventListener('message', this.connectionCheckHandler)\n if (this.connectionCheckIntervalID != null) {\n window.clearInterval(this.connectionCheckIntervalID)\n this.connectionCheckIntervalID = null\n }\n }\n\n // use class field syntax to preserve the identity of the handler\n // for adding and removing the event listener\n private connectionCheckHandler = (event: MessageEvent) => {\n if (\n event.origin === this.appOrigin &&\n event.data.type === SharedActionTypes.MAKESWIFT_CONNECTION_INIT\n ) {\n if (this.connectionCheckIntervalID != null) {\n window.clearInterval(this.connectionCheckIntervalID)\n this.connectionCheckIntervalID = null\n }\n\n this.connectionCheckIntervalID = window.setInterval(() => {\n window.parent.postMessage(makeswiftConnectionCheck({ currentUrl: window.location.href }), {\n targetOrigin: this.appOrigin,\n })\n }, CONNECTION_PING_INTERVAL_MS)\n }\n }\n}\n"],"mappings":"AAAA,SAAS,mBAAmB,+BAA+B;AAC3D,SAAS,gCAAgC;AAEzC,MAAM,8BAA8B;AAE7B,MAAM,eAAe;AAAA,EACT;AAAA,EACT,UAA8B;AAAA,EAC9B,mBAA6C,CAAC;AAAA,EAC9C,4BAA2C;AAAA,EAEnD,YAAY,EAAE,UAAU,GAA0B;AAChD,SAAK,YAAY;AAAA,EACnB;AAAA,EAEO,YAAY,SAAc,eAAgC;AAC/D,QAAI,KAAK,SAAS;AAChB,WAAK,QAAQ,YAAY,SAAS,iBAAiB,CAAC,CAAC;AAAA,IACvD,OAAO;AACL,WAAK,iBAAiB,KAAK,CAAC,SAAS,aAAa,CAAC;AAAA,IACrD;AAAA,EACF;AAAA,EAEO,MAAM,WAA0C;AACrD,SAAK,qBAAqB;AAE1B,UAAM,UAAU,IAAI,OAAO,eAAe;AAC1C,YAAQ,MAAM,YAAY;AAI1B,WAAO,OAAO,YAAY,QAAQ,OAAO,KAAK,WAAW,CAAC,QAAQ,KAAK,CAAC;AAExE,SAAK,UAAU,QAAQ;AAAA,EACzB;AAAA,EAEO,mBAAmB;AACxB,YAAQ,OAAO,KAAK,WAAW,MAAM,sBAAsB;AAE3D,SAAK,iBAAiB,QAAQ,CAAC,CAAC,SAAS,aAAa,MAAM;AAC1D,WAAK,SAAS,YAAY,SAAS,iBAAiB,CAAC,CAAC;AAAA,IACxD,CAAC;AAED,SAAK,mBAAmB,CAAC;AAAA,EAC3B;AAAA,EAEO,WAAW;AAChB,SAAK,wBAAwB;AAE7B,QAAI,KAAK,SAAS;AAChB,WAAK,QAAQ,YAAY;AACzB,WAAK,QAAQ,MAAM;AAAA,IACrB;AAAA,EACF;AAAA,EAEQ,uBAAuB;AAC7B,WAAO,iBAAiB,WAAW,KAAK,sBAAsB;AAC9D,WAAO,OAAO,YAAY,wBAAwB,GAAG,EAAE,cAAc,KAAK,UAAU,CAAC;AAAA,EACvF;AAAA,EAEQ,0BAA0B;AAChC,WAAO,oBAAoB,WAAW,KAAK,sBAAsB;AACjE,QAAI,KAAK,6BAA6B,MAAM;AAC1C,aAAO,cAAc,KAAK,yBAAyB;AACnD,WAAK,4BAA4B;AAAA,IACnC;AAAA,EACF;AAAA;AAAA;AAAA,EAIQ,yBAAyB,CAAC,UAAwB;AACxD,QACE,MAAM,WAAW,KAAK,aACtB,MAAM,KAAK,SAAS,kBAAkB,2BACtC;AACA,UAAI,KAAK,6BAA6B,MAAM;AAC1C,eAAO,cAAc,KAAK,yBAAyB;AACnD,aAAK,4BAA4B;AAAA,MACnC;AAEA,WAAK,4BAA4B,OAAO,YAAY,MAAM;AACxD,eAAO,OAAO,YAAY,yBAAyB,EAAE,YAAY,OAAO,SAAS,KAAK,CAAC,GAAG;AAAA,UACxF,cAAc,KAAK;AAAA,QACrB,CAAC;AAAA,MACH,GAAG,2BAA2B;AAAA,IAChC;AAAA,EACF;AACF;","names":[]}
@@ -8,7 +8,8 @@ import * as LocaleState from "./modules/locale";
8
8
  import * as APIResources from "./modules/api-resources";
9
9
  import * as LocalizedResourcesMap from "./modules/localized-resources-map";
10
10
  import { ActionTypes } from "./actions";
11
- import { apiResourceFulfilled } from "./actions/internal/read-only-actions";
11
+ import { apiResourceFulfilled, ReadOnlyActionTypes } from "./actions/internal/read-only-actions";
12
+ import { clearAPIClientCache } from "./actions/internal/read-write-actions";
12
13
  import { setLocalizedResourceId } from "./host-api";
13
14
  import { actionMiddleware, middlewareOptions, devToolsConfig } from "./toolkit";
14
15
  import {
@@ -155,6 +156,21 @@ function defaultLocaleMiddleware() {
155
156
  };
156
157
  });
157
158
  }
159
+ function cacheVersioningMiddleware() {
160
+ return actionMiddleware(({ getState, dispatch }) => (next) => {
161
+ return (action) => {
162
+ switch (action.type) {
163
+ case ReadOnlyActionTypes.SET_SITE_VERSION: {
164
+ const cacheVersion = SiteVersionState.getSiteVersion(getState().siteVersion);
165
+ if (cacheVersion?.version !== action.payload?.version) {
166
+ dispatch(clearAPIClientCache());
167
+ }
168
+ }
169
+ }
170
+ return next(action);
171
+ };
172
+ });
173
+ }
158
174
  function configureStore({ serializedState }) {
159
175
  return configureReduxStore({
160
176
  reducer,
@@ -164,7 +180,10 @@ function configureStore({ serializedState }) {
164
180
  serializedState?.localizedResourcesMap
165
181
  )
166
182
  },
167
- middleware: (getDefaultMiddleware) => getDefaultMiddleware(middlewareOptions).concat(defaultLocaleMiddleware()),
183
+ middleware: (getDefaultMiddleware) => getDefaultMiddleware(middlewareOptions).concat(
184
+ defaultLocaleMiddleware(),
185
+ cacheVersioningMiddleware()
186
+ ),
168
187
  devTools: devToolsConfig({
169
188
  name: `API client store (${(/* @__PURE__ */ new Date()).toISOString()})`,
170
189
  actionsDenylist: [
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/state/makeswift-api-client.ts"],"sourcesContent":["import {\n configureStore as configureReduxStore,\n combineReducers,\n type ThunkAction,\n type ThunkMiddleware,\n type ThunkDispatch,\n UnknownAction,\n} from '@reduxjs/toolkit'\n\nimport { type SiteVersion, ApiHandlerHeaders, serializeSiteVersion } from '../api/site-version'\n\nimport * as SiteVersionState from './modules/site-version'\nimport * as LocaleState from './modules/locale'\nimport * as APIResources from './modules/api-resources'\nimport * as LocalizedResourcesMap from './modules/localized-resources-map'\n\nimport { type Action, ActionTypes } from './actions'\nimport { apiResourceFulfilled } from './actions/internal/read-only-actions'\nimport { setLocalizedResourceId } from './host-api'\nimport { actionMiddleware, middlewareOptions, devToolsConfig } from './toolkit'\n\nimport {\n APIResourceType,\n type APIResource,\n type Swatch,\n type File,\n type Typography,\n type GlobalElement,\n type PagePathnameSlice,\n type Table,\n type LocalizedGlobalElement,\n type APIResourceLocale,\n} from '../api'\n\nconst reducer = combineReducers({\n siteVersion: SiteVersionState.reducer,\n locale: LocaleState.reducer,\n apiResources: APIResources.reducer,\n localizedResourcesMap: LocalizedResourcesMap.reducer,\n})\n\nexport type State = ReturnType<typeof reducer>\nexport type Dispatch = ThunkDispatch<State, unknown, Action>\nexport type HttpFetch = (url: string | URL, init?: RequestInit) => Promise<Response>\n\nexport type SerializedState = {\n apiResources: APIResources.SerializedState\n localizedResourcesMap: LocalizedResourcesMap.SerializedState\n}\n\nfunction getLocalizedResourceId(\n state: State,\n locale: string,\n resourceId: string,\n): string | undefined | null {\n return LocalizedResourcesMap.getLocalizedResourceId(\n state.localizedResourcesMap,\n locale,\n resourceId,\n )\n}\n\nexport function getHasAPIResource<T extends APIResourceType>(\n state: State,\n resourceType: APIResourceType,\n resourceId: string,\n locale?: APIResourceLocale<T>,\n): boolean {\n switch (resourceType) {\n case APIResourceType.LocalizedGlobalElement:\n if (locale == null) {\n console.error(`Attempt to access ${resourceType} ${resourceId} without a locale`)\n return false\n }\n\n const localizedId = getLocalizedResourceId(state, locale, resourceId)\n return (\n localizedId != null &&\n APIResources.getHasAPIResource(state.apiResources, resourceType, localizedId, locale)\n )\n\n default:\n return APIResources.getHasAPIResource(state.apiResources, resourceType, resourceId, locale)\n }\n}\n\nexport function getAPIResource<T extends APIResourceType>(\n state: State,\n resourceType: T,\n resourceId: string,\n locale?: APIResourceLocale<T>,\n): Extract<APIResource, { __typename: T }> | null {\n switch (resourceType) {\n case APIResourceType.LocalizedGlobalElement:\n if (locale == null) {\n console.error(`Attempt to access ${resourceType} ${resourceId} without a locale`)\n return null\n }\n\n const localizedId = getLocalizedResourceId(state, locale, resourceId)\n return localizedId != null\n ? APIResources.getAPIResource(state.apiResources, resourceType, localizedId, locale)\n : null\n\n default:\n return APIResources.getAPIResource(state.apiResources, resourceType, resourceId, locale)\n }\n}\n\ntype Thunk<ReturnType> = ThunkAction<ReturnType, State, unknown, Action>\n\nexport function fetchAPIResource<T extends APIResourceType>(\n resourceType: T,\n resourceId: string,\n fetch: HttpFetch,\n locale?: APIResourceLocale<T>,\n): Thunk<Promise<Extract<APIResource, { __typename: T }> | null>> {\n const fetchVersioned = async <T>(url: string, version: SiteVersion | null): Promise<T | null> => {\n const response = await fetch(url, {\n headers: {\n 'Content-Type': 'application/json',\n ...(version != null\n ? { [ApiHandlerHeaders.SiteVersion]: serializeSiteVersion(version) }\n : {}),\n },\n })\n\n if (response.status === 404) return null\n if (!response.ok) throw new Error(response.statusText)\n\n if (response.headers.get('content-type')?.includes('application/json') !== true) {\n throw new Error(\n `Expected JSON response from \"${url}\" but got \"${response.headers.get('content-type')}\"`,\n )\n }\n\n return response.json()\n }\n\n return async (dispatch, getState) => {\n const state = getState()\n const version = SiteVersionState.getSiteVersion(state.siteVersion)\n\n if (getHasAPIResource(state, resourceType, resourceId, locale)) {\n return getAPIResource(state, resourceType, resourceId, locale)\n }\n\n let resource: APIResource | null\n\n switch (resourceType) {\n case APIResourceType.Swatch:\n resource = await fetchVersioned<Swatch>(`/api/makeswift/swatches/${resourceId}`, version)\n break\n\n case APIResourceType.File:\n resource = await fetchVersioned<File>(`/api/makeswift/files/${resourceId}`, version)\n break\n\n case APIResourceType.Typography:\n resource = await fetchVersioned<Typography>(\n `/api/makeswift/typographies/${resourceId}`,\n version,\n )\n break\n\n case APIResourceType.GlobalElement:\n resource = await fetchVersioned<GlobalElement>(\n `/api/makeswift/global-elements/${resourceId}`,\n version,\n )\n break\n\n case APIResourceType.LocalizedGlobalElement: {\n if (locale == null) throw new Error('Locale is required to fetch LocalizedGlobalElement')\n\n // If `getLocalizedResourceId` returns null, it means we have tried to fetch the resource,\n // but the resource is not available. If we haven't fetched it yet, it'll return undefined.\n if (getLocalizedResourceId(state, locale, resourceId) === null) {\n return null\n }\n\n resource = await fetchVersioned<LocalizedGlobalElement>(\n `/api/makeswift/localized-global-elements/${resourceId}/${locale}`,\n version,\n )\n\n dispatch(\n setLocalizedResourceId({\n locale,\n resourceId,\n localizedResourceId: resource?.id ?? null,\n }),\n )\n\n break\n }\n\n case APIResourceType.PagePathnameSlice: {\n const url = new URL(`/api/makeswift/page-pathname-slices/${resourceId}`, 'http://n')\n\n if (locale != null) url.searchParams.set('locale', locale)\n\n resource = await fetchVersioned<PagePathnameSlice>(url.pathname + url.search, version)\n break\n }\n\n case APIResourceType.Table:\n resource = await fetchVersioned<Table>(`/api/makeswift/tables/${resourceId}`, version)\n break\n\n default:\n resource = null\n }\n\n dispatch(apiResourceFulfilled(resourceType, resourceId, resource, locale))\n\n return resource as Extract<APIResource, { __typename: T }> | null\n }\n}\n\n// FIXME: this middleware can be removed once we've upgraded the builder\n// to always provide the locale when dispatching resource actions\nfunction defaultLocaleMiddleware(): ThunkMiddleware<State, UnknownAction> {\n return actionMiddleware(({ getState }) => next => {\n return (action: Action) => {\n switch (action.type) {\n case ActionTypes.CHANGE_API_RESOURCE:\n case ActionTypes.EVICT_API_RESOURCE:\n case ActionTypes.SET_LOCALIZED_RESOURCE_ID: {\n const { locale } = action.payload\n return next({\n ...action,\n payload: {\n ...action.payload,\n locale: locale ?? LocaleState.getLocale(getState().locale),\n },\n } as Action)\n }\n }\n\n return next(action)\n }\n })\n}\n\nexport function configureStore({ serializedState }: { serializedState?: SerializedState }) {\n return configureReduxStore({\n reducer,\n preloadedState: {\n apiResources: APIResources.getInitialState(serializedState?.apiResources),\n localizedResourcesMap: LocalizedResourcesMap.getInitialState(\n serializedState?.localizedResourcesMap,\n ),\n },\n\n middleware: getDefaultMiddleware =>\n getDefaultMiddleware(middlewareOptions).concat(defaultLocaleMiddleware()),\n\n devTools: devToolsConfig({\n name: `API client store (${new Date().toISOString()})`,\n actionsDenylist: [\n ActionTypes.BUILDER_POINTER_MOVE,\n ActionTypes.HANDLE_POINTER_MOVE,\n ActionTypes.ELEMENT_FROM_POINT_CHANGE,\n ],\n }),\n })\n}\n\nexport type Store = ReturnType<typeof configureStore>\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/state/makeswift-api-client.ts"],"sourcesContent":["import {\n configureStore as configureReduxStore,\n combineReducers,\n type ThunkAction,\n type ThunkMiddleware,\n type ThunkDispatch,\n UnknownAction,\n} from '@reduxjs/toolkit'\n\nimport { type SiteVersion, ApiHandlerHeaders, serializeSiteVersion } from '../api/site-version'\n\nimport * as SiteVersionState from './modules/site-version'\nimport * as LocaleState from './modules/locale'\nimport * as APIResources from './modules/api-resources'\nimport * as LocalizedResourcesMap from './modules/localized-resources-map'\n\nimport { type Action, ActionTypes } from './actions'\nimport { apiResourceFulfilled, ReadOnlyActionTypes } from './actions/internal/read-only-actions'\nimport { clearAPIClientCache } from './actions/internal/read-write-actions'\nimport { setLocalizedResourceId } from './host-api'\nimport { actionMiddleware, middlewareOptions, devToolsConfig } from './toolkit'\n\nimport {\n APIResourceType,\n type APIResource,\n type Swatch,\n type File,\n type Typography,\n type GlobalElement,\n type PagePathnameSlice,\n type Table,\n type LocalizedGlobalElement,\n type APIResourceLocale,\n} from '../api'\n\nconst reducer = combineReducers({\n siteVersion: SiteVersionState.reducer,\n locale: LocaleState.reducer,\n apiResources: APIResources.reducer,\n localizedResourcesMap: LocalizedResourcesMap.reducer,\n})\n\nexport type State = ReturnType<typeof reducer>\nexport type Dispatch = ThunkDispatch<State, unknown, Action>\nexport type HttpFetch = (url: string | URL, init?: RequestInit) => Promise<Response>\n\nexport type SerializedState = {\n apiResources: APIResources.SerializedState\n localizedResourcesMap: LocalizedResourcesMap.SerializedState\n}\n\nfunction getLocalizedResourceId(\n state: State,\n locale: string,\n resourceId: string,\n): string | undefined | null {\n return LocalizedResourcesMap.getLocalizedResourceId(\n state.localizedResourcesMap,\n locale,\n resourceId,\n )\n}\n\nexport function getHasAPIResource<T extends APIResourceType>(\n state: State,\n resourceType: APIResourceType,\n resourceId: string,\n locale?: APIResourceLocale<T>,\n): boolean {\n switch (resourceType) {\n case APIResourceType.LocalizedGlobalElement:\n if (locale == null) {\n console.error(`Attempt to access ${resourceType} ${resourceId} without a locale`)\n return false\n }\n\n const localizedId = getLocalizedResourceId(state, locale, resourceId)\n return (\n localizedId != null &&\n APIResources.getHasAPIResource(state.apiResources, resourceType, localizedId, locale)\n )\n\n default:\n return APIResources.getHasAPIResource(state.apiResources, resourceType, resourceId, locale)\n }\n}\n\nexport function getAPIResource<T extends APIResourceType>(\n state: State,\n resourceType: T,\n resourceId: string,\n locale?: APIResourceLocale<T>,\n): Extract<APIResource, { __typename: T }> | null {\n switch (resourceType) {\n case APIResourceType.LocalizedGlobalElement:\n if (locale == null) {\n console.error(`Attempt to access ${resourceType} ${resourceId} without a locale`)\n return null\n }\n\n const localizedId = getLocalizedResourceId(state, locale, resourceId)\n return localizedId != null\n ? APIResources.getAPIResource(state.apiResources, resourceType, localizedId, locale)\n : null\n\n default:\n return APIResources.getAPIResource(state.apiResources, resourceType, resourceId, locale)\n }\n}\n\ntype Thunk<ReturnType> = ThunkAction<ReturnType, State, unknown, Action>\n\nexport function fetchAPIResource<T extends APIResourceType>(\n resourceType: T,\n resourceId: string,\n fetch: HttpFetch,\n locale?: APIResourceLocale<T>,\n): Thunk<Promise<Extract<APIResource, { __typename: T }> | null>> {\n const fetchVersioned = async <T>(url: string, version: SiteVersion | null): Promise<T | null> => {\n const response = await fetch(url, {\n headers: {\n 'Content-Type': 'application/json',\n ...(version != null\n ? { [ApiHandlerHeaders.SiteVersion]: serializeSiteVersion(version) }\n : {}),\n },\n })\n\n if (response.status === 404) return null\n if (!response.ok) throw new Error(response.statusText)\n\n if (response.headers.get('content-type')?.includes('application/json') !== true) {\n throw new Error(\n `Expected JSON response from \"${url}\" but got \"${response.headers.get('content-type')}\"`,\n )\n }\n\n return response.json()\n }\n\n return async (dispatch, getState) => {\n const state = getState()\n const version = SiteVersionState.getSiteVersion(state.siteVersion)\n\n if (getHasAPIResource(state, resourceType, resourceId, locale)) {\n return getAPIResource(state, resourceType, resourceId, locale)\n }\n\n let resource: APIResource | null\n\n switch (resourceType) {\n case APIResourceType.Swatch:\n resource = await fetchVersioned<Swatch>(`/api/makeswift/swatches/${resourceId}`, version)\n break\n\n case APIResourceType.File:\n resource = await fetchVersioned<File>(`/api/makeswift/files/${resourceId}`, version)\n break\n\n case APIResourceType.Typography:\n resource = await fetchVersioned<Typography>(\n `/api/makeswift/typographies/${resourceId}`,\n version,\n )\n break\n\n case APIResourceType.GlobalElement:\n resource = await fetchVersioned<GlobalElement>(\n `/api/makeswift/global-elements/${resourceId}`,\n version,\n )\n break\n\n case APIResourceType.LocalizedGlobalElement: {\n if (locale == null) throw new Error('Locale is required to fetch LocalizedGlobalElement')\n\n // If `getLocalizedResourceId` returns null, it means we have tried to fetch the resource,\n // but the resource is not available. If we haven't fetched it yet, it'll return undefined.\n if (getLocalizedResourceId(state, locale, resourceId) === null) {\n return null\n }\n\n resource = await fetchVersioned<LocalizedGlobalElement>(\n `/api/makeswift/localized-global-elements/${resourceId}/${locale}`,\n version,\n )\n\n dispatch(\n setLocalizedResourceId({\n locale,\n resourceId,\n localizedResourceId: resource?.id ?? null,\n }),\n )\n\n break\n }\n\n case APIResourceType.PagePathnameSlice: {\n const url = new URL(`/api/makeswift/page-pathname-slices/${resourceId}`, 'http://n')\n\n if (locale != null) url.searchParams.set('locale', locale)\n\n resource = await fetchVersioned<PagePathnameSlice>(url.pathname + url.search, version)\n break\n }\n\n case APIResourceType.Table:\n resource = await fetchVersioned<Table>(`/api/makeswift/tables/${resourceId}`, version)\n break\n\n default:\n resource = null\n }\n\n dispatch(apiResourceFulfilled(resourceType, resourceId, resource, locale))\n\n return resource as Extract<APIResource, { __typename: T }> | null\n }\n}\n\n// FIXME: this middleware can be removed once we've upgraded the builder\n// to always provide the locale when dispatching resource actions\nfunction defaultLocaleMiddleware(): ThunkMiddleware<State, UnknownAction> {\n return actionMiddleware(({ getState }) => next => {\n return (action: Action) => {\n switch (action.type) {\n case ActionTypes.CHANGE_API_RESOURCE:\n case ActionTypes.EVICT_API_RESOURCE:\n case ActionTypes.SET_LOCALIZED_RESOURCE_ID: {\n const { locale } = action.payload\n return next({\n ...action,\n payload: {\n ...action.payload,\n locale: locale ?? LocaleState.getLocale(getState().locale),\n },\n } as Action)\n }\n }\n\n return next(action)\n }\n })\n}\n\nfunction cacheVersioningMiddleware(): ThunkMiddleware<State, UnknownAction> {\n return actionMiddleware(({ getState, dispatch }) => next => {\n return (action: Action) => {\n switch (action.type) {\n case ReadOnlyActionTypes.SET_SITE_VERSION: {\n const cacheVersion = SiteVersionState.getSiteVersion(getState().siteVersion)\n if (cacheVersion?.version !== action.payload?.version) {\n dispatch(clearAPIClientCache())\n }\n }\n }\n\n return next(action)\n }\n })\n}\n\nexport function configureStore({ serializedState }: { serializedState?: SerializedState }) {\n return configureReduxStore({\n reducer,\n preloadedState: {\n apiResources: APIResources.getInitialState(serializedState?.apiResources),\n localizedResourcesMap: LocalizedResourcesMap.getInitialState(\n serializedState?.localizedResourcesMap,\n ),\n },\n\n middleware: getDefaultMiddleware =>\n getDefaultMiddleware(middlewareOptions).concat(\n defaultLocaleMiddleware(),\n cacheVersioningMiddleware(),\n ),\n\n devTools: devToolsConfig({\n name: `API client store (${new Date().toISOString()})`,\n actionsDenylist: [\n ActionTypes.BUILDER_POINTER_MOVE,\n ActionTypes.HANDLE_POINTER_MOVE,\n ActionTypes.ELEMENT_FROM_POINT_CHANGE,\n ],\n }),\n })\n}\n\nexport type Store = ReturnType<typeof configureStore>\n"],"mappings":"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","names":[]}
@@ -98,6 +98,9 @@ function reducer(state = getInitialState(), action) {
98
98
  return updated == null || updated === existing ? state2 : new Map(state2).set(resType, updated);
99
99
  }, state);
100
100
  }
101
+ case ReadWriteActionTypes.CLEAR_API_CLIENT_CACHE: {
102
+ return getInitialState();
103
+ }
101
104
  case ReadOnlyActionTypes.API_RESOURCE_FULFILLED: {
102
105
  const { resourceType, resourceId, resource, locale } = action.payload;
103
106
  return new Map(state).set(
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/state/modules/api-resources.ts"],"sourcesContent":["import {\n APIResourceType,\n APIResourceLocale,\n LocalizableAPIResourceType,\n type APIResource,\n} from '../../api'\n\nimport deepEqual from '../../utils/deepEqual'\nimport { Branded } from '../../utils/branded'\n\nimport { type Action, type UnknownAction, isKnownAction } from '../actions'\nimport { ReadOnlyActionTypes } from '../actions/internal/read-only-actions'\nimport { ReadWriteActionTypes } from '../actions/internal/read-write-actions'\nimport { HostActionTypes } from '../host-api'\n\ntype CompositeResourceId = Branded<string, 'CompositeResourceId'>\n\nfunction isValidAPIResourceType(resourceType: string): resourceType is APIResourceType {\n return resourceType in APIResourceType\n}\n\nfunction isLocalizableAPIResourceType(\n resourceType: APIResourceType,\n): resourceType is LocalizableAPIResourceType {\n return resourceType in LocalizableAPIResourceType\n}\n\nfunction compositeId(\n resourceId: string,\n resourceType: APIResourceType,\n locale?: string | null,\n): CompositeResourceId {\n return (\n locale != null && isLocalizableAPIResourceType(resourceType)\n ? `${resourceId}@${locale}`\n : resourceId\n ) as CompositeResourceId\n}\n\nfunction parseCompositeId(compositeId: CompositeResourceId): [string, string | null] {\n const [resourceId, locale] = compositeId.split('@')\n return [resourceId, locale ?? null]\n}\n\nexport type State = Map<APIResourceType, Map<CompositeResourceId, APIResource | null>>\n\nexport type SerializedState = {\n [key in APIResourceType]?: {\n id: string\n value: Extract<APIResource, { __typename: key }> | null\n locale?: APIResourceLocale<key>\n }[]\n}\n\nexport function getInitialState(\n serializedState: SerializedState = {\n Swatch: [],\n File: [],\n Typography: [],\n PagePathnameSlice: [],\n GlobalElement: [],\n Table: [],\n Snippet: [],\n Page: [],\n Site: [],\n LocalizedGlobalElement: [],\n },\n): State {\n return new Map(\n Object.entries(serializedState).map(([resourceType, resources]) => [\n resourceType,\n new Map(\n resources.map(({ id, value, locale }) => [\n compositeId(id, resourceType as APIResourceType, locale),\n value,\n ]),\n ),\n ]),\n ) as State\n}\n\nexport function getSerializedState(state: State): SerializedState {\n const resourceMap: SerializedState = {\n Swatch: [],\n File: [],\n Typography: [],\n PagePathnameSlice: [],\n GlobalElement: [],\n Table: [],\n Snippet: [],\n Page: [],\n Site: [],\n LocalizedGlobalElement: [],\n }\n\n Array.from(state.entries()).forEach(([resourceType, resources]) => {\n const particularResourceMap: { id: string; value: any; locale?: any }[] = []\n\n Array.from(resources.entries()).forEach(([compositeId, value]) => {\n if (value != null) {\n const [id, locale] = parseCompositeId(compositeId)\n console.assert(\n locale == null || isLocalizableAPIResourceType(resourceType),\n `Unexpected locale for non-localizable resource type ${resourceType}`,\n { id, locale },\n )\n\n particularResourceMap.push(locale != null ? { id, value, locale } : { id, value })\n }\n })\n\n resourceMap[resourceType] = particularResourceMap\n })\n\n return resourceMap\n}\n\nexport function getHasAPIResource<T extends APIResourceType>(\n state: State,\n resourceType: T,\n resourceId: string,\n locale?: APIResourceLocale<T>,\n): boolean {\n return state.get(resourceType)?.has(compositeId(resourceId, resourceType, locale)) ?? false\n}\n\nexport function getAPIResource<T extends APIResourceType>(\n state: State,\n resourceType: T,\n resourceId: string,\n locale?: APIResourceLocale<T>,\n): Extract<APIResource, { __typename: T }> | null {\n const resource = state.get(resourceType)?.get(compositeId(resourceId, resourceType, locale))\n\n return resource?.__typename === resourceType\n ? (resource as Extract<typeof resource, { __typename: T }>)\n : null\n}\n\nexport function reducer(state: State = getInitialState(), action: Action | UnknownAction): State {\n if (!isKnownAction(action)) return state\n\n switch (action.type) {\n case ReadWriteActionTypes.UPDATE_API_CLIENT_CACHE: {\n const { apiResources } = action.payload\n\n return Object.entries(apiResources).reduce((state, [resourceType, cachedResources]) => {\n const resType = resourceType as APIResourceType\n const cached:\n | { id: string; value: APIResource | null; locale?: string | null }[]\n | undefined = cachedResources\n\n const existing = state.get(resType) ?? new Map<CompositeResourceId, APIResource | null>()\n const updated = cached?.reduce((r, { id, value, locale }) => {\n const cid = compositeId(id, resType, locale)\n return r.get(cid) != null ? r : new Map(r).set(cid, value)\n }, existing)\n\n return updated == null || updated === existing\n ? state\n : new Map(state).set(resType, updated)\n }, state)\n }\n\n case ReadOnlyActionTypes.API_RESOURCE_FULFILLED: {\n const { resourceType, resourceId, resource, locale } = action.payload\n return new Map(state).set(\n resourceType,\n new Map(state.get(resourceType)!).set(\n compositeId(resourceId, resourceType, locale),\n resource,\n ),\n )\n }\n\n case HostActionTypes.CHANGE_API_RESOURCE: {\n const { resource, locale } = action.payload\n const existingApiResource = getAPIResource(state, resource.__typename, resource.id, locale)\n\n if (deepEqual(existingApiResource, resource)) return state\n\n return new Map(state).set(\n resource.__typename,\n new Map(state.get(resource.__typename)!).set(\n compositeId(resource.id, resource.__typename, locale),\n resource,\n ),\n )\n }\n\n case HostActionTypes.EVICT_API_RESOURCE: {\n const { id, locale } = action.payload\n const [resourceType, resourceId] = id.split(':')\n\n if (!isValidAPIResourceType(resourceType)) return state\n\n const resources = new Map(state.get(resourceType as APIResourceType)!)\n\n const deleted = resources.delete(compositeId(resourceId, resourceType, locale))\n\n return deleted ? new Map(state).set(resourceType as APIResourceType, resources) : state\n }\n\n default:\n return state\n }\n}\n"],"mappings":"AAAA;AAAA,EACE;AAAA,EAEA;AAAA,OAEK;AAEP,OAAO,eAAe;AAGtB,SAA0C,qBAAqB;AAC/D,SAAS,2BAA2B;AACpC,SAAS,4BAA4B;AACrC,SAAS,uBAAuB;AAIhC,SAAS,uBAAuB,cAAuD;AACrF,SAAO,gBAAgB;AACzB;AAEA,SAAS,6BACP,cAC4C;AAC5C,SAAO,gBAAgB;AACzB;AAEA,SAAS,YACP,YACA,cACA,QACqB;AACrB,SACE,UAAU,QAAQ,6BAA6B,YAAY,IACvD,GAAG,UAAU,IAAI,MAAM,KACvB;AAER;AAEA,SAAS,iBAAiBA,cAA2D;AACnF,QAAM,CAAC,YAAY,MAAM,IAAIA,aAAY,MAAM,GAAG;AAClD,SAAO,CAAC,YAAY,UAAU,IAAI;AACpC;AAYO,SAAS,gBACd,kBAAmC;AAAA,EACjC,QAAQ,CAAC;AAAA,EACT,MAAM,CAAC;AAAA,EACP,YAAY,CAAC;AAAA,EACb,mBAAmB,CAAC;AAAA,EACpB,eAAe,CAAC;AAAA,EAChB,OAAO,CAAC;AAAA,EACR,SAAS,CAAC;AAAA,EACV,MAAM,CAAC;AAAA,EACP,MAAM,CAAC;AAAA,EACP,wBAAwB,CAAC;AAC3B,GACO;AACP,SAAO,IAAI;AAAA,IACT,OAAO,QAAQ,eAAe,EAAE,IAAI,CAAC,CAAC,cAAc,SAAS,MAAM;AAAA,MACjE;AAAA,MACA,IAAI;AAAA,QACF,UAAU,IAAI,CAAC,EAAE,IAAI,OAAO,OAAO,MAAM;AAAA,UACvC,YAAY,IAAI,cAAiC,MAAM;AAAA,UACvD;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEO,SAAS,mBAAmB,OAA+B;AAChE,QAAM,cAA+B;AAAA,IACnC,QAAQ,CAAC;AAAA,IACT,MAAM,CAAC;AAAA,IACP,YAAY,CAAC;AAAA,IACb,mBAAmB,CAAC;AAAA,IACpB,eAAe,CAAC;AAAA,IAChB,OAAO,CAAC;AAAA,IACR,SAAS,CAAC;AAAA,IACV,MAAM,CAAC;AAAA,IACP,MAAM,CAAC;AAAA,IACP,wBAAwB,CAAC;AAAA,EAC3B;AAEA,QAAM,KAAK,MAAM,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC,cAAc,SAAS,MAAM;AACjE,UAAM,wBAAoE,CAAC;AAE3E,UAAM,KAAK,UAAU,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAACA,cAAa,KAAK,MAAM;AAChE,UAAI,SAAS,MAAM;AACjB,cAAM,CAAC,IAAI,MAAM,IAAI,iBAAiBA,YAAW;AACjD,gBAAQ;AAAA,UACN,UAAU,QAAQ,6BAA6B,YAAY;AAAA,UAC3D,uDAAuD,YAAY;AAAA,UACnE,EAAE,IAAI,OAAO;AAAA,QACf;AAEA,8BAAsB,KAAK,UAAU,OAAO,EAAE,IAAI,OAAO,OAAO,IAAI,EAAE,IAAI,MAAM,CAAC;AAAA,MACnF;AAAA,IACF,CAAC;AAED,gBAAY,YAAY,IAAI;AAAA,EAC9B,CAAC;AAED,SAAO;AACT;AAEO,SAAS,kBACd,OACA,cACA,YACA,QACS;AACT,SAAO,MAAM,IAAI,YAAY,GAAG,IAAI,YAAY,YAAY,cAAc,MAAM,CAAC,KAAK;AACxF;AAEO,SAAS,eACd,OACA,cACA,YACA,QACgD;AAChD,QAAM,WAAW,MAAM,IAAI,YAAY,GAAG,IAAI,YAAY,YAAY,cAAc,MAAM,CAAC;AAE3F,SAAO,UAAU,eAAe,eAC3B,WACD;AACN;AAEO,SAAS,QAAQ,QAAe,gBAAgB,GAAG,QAAuC;AAC/F,MAAI,CAAC,cAAc,MAAM;AAAG,WAAO;AAEnC,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK,qBAAqB,yBAAyB;AACjD,YAAM,EAAE,aAAa,IAAI,OAAO;AAEhC,aAAO,OAAO,QAAQ,YAAY,EAAE,OAAO,CAACC,QAAO,CAAC,cAAc,eAAe,MAAM;AACrF,cAAM,UAAU;AAChB,cAAM,SAEU;AAEhB,cAAM,WAAWA,OAAM,IAAI,OAAO,KAAK,oBAAI,IAA6C;AACxF,cAAM,UAAU,QAAQ,OAAO,CAAC,GAAG,EAAE,IAAI,OAAO,OAAO,MAAM;AAC3D,gBAAM,MAAM,YAAY,IAAI,SAAS,MAAM;AAC3C,iBAAO,EAAE,IAAI,GAAG,KAAK,OAAO,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,KAAK,KAAK;AAAA,QAC3D,GAAG,QAAQ;AAEX,eAAO,WAAW,QAAQ,YAAY,WAClCA,SACA,IAAI,IAAIA,MAAK,EAAE,IAAI,SAAS,OAAO;AAAA,MACzC,GAAG,KAAK;AAAA,IACV;AAAA,IAEA,KAAK,oBAAoB,wBAAwB;AAC/C,YAAM,EAAE,cAAc,YAAY,UAAU,OAAO,IAAI,OAAO;AAC9D,aAAO,IAAI,IAAI,KAAK,EAAE;AAAA,QACpB;AAAA,QACA,IAAI,IAAI,MAAM,IAAI,YAAY,CAAE,EAAE;AAAA,UAChC,YAAY,YAAY,cAAc,MAAM;AAAA,UAC5C;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IAEA,KAAK,gBAAgB,qBAAqB;AACxC,YAAM,EAAE,UAAU,OAAO,IAAI,OAAO;AACpC,YAAM,sBAAsB,eAAe,OAAO,SAAS,YAAY,SAAS,IAAI,MAAM;AAE1F,UAAI,UAAU,qBAAqB,QAAQ;AAAG,eAAO;AAErD,aAAO,IAAI,IAAI,KAAK,EAAE;AAAA,QACpB,SAAS;AAAA,QACT,IAAI,IAAI,MAAM,IAAI,SAAS,UAAU,CAAE,EAAE;AAAA,UACvC,YAAY,SAAS,IAAI,SAAS,YAAY,MAAM;AAAA,UACpD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IAEA,KAAK,gBAAgB,oBAAoB;AACvC,YAAM,EAAE,IAAI,OAAO,IAAI,OAAO;AAC9B,YAAM,CAAC,cAAc,UAAU,IAAI,GAAG,MAAM,GAAG;AAE/C,UAAI,CAAC,uBAAuB,YAAY;AAAG,eAAO;AAElD,YAAM,YAAY,IAAI,IAAI,MAAM,IAAI,YAA+B,CAAE;AAErE,YAAM,UAAU,UAAU,OAAO,YAAY,YAAY,cAAc,MAAM,CAAC;AAE9E,aAAO,UAAU,IAAI,IAAI,KAAK,EAAE,IAAI,cAAiC,SAAS,IAAI;AAAA,IACpF;AAAA,IAEA;AACE,aAAO;AAAA,EACX;AACF;","names":["compositeId","state"]}
1
+ {"version":3,"sources":["../../../../src/state/modules/api-resources.ts"],"sourcesContent":["import {\n APIResourceType,\n APIResourceLocale,\n LocalizableAPIResourceType,\n type APIResource,\n} from '../../api'\n\nimport deepEqual from '../../utils/deepEqual'\nimport { Branded } from '../../utils/branded'\n\nimport { type Action, type UnknownAction, isKnownAction } from '../actions'\nimport { ReadOnlyActionTypes } from '../actions/internal/read-only-actions'\nimport { ReadWriteActionTypes } from '../actions/internal/read-write-actions'\nimport { HostActionTypes } from '../host-api'\n\ntype CompositeResourceId = Branded<string, 'CompositeResourceId'>\n\nfunction isValidAPIResourceType(resourceType: string): resourceType is APIResourceType {\n return resourceType in APIResourceType\n}\n\nfunction isLocalizableAPIResourceType(\n resourceType: APIResourceType,\n): resourceType is LocalizableAPIResourceType {\n return resourceType in LocalizableAPIResourceType\n}\n\nfunction compositeId(\n resourceId: string,\n resourceType: APIResourceType,\n locale?: string | null,\n): CompositeResourceId {\n return (\n locale != null && isLocalizableAPIResourceType(resourceType)\n ? `${resourceId}@${locale}`\n : resourceId\n ) as CompositeResourceId\n}\n\nfunction parseCompositeId(compositeId: CompositeResourceId): [string, string | null] {\n const [resourceId, locale] = compositeId.split('@')\n return [resourceId, locale ?? null]\n}\n\nexport type State = Map<APIResourceType, Map<CompositeResourceId, APIResource | null>>\n\nexport type SerializedState = {\n [key in APIResourceType]?: {\n id: string\n value: Extract<APIResource, { __typename: key }> | null\n locale?: APIResourceLocale<key>\n }[]\n}\n\nexport function getInitialState(\n serializedState: SerializedState = {\n Swatch: [],\n File: [],\n Typography: [],\n PagePathnameSlice: [],\n GlobalElement: [],\n Table: [],\n Snippet: [],\n Page: [],\n Site: [],\n LocalizedGlobalElement: [],\n },\n): State {\n return new Map(\n Object.entries(serializedState).map(([resourceType, resources]) => [\n resourceType,\n new Map(\n resources.map(({ id, value, locale }) => [\n compositeId(id, resourceType as APIResourceType, locale),\n value,\n ]),\n ),\n ]),\n ) as State\n}\n\nexport function getSerializedState(state: State): SerializedState {\n const resourceMap: SerializedState = {\n Swatch: [],\n File: [],\n Typography: [],\n PagePathnameSlice: [],\n GlobalElement: [],\n Table: [],\n Snippet: [],\n Page: [],\n Site: [],\n LocalizedGlobalElement: [],\n }\n\n Array.from(state.entries()).forEach(([resourceType, resources]) => {\n const particularResourceMap: { id: string; value: any; locale?: any }[] = []\n\n Array.from(resources.entries()).forEach(([compositeId, value]) => {\n if (value != null) {\n const [id, locale] = parseCompositeId(compositeId)\n console.assert(\n locale == null || isLocalizableAPIResourceType(resourceType),\n `Unexpected locale for non-localizable resource type ${resourceType}`,\n { id, locale },\n )\n\n particularResourceMap.push(locale != null ? { id, value, locale } : { id, value })\n }\n })\n\n resourceMap[resourceType] = particularResourceMap\n })\n\n return resourceMap\n}\n\nexport function getHasAPIResource<T extends APIResourceType>(\n state: State,\n resourceType: T,\n resourceId: string,\n locale?: APIResourceLocale<T>,\n): boolean {\n return state.get(resourceType)?.has(compositeId(resourceId, resourceType, locale)) ?? false\n}\n\nexport function getAPIResource<T extends APIResourceType>(\n state: State,\n resourceType: T,\n resourceId: string,\n locale?: APIResourceLocale<T>,\n): Extract<APIResource, { __typename: T }> | null {\n const resource = state.get(resourceType)?.get(compositeId(resourceId, resourceType, locale))\n\n return resource?.__typename === resourceType\n ? (resource as Extract<typeof resource, { __typename: T }>)\n : null\n}\n\nexport function reducer(state: State = getInitialState(), action: Action | UnknownAction): State {\n if (!isKnownAction(action)) return state\n\n switch (action.type) {\n case ReadWriteActionTypes.UPDATE_API_CLIENT_CACHE: {\n const { apiResources } = action.payload\n\n return Object.entries(apiResources).reduce((state, [resourceType, cachedResources]) => {\n const resType = resourceType as APIResourceType\n const cached:\n | { id: string; value: APIResource | null; locale?: string | null }[]\n | undefined = cachedResources\n\n const existing = state.get(resType) ?? new Map<CompositeResourceId, APIResource | null>()\n const updated = cached?.reduce((r, { id, value, locale }) => {\n const cid = compositeId(id, resType, locale)\n return r.get(cid) != null ? r : new Map(r).set(cid, value)\n }, existing)\n\n return updated == null || updated === existing\n ? state\n : new Map(state).set(resType, updated)\n }, state)\n }\n\n case ReadWriteActionTypes.CLEAR_API_CLIENT_CACHE: {\n return getInitialState()\n }\n\n case ReadOnlyActionTypes.API_RESOURCE_FULFILLED: {\n const { resourceType, resourceId, resource, locale } = action.payload\n return new Map(state).set(\n resourceType,\n new Map(state.get(resourceType)!).set(\n compositeId(resourceId, resourceType, locale),\n resource,\n ),\n )\n }\n\n case HostActionTypes.CHANGE_API_RESOURCE: {\n const { resource, locale } = action.payload\n const existingApiResource = getAPIResource(state, resource.__typename, resource.id, locale)\n\n if (deepEqual(existingApiResource, resource)) return state\n\n return new Map(state).set(\n resource.__typename,\n new Map(state.get(resource.__typename)!).set(\n compositeId(resource.id, resource.__typename, locale),\n resource,\n ),\n )\n }\n\n case HostActionTypes.EVICT_API_RESOURCE: {\n const { id, locale } = action.payload\n const [resourceType, resourceId] = id.split(':')\n\n if (!isValidAPIResourceType(resourceType)) return state\n\n const resources = new Map(state.get(resourceType as APIResourceType)!)\n\n const deleted = resources.delete(compositeId(resourceId, resourceType, locale))\n\n return deleted ? new Map(state).set(resourceType as APIResourceType, resources) : state\n }\n\n default:\n return state\n }\n}\n"],"mappings":"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","names":["compositeId","state"]}
@@ -44,6 +44,9 @@ function reducer(state = getInitialState(), action) {
44
44
  return updated === existing ? state2 : new Map(state2).set(locale, updated);
45
45
  }, state);
46
46
  }
47
+ case ReadWriteActionTypes.CLEAR_API_CLIENT_CACHE: {
48
+ return getInitialState();
49
+ }
47
50
  default:
48
51
  return state;
49
52
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/state/modules/localized-resources-map.ts"],"sourcesContent":["import { mapValues } from '@makeswift/controls'\nimport { type Action, type UnknownAction, isKnownAction } from '../actions'\nimport { ReadWriteActionTypes } from '../actions/internal/read-write-actions'\nimport { HostActionTypes } from '../host-api'\n\ntype State = Map<string, Map<string, string | null>>\n\nexport type SerializedState = {\n [locale: string]: {\n [resourceId: string]: string | null\n }\n}\n\nexport function getInitialState(serializedState: SerializedState = {}): State {\n return new Map(\n Object.entries(mapValues(serializedState, resources => new Map(Object.entries(resources)))),\n )\n}\n\nexport function getSerializedState(state: State): SerializedState {\n return mapValues(Object.fromEntries(state.entries()), resources =>\n Object.fromEntries(resources.entries()),\n )\n}\n\nexport function getLocalizedResourceId(\n state: State,\n locale: string,\n resourceId: string,\n): string | undefined | null {\n return state.get(locale)?.get(resourceId)\n}\n\nexport function reducer(state: State = getInitialState(), action: Action | UnknownAction): State {\n if (!isKnownAction(action)) return state\n\n switch (action.type) {\n case HostActionTypes.SET_LOCALIZED_RESOURCE_ID: {\n const { resourceId, localizedResourceId, locale } = action.payload\n\n if (locale == null) {\n console.error('Attempt to set a localized resource ID for a non-localized page', {\n resourceId,\n localizedResourceId,\n })\n\n return state\n }\n\n return new Map(state).set(\n locale,\n (state.get(locale) ?? new Map()).set(resourceId, localizedResourceId),\n )\n }\n\n case ReadWriteActionTypes.UPDATE_API_CLIENT_CACHE: {\n const { localizedResourcesMap } = action.payload\n\n return Object.entries(localizedResourcesMap).reduce((state, [locale, resources]) => {\n const existing = state.get(locale) ?? new Map<string, string | null>()\n const updated = Object.entries(resources).reduce((r, [id, localizedId]) => {\n return r.get(id) != null ? r : new Map(r).set(id, localizedId)\n }, existing)\n\n return updated === existing ? state : new Map(state).set(locale, updated)\n }, state)\n }\n\n default:\n return state\n }\n}\n"],"mappings":"AAAA,SAAS,iBAAiB;AAC1B,SAA0C,qBAAqB;AAC/D,SAAS,4BAA4B;AACrC,SAAS,uBAAuB;AAUzB,SAAS,gBAAgB,kBAAmC,CAAC,GAAU;AAC5E,SAAO,IAAI;AAAA,IACT,OAAO,QAAQ,UAAU,iBAAiB,eAAa,IAAI,IAAI,OAAO,QAAQ,SAAS,CAAC,CAAC,CAAC;AAAA,EAC5F;AACF;AAEO,SAAS,mBAAmB,OAA+B;AAChE,SAAO;AAAA,IAAU,OAAO,YAAY,MAAM,QAAQ,CAAC;AAAA,IAAG,eACpD,OAAO,YAAY,UAAU,QAAQ,CAAC;AAAA,EACxC;AACF;AAEO,SAAS,uBACd,OACA,QACA,YAC2B;AAC3B,SAAO,MAAM,IAAI,MAAM,GAAG,IAAI,UAAU;AAC1C;AAEO,SAAS,QAAQ,QAAe,gBAAgB,GAAG,QAAuC;AAC/F,MAAI,CAAC,cAAc,MAAM;AAAG,WAAO;AAEnC,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK,gBAAgB,2BAA2B;AAC9C,YAAM,EAAE,YAAY,qBAAqB,OAAO,IAAI,OAAO;AAE3D,UAAI,UAAU,MAAM;AAClB,gBAAQ,MAAM,mEAAmE;AAAA,UAC/E;AAAA,UACA;AAAA,QACF,CAAC;AAED,eAAO;AAAA,MACT;AAEA,aAAO,IAAI,IAAI,KAAK,EAAE;AAAA,QACpB;AAAA,SACC,MAAM,IAAI,MAAM,KAAK,oBAAI,IAAI,GAAG,IAAI,YAAY,mBAAmB;AAAA,MACtE;AAAA,IACF;AAAA,IAEA,KAAK,qBAAqB,yBAAyB;AACjD,YAAM,EAAE,sBAAsB,IAAI,OAAO;AAEzC,aAAO,OAAO,QAAQ,qBAAqB,EAAE,OAAO,CAACA,QAAO,CAAC,QAAQ,SAAS,MAAM;AAClF,cAAM,WAAWA,OAAM,IAAI,MAAM,KAAK,oBAAI,IAA2B;AACrE,cAAM,UAAU,OAAO,QAAQ,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,WAAW,MAAM;AACzE,iBAAO,EAAE,IAAI,EAAE,KAAK,OAAO,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,WAAW;AAAA,QAC/D,GAAG,QAAQ;AAEX,eAAO,YAAY,WAAWA,SAAQ,IAAI,IAAIA,MAAK,EAAE,IAAI,QAAQ,OAAO;AAAA,MAC1E,GAAG,KAAK;AAAA,IACV;AAAA,IAEA;AACE,aAAO;AAAA,EACX;AACF;","names":["state"]}
1
+ {"version":3,"sources":["../../../../src/state/modules/localized-resources-map.ts"],"sourcesContent":["import { mapValues } from '@makeswift/controls'\nimport { type Action, type UnknownAction, isKnownAction } from '../actions'\nimport { ReadWriteActionTypes } from '../actions/internal/read-write-actions'\nimport { HostActionTypes } from '../host-api'\n\ntype State = Map<string, Map<string, string | null>>\n\nexport type SerializedState = {\n [locale: string]: {\n [resourceId: string]: string | null\n }\n}\n\nexport function getInitialState(serializedState: SerializedState = {}): State {\n return new Map(\n Object.entries(mapValues(serializedState, resources => new Map(Object.entries(resources)))),\n )\n}\n\nexport function getSerializedState(state: State): SerializedState {\n return mapValues(Object.fromEntries(state.entries()), resources =>\n Object.fromEntries(resources.entries()),\n )\n}\n\nexport function getLocalizedResourceId(\n state: State,\n locale: string,\n resourceId: string,\n): string | undefined | null {\n return state.get(locale)?.get(resourceId)\n}\n\nexport function reducer(state: State = getInitialState(), action: Action | UnknownAction): State {\n if (!isKnownAction(action)) return state\n\n switch (action.type) {\n case HostActionTypes.SET_LOCALIZED_RESOURCE_ID: {\n const { resourceId, localizedResourceId, locale } = action.payload\n\n if (locale == null) {\n console.error('Attempt to set a localized resource ID for a non-localized page', {\n resourceId,\n localizedResourceId,\n })\n\n return state\n }\n\n return new Map(state).set(\n locale,\n (state.get(locale) ?? new Map()).set(resourceId, localizedResourceId),\n )\n }\n\n case ReadWriteActionTypes.UPDATE_API_CLIENT_CACHE: {\n const { localizedResourcesMap } = action.payload\n\n return Object.entries(localizedResourcesMap).reduce((state, [locale, resources]) => {\n const existing = state.get(locale) ?? new Map<string, string | null>()\n const updated = Object.entries(resources).reduce((r, [id, localizedId]) => {\n return r.get(id) != null ? r : new Map(r).set(id, localizedId)\n }, existing)\n\n return updated === existing ? state : new Map(state).set(locale, updated)\n }, state)\n }\n\n case ReadWriteActionTypes.CLEAR_API_CLIENT_CACHE: {\n return getInitialState()\n }\n\n default:\n return state\n }\n}\n"],"mappings":"AAAA,SAAS,iBAAiB;AAC1B,SAA0C,qBAAqB;AAC/D,SAAS,4BAA4B;AACrC,SAAS,uBAAuB;AAUzB,SAAS,gBAAgB,kBAAmC,CAAC,GAAU;AAC5E,SAAO,IAAI;AAAA,IACT,OAAO,QAAQ,UAAU,iBAAiB,eAAa,IAAI,IAAI,OAAO,QAAQ,SAAS,CAAC,CAAC,CAAC;AAAA,EAC5F;AACF;AAEO,SAAS,mBAAmB,OAA+B;AAChE,SAAO;AAAA,IAAU,OAAO,YAAY,MAAM,QAAQ,CAAC;AAAA,IAAG,eACpD,OAAO,YAAY,UAAU,QAAQ,CAAC;AAAA,EACxC;AACF;AAEO,SAAS,uBACd,OACA,QACA,YAC2B;AAC3B,SAAO,MAAM,IAAI,MAAM,GAAG,IAAI,UAAU;AAC1C;AAEO,SAAS,QAAQ,QAAe,gBAAgB,GAAG,QAAuC;AAC/F,MAAI,CAAC,cAAc,MAAM;AAAG,WAAO;AAEnC,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK,gBAAgB,2BAA2B;AAC9C,YAAM,EAAE,YAAY,qBAAqB,OAAO,IAAI,OAAO;AAE3D,UAAI,UAAU,MAAM;AAClB,gBAAQ,MAAM,mEAAmE;AAAA,UAC/E;AAAA,UACA;AAAA,QACF,CAAC;AAED,eAAO;AAAA,MACT;AAEA,aAAO,IAAI,IAAI,KAAK,EAAE;AAAA,QACpB;AAAA,SACC,MAAM,IAAI,MAAM,KAAK,oBAAI,IAAI,GAAG,IAAI,YAAY,mBAAmB;AAAA,MACtE;AAAA,IACF;AAAA,IAEA,KAAK,qBAAqB,yBAAyB;AACjD,YAAM,EAAE,sBAAsB,IAAI,OAAO;AAEzC,aAAO,OAAO,QAAQ,qBAAqB,EAAE,OAAO,CAACA,QAAO,CAAC,QAAQ,SAAS,MAAM;AAClF,cAAM,WAAWA,OAAM,IAAI,MAAM,KAAK,oBAAI,IAA2B;AACrE,cAAM,UAAU,OAAO,QAAQ,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,WAAW,MAAM;AACzE,iBAAO,EAAE,IAAI,EAAE,KAAK,OAAO,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,WAAW;AAAA,QAC/D,GAAG,QAAQ;AAEX,eAAO,YAAY,WAAWA,SAAQ,IAAI,IAAIA,MAAK,EAAE,IAAI,QAAQ,OAAO;AAAA,MAC1E,GAAG,KAAK;AAAA,IACV;AAAA,IAEA,KAAK,qBAAqB,wBAAwB;AAChD,aAAO,gBAAgB;AAAA,IACzB;AAAA,IAEA;AACE,aAAO;AAAA,EACX;AACF;","names":["state"]}
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeProvider.d.ts","sourceRoot":"","sources":["../../../../../src/runtimes/react/components/RuntimeProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAW,MAAM,OAAO,CAAA;AAE1C,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAI5D,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAK7D,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,OAAO,EACP,WAAW,EAAE,eAAe,EAC5B,MAAkB,GACnB,EAAE;IACD,QAAQ,EAAE,SAAS,CAAA;IACnB,OAAO,EAAE,gBAAgB,CAAA;IACzB,WAAW,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,CAAA;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,2CA0BA"}
1
+ {"version":3,"file":"RuntimeProvider.d.ts","sourceRoot":"","sources":["../../../../../src/runtimes/react/components/RuntimeProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAW,MAAM,OAAO,CAAA;AAE1C,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAI5D,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAI7D,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,OAAO,EACP,WAAW,EAAE,eAAe,EAC5B,MAAkB,GACnB,EAAE;IACD,QAAQ,EAAE,SAAS,CAAA;IACnB,OAAO,EAAE,gBAAgB,CAAA;IACzB,WAAW,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,CAAA;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,2CAwBA"}
@@ -1 +1 @@
1
- {"version":3,"file":"preview-switcher.d.ts","sourceRoot":"","sources":["../../../../../../src/runtimes/react/components/preview-switcher/preview-switcher.tsx"],"names":[],"mappings":"AAOA,wBAAgB,eAAe,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,EAAE,OAAO,CAAA;CAAE,2CAkCpE"}
1
+ {"version":3,"file":"preview-switcher.d.ts","sourceRoot":"","sources":["../../../../../../src/runtimes/react/components/preview-switcher/preview-switcher.tsx"],"names":[],"mappings":"AAOA,wBAAgB,eAAe,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,EAAE,OAAO,CAAA;CAAE,2CAcpE"}
@@ -8,6 +8,7 @@ export declare const ActionTypes: {
8
8
  readonly REGISTER_MEASURABLE: "REGISTER_MEASURABLE";
9
9
  readonly UNREGISTER_MEASURABLE: "UNREGISTER_MEASURABLE";
10
10
  readonly UPDATE_API_CLIENT_CACHE: "UPDATE_API_CLIENT_CACHE";
11
+ readonly CLEAR_API_CLIENT_CACHE: "CLEAR_API_CLIENT_CACHE";
11
12
  readonly API_RESOURCE_FULFILLED: "API_RESOURCE_FULFILLED";
12
13
  readonly CREATE_ELEMENT_TREE: "CREATE_ELEMENT_TREE";
13
14
  readonly DELETE_ELEMENT_TREE: "DELETE_ELEMENT_TREE";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/state/actions/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAsB,MAAM,wBAAwB,CAAA;AAC/E,OAAO,EAAE,KAAK,UAAU,EAAmB,MAAM,aAAa,CAAA;AAE9D,OAAO,EAAE,KAAK,cAAc,EAAuB,MAAM,YAAY,CAAA;AAErE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAA;AAEpD,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAId,CAAA;AAEV,MAAM,MAAM,MAAM,GAAG,UAAU,GAAG,aAAa,GAAG,cAAc,CAAA;AAEhE,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,MAAM,CAE/D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/state/actions/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAsB,MAAM,wBAAwB,CAAA;AAC/E,OAAO,EAAE,KAAK,UAAU,EAAmB,MAAM,aAAa,CAAA;AAE9D,OAAO,EAAE,KAAK,cAAc,EAAuB,MAAM,YAAY,CAAA;AAErE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAA;AAEpD,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAId,CAAA;AAEV,MAAM,MAAM,MAAM,GAAG,UAAU,GAAG,aAAa,GAAG,cAAc,CAAA;AAEhE,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,MAAM,CAE/D"}
@@ -5,6 +5,7 @@ export declare const InternalActionTypes: {
5
5
  readonly REGISTER_MEASURABLE: "REGISTER_MEASURABLE";
6
6
  readonly UNREGISTER_MEASURABLE: "UNREGISTER_MEASURABLE";
7
7
  readonly UPDATE_API_CLIENT_CACHE: "UPDATE_API_CLIENT_CACHE";
8
+ readonly CLEAR_API_CLIENT_CACHE: "CLEAR_API_CLIENT_CACHE";
8
9
  readonly API_RESOURCE_FULFILLED: "API_RESOURCE_FULFILLED";
9
10
  readonly CREATE_ELEMENT_TREE: "CREATE_ELEMENT_TREE";
10
11
  readonly DELETE_ELEMENT_TREE: "DELETE_ELEMENT_TREE";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/state/actions/internal/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAuB,MAAM,qBAAqB,CAAA;AAC9E,OAAO,EAAE,KAAK,eAAe,EAAwB,MAAM,sBAAsB,CAAA;AAEjF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;CAGtB,CAAA;AAEV,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG,eAAe,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/state/actions/internal/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAuB,MAAM,qBAAqB,CAAA;AAC9E,OAAO,EAAE,KAAK,eAAe,EAAwB,MAAM,sBAAsB,CAAA;AAEjF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;CAGtB,CAAA;AAEV,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG,eAAe,CAAA"}
@@ -9,6 +9,7 @@ export declare const ReadWriteActionTypes: {
9
9
  readonly REGISTER_MEASURABLE: "REGISTER_MEASURABLE";
10
10
  readonly UNREGISTER_MEASURABLE: "UNREGISTER_MEASURABLE";
11
11
  readonly UPDATE_API_CLIENT_CACHE: "UPDATE_API_CLIENT_CACHE";
12
+ readonly CLEAR_API_CLIENT_CACHE: "CLEAR_API_CLIENT_CACHE";
12
13
  };
13
14
  type ChangeElementTreeAction = {
14
15
  type: typeof ReadWriteActionTypes.CHANGE_ELEMENT_TREE;
@@ -38,11 +39,15 @@ type UpdateAPIClientCache = {
38
39
  type: typeof ReadWriteActionTypes.UPDATE_API_CLIENT_CACHE;
39
40
  payload: APIClientCache;
40
41
  };
41
- export type ReadWriteAction = ChangeElementTreeAction | RegisterMeasurableAction | UnregisterMeasurableAction | UpdateAPIClientCache;
42
+ type ClearAPIClientCache = {
43
+ type: typeof ReadWriteActionTypes.CLEAR_API_CLIENT_CACHE;
44
+ };
45
+ export type ReadWriteAction = ChangeElementTreeAction | RegisterMeasurableAction | UnregisterMeasurableAction | UpdateAPIClientCache | ClearAPIClientCache;
42
46
  export declare function changeElementTree(payload: ChangeElementTreeAction['payload']): ChangeElementTreeAction;
43
47
  export declare function registerMeasurable(documentKey: string, elementKey: string, measurable: Measurable): RegisterMeasurableAction;
44
48
  export declare function unregisterMeasurable(documentKey: string, elementKey: string): UnregisterMeasurableAction;
45
49
  export declare function registerMeasurableEffect(documentKey: string, elementKey: string, measurable: Measurable): ThunkAction<() => void, unknown, unknown, ReadWriteAction>;
46
50
  export declare function updateAPIClientCache(payload: APIClientCache): UpdateAPIClientCache;
51
+ export declare function clearAPIClientCache(): ClearAPIClientCache;
47
52
  export {};
48
53
  //# sourceMappingURL=read-write-actions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"read-write-actions.d.ts","sourceRoot":"","sources":["../../../../../src/state/actions/internal/read-write-actions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEnD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,qCAAqC,CAAA;AACrE,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,gCAAgC,CAAA;AAEhF,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,EAAE,KAAK,eAAe,IAAI,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAEnF,eAAO,MAAM,oBAAoB;;;;;CAMvB,CAAA;AAEV,KAAK,uBAAuB,GAAG;IAC7B,IAAI,EAAE,OAAO,oBAAoB,CAAC,mBAAmB,CAAA;IACrD,OAAO,EAAE;QACP,WAAW,EAAE,eAAe,CAAA;QAC5B,WAAW,EAAE,eAAe,CAAA;QAC5B,WAAW,EAAE,0BAA0B,CAAA;QACvC,SAAS,EAAE,SAAS,CAAA;KACrB,CAAA;CACF,CAAA;AAED,KAAK,wBAAwB,GAAG;IAC9B,IAAI,EAAE,OAAO,oBAAoB,CAAC,mBAAmB,CAAA;IACrD,OAAO,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,UAAU,CAAA;KAAE,CAAA;CAC7E,CAAA;AAED,KAAK,0BAA0B,GAAG;IAChC,IAAI,EAAE,OAAO,oBAAoB,CAAC,qBAAqB,CAAA;IACvD,OAAO,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAA;CACrD,CAAA;AAED,KAAK,oBAAoB,GAAG;IAC1B,IAAI,EAAE,OAAO,oBAAoB,CAAC,uBAAuB,CAAA;IACzD,OAAO,EAAE,cAAc,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,eAAe,GACvB,uBAAuB,GACvB,wBAAwB,GACxB,0BAA0B,GAC1B,oBAAoB,CAAA;AAExB,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,uBAAuB,CAAC,SAAS,CAAC,GAC1C,uBAAuB,CAKzB;AAED,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,UAAU,GACrB,wBAAwB,CAK1B;AAED,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,0BAA0B,CAE5B;AAED,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,UAAU,GACrB,WAAW,CAAC,MAAM,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,CAAC,CAQ5D;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,oBAAoB,CAElF"}
1
+ {"version":3,"file":"read-write-actions.d.ts","sourceRoot":"","sources":["../../../../../src/state/actions/internal/read-write-actions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEnD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,qCAAqC,CAAA;AACrE,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,gCAAgC,CAAA;AAEhF,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,EAAE,KAAK,eAAe,IAAI,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAEnF,eAAO,MAAM,oBAAoB;;;;;;CAOvB,CAAA;AAEV,KAAK,uBAAuB,GAAG;IAC7B,IAAI,EAAE,OAAO,oBAAoB,CAAC,mBAAmB,CAAA;IACrD,OAAO,EAAE;QACP,WAAW,EAAE,eAAe,CAAA;QAC5B,WAAW,EAAE,eAAe,CAAA;QAC5B,WAAW,EAAE,0BAA0B,CAAA;QACvC,SAAS,EAAE,SAAS,CAAA;KACrB,CAAA;CACF,CAAA;AAED,KAAK,wBAAwB,GAAG;IAC9B,IAAI,EAAE,OAAO,oBAAoB,CAAC,mBAAmB,CAAA;IACrD,OAAO,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,UAAU,CAAA;KAAE,CAAA;CAC7E,CAAA;AAED,KAAK,0BAA0B,GAAG;IAChC,IAAI,EAAE,OAAO,oBAAoB,CAAC,qBAAqB,CAAA;IACvD,OAAO,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAA;CACrD,CAAA;AAED,KAAK,oBAAoB,GAAG;IAC1B,IAAI,EAAE,OAAO,oBAAoB,CAAC,uBAAuB,CAAA;IACzD,OAAO,EAAE,cAAc,CAAA;CACxB,CAAA;AAED,KAAK,mBAAmB,GAAG;IACzB,IAAI,EAAE,OAAO,oBAAoB,CAAC,sBAAsB,CAAA;CACzD,CAAA;AAED,MAAM,MAAM,eAAe,GACvB,uBAAuB,GACvB,wBAAwB,GACxB,0BAA0B,GAC1B,oBAAoB,GACpB,mBAAmB,CAAA;AAEvB,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,uBAAuB,CAAC,SAAS,CAAC,GAC1C,uBAAuB,CAKzB;AAED,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,UAAU,GACrB,wBAAwB,CAK1B;AAED,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,0BAA0B,CAE5B;AAED,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,UAAU,GACrB,WAAW,CAAC,MAAM,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,CAAC,CAQ5D;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,oBAAoB,CAElF;AAED,wBAAgB,mBAAmB,IAAI,mBAAmB,CAEzD"}
@@ -2,6 +2,7 @@ export declare class MessageChannel {
2
2
  private readonly appOrigin;
3
3
  private channel;
4
4
  private bufferedMessages;
5
+ private connectionCheckIntervalID;
5
6
  constructor({ appOrigin }: {
6
7
  appOrigin: string;
7
8
  });
@@ -9,5 +10,8 @@ export declare class MessageChannel {
9
10
  setup(onMessage: (event: MessageEvent) => void): void;
10
11
  dispatchBuffered(): void;
11
12
  teardown(): void;
13
+ private setupConnectionCheck;
14
+ private teardownConnectionCheck;
15
+ private connectionCheckHandler;
12
16
  }
13
17
  //# sourceMappingURL=message-channel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"message-channel.d.ts","sourceRoot":"","sources":["../../../../src/state/builder-api/message-channel.ts"],"names":[],"mappings":"AAAA,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,gBAAgB,CAA+B;gBAE3C,EAAE,SAAS,EAAE,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE;IAIzC,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,aAAa,CAAC,EAAE,YAAY,EAAE;IAQxD,KAAK,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI;IAW9C,gBAAgB;IAUhB,QAAQ;CAMhB"}
1
+ {"version":3,"file":"message-channel.d.ts","sourceRoot":"","sources":["../../../../src/state/builder-api/message-channel.ts"],"names":[],"mappings":"AAKA,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,yBAAyB,CAAsB;gBAE3C,EAAE,SAAS,EAAE,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE;IAIzC,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,aAAa,CAAC,EAAE,YAAY,EAAE;IAQxD,KAAK,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI;IAa9C,gBAAgB;IAUhB,QAAQ;IASf,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,sBAAsB,CAgB7B;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"makeswift-api-client.d.ts","sourceRoot":"","sources":["../../../src/state/makeswift-api-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,WAAW,EAEhB,KAAK,aAAa,EAClB,aAAa,EACd,MAAM,kBAAkB,CAAA;AAIzB,OAAO,KAAK,gBAAgB,MAAM,wBAAwB,CAAA;AAC1D,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,YAAY,MAAM,yBAAyB,CAAA;AACvD,OAAO,KAAK,qBAAqB,MAAM,mCAAmC,CAAA;AAE1E,OAAO,EAAE,KAAK,MAAM,EAAe,MAAM,WAAW,CAAA;AAKpD,OAAO,EACL,eAAe,EACf,KAAK,WAAW,EAQhB,KAAK,iBAAiB,EACvB,MAAM,QAAQ,CAAA;AAEf,QAAA,MAAM,OAAO;;;;;;;;;;GAKX,CAAA;AAEF,MAAM,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,CAAA;AAC9C,MAAM,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;AAC5D,MAAM,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;AAEpF,MAAM,MAAM,eAAe,GAAG;IAC5B,YAAY,EAAE,YAAY,CAAC,eAAe,CAAA;IAC1C,qBAAqB,EAAE,qBAAqB,CAAC,eAAe,CAAA;CAC7D,CAAA;AAcD,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,eAAe,EACzD,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,eAAe,EAC7B,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAC5B,OAAO,CAiBT;AAED,wBAAgB,cAAc,CAAC,CAAC,SAAS,eAAe,EACtD,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,CAAC,EACf,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAC5B,OAAO,CAAC,WAAW,EAAE;IAAE,UAAU,EAAE,CAAC,CAAA;CAAE,CAAC,GAAG,IAAI,CAgBhD;AAED,KAAK,KAAK,CAAC,UAAU,IAAI,WAAW,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;AAExE,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,eAAe,EACxD,YAAY,EAAE,CAAC,EACf,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,SAAS,EAChB,MAAM,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAC5B,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE;IAAE,UAAU,EAAE,CAAC,CAAA;CAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAsGhE;AA2BD,wBAAgB,cAAc,CAAC,EAAE,eAAe,EAAE,EAAE;IAAE,eAAe,CAAC,EAAE,eAAe,CAAA;CAAE;;;;;;;;;;;;gDAsBxF;AAED,MAAM,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAA"}
1
+ {"version":3,"file":"makeswift-api-client.d.ts","sourceRoot":"","sources":["../../../src/state/makeswift-api-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,WAAW,EAEhB,KAAK,aAAa,EAClB,aAAa,EACd,MAAM,kBAAkB,CAAA;AAIzB,OAAO,KAAK,gBAAgB,MAAM,wBAAwB,CAAA;AAC1D,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,YAAY,MAAM,yBAAyB,CAAA;AACvD,OAAO,KAAK,qBAAqB,MAAM,mCAAmC,CAAA;AAE1E,OAAO,EAAE,KAAK,MAAM,EAAe,MAAM,WAAW,CAAA;AAMpD,OAAO,EACL,eAAe,EACf,KAAK,WAAW,EAQhB,KAAK,iBAAiB,EACvB,MAAM,QAAQ,CAAA;AAEf,QAAA,MAAM,OAAO;;;;;;;;;;GAKX,CAAA;AAEF,MAAM,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,CAAA;AAC9C,MAAM,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;AAC5D,MAAM,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;AAEpF,MAAM,MAAM,eAAe,GAAG;IAC5B,YAAY,EAAE,YAAY,CAAC,eAAe,CAAA;IAC1C,qBAAqB,EAAE,qBAAqB,CAAC,eAAe,CAAA;CAC7D,CAAA;AAcD,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,eAAe,EACzD,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,eAAe,EAC7B,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAC5B,OAAO,CAiBT;AAED,wBAAgB,cAAc,CAAC,CAAC,SAAS,eAAe,EACtD,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,CAAC,EACf,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAC5B,OAAO,CAAC,WAAW,EAAE;IAAE,UAAU,EAAE,CAAC,CAAA;CAAE,CAAC,GAAG,IAAI,CAgBhD;AAED,KAAK,KAAK,CAAC,UAAU,IAAI,WAAW,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;AAExE,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,eAAe,EACxD,YAAY,EAAE,CAAC,EACf,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,SAAS,EAChB,MAAM,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAC5B,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE;IAAE,UAAU,EAAE,CAAC,CAAA;CAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAsGhE;AA4CD,wBAAgB,cAAc,CAAC,EAAE,eAAe,EAAE,EAAE;IAAE,eAAe,CAAC,EAAE,eAAe,CAAA;CAAE;;;;;;;;;;;;gDAyBxF;AAED,MAAM,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"api-resources.d.ts","sourceRoot":"","sources":["../../../../src/state/modules/api-resources.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,iBAAiB,EAEjB,KAAK,WAAW,EACjB,MAAM,WAAW,CAAA;AAGlB,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAE7C,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,aAAa,EAAiB,MAAM,YAAY,CAAA;AAK3E,KAAK,mBAAmB,GAAG,OAAO,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAA;AA6BjE,MAAM,MAAM,KAAK,GAAG,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,mBAAmB,EAAE,WAAW,GAAG,IAAI,CAAC,CAAC,CAAA;AAEtF,MAAM,MAAM,eAAe,GAAG;KAC3B,GAAG,IAAI,eAAe,CAAC,CAAC,EAAE;QACzB,EAAE,EAAE,MAAM,CAAA;QACV,KAAK,EAAE,OAAO,CAAC,WAAW,EAAE;YAAE,UAAU,EAAE,GAAG,CAAA;SAAE,CAAC,GAAG,IAAI,CAAA;QACvD,MAAM,CAAC,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAA;KAChC,EAAE;CACJ,CAAA;AAED,wBAAgB,eAAe,CAC7B,eAAe,GAAE,eAWhB,GACA,KAAK,CAYP;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,eAAe,CAkChE;AAED,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,eAAe,EACzD,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,CAAC,EACf,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAC5B,OAAO,CAET;AAED,wBAAgB,cAAc,CAAC,CAAC,SAAS,eAAe,EACtD,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,CAAC,EACf,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAC5B,OAAO,CAAC,WAAW,EAAE;IAAE,UAAU,EAAE,CAAC,CAAA;CAAE,CAAC,GAAG,IAAI,CAMhD;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,KAAK,YAAoB,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,KAAK,CAmE/F"}
1
+ {"version":3,"file":"api-resources.d.ts","sourceRoot":"","sources":["../../../../src/state/modules/api-resources.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,iBAAiB,EAEjB,KAAK,WAAW,EACjB,MAAM,WAAW,CAAA;AAGlB,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAE7C,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,aAAa,EAAiB,MAAM,YAAY,CAAA;AAK3E,KAAK,mBAAmB,GAAG,OAAO,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAA;AA6BjE,MAAM,MAAM,KAAK,GAAG,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,mBAAmB,EAAE,WAAW,GAAG,IAAI,CAAC,CAAC,CAAA;AAEtF,MAAM,MAAM,eAAe,GAAG;KAC3B,GAAG,IAAI,eAAe,CAAC,CAAC,EAAE;QACzB,EAAE,EAAE,MAAM,CAAA;QACV,KAAK,EAAE,OAAO,CAAC,WAAW,EAAE;YAAE,UAAU,EAAE,GAAG,CAAA;SAAE,CAAC,GAAG,IAAI,CAAA;QACvD,MAAM,CAAC,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAA;KAChC,EAAE;CACJ,CAAA;AAED,wBAAgB,eAAe,CAC7B,eAAe,GAAE,eAWhB,GACA,KAAK,CAYP;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,eAAe,CAkChE;AAED,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,eAAe,EACzD,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,CAAC,EACf,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAC5B,OAAO,CAET;AAED,wBAAgB,cAAc,CAAC,CAAC,SAAS,eAAe,EACtD,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,CAAC,EACf,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAC5B,OAAO,CAAC,WAAW,EAAE;IAAE,UAAU,EAAE,CAAC,CAAA;CAAE,CAAC,GAAG,IAAI,CAMhD;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,KAAK,YAAoB,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,KAAK,CAuE/F"}
@@ -1 +1 @@
1
- {"version":3,"file":"localized-resources-map.d.ts","sourceRoot":"","sources":["../../../../src/state/modules/localized-resources-map.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,aAAa,EAAiB,MAAM,YAAY,CAAA;AAI3E,KAAK,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,CAAA;AAEpD,MAAM,MAAM,eAAe,GAAG;IAC5B,CAAC,MAAM,EAAE,MAAM,GAAG;QAChB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;KACpC,CAAA;CACF,CAAA;AAED,wBAAgB,eAAe,CAAC,eAAe,GAAE,eAAoB,GAAG,KAAK,CAI5E;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,eAAe,CAIhE;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,MAAM,GAAG,SAAS,GAAG,IAAI,CAE3B;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,KAAK,YAAoB,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,KAAK,CAsC/F"}
1
+ {"version":3,"file":"localized-resources-map.d.ts","sourceRoot":"","sources":["../../../../src/state/modules/localized-resources-map.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,aAAa,EAAiB,MAAM,YAAY,CAAA;AAI3E,KAAK,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,CAAA;AAEpD,MAAM,MAAM,eAAe,GAAG;IAC5B,CAAC,MAAM,EAAE,MAAM,GAAG;QAChB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;KACpC,CAAA;CACF,CAAA;AAED,wBAAgB,eAAe,CAAC,eAAe,GAAE,eAAoB,GAAG,KAAK,CAI5E;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,eAAe,CAIhE;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,MAAM,GAAG,SAAS,GAAG,IAAI,CAE3B;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,KAAK,YAAoB,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,KAAK,CA0C/F"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@makeswift/runtime",
3
- "version": "0.27.0-canary.2",
3
+ "version": "0.27.0",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "url": "makeswift/makeswift",
@@ -232,8 +232,8 @@
232
232
  "use-sync-external-store": "^1.5.0",
233
233
  "uuid": "^9.0.0",
234
234
  "zod": "^3.21.4",
235
- "@makeswift/next-plugin": "0.6.1",
236
235
  "@makeswift/controls": "0.1.16",
236
+ "@makeswift/next-plugin": "0.6.1",
237
237
  "@makeswift/prop-controllers": "0.4.10"
238
238
  },
239
239
  "devDependencies": {
@@ -1,62 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var use_builder_connection_ping_exports = {};
20
- __export(use_builder_connection_ping_exports, {
21
- useBuilderConnectionPing: () => useBuilderConnectionPing
22
- });
23
- module.exports = __toCommonJS(use_builder_connection_ping_exports);
24
- var import_react = require("react");
25
- var import_actions = require("../../../../state/builder-api/actions");
26
- var import_shared_api = require("../../../../state/shared-api");
27
- const CONNECTION_PING_INTERVAL_MS = 20;
28
- function useBuilderConnectionPing({ appOrigin }) {
29
- (0, import_react.useEffect)(() => {
30
- let connectionInterval;
31
- if (window.parent !== window) {
32
- window.addEventListener("message", messageHandler);
33
- window.parent.postMessage((0, import_shared_api.makeswiftConnectionInit)(), { targetOrigin: appOrigin });
34
- }
35
- return () => {
36
- window.removeEventListener("message", messageHandler);
37
- if (connectionInterval != null) {
38
- window.clearInterval(connectionInterval);
39
- connectionInterval = null;
40
- }
41
- };
42
- function messageHandler(event) {
43
- if (event.origin === appOrigin && event.data.type === import_shared_api.SharedActionTypes.MAKESWIFT_CONNECTION_INIT) {
44
- if (connectionInterval != null) {
45
- window.clearInterval(connectionInterval);
46
- connectionInterval = null;
47
- }
48
- connectionInterval = window.setInterval(() => {
49
- window.parent.postMessage(
50
- (0, import_actions.makeswiftConnectionCheck)({ currentUrl: window.location.href }),
51
- { targetOrigin: appOrigin }
52
- );
53
- }, CONNECTION_PING_INTERVAL_MS);
54
- }
55
- }
56
- }, [appOrigin]);
57
- }
58
- // Annotate the CommonJS export names for ESM import in node:
59
- 0 && (module.exports = {
60
- useBuilderConnectionPing
61
- });
62
- //# sourceMappingURL=use-builder-connection-ping.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../src/runtimes/react/components/hooks/use-builder-connection-ping.ts"],"sourcesContent":["import { useEffect } from 'react'\nimport { makeswiftConnectionCheck } from '../../../../state/builder-api/actions'\nimport { SharedActionTypes, makeswiftConnectionInit } from '../../../../state/shared-api'\n\nconst CONNECTION_PING_INTERVAL_MS = 20\n\nexport function useBuilderConnectionPing({ appOrigin }: { appOrigin: string }) {\n useEffect(() => {\n let connectionInterval: number | null\n\n if (window.parent !== window) {\n window.addEventListener('message', messageHandler)\n window.parent.postMessage(makeswiftConnectionInit(), { targetOrigin: appOrigin })\n }\n\n return () => {\n window.removeEventListener('message', messageHandler)\n if (connectionInterval != null) {\n window.clearInterval(connectionInterval)\n connectionInterval = null\n }\n }\n\n function messageHandler(event: MessageEvent): void {\n if (\n event.origin === appOrigin &&\n event.data.type === SharedActionTypes.MAKESWIFT_CONNECTION_INIT\n ) {\n if (connectionInterval != null) {\n window.clearInterval(connectionInterval)\n connectionInterval = null\n }\n\n connectionInterval = window.setInterval(() => {\n window.parent.postMessage(\n makeswiftConnectionCheck({ currentUrl: window.location.href }),\n { targetOrigin: appOrigin },\n )\n }, CONNECTION_PING_INTERVAL_MS)\n }\n }\n }, [appOrigin])\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA0B;AAC1B,qBAAyC;AACzC,wBAA2D;AAE3D,MAAM,8BAA8B;AAE7B,SAAS,yBAAyB,EAAE,UAAU,GAA0B;AAC7E,8BAAU,MAAM;AACd,QAAI;AAEJ,QAAI,OAAO,WAAW,QAAQ;AAC5B,aAAO,iBAAiB,WAAW,cAAc;AACjD,aAAO,OAAO,gBAAY,2CAAwB,GAAG,EAAE,cAAc,UAAU,CAAC;AAAA,IAClF;AAEA,WAAO,MAAM;AACX,aAAO,oBAAoB,WAAW,cAAc;AACpD,UAAI,sBAAsB,MAAM;AAC9B,eAAO,cAAc,kBAAkB;AACvC,6BAAqB;AAAA,MACvB;AAAA,IACF;AAEA,aAAS,eAAe,OAA2B;AACjD,UACE,MAAM,WAAW,aACjB,MAAM,KAAK,SAAS,oCAAkB,2BACtC;AACA,YAAI,sBAAsB,MAAM;AAC9B,iBAAO,cAAc,kBAAkB;AACvC,+BAAqB;AAAA,QACvB;AAEA,6BAAqB,OAAO,YAAY,MAAM;AAC5C,iBAAO,OAAO;AAAA,gBACZ,yCAAyB,EAAE,YAAY,OAAO,SAAS,KAAK,CAAC;AAAA,YAC7D,EAAE,cAAc,UAAU;AAAA,UAC5B;AAAA,QACF,GAAG,2BAA2B;AAAA,MAChC;AAAA,IACF;AAAA,EACF,GAAG,CAAC,SAAS,CAAC;AAChB;","names":[]}
@@ -1,38 +0,0 @@
1
- import { useEffect } from "react";
2
- import { makeswiftConnectionCheck } from "../../../../state/builder-api/actions";
3
- import { SharedActionTypes, makeswiftConnectionInit } from "../../../../state/shared-api";
4
- const CONNECTION_PING_INTERVAL_MS = 20;
5
- function useBuilderConnectionPing({ appOrigin }) {
6
- useEffect(() => {
7
- let connectionInterval;
8
- if (window.parent !== window) {
9
- window.addEventListener("message", messageHandler);
10
- window.parent.postMessage(makeswiftConnectionInit(), { targetOrigin: appOrigin });
11
- }
12
- return () => {
13
- window.removeEventListener("message", messageHandler);
14
- if (connectionInterval != null) {
15
- window.clearInterval(connectionInterval);
16
- connectionInterval = null;
17
- }
18
- };
19
- function messageHandler(event) {
20
- if (event.origin === appOrigin && event.data.type === SharedActionTypes.MAKESWIFT_CONNECTION_INIT) {
21
- if (connectionInterval != null) {
22
- window.clearInterval(connectionInterval);
23
- connectionInterval = null;
24
- }
25
- connectionInterval = window.setInterval(() => {
26
- window.parent.postMessage(
27
- makeswiftConnectionCheck({ currentUrl: window.location.href }),
28
- { targetOrigin: appOrigin }
29
- );
30
- }, CONNECTION_PING_INTERVAL_MS);
31
- }
32
- }
33
- }, [appOrigin]);
34
- }
35
- export {
36
- useBuilderConnectionPing
37
- };
38
- //# sourceMappingURL=use-builder-connection-ping.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../src/runtimes/react/components/hooks/use-builder-connection-ping.ts"],"sourcesContent":["import { useEffect } from 'react'\nimport { makeswiftConnectionCheck } from '../../../../state/builder-api/actions'\nimport { SharedActionTypes, makeswiftConnectionInit } from '../../../../state/shared-api'\n\nconst CONNECTION_PING_INTERVAL_MS = 20\n\nexport function useBuilderConnectionPing({ appOrigin }: { appOrigin: string }) {\n useEffect(() => {\n let connectionInterval: number | null\n\n if (window.parent !== window) {\n window.addEventListener('message', messageHandler)\n window.parent.postMessage(makeswiftConnectionInit(), { targetOrigin: appOrigin })\n }\n\n return () => {\n window.removeEventListener('message', messageHandler)\n if (connectionInterval != null) {\n window.clearInterval(connectionInterval)\n connectionInterval = null\n }\n }\n\n function messageHandler(event: MessageEvent): void {\n if (\n event.origin === appOrigin &&\n event.data.type === SharedActionTypes.MAKESWIFT_CONNECTION_INIT\n ) {\n if (connectionInterval != null) {\n window.clearInterval(connectionInterval)\n connectionInterval = null\n }\n\n connectionInterval = window.setInterval(() => {\n window.parent.postMessage(\n makeswiftConnectionCheck({ currentUrl: window.location.href }),\n { targetOrigin: appOrigin },\n )\n }, CONNECTION_PING_INTERVAL_MS)\n }\n }\n }, [appOrigin])\n}\n"],"mappings":"AAAA,SAAS,iBAAiB;AAC1B,SAAS,gCAAgC;AACzC,SAAS,mBAAmB,+BAA+B;AAE3D,MAAM,8BAA8B;AAE7B,SAAS,yBAAyB,EAAE,UAAU,GAA0B;AAC7E,YAAU,MAAM;AACd,QAAI;AAEJ,QAAI,OAAO,WAAW,QAAQ;AAC5B,aAAO,iBAAiB,WAAW,cAAc;AACjD,aAAO,OAAO,YAAY,wBAAwB,GAAG,EAAE,cAAc,UAAU,CAAC;AAAA,IAClF;AAEA,WAAO,MAAM;AACX,aAAO,oBAAoB,WAAW,cAAc;AACpD,UAAI,sBAAsB,MAAM;AAC9B,eAAO,cAAc,kBAAkB;AACvC,6BAAqB;AAAA,MACvB;AAAA,IACF;AAEA,aAAS,eAAe,OAA2B;AACjD,UACE,MAAM,WAAW,aACjB,MAAM,KAAK,SAAS,kBAAkB,2BACtC;AACA,YAAI,sBAAsB,MAAM;AAC9B,iBAAO,cAAc,kBAAkB;AACvC,+BAAqB;AAAA,QACvB;AAEA,6BAAqB,OAAO,YAAY,MAAM;AAC5C,iBAAO,OAAO;AAAA,YACZ,yBAAyB,EAAE,YAAY,OAAO,SAAS,KAAK,CAAC;AAAA,YAC7D,EAAE,cAAc,UAAU;AAAA,UAC5B;AAAA,QACF,GAAG,2BAA2B;AAAA,MAChC;AAAA,IACF;AAAA,EACF,GAAG,CAAC,SAAS,CAAC;AAChB;","names":[]}
@@ -1,4 +0,0 @@
1
- export declare function useBuilderConnectionPing({ appOrigin }: {
2
- appOrigin: string;
3
- }): void;
4
- //# sourceMappingURL=use-builder-connection-ping.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-builder-connection-ping.d.ts","sourceRoot":"","sources":["../../../../../../src/runtimes/react/components/hooks/use-builder-connection-ping.ts"],"names":[],"mappings":"AAMA,wBAAgB,wBAAwB,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,QAoC5E"}