@makeswift/runtime 0.28.8-canary.9 → 0.28.8

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 (508) hide show
  1. package/dist/cjs/api/api-resources-client.js +3 -0
  2. package/dist/cjs/api/api-resources-client.js.map +1 -1
  3. package/dist/cjs/api/graphql-api-client.js +1 -1
  4. package/dist/cjs/api/rest-api-client.js +85 -43
  5. package/dist/cjs/api/rest-api-client.js.map +1 -1
  6. package/dist/cjs/api/types.js.map +1 -1
  7. package/dist/cjs/api-handler/handlers/manifest.js +1 -1
  8. package/dist/cjs/builder/host-to-builder-actions.js +5 -5
  9. package/dist/cjs/builder/host-to-builder-actions.js.map +1 -1
  10. package/dist/cjs/client/index.js +40 -44
  11. package/dist/cjs/client/index.js.map +1 -1
  12. package/dist/cjs/components/builtin/Form/Form.js.map +1 -1
  13. package/dist/cjs/controls/rich-text/control.js +16 -3
  14. package/dist/cjs/controls/rich-text/control.js.map +1 -1
  15. package/dist/cjs/controls/rich-text/rich-text.js +2 -2
  16. package/dist/cjs/controls/rich-text/rich-text.js.map +1 -1
  17. package/dist/cjs/controls/rich-text-v2/control.js +15 -2
  18. package/dist/cjs/controls/rich-text-v2/control.js.map +1 -1
  19. package/dist/cjs/controls/rich-text-v2/rich-text-v2.js +2 -2
  20. package/dist/cjs/controls/rich-text-v2/rich-text-v2.js.map +1 -1
  21. package/dist/cjs/controls/slot.js.map +1 -1
  22. package/dist/cjs/next/testing/breakpoints.js +3 -15
  23. package/dist/cjs/next/testing/breakpoints.js.map +1 -1
  24. package/dist/cjs/next/testing/element-data.js +3 -82
  25. package/dist/cjs/next/testing/element-data.js.map +1 -1
  26. package/dist/cjs/next/testing/react-runtime.js.map +1 -1
  27. package/dist/cjs/prop-controllers/instances.js +20 -4
  28. package/dist/cjs/prop-controllers/instances.js.map +1 -1
  29. package/dist/cjs/runtimes/react/components/Element.js +53 -24
  30. package/dist/cjs/runtimes/react/components/Element.js.map +1 -1
  31. package/dist/cjs/runtimes/react/components/ElementRegistration.js +32 -11
  32. package/dist/cjs/runtimes/react/components/ElementRegistration.js.map +1 -1
  33. package/dist/cjs/runtimes/react/components/control-instances-context.js +38 -0
  34. package/dist/cjs/runtimes/react/components/control-instances-context.js.map +1 -0
  35. package/dist/cjs/runtimes/react/components/framework-context.js +1 -0
  36. package/dist/cjs/runtimes/react/components/framework-context.js.map +1 -1
  37. package/dist/cjs/runtimes/react/components/resolve-props.js +5 -1
  38. package/dist/cjs/runtimes/react/components/resolve-props.js.map +1 -1
  39. package/dist/cjs/runtimes/react/controls/node-value/editable-node-value.js +42 -0
  40. package/dist/cjs/runtimes/react/controls/node-value/editable-node-value.js.map +1 -0
  41. package/dist/cjs/runtimes/react/controls/node-value/index.js +51 -0
  42. package/dist/cjs/runtimes/react/controls/node-value/index.js.map +1 -0
  43. package/dist/cjs/runtimes/react/controls/rich-text/EditableText/editable-text.js.map +1 -1
  44. package/dist/cjs/runtimes/react/controls/rich-text/rich-text.js +2 -2
  45. package/dist/cjs/runtimes/react/controls/rich-text/rich-text.js.map +1 -1
  46. package/dist/cjs/runtimes/react/controls/slot/index.js +29 -0
  47. package/dist/cjs/runtimes/react/controls/slot/index.js.map +1 -0
  48. package/dist/cjs/runtimes/react/controls/slot/render-slot.js +37 -0
  49. package/dist/cjs/runtimes/react/controls/slot/render-slot.js.map +1 -0
  50. package/dist/cjs/runtimes/react/controls/{slot.js → slot/slot-value.js} +31 -26
  51. package/dist/cjs/runtimes/react/controls/slot/slot-value.js.map +1 -0
  52. package/dist/cjs/runtimes/react/element-imperative-handle.js +2 -2
  53. package/dist/cjs/runtimes/react/element-imperative-handle.js.map +1 -1
  54. package/dist/cjs/runtimes/react/hooks/use-control-instance.js +88 -0
  55. package/dist/cjs/runtimes/react/hooks/use-control-instance.js.map +1 -0
  56. package/dist/cjs/runtimes/react/hooks/use-control-instances.js +2 -12
  57. package/dist/cjs/runtimes/react/hooks/use-control-instances.js.map +1 -1
  58. package/dist/cjs/runtimes/react/hooks/use-disable-register-element.js +3 -3
  59. package/dist/cjs/runtimes/react/hooks/use-disable-register-element.js.map +1 -1
  60. package/dist/cjs/runtimes/react/hooks/use-resolved-props.js +10 -9
  61. package/dist/cjs/runtimes/react/hooks/use-resolved-props.js.map +1 -1
  62. package/dist/cjs/runtimes/react/hooks/use-resolved-value-override.js +58 -0
  63. package/dist/cjs/runtimes/react/hooks/use-resolved-value-override.js.map +1 -0
  64. package/dist/cjs/runtimes/react/hooks/use-selector.js +8 -2
  65. package/dist/cjs/runtimes/react/hooks/use-selector.js.map +1 -1
  66. package/dist/cjs/runtimes/react/testing/index.js +25 -0
  67. package/dist/cjs/runtimes/react/testing/index.js.map +1 -0
  68. package/dist/cjs/runtimes/react/testing/react-provider.js +38 -0
  69. package/dist/cjs/runtimes/react/testing/react-provider.js.map +1 -0
  70. package/dist/cjs/state/actions/index.js +4 -4
  71. package/dist/cjs/state/actions/index.js.map +1 -1
  72. package/dist/cjs/state/actions/internal/action-types.js +34 -0
  73. package/dist/cjs/state/actions/internal/action-types.js.map +1 -0
  74. package/dist/cjs/state/actions/internal/index.js +0 -17
  75. package/dist/cjs/state/actions/internal/index.js.map +1 -1
  76. package/dist/cjs/state/actions/internal/read-only-action-types.js +44 -0
  77. package/dist/cjs/state/actions/internal/read-only-action-types.js.map +1 -0
  78. package/dist/cjs/state/actions/internal/read-only-actions.js +13 -92
  79. package/dist/cjs/state/actions/internal/read-only-actions.js.map +1 -1
  80. package/dist/cjs/state/actions/internal/read-write-action-types.js +44 -0
  81. package/dist/cjs/state/actions/internal/read-write-action-types.js.map +1 -0
  82. package/dist/cjs/state/actions/internal/read-write-actions.js +135 -14
  83. package/dist/cjs/state/actions/internal/read-write-actions.js.map +1 -1
  84. package/dist/cjs/state/api-client/state.js +8 -0
  85. package/dist/cjs/state/api-client/state.js.map +1 -1
  86. package/dist/cjs/state/builder-api/action-types.js +49 -0
  87. package/dist/cjs/state/builder-api/action-types.js.map +1 -0
  88. package/dist/cjs/state/builder-api/actions.js +14 -36
  89. package/dist/cjs/state/builder-api/actions.js.map +1 -1
  90. package/dist/cjs/state/builder-api/proxy.js +2 -1
  91. package/dist/cjs/state/builder-api/proxy.js.map +1 -1
  92. package/dist/cjs/state/host-api/action-types.js +43 -0
  93. package/dist/cjs/state/host-api/action-types.js.map +1 -0
  94. package/dist/cjs/state/{host-api.js → host-api/actions.js} +17 -33
  95. package/dist/cjs/state/host-api/actions.js.map +1 -0
  96. package/dist/cjs/state/host-api/index.js +25 -0
  97. package/dist/cjs/state/host-api/index.js.map +1 -0
  98. package/dist/cjs/state/middleware/read-write/builder-api/index.js +2 -58
  99. package/dist/cjs/state/middleware/read-write/builder-api/index.js.map +1 -1
  100. package/dist/cjs/state/middleware/read-write/builder-api/initialize-connection.js +3 -0
  101. package/dist/cjs/state/middleware/read-write/builder-api/initialize-connection.js.map +1 -1
  102. package/dist/cjs/state/middleware/read-write/builder-api/middleware.js +89 -0
  103. package/dist/cjs/state/middleware/read-write/builder-api/middleware.js.map +1 -0
  104. package/dist/cjs/state/middleware/read-write/builder-api/mount-change-action-buffer.js +72 -0
  105. package/dist/cjs/state/middleware/read-write/builder-api/mount-change-action-buffer.js.map +1 -0
  106. package/dist/cjs/state/middleware/read-write/measure-box-models.js +3 -3
  107. package/dist/cjs/state/middleware/read-write/measure-box-models.js.map +1 -1
  108. package/dist/cjs/state/middleware/read-write/prop-controller-handles.js +10 -47
  109. package/dist/cjs/state/middleware/read-write/prop-controller-handles.js.map +1 -1
  110. package/dist/cjs/state/modules/api-resources.js +5 -5
  111. package/dist/cjs/state/modules/api-resources.js.map +1 -1
  112. package/dist/cjs/state/modules/breakpoints.js +4 -4
  113. package/dist/cjs/state/modules/breakpoints.js.map +1 -1
  114. package/dist/cjs/state/modules/components-meta.js +3 -3
  115. package/dist/cjs/state/modules/components-meta.js.map +1 -1
  116. package/dist/cjs/state/modules/element-trees.js +5 -5
  117. package/dist/cjs/state/modules/element-trees.js.map +1 -1
  118. package/dist/cjs/state/modules/is-in-builder.js +2 -2
  119. package/dist/cjs/state/modules/is-in-builder.js.map +1 -1
  120. package/dist/cjs/state/modules/is-read-only.js +2 -2
  121. package/dist/cjs/state/modules/is-read-only.js.map +1 -1
  122. package/dist/cjs/state/modules/locale.js +2 -2
  123. package/dist/cjs/state/modules/locale.js.map +1 -1
  124. package/dist/cjs/state/modules/localized-resources-map.js +3 -3
  125. package/dist/cjs/state/modules/localized-resources-map.js.map +1 -1
  126. package/dist/cjs/state/modules/{prop-controllers.js → prop-controller-descriptors.js} +7 -7
  127. package/dist/cjs/state/modules/prop-controller-descriptors.js.map +1 -0
  128. package/dist/cjs/state/modules/react-components.js +3 -3
  129. package/dist/cjs/state/modules/react-components.js.map +1 -1
  130. package/dist/cjs/state/modules/read-write/box-models.js +5 -5
  131. package/dist/cjs/state/modules/read-write/box-models.js.map +1 -1
  132. package/dist/cjs/state/modules/read-write/element-imperative-handles.js +3 -3
  133. package/dist/cjs/state/modules/read-write/element-imperative-handles.js.map +1 -1
  134. package/dist/cjs/state/modules/{prop-controller-handles.js → read-write/prop-controllers.js} +5 -5
  135. package/dist/cjs/state/modules/read-write/prop-controllers.js.map +1 -0
  136. package/dist/cjs/state/modules/read-write/resolved-value-overrides.js +70 -0
  137. package/dist/cjs/state/modules/read-write/resolved-value-overrides.js.map +1 -0
  138. package/dist/cjs/state/read-only-state.js +9 -44
  139. package/dist/cjs/state/read-only-state.js.map +1 -1
  140. package/dist/cjs/state/read-write-state.js +61 -1
  141. package/dist/cjs/state/read-write-state.js.map +1 -1
  142. package/dist/cjs/state/shared-api/action-types.js +33 -0
  143. package/dist/cjs/state/shared-api/action-types.js.map +1 -0
  144. package/dist/cjs/state/{shared-api.js → shared-api/actions.js} +8 -14
  145. package/dist/cjs/state/shared-api/actions.js.map +1 -0
  146. package/dist/cjs/state/shared-api/index.js +25 -0
  147. package/dist/cjs/state/shared-api/index.js.map +1 -0
  148. package/dist/cjs/state/store.js +5 -3
  149. package/dist/cjs/state/store.js.map +1 -1
  150. package/dist/cjs/state/translations/get.js.map +1 -1
  151. package/dist/cjs/state/translations/merge.js.map +1 -1
  152. package/dist/cjs/state/unified-state.js +12 -0
  153. package/dist/cjs/state/unified-state.js.map +1 -1
  154. package/dist/cjs/testing/breakpoints.js +35 -0
  155. package/dist/cjs/testing/breakpoints.js.map +1 -0
  156. package/dist/cjs/testing/element-data.js +102 -0
  157. package/dist/cjs/testing/element-data.js.map +1 -0
  158. package/dist/cjs/testing/read-write-state.js +32 -0
  159. package/dist/cjs/testing/read-write-state.js.map +1 -0
  160. package/dist/cjs/translations/index.js.map +1 -1
  161. package/dist/esm/api/api-resources-client.js +3 -0
  162. package/dist/esm/api/api-resources-client.js.map +1 -1
  163. package/dist/esm/api/graphql-api-client.js +1 -1
  164. package/dist/esm/api/rest-api-client.js +84 -43
  165. package/dist/esm/api/rest-api-client.js.map +1 -1
  166. package/dist/esm/api/types.js.map +1 -1
  167. package/dist/esm/api-handler/handlers/manifest.js +1 -1
  168. package/dist/esm/builder/host-to-builder-actions.js +2 -4
  169. package/dist/esm/builder/host-to-builder-actions.js.map +1 -1
  170. package/dist/esm/client/index.js +45 -45
  171. package/dist/esm/client/index.js.map +1 -1
  172. package/dist/esm/components/builtin/Form/Form.js.map +1 -1
  173. package/dist/esm/controls/rich-text/control.js +16 -3
  174. package/dist/esm/controls/rich-text/control.js.map +1 -1
  175. package/dist/esm/controls/rich-text/rich-text.js +2 -2
  176. package/dist/esm/controls/rich-text/rich-text.js.map +1 -1
  177. package/dist/esm/controls/rich-text-v2/control.js +15 -2
  178. package/dist/esm/controls/rich-text-v2/control.js.map +1 -1
  179. package/dist/esm/controls/rich-text-v2/rich-text-v2.js +2 -2
  180. package/dist/esm/controls/rich-text-v2/rich-text-v2.js.map +1 -1
  181. package/dist/esm/controls/slot.js.map +1 -1
  182. package/dist/esm/next/testing/breakpoints.js +1 -8
  183. package/dist/esm/next/testing/breakpoints.js.map +1 -1
  184. package/dist/esm/next/testing/element-data.js +1 -75
  185. package/dist/esm/next/testing/element-data.js.map +1 -1
  186. package/dist/esm/next/testing/react-runtime.js.map +1 -1
  187. package/dist/esm/prop-controllers/instances.js +20 -4
  188. package/dist/esm/prop-controllers/instances.js.map +1 -1
  189. package/dist/esm/runtimes/react/components/Element.js +51 -25
  190. package/dist/esm/runtimes/react/components/Element.js.map +1 -1
  191. package/dist/esm/runtimes/react/components/ElementRegistration.js +37 -12
  192. package/dist/esm/runtimes/react/components/ElementRegistration.js.map +1 -1
  193. package/dist/esm/runtimes/react/components/control-instances-context.js +13 -0
  194. package/dist/esm/runtimes/react/components/control-instances-context.js.map +1 -0
  195. package/dist/esm/runtimes/react/components/framework-context.js +1 -0
  196. package/dist/esm/runtimes/react/components/framework-context.js.map +1 -1
  197. package/dist/esm/runtimes/react/components/resolve-props.js +5 -1
  198. package/dist/esm/runtimes/react/components/resolve-props.js.map +1 -1
  199. package/dist/esm/runtimes/react/controls/node-value/editable-node-value.js +21 -0
  200. package/dist/esm/runtimes/react/controls/node-value/editable-node-value.js.map +1 -0
  201. package/dist/esm/runtimes/react/controls/node-value/index.js +17 -0
  202. package/dist/esm/runtimes/react/controls/node-value/index.js.map +1 -0
  203. package/dist/esm/runtimes/react/controls/rich-text/EditableText/editable-text.js.map +1 -1
  204. package/dist/esm/runtimes/react/controls/rich-text/rich-text.js +1 -1
  205. package/dist/esm/runtimes/react/controls/rich-text/rich-text.js.map +1 -1
  206. package/dist/esm/runtimes/react/controls/slot/index.js +5 -0
  207. package/dist/esm/runtimes/react/controls/slot/index.js.map +1 -0
  208. package/dist/esm/runtimes/react/controls/slot/render-slot.js +13 -0
  209. package/dist/esm/runtimes/react/controls/slot/render-slot.js.map +1 -0
  210. package/dist/esm/runtimes/react/controls/{slot.js → slot/slot-value.js} +34 -23
  211. package/dist/esm/runtimes/react/controls/slot/slot-value.js.map +1 -0
  212. package/dist/esm/runtimes/react/element-imperative-handle.js +1 -1
  213. package/dist/esm/runtimes/react/element-imperative-handle.js.map +1 -1
  214. package/dist/esm/runtimes/react/hooks/use-control-instance.js +62 -0
  215. package/dist/esm/runtimes/react/hooks/use-control-instance.js.map +1 -0
  216. package/dist/esm/runtimes/react/hooks/use-control-instances.js +1 -11
  217. package/dist/esm/runtimes/react/hooks/use-control-instances.js.map +1 -1
  218. package/dist/esm/runtimes/react/hooks/use-disable-register-element.js +2 -2
  219. package/dist/esm/runtimes/react/hooks/use-disable-register-element.js.map +1 -1
  220. package/dist/esm/runtimes/react/hooks/use-resolved-props.js +10 -9
  221. package/dist/esm/runtimes/react/hooks/use-resolved-props.js.map +1 -1
  222. package/dist/esm/runtimes/react/hooks/use-resolved-value-override.js +35 -0
  223. package/dist/esm/runtimes/react/hooks/use-resolved-value-override.js.map +1 -0
  224. package/dist/esm/runtimes/react/hooks/use-selector.js +8 -2
  225. package/dist/esm/runtimes/react/hooks/use-selector.js.map +1 -1
  226. package/dist/esm/runtimes/react/testing/index.js +3 -0
  227. package/dist/esm/runtimes/react/testing/index.js.map +1 -0
  228. package/dist/esm/runtimes/react/testing/react-provider.js +14 -0
  229. package/dist/esm/runtimes/react/testing/react-provider.js.map +1 -0
  230. package/dist/esm/state/actions/index.js +2 -2
  231. package/dist/esm/state/actions/index.js.map +1 -1
  232. package/dist/esm/state/actions/internal/action-types.js +10 -0
  233. package/dist/esm/state/actions/internal/action-types.js.map +1 -0
  234. package/dist/esm/state/actions/internal/index.js +0 -9
  235. package/dist/esm/state/actions/internal/index.js.map +1 -1
  236. package/dist/esm/state/actions/internal/read-only-action-types.js +20 -0
  237. package/dist/esm/state/actions/internal/read-only-action-types.js.map +1 -0
  238. package/dist/esm/state/actions/internal/read-only-actions.js +1 -73
  239. package/dist/esm/state/actions/internal/read-only-actions.js.map +1 -1
  240. package/dist/esm/state/actions/internal/read-write-action-types.js +20 -0
  241. package/dist/esm/state/actions/internal/read-write-action-types.js.map +1 -0
  242. package/dist/esm/state/actions/internal/read-write-actions.js +108 -8
  243. package/dist/esm/state/actions/internal/read-write-actions.js.map +1 -1
  244. package/dist/esm/state/api-client/state.js +7 -0
  245. package/dist/esm/state/api-client/state.js.map +1 -1
  246. package/dist/esm/state/builder-api/action-types.js +25 -0
  247. package/dist/esm/state/builder-api/action-types.js.map +1 -0
  248. package/dist/esm/state/builder-api/actions.js +1 -24
  249. package/dist/esm/state/builder-api/actions.js.map +1 -1
  250. package/dist/esm/state/builder-api/proxy.js +2 -1
  251. package/dist/esm/state/builder-api/proxy.js.map +1 -1
  252. package/dist/esm/state/host-api/action-types.js +19 -0
  253. package/dist/esm/state/host-api/action-types.js.map +1 -0
  254. package/dist/esm/state/{host-api.js → host-api/actions.js} +2 -17
  255. package/dist/esm/state/host-api/actions.js.map +1 -0
  256. package/dist/esm/state/host-api/index.js +3 -0
  257. package/dist/esm/state/host-api/index.js.map +1 -0
  258. package/dist/esm/state/middleware/read-write/builder-api/index.js +1 -57
  259. package/dist/esm/state/middleware/read-write/builder-api/index.js.map +1 -1
  260. package/dist/esm/state/middleware/read-write/builder-api/initialize-connection.js +3 -0
  261. package/dist/esm/state/middleware/read-write/builder-api/initialize-connection.js.map +1 -1
  262. package/dist/esm/state/middleware/read-write/builder-api/middleware.js +65 -0
  263. package/dist/esm/state/middleware/read-write/builder-api/middleware.js.map +1 -0
  264. package/dist/esm/state/middleware/read-write/builder-api/mount-change-action-buffer.js +48 -0
  265. package/dist/esm/state/middleware/read-write/builder-api/mount-change-action-buffer.js.map +1 -0
  266. package/dist/esm/state/middleware/read-write/measure-box-models.js +3 -3
  267. package/dist/esm/state/middleware/read-write/measure-box-models.js.map +1 -1
  268. package/dist/esm/state/middleware/read-write/prop-controller-handles.js +13 -47
  269. package/dist/esm/state/middleware/read-write/prop-controller-handles.js.map +1 -1
  270. package/dist/esm/state/modules/api-resources.js +2 -2
  271. package/dist/esm/state/modules/api-resources.js.map +1 -1
  272. package/dist/esm/state/modules/breakpoints.js +2 -2
  273. package/dist/esm/state/modules/breakpoints.js.map +1 -1
  274. package/dist/esm/state/modules/components-meta.js +1 -1
  275. package/dist/esm/state/modules/components-meta.js.map +1 -1
  276. package/dist/esm/state/modules/element-trees.js +2 -2
  277. package/dist/esm/state/modules/element-trees.js.map +1 -1
  278. package/dist/esm/state/modules/is-in-builder.js +1 -1
  279. package/dist/esm/state/modules/is-in-builder.js.map +1 -1
  280. package/dist/esm/state/modules/is-read-only.js +1 -1
  281. package/dist/esm/state/modules/is-read-only.js.map +1 -1
  282. package/dist/esm/state/modules/locale.js +1 -1
  283. package/dist/esm/state/modules/locale.js.map +1 -1
  284. package/dist/esm/state/modules/localized-resources-map.js +1 -1
  285. package/dist/esm/state/modules/localized-resources-map.js.map +1 -1
  286. package/dist/esm/state/modules/{prop-controllers.js → prop-controller-descriptors.js} +2 -2
  287. package/dist/esm/state/modules/prop-controller-descriptors.js.map +1 -0
  288. package/dist/esm/state/modules/react-components.js +1 -1
  289. package/dist/esm/state/modules/react-components.js.map +1 -1
  290. package/dist/esm/state/modules/read-write/box-models.js +2 -2
  291. package/dist/esm/state/modules/read-write/box-models.js.map +1 -1
  292. package/dist/esm/state/modules/read-write/element-imperative-handles.js +3 -3
  293. package/dist/esm/state/modules/read-write/element-imperative-handles.js.map +1 -1
  294. package/dist/esm/state/modules/{prop-controller-handles.js → read-write/prop-controllers.js} +2 -2
  295. package/dist/esm/state/modules/read-write/prop-controllers.js.map +1 -0
  296. package/dist/esm/state/modules/read-write/resolved-value-overrides.js +43 -0
  297. package/dist/esm/state/modules/read-write/resolved-value-overrides.js.map +1 -0
  298. package/dist/esm/state/read-only-state.js +9 -41
  299. package/dist/esm/state/read-only-state.js.map +1 -1
  300. package/dist/esm/state/read-write-state.js +56 -1
  301. package/dist/esm/state/read-write-state.js.map +1 -1
  302. package/dist/esm/state/shared-api/action-types.js +9 -0
  303. package/dist/esm/state/shared-api/action-types.js.map +1 -0
  304. package/dist/esm/state/{shared-api.js → shared-api/actions.js} +2 -7
  305. package/dist/esm/state/shared-api/actions.js.map +1 -0
  306. package/dist/esm/state/shared-api/index.js +3 -0
  307. package/dist/esm/state/shared-api/index.js.map +1 -0
  308. package/dist/esm/state/store.js +3 -1
  309. package/dist/esm/state/store.js.map +1 -1
  310. package/dist/esm/state/translations/get.js.map +1 -1
  311. package/dist/esm/state/translations/merge.js +3 -1
  312. package/dist/esm/state/translations/merge.js.map +1 -1
  313. package/dist/esm/state/unified-state.js +4 -0
  314. package/dist/esm/state/unified-state.js.map +1 -1
  315. package/dist/esm/testing/breakpoints.js +9 -0
  316. package/dist/esm/testing/breakpoints.js.map +1 -0
  317. package/dist/esm/testing/element-data.js +76 -0
  318. package/dist/esm/testing/element-data.js.map +1 -0
  319. package/dist/esm/testing/read-write-state.js +8 -0
  320. package/dist/esm/testing/read-write-state.js.map +1 -0
  321. package/dist/esm/translations/index.js.map +1 -1
  322. package/dist/types/api/__tests__/rest-api-client.retries.test.d.ts +2 -0
  323. package/dist/types/api/__tests__/rest-api-client.retries.test.d.ts.map +1 -0
  324. package/dist/types/api/api-resources-client.d.ts +1 -0
  325. package/dist/types/api/api-resources-client.d.ts.map +1 -1
  326. package/dist/types/api/rest-api-client.d.ts +4 -0
  327. package/dist/types/api/rest-api-client.d.ts.map +1 -1
  328. package/dist/types/api/schema/page-pathname-slice.d.ts +2 -2
  329. package/dist/types/api/types.d.ts +1 -1
  330. package/dist/types/api/types.d.ts.map +1 -1
  331. package/dist/types/api-handler/handlers/webhook/diff-projection.d.ts +6 -6
  332. package/dist/types/api-handler/handlers/webhook/types.d.ts +20 -20
  333. package/dist/types/builder/host-to-builder-actions.d.ts.map +1 -1
  334. package/dist/types/client/index.d.ts.map +1 -1
  335. package/dist/types/components/builtin/Form/Form.d.ts +1 -1
  336. package/dist/types/components/builtin/Form/Form.d.ts.map +1 -1
  337. package/dist/types/components/hooks/useIsomorphicLayoutEffect.d.ts +2 -2
  338. package/dist/types/components/hooks/useIsomorphicLayoutEffect.d.ts.map +1 -1
  339. package/dist/types/controls/__tests__/slot.test.d.ts +3 -0
  340. package/dist/types/controls/__tests__/slot.test.d.ts.map +1 -0
  341. package/dist/types/controls/rich-text/control.d.ts +5 -1
  342. package/dist/types/controls/rich-text/control.d.ts.map +1 -1
  343. package/dist/types/controls/rich-text/rich-text.d.ts +2 -2
  344. package/dist/types/controls/rich-text/rich-text.d.ts.map +1 -1
  345. package/dist/types/controls/rich-text-v2/control.d.ts +6 -2
  346. package/dist/types/controls/rich-text-v2/control.d.ts.map +1 -1
  347. package/dist/types/controls/rich-text-v2/rich-text-v2.d.ts +2 -2
  348. package/dist/types/controls/rich-text-v2/rich-text-v2.d.ts.map +1 -1
  349. package/dist/types/controls/slot.d.ts +1 -1
  350. package/dist/types/controls/slot.d.ts.map +1 -1
  351. package/dist/types/locale.d.ts +1 -1
  352. package/dist/types/next/testing/breakpoints.d.ts +1 -3
  353. package/dist/types/next/testing/breakpoints.d.ts.map +1 -1
  354. package/dist/types/next/testing/element-data.d.ts +1 -54
  355. package/dist/types/next/testing/element-data.d.ts.map +1 -1
  356. package/dist/types/next/testing/react-runtime.d.ts.map +1 -1
  357. package/dist/types/prop-controllers/instances.d.ts +9 -3
  358. package/dist/types/prop-controllers/instances.d.ts.map +1 -1
  359. package/dist/types/runtimes/react/components/Element.d.ts.map +1 -1
  360. package/dist/types/runtimes/react/components/ElementRegistration.d.ts +4 -4
  361. package/dist/types/runtimes/react/components/ElementRegistration.d.ts.map +1 -1
  362. package/dist/types/runtimes/react/components/__tests__/element-registration.test.d.ts +3 -0
  363. package/dist/types/runtimes/react/components/__tests__/element-registration.test.d.ts.map +1 -0
  364. package/dist/types/runtimes/react/components/control-instances-context.d.ts +9 -0
  365. package/dist/types/runtimes/react/components/control-instances-context.d.ts.map +1 -0
  366. package/dist/types/runtimes/react/components/framework-context.d.ts.map +1 -1
  367. package/dist/types/runtimes/react/components/resolve-props.d.ts.map +1 -1
  368. package/dist/types/runtimes/react/controls/node-value/editable-node-value.d.ts +7 -0
  369. package/dist/types/runtimes/react/controls/node-value/editable-node-value.d.ts.map +1 -0
  370. package/dist/types/runtimes/react/controls/node-value/index.d.ts +6 -0
  371. package/dist/types/runtimes/react/controls/node-value/index.d.ts.map +1 -0
  372. package/dist/types/runtimes/react/controls/rich-text/EditableText/editable-text.d.ts +1 -1
  373. package/dist/types/runtimes/react/controls/rich-text/EditableText/editable-text.d.ts.map +1 -1
  374. package/dist/types/runtimes/react/controls/slot/index.d.ts +2 -0
  375. package/dist/types/runtimes/react/controls/slot/index.d.ts.map +1 -0
  376. package/dist/types/runtimes/react/controls/slot/render-slot.d.ts +9 -0
  377. package/dist/types/runtimes/react/controls/slot/render-slot.d.ts.map +1 -0
  378. package/dist/types/runtimes/react/controls/{slot.d.ts → slot/slot-value.d.ts} +7 -7
  379. package/dist/types/runtimes/react/controls/slot/slot-value.d.ts.map +1 -0
  380. package/dist/types/runtimes/react/element-imperative-handle.d.ts +1 -1
  381. package/dist/types/runtimes/react/element-imperative-handle.d.ts.map +1 -1
  382. package/dist/types/runtimes/react/hooks/__tests__/use-control-instance.test.d.ts +3 -0
  383. package/dist/types/runtimes/react/hooks/__tests__/use-control-instance.test.d.ts.map +1 -0
  384. package/dist/types/runtimes/react/hooks/use-control-instance.d.ts +7 -0
  385. package/dist/types/runtimes/react/hooks/use-control-instance.d.ts.map +1 -0
  386. package/dist/types/runtimes/react/hooks/use-control-instances.d.ts +1 -2
  387. package/dist/types/runtimes/react/hooks/use-control-instances.d.ts.map +1 -1
  388. package/dist/types/runtimes/react/hooks/use-disable-register-element.d.ts +1 -1
  389. package/dist/types/runtimes/react/hooks/use-disable-register-element.d.ts.map +1 -1
  390. package/dist/types/runtimes/react/hooks/use-resolved-props.d.ts +4 -3
  391. package/dist/types/runtimes/react/hooks/use-resolved-props.d.ts.map +1 -1
  392. package/dist/types/runtimes/react/hooks/use-resolved-value-override.d.ts +5 -0
  393. package/dist/types/runtimes/react/hooks/use-resolved-value-override.d.ts.map +1 -0
  394. package/dist/types/runtimes/react/hooks/use-selector.d.ts +2 -5
  395. package/dist/types/runtimes/react/hooks/use-selector.d.ts.map +1 -1
  396. package/dist/types/runtimes/react/hooks/use-store.d.ts +2 -4
  397. package/dist/types/runtimes/react/hooks/use-store.d.ts.map +1 -1
  398. package/dist/types/runtimes/react/testing/index.d.ts +3 -0
  399. package/dist/types/runtimes/react/testing/index.d.ts.map +1 -0
  400. package/dist/types/runtimes/react/testing/react-provider.d.ts +8 -0
  401. package/dist/types/runtimes/react/testing/react-provider.d.ts.map +1 -0
  402. package/dist/types/slate/InlineModePlugin/index.d.ts +1 -1
  403. package/dist/types/slate/LinkPlugin/getValue.d.ts.map +1 -1
  404. package/dist/types/slate/LinkPlugin/index.d.ts.map +1 -1
  405. package/dist/types/slate/TypographyPlugin/getValue.d.ts.map +1 -1
  406. package/dist/types/slate/TypographyPlugin/index.d.ts.map +1 -1
  407. package/dist/types/state/__tests__/test-store.d.ts +2 -4
  408. package/dist/types/state/__tests__/test-store.d.ts.map +1 -1
  409. package/dist/types/state/actions/index.d.ts +9 -6
  410. package/dist/types/state/actions/index.d.ts.map +1 -1
  411. package/dist/types/state/actions/internal/action-types.d.ts +29 -0
  412. package/dist/types/state/actions/internal/action-types.d.ts.map +1 -0
  413. package/dist/types/state/actions/internal/index.d.ts +0 -25
  414. package/dist/types/state/actions/internal/index.d.ts.map +1 -1
  415. package/dist/types/state/actions/internal/read-only-action-types.d.ts +15 -0
  416. package/dist/types/state/actions/internal/read-only-action-types.d.ts.map +1 -0
  417. package/dist/types/state/actions/internal/read-only-actions.d.ts +3 -76
  418. package/dist/types/state/actions/internal/read-only-actions.d.ts.map +1 -1
  419. package/dist/types/state/actions/internal/read-write-action-types.d.ts +17 -0
  420. package/dist/types/state/actions/internal/read-write-action-types.d.ts.map +1 -0
  421. package/dist/types/state/actions/internal/read-write-actions.d.ts +89 -8
  422. package/dist/types/state/actions/internal/read-write-actions.d.ts.map +1 -1
  423. package/dist/types/state/api-client/state.d.ts +1 -0
  424. package/dist/types/state/api-client/state.d.ts.map +1 -1
  425. package/dist/types/state/builder-api/action-types.d.ts +22 -0
  426. package/dist/types/state/builder-api/action-types.d.ts.map +1 -0
  427. package/dist/types/state/builder-api/actions.d.ts +3 -23
  428. package/dist/types/state/builder-api/actions.d.ts.map +1 -1
  429. package/dist/types/state/builder-api/proxy.d.ts.map +1 -1
  430. package/dist/types/state/host-api/action-types.d.ts +17 -0
  431. package/dist/types/state/host-api/action-types.d.ts.map +1 -0
  432. package/dist/types/state/{host-api.d.ts → host-api/actions.d.ts} +7 -22
  433. package/dist/types/state/host-api/actions.d.ts.map +1 -0
  434. package/dist/types/state/host-api/index.d.ts +3 -0
  435. package/dist/types/state/host-api/index.d.ts.map +1 -0
  436. package/dist/types/state/middleware/read-write/__tests__/fixtures/operations.d.ts.map +1 -0
  437. package/dist/types/state/middleware/read-write/__tests__/fixtures/root-elements.d.ts.map +1 -0
  438. package/dist/types/state/middleware/read-write/__tests__/prop-controller-handles.test.d.ts +2 -0
  439. package/dist/types/state/middleware/read-write/__tests__/prop-controller-handles.test.d.ts.map +1 -0
  440. package/dist/types/state/middleware/read-write/__tests__/update-element-tree.test.d.ts +2 -0
  441. package/dist/types/state/middleware/read-write/__tests__/update-element-tree.test.d.ts.map +1 -0
  442. package/dist/types/state/middleware/read-write/builder-api/__tests__/middleware.test.d.ts +2 -0
  443. package/dist/types/state/middleware/read-write/builder-api/__tests__/middleware.test.d.ts.map +1 -0
  444. package/dist/types/state/middleware/read-write/builder-api/__tests__/mount-change-action-buffer.test.d.ts +2 -0
  445. package/dist/types/state/middleware/read-write/builder-api/__tests__/mount-change-action-buffer.test.d.ts.map +1 -0
  446. package/dist/types/state/middleware/read-write/builder-api/index.d.ts +1 -4
  447. package/dist/types/state/middleware/read-write/builder-api/index.d.ts.map +1 -1
  448. package/dist/types/state/middleware/read-write/builder-api/initialize-connection.d.ts.map +1 -1
  449. package/dist/types/state/middleware/read-write/builder-api/middleware.d.ts +5 -0
  450. package/dist/types/state/middleware/read-write/builder-api/middleware.d.ts.map +1 -0
  451. package/dist/types/state/middleware/read-write/builder-api/mount-change-action-buffer.d.ts +28 -0
  452. package/dist/types/state/middleware/read-write/builder-api/mount-change-action-buffer.d.ts.map +1 -0
  453. package/dist/types/state/middleware/read-write/prop-controller-handles.d.ts.map +1 -1
  454. package/dist/types/state/modules/element-trees.d.ts +1 -1
  455. package/dist/types/state/modules/element-trees.d.ts.map +1 -1
  456. package/dist/types/state/modules/{prop-controllers.d.ts → prop-controller-descriptors.d.ts} +1 -1
  457. package/dist/types/state/modules/prop-controller-descriptors.d.ts.map +1 -0
  458. package/dist/types/state/modules/{prop-controller-handles.d.ts → read-write/prop-controllers.d.ts} +4 -4
  459. package/dist/types/state/modules/{prop-controller-handles.d.ts.map → read-write/prop-controllers.d.ts.map} +1 -1
  460. package/dist/types/state/modules/read-write/resolved-value-overrides.d.ts +15 -0
  461. package/dist/types/state/modules/read-write/resolved-value-overrides.d.ts.map +1 -0
  462. package/dist/types/state/read-only-state.d.ts +6 -70
  463. package/dist/types/state/read-only-state.d.ts.map +1 -1
  464. package/dist/types/state/read-write-state.d.ts +74 -4
  465. package/dist/types/state/read-write-state.d.ts.map +1 -1
  466. package/dist/types/state/shared-api/action-types.d.ts +6 -0
  467. package/dist/types/state/shared-api/action-types.d.ts.map +1 -0
  468. package/dist/types/state/{shared-api.d.ts → shared-api/actions.d.ts} +3 -7
  469. package/dist/types/state/shared-api/actions.d.ts.map +1 -0
  470. package/dist/types/state/shared-api/index.d.ts +3 -0
  471. package/dist/types/state/shared-api/index.d.ts.map +1 -0
  472. package/dist/types/state/store.d.ts +4 -8
  473. package/dist/types/state/store.d.ts.map +1 -1
  474. package/dist/types/state/translations/get.d.ts +1 -1
  475. package/dist/types/state/translations/get.d.ts.map +1 -1
  476. package/dist/types/state/translations/merge.d.ts +1 -1
  477. package/dist/types/state/translations/merge.d.ts.map +1 -1
  478. package/dist/types/state/unified-state.d.ts +2 -0
  479. package/dist/types/state/unified-state.d.ts.map +1 -1
  480. package/dist/types/testing/breakpoints.d.ts +4 -0
  481. package/dist/types/testing/breakpoints.d.ts.map +1 -0
  482. package/dist/types/testing/element-data.d.ts +59 -0
  483. package/dist/types/testing/element-data.d.ts.map +1 -0
  484. package/dist/types/testing/read-write-state.d.ts +3 -0
  485. package/dist/types/testing/read-write-state.d.ts.map +1 -0
  486. package/dist/types/translations/index.d.ts +1 -1
  487. package/dist/types/translations/index.d.ts.map +1 -1
  488. package/package.json +7 -5
  489. package/dist/cjs/runtimes/react/controls/slot.js.map +0 -1
  490. package/dist/cjs/state/host-api.js.map +0 -1
  491. package/dist/cjs/state/modules/prop-controller-handles.js.map +0 -1
  492. package/dist/cjs/state/modules/prop-controllers.js.map +0 -1
  493. package/dist/cjs/state/shared-api.js.map +0 -1
  494. package/dist/esm/runtimes/react/controls/slot.js.map +0 -1
  495. package/dist/esm/state/host-api.js.map +0 -1
  496. package/dist/esm/state/modules/prop-controller-handles.js.map +0 -1
  497. package/dist/esm/state/modules/prop-controllers.js.map +0 -1
  498. package/dist/esm/state/shared-api.js.map +0 -1
  499. package/dist/types/runtimes/react/controls/slot.d.ts.map +0 -1
  500. package/dist/types/state/__tests__/fixtures/operations.d.ts.map +0 -1
  501. package/dist/types/state/__tests__/fixtures/root-elements.d.ts.map +0 -1
  502. package/dist/types/state/__tests__/react-builder-preview.test.d.ts +0 -2
  503. package/dist/types/state/__tests__/react-builder-preview.test.d.ts.map +0 -1
  504. package/dist/types/state/host-api.d.ts.map +0 -1
  505. package/dist/types/state/modules/prop-controllers.d.ts.map +0 -1
  506. package/dist/types/state/shared-api.d.ts.map +0 -1
  507. /package/dist/types/state/{__tests__ → middleware/read-write/__tests__}/fixtures/operations.d.ts +0 -0
  508. /package/dist/types/state/{__tests__ → middleware/read-write/__tests__}/fixtures/root-elements.d.ts +0 -0
@@ -50,6 +50,9 @@ class ApiResourcesClient {
50
50
  this.store = store;
51
51
  this.subscribe = this.store.subscribe;
52
52
  }
53
+ get cacheData() {
54
+ return ApiClientState.getSerializedState(this.store.getState());
55
+ }
53
56
  async fetchSwatch(swatchId) {
54
57
  const fetch = (id, version) => this.fetchSwatchImpl(id, version);
55
58
  return await this.store.dispatch((0, import_fetch_api_resource.fetchAPIResource)(import_types.APIResourceType.Swatch, swatchId, fetch));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/api/api-resources-client.ts"],"sourcesContent":["import { type FetchableValue } from '@makeswift/controls'\n\nimport { type Store as ApiClientStore } from '../state/api-client/store'\nimport * as ApiClientState from '../state/api-client/state'\nimport { fetchAPIResource } from '../state/api-client/fetch-api-resource'\n\nimport {\n type File,\n type GlobalElement,\n type LocalizedGlobalElement,\n type Page,\n type PagePathnameSlice,\n type Site,\n type Snippet,\n type Swatch,\n type Table,\n type Typography,\n APIResourceType,\n} from './types'\n\nimport { type SiteVersion } from './site-version'\n\nexport type CacheData = ApiClientState.SerializedState\n\nexport const CacheData = {\n empty(): CacheData {\n return {\n apiResources: {},\n localizedResourcesMap: {},\n }\n },\n}\n\nexport abstract class ApiResourcesClient {\n readonly store: ApiClientStore\n readonly subscribe: ApiClientStore['subscribe']\n\n constructor({ store }: { store: ApiClientStore }) {\n this.store = store\n this.subscribe = this.store.subscribe\n }\n\n async fetchSwatch(swatchId: string): Promise<Swatch | null> {\n const fetch = (id: string, version: SiteVersion | null) => this.fetchSwatchImpl(id, version)\n\n return await this.store.dispatch(fetchAPIResource(APIResourceType.Swatch, swatchId, fetch))\n }\n\n readSwatch(swatchId: string): Swatch | null {\n return ApiClientState.getAPIResource(this.store.getState(), APIResourceType.Swatch, swatchId)\n }\n\n resolveSwatch(swatchId: string | undefined): FetchableValue<Swatch | null> {\n return this.resolveResource(APIResourceType.Swatch, {\n id: swatchId,\n read: id => this.readSwatch(id),\n fetch: id => this.fetchSwatch(id),\n })\n }\n\n async fetchFile(fileId: string): Promise<File | null> {\n const fetch = (id: string, version: SiteVersion | null) => this.fetchFileImpl(id, version)\n\n return await this.store.dispatch(fetchAPIResource(APIResourceType.File, fileId, fetch))\n }\n\n readFile(fileId: string): File | null {\n return ApiClientState.getAPIResource(this.store.getState(), APIResourceType.File, fileId)\n }\n\n resolveFile(fileId: string | undefined): FetchableValue<File | null> {\n return this.resolveResource(APIResourceType.File, {\n id: fileId,\n read: id => this.readFile(id),\n fetch: id => this.fetchFile(id),\n })\n }\n\n async fetchTypography(typographyId: string): Promise<Typography | null> {\n const fetch = (id: string, version: SiteVersion | null) => this.fetchTypographyImpl(id, version)\n\n return await this.store.dispatch(\n fetchAPIResource(APIResourceType.Typography, typographyId, fetch),\n )\n }\n\n readTypography(typographyId: string): Typography | null {\n return ApiClientState.getAPIResource(\n this.store.getState(),\n APIResourceType.Typography,\n typographyId,\n )\n }\n\n resolveTypography(typographyId: string | undefined): FetchableValue<Typography | null> {\n return this.resolveResource(APIResourceType.Typography, {\n id: typographyId,\n read: id => this.readTypography(id),\n fetch: id => this.fetchTypography(id),\n })\n }\n\n async fetchGlobalElement(globalElementId: string): Promise<GlobalElement | null> {\n const fetch = (id: string, version: SiteVersion | null) =>\n this.fetchGlobalElementImpl(id, version)\n\n return await this.store.dispatch(\n fetchAPIResource(APIResourceType.GlobalElement, globalElementId, fetch),\n )\n }\n\n readGlobalElement(globalElementId: string): GlobalElement | null {\n return ApiClientState.getAPIResource(\n this.store.getState(),\n APIResourceType.GlobalElement,\n globalElementId,\n )\n }\n\n async fetchLocalizedGlobalElement({\n globalElementId,\n locale,\n }: {\n globalElementId: string\n locale: string\n }): Promise<LocalizedGlobalElement | null> {\n const fetch = (id: string, version: SiteVersion | null, locale: string | null | undefined) => {\n if (locale == null) throw new Error('Locale is required to fetch LocalizedGlobalElement')\n return this.fetchLocalizedGlobalElementImpl(id, version, locale)\n }\n\n return await this.store.dispatch(\n fetchAPIResource(APIResourceType.LocalizedGlobalElement, globalElementId, fetch, locale),\n )\n }\n\n readLocalizedGlobalElement({\n globalElementId,\n locale,\n }: {\n globalElementId: string\n locale: string\n }): LocalizedGlobalElement | null {\n return ApiClientState.getAPIResource(\n this.store.getState(),\n APIResourceType.LocalizedGlobalElement,\n globalElementId,\n locale,\n )\n }\n\n async fetchPagePathnameSlice({\n pageId,\n locale,\n }: {\n pageId: string\n locale: string | null\n }): Promise<PagePathnameSlice | null> {\n const fetch = (id: string, version: SiteVersion | null, locale: string | null | undefined) =>\n this.fetchPagePathnameSliceImpl(id, version, locale)\n\n return await this.store.dispatch(\n fetchAPIResource(APIResourceType.PagePathnameSlice, pageId, fetch, locale),\n )\n }\n\n readPagePathnameSlice({\n pageId,\n locale,\n }: {\n pageId: string\n locale: string | null\n }): PagePathnameSlice | null {\n return ApiClientState.getAPIResource(\n this.store.getState(),\n APIResourceType.PagePathnameSlice,\n pageId,\n locale,\n )\n }\n\n resolvePagePathnameSlice({\n pageId,\n locale,\n }: {\n pageId: string | undefined\n locale: string | null\n }): FetchableValue<PagePathnameSlice | null> {\n return this.resolveResource(APIResourceType.PagePathnameSlice, {\n id: pageId,\n read: id => this.readPagePathnameSlice({ pageId: id, locale }),\n fetch: id => this.fetchPagePathnameSlice({ pageId: id, locale }),\n })\n }\n\n resolveResource<R>(\n type: APIResourceType,\n {\n id,\n read,\n fetch,\n }: {\n id: string | undefined\n read: (id: string) => R | null\n fetch: (id: string) => Promise<R | null>\n },\n ): FetchableValue<R | null> {\n const _read = () => (id != null ? read(id) : null)\n let lastValue: R | null = null\n return {\n name: `${type}:${id}`,\n readStable: () => (lastValue = _read()),\n subscribe: (onUpdate: () => void) =>\n this.subscribe(() => {\n if (_read() !== lastValue) onUpdate()\n }),\n fetch: async () => (id != null ? fetch(id) : null),\n }\n }\n\n async fetchTable(tableId: string): Promise<Table | null> {\n const fetch = (id: string, version: SiteVersion | null) => this.fetchTableImpl(id, version)\n\n return await this.store.dispatch(fetchAPIResource(APIResourceType.Table, tableId, fetch))\n }\n\n readTable(tableId: string): Table | null {\n return ApiClientState.getAPIResource(this.store.getState(), APIResourceType.Table, tableId)\n }\n\n readSite(siteId: string): Site | null {\n return ApiClientState.getAPIResource(this.store.getState(), APIResourceType.Site, siteId)\n }\n\n readPage(pageId: string): Page | null {\n return ApiClientState.getAPIResource(this.store.getState(), APIResourceType.Page, pageId)\n }\n\n readSnippet(snippetId: string): Snippet | null {\n return ApiClientState.getAPIResource(this.store.getState(), APIResourceType.Snippet, snippetId)\n }\n\n protected abstract fetchSwatchImpl(\n id: string,\n version: SiteVersion | null,\n ): Promise<Swatch | null>\n\n protected abstract fetchFileImpl(id: string, version: SiteVersion | null): Promise<File | null>\n protected abstract fetchTypographyImpl(\n id: string,\n version: SiteVersion | null,\n ): Promise<Typography | null>\n\n protected abstract fetchGlobalElementImpl(\n id: string,\n version: SiteVersion | null,\n ): Promise<GlobalElement | null>\n\n protected abstract fetchLocalizedGlobalElementImpl(\n id: string,\n version: SiteVersion | null,\n locale: string,\n ): Promise<LocalizedGlobalElement | null>\n\n protected abstract fetchPagePathnameSliceImpl(\n id: string,\n version: SiteVersion | null,\n locale: string | null | undefined,\n ): Promise<PagePathnameSlice | null>\n\n protected abstract fetchTableImpl(id: string, version: SiteVersion | null): Promise<Table | null>\n}\n"],"mappings":"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","names":["locale"]}
1
+ {"version":3,"sources":["../../../src/api/api-resources-client.ts"],"sourcesContent":["import { type FetchableValue } from '@makeswift/controls'\n\nimport { type Store as ApiClientStore } from '../state/api-client/store'\nimport * as ApiClientState from '../state/api-client/state'\nimport { fetchAPIResource } from '../state/api-client/fetch-api-resource'\n\nimport {\n type File,\n type GlobalElement,\n type LocalizedGlobalElement,\n type Page,\n type PagePathnameSlice,\n type Site,\n type Snippet,\n type Swatch,\n type Table,\n type Typography,\n APIResourceType,\n} from './types'\n\nimport { type SiteVersion } from './site-version'\n\nexport type CacheData = ApiClientState.SerializedState\n\nexport const CacheData = {\n empty(): CacheData {\n return {\n apiResources: {},\n localizedResourcesMap: {},\n }\n },\n}\n\nexport abstract class ApiResourcesClient {\n readonly store: ApiClientStore\n readonly subscribe: ApiClientStore['subscribe']\n\n constructor({ store }: { store: ApiClientStore }) {\n this.store = store\n this.subscribe = this.store.subscribe\n }\n\n get cacheData(): CacheData {\n return ApiClientState.getSerializedState(this.store.getState())\n }\n\n async fetchSwatch(swatchId: string): Promise<Swatch | null> {\n const fetch = (id: string, version: SiteVersion | null) => this.fetchSwatchImpl(id, version)\n\n return await this.store.dispatch(fetchAPIResource(APIResourceType.Swatch, swatchId, fetch))\n }\n\n readSwatch(swatchId: string): Swatch | null {\n return ApiClientState.getAPIResource(this.store.getState(), APIResourceType.Swatch, swatchId)\n }\n\n resolveSwatch(swatchId: string | undefined): FetchableValue<Swatch | null> {\n return this.resolveResource(APIResourceType.Swatch, {\n id: swatchId,\n read: id => this.readSwatch(id),\n fetch: id => this.fetchSwatch(id),\n })\n }\n\n async fetchFile(fileId: string): Promise<File | null> {\n const fetch = (id: string, version: SiteVersion | null) => this.fetchFileImpl(id, version)\n\n return await this.store.dispatch(fetchAPIResource(APIResourceType.File, fileId, fetch))\n }\n\n readFile(fileId: string): File | null {\n return ApiClientState.getAPIResource(this.store.getState(), APIResourceType.File, fileId)\n }\n\n resolveFile(fileId: string | undefined): FetchableValue<File | null> {\n return this.resolveResource(APIResourceType.File, {\n id: fileId,\n read: id => this.readFile(id),\n fetch: id => this.fetchFile(id),\n })\n }\n\n async fetchTypography(typographyId: string): Promise<Typography | null> {\n const fetch = (id: string, version: SiteVersion | null) => this.fetchTypographyImpl(id, version)\n\n return await this.store.dispatch(\n fetchAPIResource(APIResourceType.Typography, typographyId, fetch),\n )\n }\n\n readTypography(typographyId: string): Typography | null {\n return ApiClientState.getAPIResource(\n this.store.getState(),\n APIResourceType.Typography,\n typographyId,\n )\n }\n\n resolveTypography(typographyId: string | undefined): FetchableValue<Typography | null> {\n return this.resolveResource(APIResourceType.Typography, {\n id: typographyId,\n read: id => this.readTypography(id),\n fetch: id => this.fetchTypography(id),\n })\n }\n\n async fetchGlobalElement(globalElementId: string): Promise<GlobalElement | null> {\n const fetch = (id: string, version: SiteVersion | null) =>\n this.fetchGlobalElementImpl(id, version)\n\n return await this.store.dispatch(\n fetchAPIResource(APIResourceType.GlobalElement, globalElementId, fetch),\n )\n }\n\n readGlobalElement(globalElementId: string): GlobalElement | null {\n return ApiClientState.getAPIResource(\n this.store.getState(),\n APIResourceType.GlobalElement,\n globalElementId,\n )\n }\n\n async fetchLocalizedGlobalElement({\n globalElementId,\n locale,\n }: {\n globalElementId: string\n locale: string\n }): Promise<LocalizedGlobalElement | null> {\n const fetch = (id: string, version: SiteVersion | null, locale: string | null | undefined) => {\n if (locale == null) throw new Error('Locale is required to fetch LocalizedGlobalElement')\n return this.fetchLocalizedGlobalElementImpl(id, version, locale)\n }\n\n return await this.store.dispatch(\n fetchAPIResource(APIResourceType.LocalizedGlobalElement, globalElementId, fetch, locale),\n )\n }\n\n readLocalizedGlobalElement({\n globalElementId,\n locale,\n }: {\n globalElementId: string\n locale: string\n }): LocalizedGlobalElement | null {\n return ApiClientState.getAPIResource(\n this.store.getState(),\n APIResourceType.LocalizedGlobalElement,\n globalElementId,\n locale,\n )\n }\n\n async fetchPagePathnameSlice({\n pageId,\n locale,\n }: {\n pageId: string\n locale: string | null\n }): Promise<PagePathnameSlice | null> {\n const fetch = (id: string, version: SiteVersion | null, locale: string | null | undefined) =>\n this.fetchPagePathnameSliceImpl(id, version, locale)\n\n return await this.store.dispatch(\n fetchAPIResource(APIResourceType.PagePathnameSlice, pageId, fetch, locale),\n )\n }\n\n readPagePathnameSlice({\n pageId,\n locale,\n }: {\n pageId: string\n locale: string | null\n }): PagePathnameSlice | null {\n return ApiClientState.getAPIResource(\n this.store.getState(),\n APIResourceType.PagePathnameSlice,\n pageId,\n locale,\n )\n }\n\n resolvePagePathnameSlice({\n pageId,\n locale,\n }: {\n pageId: string | undefined\n locale: string | null\n }): FetchableValue<PagePathnameSlice | null> {\n return this.resolveResource(APIResourceType.PagePathnameSlice, {\n id: pageId,\n read: id => this.readPagePathnameSlice({ pageId: id, locale }),\n fetch: id => this.fetchPagePathnameSlice({ pageId: id, locale }),\n })\n }\n\n resolveResource<R>(\n type: APIResourceType,\n {\n id,\n read,\n fetch,\n }: {\n id: string | undefined\n read: (id: string) => R | null\n fetch: (id: string) => Promise<R | null>\n },\n ): FetchableValue<R | null> {\n const _read = () => (id != null ? read(id) : null)\n let lastValue: R | null = null\n return {\n name: `${type}:${id}`,\n readStable: () => (lastValue = _read()),\n subscribe: (onUpdate: () => void) =>\n this.subscribe(() => {\n if (_read() !== lastValue) onUpdate()\n }),\n fetch: async () => (id != null ? fetch(id) : null),\n }\n }\n\n async fetchTable(tableId: string): Promise<Table | null> {\n const fetch = (id: string, version: SiteVersion | null) => this.fetchTableImpl(id, version)\n\n return await this.store.dispatch(fetchAPIResource(APIResourceType.Table, tableId, fetch))\n }\n\n readTable(tableId: string): Table | null {\n return ApiClientState.getAPIResource(this.store.getState(), APIResourceType.Table, tableId)\n }\n\n readSite(siteId: string): Site | null {\n return ApiClientState.getAPIResource(this.store.getState(), APIResourceType.Site, siteId)\n }\n\n readPage(pageId: string): Page | null {\n return ApiClientState.getAPIResource(this.store.getState(), APIResourceType.Page, pageId)\n }\n\n readSnippet(snippetId: string): Snippet | null {\n return ApiClientState.getAPIResource(this.store.getState(), APIResourceType.Snippet, snippetId)\n }\n\n protected abstract fetchSwatchImpl(\n id: string,\n version: SiteVersion | null,\n ): Promise<Swatch | null>\n\n protected abstract fetchFileImpl(id: string, version: SiteVersion | null): Promise<File | null>\n protected abstract fetchTypographyImpl(\n id: string,\n version: SiteVersion | null,\n ): Promise<Typography | null>\n\n protected abstract fetchGlobalElementImpl(\n id: string,\n version: SiteVersion | null,\n ): Promise<GlobalElement | null>\n\n protected abstract fetchLocalizedGlobalElementImpl(\n id: string,\n version: SiteVersion | null,\n locale: string,\n ): Promise<LocalizedGlobalElement | null>\n\n protected abstract fetchPagePathnameSliceImpl(\n id: string,\n version: SiteVersion | null,\n locale: string | null | undefined,\n ): Promise<PagePathnameSlice | null>\n\n protected abstract fetchTableImpl(id: string, version: SiteVersion | null): Promise<Table | null>\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,qBAAgC;AAChC,gCAAiC;AAEjC,mBAYO;AAMA,MAAM,YAAY;AAAA,EACvB,QAAmB;AACjB,WAAO;AAAA,MACL,cAAc,CAAC;AAAA,MACf,uBAAuB,CAAC;AAAA,IAC1B;AAAA,EACF;AACF;AAEO,MAAe,mBAAmB;AAAA,EAC9B;AAAA,EACA;AAAA,EAET,YAAY,EAAE,MAAM,GAA8B;AAChD,SAAK,QAAQ;AACb,SAAK,YAAY,KAAK,MAAM;AAAA,EAC9B;AAAA,EAEA,IAAI,YAAuB;AACzB,WAAO,eAAe,mBAAmB,KAAK,MAAM,SAAS,CAAC;AAAA,EAChE;AAAA,EAEA,MAAM,YAAY,UAA0C;AAC1D,UAAM,QAAQ,CAAC,IAAY,YAAgC,KAAK,gBAAgB,IAAI,OAAO;AAE3F,WAAO,MAAM,KAAK,MAAM,aAAS,4CAAiB,6BAAgB,QAAQ,UAAU,KAAK,CAAC;AAAA,EAC5F;AAAA,EAEA,WAAW,UAAiC;AAC1C,WAAO,eAAe,eAAe,KAAK,MAAM,SAAS,GAAG,6BAAgB,QAAQ,QAAQ;AAAA,EAC9F;AAAA,EAEA,cAAc,UAA6D;AACzE,WAAO,KAAK,gBAAgB,6BAAgB,QAAQ;AAAA,MAClD,IAAI;AAAA,MACJ,MAAM,QAAM,KAAK,WAAW,EAAE;AAAA,MAC9B,OAAO,QAAM,KAAK,YAAY,EAAE;AAAA,IAClC,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,UAAU,QAAsC;AACpD,UAAM,QAAQ,CAAC,IAAY,YAAgC,KAAK,cAAc,IAAI,OAAO;AAEzF,WAAO,MAAM,KAAK,MAAM,aAAS,4CAAiB,6BAAgB,MAAM,QAAQ,KAAK,CAAC;AAAA,EACxF;AAAA,EAEA,SAAS,QAA6B;AACpC,WAAO,eAAe,eAAe,KAAK,MAAM,SAAS,GAAG,6BAAgB,MAAM,MAAM;AAAA,EAC1F;AAAA,EAEA,YAAY,QAAyD;AACnE,WAAO,KAAK,gBAAgB,6BAAgB,MAAM;AAAA,MAChD,IAAI;AAAA,MACJ,MAAM,QAAM,KAAK,SAAS,EAAE;AAAA,MAC5B,OAAO,QAAM,KAAK,UAAU,EAAE;AAAA,IAChC,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,gBAAgB,cAAkD;AACtE,UAAM,QAAQ,CAAC,IAAY,YAAgC,KAAK,oBAAoB,IAAI,OAAO;AAE/F,WAAO,MAAM,KAAK,MAAM;AAAA,UACtB,4CAAiB,6BAAgB,YAAY,cAAc,KAAK;AAAA,IAClE;AAAA,EACF;AAAA,EAEA,eAAe,cAAyC;AACtD,WAAO,eAAe;AAAA,MACpB,KAAK,MAAM,SAAS;AAAA,MACpB,6BAAgB;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,kBAAkB,cAAqE;AACrF,WAAO,KAAK,gBAAgB,6BAAgB,YAAY;AAAA,MACtD,IAAI;AAAA,MACJ,MAAM,QAAM,KAAK,eAAe,EAAE;AAAA,MAClC,OAAO,QAAM,KAAK,gBAAgB,EAAE;AAAA,IACtC,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,mBAAmB,iBAAwD;AAC/E,UAAM,QAAQ,CAAC,IAAY,YACzB,KAAK,uBAAuB,IAAI,OAAO;AAEzC,WAAO,MAAM,KAAK,MAAM;AAAA,UACtB,4CAAiB,6BAAgB,eAAe,iBAAiB,KAAK;AAAA,IACxE;AAAA,EACF;AAAA,EAEA,kBAAkB,iBAA+C;AAC/D,WAAO,eAAe;AAAA,MACpB,KAAK,MAAM,SAAS;AAAA,MACpB,6BAAgB;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,4BAA4B;AAAA,IAChC;AAAA,IACA;AAAA,EACF,GAG2C;AACzC,UAAM,QAAQ,CAAC,IAAY,SAA6BA,YAAsC;AAC5F,UAAIA,WAAU;AAAM,cAAM,IAAI,MAAM,oDAAoD;AACxF,aAAO,KAAK,gCAAgC,IAAI,SAASA,OAAM;AAAA,IACjE;AAEA,WAAO,MAAM,KAAK,MAAM;AAAA,UACtB,4CAAiB,6BAAgB,wBAAwB,iBAAiB,OAAO,MAAM;AAAA,IACzF;AAAA,EACF;AAAA,EAEA,2BAA2B;AAAA,IACzB;AAAA,IACA;AAAA,EACF,GAGkC;AAChC,WAAO,eAAe;AAAA,MACpB,KAAK,MAAM,SAAS;AAAA,MACpB,6BAAgB;AAAA,MAChB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,uBAAuB;AAAA,IAC3B;AAAA,IACA;AAAA,EACF,GAGsC;AACpC,UAAM,QAAQ,CAAC,IAAY,SAA6BA,YACtD,KAAK,2BAA2B,IAAI,SAASA,OAAM;AAErD,WAAO,MAAM,KAAK,MAAM;AAAA,UACtB,4CAAiB,6BAAgB,mBAAmB,QAAQ,OAAO,MAAM;AAAA,IAC3E;AAAA,EACF;AAAA,EAEA,sBAAsB;AAAA,IACpB;AAAA,IACA;AAAA,EACF,GAG6B;AAC3B,WAAO,eAAe;AAAA,MACpB,KAAK,MAAM,SAAS;AAAA,MACpB,6BAAgB;AAAA,MAChB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,yBAAyB;AAAA,IACvB;AAAA,IACA;AAAA,EACF,GAG6C;AAC3C,WAAO,KAAK,gBAAgB,6BAAgB,mBAAmB;AAAA,MAC7D,IAAI;AAAA,MACJ,MAAM,QAAM,KAAK,sBAAsB,EAAE,QAAQ,IAAI,OAAO,CAAC;AAAA,MAC7D,OAAO,QAAM,KAAK,uBAAuB,EAAE,QAAQ,IAAI,OAAO,CAAC;AAAA,IACjE,CAAC;AAAA,EACH;AAAA,EAEA,gBACE,MACA;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAK0B;AAC1B,UAAM,QAAQ,MAAO,MAAM,OAAO,KAAK,EAAE,IAAI;AAC7C,QAAI,YAAsB;AAC1B,WAAO;AAAA,MACL,MAAM,GAAG,IAAI,IAAI,EAAE;AAAA,MACnB,YAAY,MAAO,YAAY,MAAM;AAAA,MACrC,WAAW,CAAC,aACV,KAAK,UAAU,MAAM;AACnB,YAAI,MAAM,MAAM;AAAW,mBAAS;AAAA,MACtC,CAAC;AAAA,MACH,OAAO,YAAa,MAAM,OAAO,MAAM,EAAE,IAAI;AAAA,IAC/C;AAAA,EACF;AAAA,EAEA,MAAM,WAAW,SAAwC;AACvD,UAAM,QAAQ,CAAC,IAAY,YAAgC,KAAK,eAAe,IAAI,OAAO;AAE1F,WAAO,MAAM,KAAK,MAAM,aAAS,4CAAiB,6BAAgB,OAAO,SAAS,KAAK,CAAC;AAAA,EAC1F;AAAA,EAEA,UAAU,SAA+B;AACvC,WAAO,eAAe,eAAe,KAAK,MAAM,SAAS,GAAG,6BAAgB,OAAO,OAAO;AAAA,EAC5F;AAAA,EAEA,SAAS,QAA6B;AACpC,WAAO,eAAe,eAAe,KAAK,MAAM,SAAS,GAAG,6BAAgB,MAAM,MAAM;AAAA,EAC1F;AAAA,EAEA,SAAS,QAA6B;AACpC,WAAO,eAAe,eAAe,KAAK,MAAM,SAAS,GAAG,6BAAgB,MAAM,MAAM;AAAA,EAC1F;AAAA,EAEA,YAAY,WAAmC;AAC7C,WAAO,eAAe,eAAe,KAAK,MAAM,SAAS,GAAG,6BAAgB,SAAS,SAAS;AAAA,EAChG;AA+BF;","names":["locale"]}
@@ -27,7 +27,7 @@ class MakeswiftGraphQLApiClient {
27
27
  graphqlClient;
28
28
  constructor({ endpoint }) {
29
29
  this.graphqlClient = new import_client.GraphQLClient(endpoint, {
30
- "makeswift-runtime-version": "0.28.8-canary.9"
30
+ "makeswift-runtime-version": "0.28.8"
31
31
  });
32
32
  }
33
33
  async createTableRecord(tableId, columns) {
@@ -29,10 +29,16 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
29
29
  var rest_api_client_exports = {};
30
30
  __export(rest_api_client_exports, {
31
31
  MakeswiftRestAPIClient: () => MakeswiftRestAPIClient,
32
+ RestApiClientError: () => RestApiClientError,
32
33
  failedResponseBody: () => failedResponseBody
33
34
  });
34
35
  module.exports = __toCommonJS(rest_api_client_exports);
36
+ var import_ky = __toESM(require("ky"));
35
37
  var Schema = __toESM(require("./schema"));
38
+ const RetryBackoffConfig = {
39
+ MaxAttempts: 3,
40
+ MaxDelayMs: 5e3
41
+ };
36
42
  class MakeswiftRestAPIClient {
37
43
  _fetch;
38
44
  apiKey;
@@ -42,7 +48,28 @@ class MakeswiftRestAPIClient {
42
48
  apiKey,
43
49
  apiOrigin
44
50
  }) {
45
- this._fetch = fetch;
51
+ this._fetch = import_ky.default.create({
52
+ fetch,
53
+ timeout: false,
54
+ retry: {
55
+ statusCodes: [429],
56
+ limit: RetryBackoffConfig.MaxAttempts,
57
+ backoffLimit: RetryBackoffConfig.MaxDelayMs,
58
+ delay: (attemptCount) => 2 ** (attemptCount - 1) * 1e3,
59
+ jitter: true
60
+ },
61
+ hooks: {
62
+ beforeRetry: [
63
+ async ({ request, error, retryCount }) => {
64
+ console.warn(
65
+ `Request to ${request.url} failed with ${error}. Retrying (${retryCount}/${RetryBackoffConfig.MaxAttempts})`
66
+ );
67
+ if ((0, import_ky.isHTTPError)(error))
68
+ await failedResponseBody(error.response);
69
+ }
70
+ ]
71
+ }
72
+ });
46
73
  this.apiKey = apiKey;
47
74
  this.apiOrigin = apiOrigin;
48
75
  }
@@ -50,13 +77,12 @@ class MakeswiftRestAPIClient {
50
77
  const response = await this.fetch(`v3/swatches/${swatchId}`, siteVersion);
51
78
  if (!response.ok) {
52
79
  const failedBody = await failedResponseBody(response);
53
- if (response.status !== 404) {
54
- console.error(`Failed to get swatch '${swatchId}'`, {
55
- response: failedBody,
56
- siteVersion
57
- });
58
- }
59
- return null;
80
+ if (response.status === 404)
81
+ return null;
82
+ throw new RestApiClientError(`Failed to get swatch '${swatchId}'`, response, {
83
+ body: failedBody,
84
+ siteVersion
85
+ });
60
86
  }
61
87
  const swatch = await response.json();
62
88
  return swatch;
@@ -65,13 +91,12 @@ class MakeswiftRestAPIClient {
65
91
  const response = await this.fetch(`v3/typographies/${typographyId}`, siteVersion);
66
92
  if (!response.ok) {
67
93
  const failedBody = await failedResponseBody(response);
68
- if (response.status !== 404) {
69
- console.error(`Failed to get typography '${typographyId}'`, {
70
- response: failedBody,
71
- siteVersion
72
- });
73
- }
74
- return null;
94
+ if (response.status === 404)
95
+ return null;
96
+ throw new RestApiClientError(`Failed to get typography '${typographyId}'`, response, {
97
+ body: failedBody,
98
+ siteVersion
99
+ });
75
100
  }
76
101
  const typography = await response.json();
77
102
  return typography;
@@ -80,13 +105,12 @@ class MakeswiftRestAPIClient {
80
105
  const response = await this.fetch(`v3/global-elements/${globalElementId}`, siteVersion);
81
106
  if (!response.ok) {
82
107
  const failedBody = await failedResponseBody(response);
83
- if (response.status !== 404) {
84
- console.error(`Failed to get global element '${globalElementId}'`, {
85
- response: failedBody,
86
- siteVersion
87
- });
88
- }
89
- return null;
108
+ if (response.status === 404)
109
+ return null;
110
+ throw new RestApiClientError(`Failed to get global element '${globalElementId}'`, response, {
111
+ body: failedBody,
112
+ siteVersion
113
+ });
90
114
  }
91
115
  const globalElement = await response.json();
92
116
  return globalElement;
@@ -98,14 +122,13 @@ class MakeswiftRestAPIClient {
98
122
  );
99
123
  if (!response.ok) {
100
124
  const failedBody = await failedResponseBody(response);
101
- if (response.status !== 404) {
102
- console.error(`Failed to get localized global element '${globalElementId}'`, {
103
- response: failedBody,
104
- siteVersion,
105
- locale
106
- });
107
- }
108
- return null;
125
+ if (response.status === 404)
126
+ return null;
127
+ throw new RestApiClientError(
128
+ `Failed to get localized global element '${globalElementId}'`,
129
+ response,
130
+ { body: failedBody, siteVersion, locale }
131
+ );
109
132
  }
110
133
  const localizedGlobalElement = await response.json();
111
134
  return localizedGlobalElement;
@@ -119,12 +142,14 @@ class MakeswiftRestAPIClient {
119
142
  url.searchParams.set("locale", locale);
120
143
  const response = await this.fetch(url.pathname + url.search, siteVersion);
121
144
  if (!response.ok) {
122
- console.error(`Failed to get page pathname slice(s) for ${pageIds.join(", ")}`, {
123
- response: await failedResponseBody(response),
124
- siteVersion,
125
- locale
126
- });
127
- return [];
145
+ const failedBody = await failedResponseBody(response);
146
+ if (response.status === 404)
147
+ return [];
148
+ throw new RestApiClientError(
149
+ `Failed to get page pathname slice(s) for ${pageIds.join(", ")}`,
150
+ response,
151
+ { body: failedBody, siteVersion, locale }
152
+ );
128
153
  }
129
154
  const json = await response.json();
130
155
  const pagePathnameSlices = Schema.pagePathnameSlices.parse(json);
@@ -147,7 +172,7 @@ class MakeswiftRestAPIClient {
147
172
  const requestHeaders = new Headers({
148
173
  "x-api-key": this.apiKey,
149
174
  "makeswift-site-api-key": this.apiKey,
150
- "makeswift-runtime-version": "0.28.8-canary.9"
175
+ "makeswift-runtime-version": "0.28.8"
151
176
  });
152
177
  if (siteVersion?.token) {
153
178
  requestUrl.searchParams.set("version", siteVersion.version);
@@ -158,12 +183,17 @@ class MakeswiftRestAPIClient {
158
183
  requestHeaders.set(key, value);
159
184
  });
160
185
  }
161
- const response = await this._fetch(requestUrl.toString(), {
162
- ...init,
163
- headers: requestHeaders,
164
- ...siteVersion != null ? { cache: "no-store" } : {}
165
- });
166
- return response;
186
+ try {
187
+ return await this._fetch(requestUrl.toString(), {
188
+ ...init,
189
+ headers: requestHeaders,
190
+ ...siteVersion != null ? { cache: "no-store" } : {}
191
+ });
192
+ } catch (error) {
193
+ if (error instanceof import_ky.HTTPError)
194
+ return error.response;
195
+ throw error;
196
+ }
167
197
  }
168
198
  }
169
199
  async function failedResponseBody(response) {
@@ -178,9 +208,21 @@ async function failedResponseBody(response) {
178
208
  return `Failed to extract response body: ${e}`;
179
209
  }
180
210
  }
211
+ function responseError(response) {
212
+ return `${response.status} ${response.statusText}`;
213
+ }
214
+ class RestApiClientError extends Error {
215
+ status;
216
+ constructor(message, response, cause) {
217
+ super(`${message}: ${responseError(response)}`, { cause });
218
+ this.name = "RestApiClientError";
219
+ this.status = response.status;
220
+ }
221
+ }
181
222
  // Annotate the CommonJS export names for ESM import in node:
182
223
  0 && (module.exports = {
183
224
  MakeswiftRestAPIClient,
225
+ RestApiClientError,
184
226
  failedResponseBody
185
227
  });
186
228
  //# sourceMappingURL=rest-api-client.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/api/rest-api-client.ts"],"sourcesContent":["import {\n type GlobalElement,\n type LocalizedGlobalElement,\n type PagePathnameSlice,\n type Swatch,\n type Typography,\n type HttpFetch,\n} from './types'\n\nimport { type SiteVersion } from './site-version'\nimport * as Schema from './schema'\n\nexport class MakeswiftRestAPIClient {\n private _fetch: HttpFetch\n\n readonly apiKey: string\n readonly apiOrigin: string\n\n constructor({\n fetch,\n apiKey,\n apiOrigin,\n }: {\n fetch: HttpFetch\n apiKey: string\n apiOrigin: string\n }) {\n this._fetch = fetch\n this.apiKey = apiKey\n this.apiOrigin = apiOrigin\n }\n\n async getSwatch(swatchId: string, siteVersion: SiteVersion | null): Promise<Swatch | null> {\n const response = await this.fetch(`v3/swatches/${swatchId}`, siteVersion)\n\n if (!response.ok) {\n const failedBody = await failedResponseBody(response)\n if (response.status !== 404) {\n console.error(`Failed to get swatch '${swatchId}'`, {\n response: failedBody,\n siteVersion,\n })\n }\n\n return null\n }\n\n const swatch = await response.json()\n\n return swatch\n }\n\n async getTypography(\n typographyId: string,\n siteVersion: SiteVersion | null,\n ): Promise<Typography | null> {\n const response = await this.fetch(`v3/typographies/${typographyId}`, siteVersion)\n\n if (!response.ok) {\n const failedBody = await failedResponseBody(response)\n if (response.status !== 404) {\n console.error(`Failed to get typography '${typographyId}'`, {\n response: failedBody,\n siteVersion,\n })\n }\n\n return null\n }\n\n const typography = await response.json()\n\n return typography\n }\n\n async getGlobalElement(\n globalElementId: string,\n siteVersion: SiteVersion | null,\n ): Promise<GlobalElement | null> {\n const response = await this.fetch(`v3/global-elements/${globalElementId}`, siteVersion)\n\n if (!response.ok) {\n const failedBody = await failedResponseBody(response)\n if (response.status !== 404) {\n console.error(`Failed to get global element '${globalElementId}'`, {\n response: failedBody,\n siteVersion,\n })\n }\n\n return null\n }\n\n const globalElement = await response.json()\n\n return globalElement\n }\n\n async getLocalizedGlobalElement(\n globalElementId: string,\n locale: string,\n siteVersion: SiteVersion | null,\n ): Promise<LocalizedGlobalElement | null> {\n const response = await this.fetch(\n `v3/localized-global-elements/${globalElementId}?locale=${locale}`,\n siteVersion,\n )\n\n if (!response.ok) {\n const failedBody = await failedResponseBody(response)\n if (response.status !== 404) {\n console.error(`Failed to get localized global element '${globalElementId}'`, {\n response: failedBody,\n siteVersion,\n locale,\n })\n }\n\n return null\n }\n\n const localizedGlobalElement = await response.json()\n\n return localizedGlobalElement\n }\n\n async getPagePathnameSlices(\n pageIds: string[],\n siteVersion: SiteVersion | null,\n { locale }: { locale?: string | null },\n ): Promise<(PagePathnameSlice | null)[]> {\n if (pageIds.length === 0) return []\n\n const url = new URL(`v3/page-pathname-slices/bulk`, this.apiOrigin)\n\n pageIds.forEach(id => url.searchParams.append('ids', id))\n if (locale != null) url.searchParams.set('locale', locale)\n\n const response = await this.fetch(url.pathname + url.search, siteVersion)\n\n if (!response.ok) {\n console.error(`Failed to get page pathname slice(s) for ${pageIds.join(', ')}`, {\n response: await failedResponseBody(response),\n siteVersion,\n locale,\n })\n\n return []\n }\n\n const json = await response.json()\n\n const pagePathnameSlices = Schema.pagePathnameSlices.parse(json)\n\n // We're mapping the basePageId to be the id, because we're still using the GraphQL\n // fragment as our APIResource. The id on the APIResource needs to match the pageId\n // so that we can find the corresponding page pathname slice when we call getPagePathnameSlice(pageId).\n // TODO: Update this once we move away from the GraphQL fragments.\n return pagePathnameSlices.map(pagePathnameSlice => {\n if (pagePathnameSlice == null) return null\n\n return {\n ...pagePathnameSlice,\n id: pagePathnameSlice.basePageId,\n localizedPathname: pagePathnameSlice.localizedPathname ?? null,\n }\n })\n }\n\n async getPagePathnameSlice(\n pageId: string,\n siteVersion: SiteVersion | null,\n { locale }: { locale?: string | null } = {},\n ): Promise<PagePathnameSlice | null> {\n const pagePathnameSlices = await this.getPagePathnameSlices([pageId], siteVersion, { locale })\n\n return pagePathnameSlices.at(0) ?? null\n }\n\n protected async fetch(\n path: string,\n siteVersion: SiteVersion | null,\n init?: RequestInit,\n ): Promise<Response> {\n const requestUrl = new URL(path, this.apiOrigin)\n\n const requestHeaders = new Headers({\n 'x-api-key': this.apiKey,\n 'makeswift-site-api-key': this.apiKey,\n 'makeswift-runtime-version': PACKAGE_VERSION,\n })\n\n if (siteVersion?.token) {\n requestUrl.searchParams.set('version', siteVersion.version)\n requestHeaders.set('makeswift-preview-token', siteVersion.token)\n }\n\n if (init?.headers) {\n new Headers(init.headers).forEach((value, key) => {\n requestHeaders.set(key, value)\n })\n }\n\n const response = await this._fetch(requestUrl.toString(), {\n ...init,\n headers: requestHeaders,\n ...(siteVersion != null ? { cache: 'no-store' } : {}),\n })\n\n return response\n }\n}\n\n// This function attempts to consume the response body of a failed response, and\n// returns either the parsed JSON or raw text. This is useful for logging more\n// detailed error information when an API request fails.\n//\n// Cloudflare Worker Note: The Cloudflare Worker runtime has automatic deadlock\n// prevention (in the form of auto-cancelling responses) that triggers when too\n// many response bodies are unconsumed. This applies for error responses as\n// well. As such, in this client we use this function to consume the response\n// body whenever the request fails, even if we don't end up logging the body\n// itself, to avoid hitting the deadlock prevention.\nexport async function failedResponseBody(response: Response): Promise<unknown> {\n try {\n const text = await response.text()\n try {\n return JSON.parse(text)\n } catch {\n return text\n }\n } catch (e) {\n return `Failed to extract response body: ${e}`\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/api/rest-api-client.ts"],"sourcesContent":["import ky, { HTTPError, isHTTPError, type KyInstance } from 'ky'\n\nimport {\n type GlobalElement,\n type LocalizedGlobalElement,\n type PagePathnameSlice,\n type Swatch,\n type Typography,\n type HttpFetch,\n} from './types'\n\nimport { type SiteVersion } from './site-version'\nimport * as Schema from './schema'\n\nconst RetryBackoffConfig = {\n MaxAttempts: 3,\n MaxDelayMs: 5_000,\n}\n\nexport class MakeswiftRestAPIClient {\n private _fetch: KyInstance\n\n readonly apiKey: string\n readonly apiOrigin: string\n\n constructor({\n fetch,\n apiKey,\n apiOrigin,\n }: {\n fetch: HttpFetch\n apiKey: string\n apiOrigin: string\n }) {\n this._fetch = ky.create({\n fetch,\n timeout: false,\n retry: {\n statusCodes: [429],\n limit: RetryBackoffConfig.MaxAttempts,\n backoffLimit: RetryBackoffConfig.MaxDelayMs,\n delay: attemptCount => 2 ** (attemptCount - 1) * 1000,\n jitter: true,\n },\n hooks: {\n beforeRetry: [\n async ({ request, error, retryCount }) => {\n console.warn(\n `Request to ${request.url} failed with ${error}. Retrying (${retryCount}/${RetryBackoffConfig.MaxAttempts})`,\n )\n // Drain the response body before retrying so we don't leak unconsumed\n // response bodies (see the comment on `failedResponseBody` below).\n if (isHTTPError(error)) await failedResponseBody(error.response)\n },\n ],\n },\n })\n\n this.apiKey = apiKey\n this.apiOrigin = apiOrigin\n }\n\n async getSwatch(swatchId: string, siteVersion: SiteVersion | null): Promise<Swatch | null> {\n const response = await this.fetch(`v3/swatches/${swatchId}`, siteVersion)\n\n if (!response.ok) {\n const failedBody = await failedResponseBody(response)\n if (response.status === 404) return null\n\n throw new RestApiClientError(`Failed to get swatch '${swatchId}'`, response, {\n body: failedBody,\n siteVersion,\n })\n }\n\n const swatch = await response.json()\n\n return swatch\n }\n\n async getTypography(\n typographyId: string,\n siteVersion: SiteVersion | null,\n ): Promise<Typography | null> {\n const response = await this.fetch(`v3/typographies/${typographyId}`, siteVersion)\n\n if (!response.ok) {\n const failedBody = await failedResponseBody(response)\n if (response.status === 404) return null\n\n throw new RestApiClientError(`Failed to get typography '${typographyId}'`, response, {\n body: failedBody,\n siteVersion,\n })\n }\n\n const typography = await response.json()\n\n return typography\n }\n\n async getGlobalElement(\n globalElementId: string,\n siteVersion: SiteVersion | null,\n ): Promise<GlobalElement | null> {\n const response = await this.fetch(`v3/global-elements/${globalElementId}`, siteVersion)\n\n if (!response.ok) {\n const failedBody = await failedResponseBody(response)\n if (response.status === 404) return null\n\n throw new RestApiClientError(`Failed to get global element '${globalElementId}'`, response, {\n body: failedBody,\n siteVersion,\n })\n }\n\n const globalElement = await response.json()\n\n return globalElement\n }\n\n async getLocalizedGlobalElement(\n globalElementId: string,\n locale: string,\n siteVersion: SiteVersion | null,\n ): Promise<LocalizedGlobalElement | null> {\n const response = await this.fetch(\n `v3/localized-global-elements/${globalElementId}?locale=${locale}`,\n siteVersion,\n )\n\n if (!response.ok) {\n const failedBody = await failedResponseBody(response)\n if (response.status === 404) return null\n\n throw new RestApiClientError(\n `Failed to get localized global element '${globalElementId}'`,\n response,\n { body: failedBody, siteVersion, locale },\n )\n }\n\n const localizedGlobalElement = await response.json()\n\n return localizedGlobalElement\n }\n\n async getPagePathnameSlices(\n pageIds: string[],\n siteVersion: SiteVersion | null,\n { locale }: { locale?: string | null },\n ): Promise<(PagePathnameSlice | null)[]> {\n if (pageIds.length === 0) return []\n\n const url = new URL(`v3/page-pathname-slices/bulk`, this.apiOrigin)\n\n pageIds.forEach(id => url.searchParams.append('ids', id))\n if (locale != null) url.searchParams.set('locale', locale)\n\n const response = await this.fetch(url.pathname + url.search, siteVersion)\n\n if (!response.ok) {\n const failedBody = await failedResponseBody(response)\n if (response.status === 404) return []\n\n throw new RestApiClientError(\n `Failed to get page pathname slice(s) for ${pageIds.join(', ')}`,\n response,\n { body: failedBody, siteVersion, locale },\n )\n }\n\n const json = await response.json()\n\n const pagePathnameSlices = Schema.pagePathnameSlices.parse(json)\n\n // We're mapping the basePageId to be the id, because we're still using the GraphQL\n // fragment as our APIResource. The id on the APIResource needs to match the pageId\n // so that we can find the corresponding page pathname slice when we call getPagePathnameSlice(pageId).\n // TODO: Update this once we move away from the GraphQL fragments.\n return pagePathnameSlices.map(pagePathnameSlice => {\n if (pagePathnameSlice == null) return null\n\n return {\n ...pagePathnameSlice,\n id: pagePathnameSlice.basePageId,\n localizedPathname: pagePathnameSlice.localizedPathname ?? null,\n }\n })\n }\n\n async getPagePathnameSlice(\n pageId: string,\n siteVersion: SiteVersion | null,\n { locale }: { locale?: string | null } = {},\n ): Promise<PagePathnameSlice | null> {\n const pagePathnameSlices = await this.getPagePathnameSlices([pageId], siteVersion, { locale })\n\n return pagePathnameSlices.at(0) ?? null\n }\n\n protected async fetch(\n path: string,\n siteVersion: SiteVersion | null,\n init?: RequestInit,\n ): Promise<Response> {\n const requestUrl = new URL(path, this.apiOrigin)\n\n const requestHeaders = new Headers({\n 'x-api-key': this.apiKey,\n 'makeswift-site-api-key': this.apiKey,\n 'makeswift-runtime-version': PACKAGE_VERSION,\n })\n\n if (siteVersion?.token) {\n requestUrl.searchParams.set('version', siteVersion.version)\n requestHeaders.set('makeswift-preview-token', siteVersion.token)\n }\n\n if (init?.headers) {\n new Headers(init.headers).forEach((value, key) => {\n requestHeaders.set(key, value)\n })\n }\n\n try {\n return await this._fetch(requestUrl.toString(), {\n ...init,\n headers: requestHeaders,\n ...(siteVersion != null ? { cache: 'no-store' } : {}),\n })\n } catch (error) {\n if (error instanceof HTTPError) return error.response\n throw error\n }\n }\n}\n\n// This function attempts to consume the response body of a failed response, and\n// returns either the parsed JSON or raw text. This is useful for logging more\n// detailed error information when an API request fails.\n//\n// Cloudflare Worker Note: The Cloudflare Worker runtime has automatic deadlock\n// prevention (in the form of auto-cancelling responses) that triggers when too\n// many response bodies are unconsumed. This applies for error responses as\n// well. As such, in this client we use this function to consume the response\n// body whenever the request fails, even if we don't end up logging the body\n// itself, to avoid hitting the deadlock prevention.\nexport async function failedResponseBody(response: Response): Promise<unknown> {\n try {\n const text = await response.text()\n try {\n return JSON.parse(text)\n } catch {\n return text\n }\n } catch (e) {\n return `Failed to extract response body: ${e}`\n }\n}\n\nfunction responseError(response: Response): string {\n return `${response.status} ${response.statusText}`\n}\n\nexport class RestApiClientError extends Error {\n readonly status: number\n\n constructor(message: string, response: Response, cause: Record<string, unknown>) {\n super(`${message}: ${responseError(response)}`, { cause })\n\n this.name = 'RestApiClientError'\n this.status = response.status\n }\n}\n"],"mappings":"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","names":["ky"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/api/types.ts"],"sourcesContent":["import {\n SwatchFragment as Swatch,\n FileFragment as File,\n TypographyFragment as Typography,\n PagePathnameSliceFragment,\n GlobalElementFragment as GlobalElement,\n LocalizedGlobalElementFragment as LocalizedGlobalElement,\n TableFragment as Table,\n SnippetFragment as Snippet,\n PageFragment as Page,\n SiteFragment as Site,\n} from './graphql/generated/types'\n\ntype PagePathnameSlice = PagePathnameSliceFragment & {\n basePageId?: string\n localizedPathname?: string | null\n}\n\nexport type {\n Swatch,\n File,\n Typography,\n PagePathnameSlice,\n GlobalElement,\n LocalizedGlobalElement,\n Table,\n Snippet,\n Page,\n Site,\n}\n\nexport type LocalizableAPIResource = PagePathnameSlice | LocalizedGlobalElement\n\nexport const LocalizableAPIResourceType: {\n [R in LocalizableAPIResource as R['__typename']]: R['__typename']\n} = {\n PagePathnameSlice: 'PagePathnameSlice',\n LocalizedGlobalElement: 'LocalizedGlobalElement',\n}\n\nexport type LocalizableAPIResourceType =\n (typeof LocalizableAPIResourceType)[keyof typeof LocalizableAPIResourceType]\n\nexport type APIResource =\n | LocalizableAPIResource\n | Swatch\n | File\n | Typography\n | GlobalElement\n | Table\n | Snippet\n | Page\n | Site\n\nexport const APIResourceType: { [R in APIResource as R['__typename']]: R['__typename'] } = {\n ...LocalizableAPIResourceType,\n Swatch: 'Swatch',\n File: 'File',\n Typography: 'Typography',\n GlobalElement: 'GlobalElement',\n Table: 'Table',\n Snippet: 'Snippet',\n Page: 'Page',\n Site: 'Site',\n}\n\nexport type APIResourceType = (typeof APIResourceType)[keyof typeof APIResourceType]\n\nexport type APIResourceByType<T extends APIResourceType> = Extract<APIResource, { __typename: T }>\n\nexport type APIResourceLocale<R extends APIResource | APIResourceType> = R extends\n | LocalizableAPIResource\n | LocalizableAPIResourceType\n ? string | null\n : never\n\nexport type HttpFetch = (url: string | URL, init?: RequestInit) => Promise<Response>\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiCO,MAAM,6BAET;AAAA,EACF,mBAAmB;AAAA,EACnB,wBAAwB;AAC1B;AAgBO,MAAM,kBAA8E;AAAA,EACzF,GAAG;AAAA,EACH,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,OAAO;AAAA,EACP,SAAS;AAAA,EACT,MAAM;AAAA,EACN,MAAM;AACR;","names":[]}
1
+ {"version":3,"sources":["../../../src/api/types.ts"],"sourcesContent":["import {\n SwatchFragment as Swatch,\n FileFragment as File,\n TypographyFragment as Typography,\n PagePathnameSliceFragment,\n GlobalElementFragment as GlobalElement,\n LocalizedGlobalElementFragment as LocalizedGlobalElement,\n TableFragment as Table,\n SnippetFragment as Snippet,\n PageFragment as Page,\n SiteFragment as Site,\n} from './graphql/generated/types'\n\ntype PagePathnameSlice = PagePathnameSliceFragment & {\n basePageId?: string\n localizedPathname?: string | null\n}\n\nexport type {\n Swatch,\n File,\n Typography,\n PagePathnameSlice,\n GlobalElement,\n LocalizedGlobalElement,\n Table,\n Snippet,\n Page,\n Site,\n}\n\nexport type LocalizableAPIResource = PagePathnameSlice | LocalizedGlobalElement\n\nexport const LocalizableAPIResourceType: {\n [R in LocalizableAPIResource as R['__typename']]: R['__typename']\n} = {\n PagePathnameSlice: 'PagePathnameSlice',\n LocalizedGlobalElement: 'LocalizedGlobalElement',\n}\n\nexport type LocalizableAPIResourceType =\n (typeof LocalizableAPIResourceType)[keyof typeof LocalizableAPIResourceType]\n\nexport type APIResource =\n | LocalizableAPIResource\n | Swatch\n | File\n | Typography\n | GlobalElement\n | Table\n | Snippet\n | Page\n | Site\n\nexport const APIResourceType: { [R in APIResource as R['__typename']]: R['__typename'] } = {\n ...LocalizableAPIResourceType,\n Swatch: 'Swatch',\n File: 'File',\n Typography: 'Typography',\n GlobalElement: 'GlobalElement',\n Table: 'Table',\n Snippet: 'Snippet',\n Page: 'Page',\n Site: 'Site',\n}\n\nexport type APIResourceType = (typeof APIResourceType)[keyof typeof APIResourceType]\n\nexport type APIResourceByType<T extends APIResourceType> = Extract<APIResource, { __typename: T }>\n\nexport type APIResourceLocale<R extends APIResource | APIResourceType> = R extends\n | LocalizableAPIResource\n | LocalizableAPIResourceType\n ? string | null\n : never\n\nexport type HttpFetch = (input: string | URL | Request, init?: RequestInit) => Promise<Response>\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiCO,MAAM,6BAET;AAAA,EACF,mBAAmB;AAAA,EACnB,wBAAwB;AAC1B;AAgBO,MAAM,kBAA8E;AAAA,EACzF,GAAG;AAAA,EACH,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,OAAO;AAAA,EACP,SAAS;AAAA,EACT,MAAM;AAAA,EACN,MAAM;AACR;","names":[]}
@@ -28,7 +28,7 @@ async function manifestHandler(req, { apiKey, manifest }) {
28
28
  return import_request_response.ApiResponse.json({ message: "Unauthorized" }, { status: 401 });
29
29
  }
30
30
  return import_request_response.ApiResponse.json({
31
- version: "0.28.8-canary.9",
31
+ version: "0.28.8",
32
32
  interactionMode: true,
33
33
  clientSideNavigation: false,
34
34
  elementFromPoint: false,
@@ -23,12 +23,12 @@ __export(host_to_builder_actions_exports, {
23
23
  });
24
24
  module.exports = __toCommonJS(host_to_builder_actions_exports);
25
25
  var import_toolkit = require("@reduxjs/toolkit");
26
- var import_read_only_actions = require("../state/actions/internal/read-only-actions");
27
- var import_actions = require("../state/builder-api/actions");
26
+ var import_read_only_action_types = require("../state/actions/internal/read-only-action-types");
27
+ var import_action_types = require("../state/builder-api/action-types");
28
28
  const HostToBuilderActionTypes = {
29
- ...import_actions.BuilderActionTypes,
30
- REGISTER_COMPONENT: import_read_only_actions.ReadOnlyActionTypes.REGISTER_COMPONENT,
31
- UNREGISTER_COMPONENT: import_read_only_actions.ReadOnlyActionTypes.UNREGISTER_COMPONENT
29
+ ...import_action_types.BuilderActionTypes,
30
+ REGISTER_COMPONENT: import_read_only_action_types.ReadOnlyActionTypes.REGISTER_COMPONENT,
31
+ UNREGISTER_COMPONENT: import_read_only_action_types.ReadOnlyActionTypes.UNREGISTER_COMPONENT
32
32
  };
33
33
  function isHostToBuilderAction(action) {
34
34
  return (0, import_toolkit.isAction)(action) && Object.hasOwn(HostToBuilderActionTypes, action.type);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/builder/host-to-builder-actions.ts"],"sourcesContent":["import { isAction } from '@reduxjs/toolkit'\n\n// in the past, we reused the same action type for registering components both internally\n// and in the builder; they have been since split into two separate action types,\n// REGISTER_COMPONENT and REGISTER_BUILDER_COMPONENT, but we still have to expose what\n// are now internal actions to the builder for backward compatibility with the older runtimes\nimport {\n type RegisterComponentAction,\n type UnregisterComponentAction,\n ReadOnlyActionTypes,\n} from '../state/actions/internal/read-only-actions'\n\nimport { type BuilderAction, BuilderActionTypes } from '../state/builder-api/actions'\n\nexport const HostToBuilderActionTypes = {\n ...BuilderActionTypes,\n REGISTER_COMPONENT: ReadOnlyActionTypes.REGISTER_COMPONENT,\n UNREGISTER_COMPONENT: ReadOnlyActionTypes.UNREGISTER_COMPONENT,\n} as const\n\nexport type HostToBuilderAction =\n | BuilderAction\n | RegisterComponentAction\n | UnregisterComponentAction\n\nexport function isHostToBuilderAction(action: unknown): action is HostToBuilderAction {\n return isAction(action) && Object.hasOwn(HostToBuilderActionTypes, action.type)\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAyB;AAMzB,+BAIO;AAEP,qBAAuD;AAEhD,MAAM,2BAA2B;AAAA,EACtC,GAAG;AAAA,EACH,oBAAoB,6CAAoB;AAAA,EACxC,sBAAsB,6CAAoB;AAC5C;AAOO,SAAS,sBAAsB,QAAgD;AACpF,aAAO,yBAAS,MAAM,KAAK,OAAO,OAAO,0BAA0B,OAAO,IAAI;AAChF;","names":[]}
1
+ {"version":3,"sources":["../../../src/builder/host-to-builder-actions.ts"],"sourcesContent":["import { isAction } from '@reduxjs/toolkit'\n\n// in the past, we reused the same action type for registering components both internally\n// and in the builder; they have been since split into two separate action types,\n// REGISTER_COMPONENT and REGISTER_BUILDER_COMPONENT, but we still have to expose what\n// are now internal actions to the builder for backward compatibility with the older runtimes\nimport { ReadOnlyActionTypes } from '../state/actions/internal/read-only-action-types'\nimport {\n type RegisterComponentAction,\n type UnregisterComponentAction,\n} from '../state/actions/internal/read-only-actions'\n\nimport { BuilderActionTypes } from '../state/builder-api/action-types'\nimport { type BuilderAction } from '../state/builder-api/actions'\n\nexport const HostToBuilderActionTypes = {\n ...BuilderActionTypes,\n REGISTER_COMPONENT: ReadOnlyActionTypes.REGISTER_COMPONENT,\n UNREGISTER_COMPONENT: ReadOnlyActionTypes.UNREGISTER_COMPONENT,\n} as const\n\nexport type HostToBuilderAction =\n | BuilderAction\n | RegisterComponentAction\n | UnregisterComponentAction\n\nexport function isHostToBuilderAction(action: unknown): action is HostToBuilderAction {\n return isAction(action) && Object.hasOwn(HostToBuilderActionTypes, action.type)\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAyB;AAMzB,oCAAoC;AAMpC,0BAAmC;AAG5B,MAAM,2BAA2B;AAAA,EACtC,GAAG;AAAA,EACH,oBAAoB,kDAAoB;AAAA,EACxC,sBAAsB,kDAAoB;AAC5C;AAOO,SAAS,sBAAsB,QAAgD;AACpF,aAAO,yBAAS,MAAM,KAAK,OAAO,OAAO,0BAA0B,OAAO,IAAI;AAChF;","names":[]}
@@ -78,12 +78,12 @@ Received "${apiKey}" instead.`
78
78
  const queryParams = getPagesQueryParams(params);
79
79
  const response = await this.fetch(`v5/pages?${queryParams.toString()}`, siteVersion);
80
80
  if (!response.ok) {
81
- console.error("Failed to get pages", {
82
- response: await (0, import_rest_api_client.failedResponseBody)(response),
81
+ const body = await (0, import_rest_api_client.failedResponseBody)(response);
82
+ throw new import_rest_api_client.RestApiClientError("Failed to get pages", response, {
83
+ body,
83
84
  siteVersion,
84
85
  params
85
86
  });
86
- throw new Error(`Failed to get pages: ${responseError(response)}`);
87
87
  }
88
88
  const result = await response.json();
89
89
  const parsedResponse = Schema.getPagesResult.safeParse(result);
@@ -104,12 +104,11 @@ Received "${apiKey}" instead.`
104
104
  const failedBody = await (0, import_rest_api_client.failedResponseBody)(response);
105
105
  if (response.status === 404)
106
106
  return null;
107
- console.error(`Failed to get page snapshot for '${pathname}'`, {
108
- response: failedBody,
107
+ throw new import_rest_api_client.RestApiClientError(`Failed to get page snapshot for '${pathname}'`, response, {
108
+ body: failedBody,
109
109
  siteVersion,
110
110
  locale
111
111
  });
112
- throw new Error(`Failed to get page snapshot for '${pathname}': ${responseError(response)}`);
113
112
  }
114
113
  const json = await response.json();
115
114
  return Schema.getPageResult.parse(json);
@@ -123,11 +122,14 @@ Received "${apiKey}" instead.`
123
122
  });
124
123
  const response = await this.fetch(url.pathname + url.search, siteVersion);
125
124
  if (!response.ok) {
126
- console.error(`Failed to get typographies for [${typographyIds.join(", ")}]`, {
127
- response: await (0, import_rest_api_client.failedResponseBody)(response),
128
- siteVersion
129
- });
130
- return [];
125
+ const failedBody = await (0, import_rest_api_client.failedResponseBody)(response);
126
+ if (response.status === 404)
127
+ return [];
128
+ throw new import_rest_api_client.RestApiClientError(
129
+ `Failed to get typographies for [${typographyIds.join(", ")}]`,
130
+ response,
131
+ { body: failedBody, siteVersion }
132
+ );
131
133
  }
132
134
  const body = await response.json();
133
135
  return body;
@@ -141,11 +143,13 @@ Received "${apiKey}" instead.`
141
143
  });
142
144
  const response = await this.fetch(url.pathname + url.search, siteVersion);
143
145
  if (!response.ok) {
144
- console.error(`Failed to get swatches for ${ids.join(", ")}`, {
145
- response: await (0, import_rest_api_client.failedResponseBody)(response),
146
+ const failedBody = await (0, import_rest_api_client.failedResponseBody)(response);
147
+ if (response.status === 404)
148
+ return [];
149
+ throw new import_rest_api_client.RestApiClientError(`Failed to get swatches for ${ids.join(", ")}`, response, {
150
+ body: failedBody,
146
151
  siteVersion
147
152
  });
148
- return [];
149
153
  }
150
154
  return await response.json();
151
155
  }
@@ -164,12 +168,11 @@ Received "${apiKey}" instead.`
164
168
  const failedBody = await (0, import_rest_api_client.failedResponseBody)(response);
165
169
  if (response.status === 404)
166
170
  return ids.map(() => null);
167
- console.error(`Failed to get element trees for [${ids.join(", ")}]`, {
168
- response: failedBody,
169
- siteVersion,
170
- locale
171
- });
172
- throw new Error(`Failed to get element trees: ${responseError(response)}`);
171
+ throw new import_rest_api_client.RestApiClientError(
172
+ `Failed to get element trees for [${ids.join(", ")}]`,
173
+ response,
174
+ { body: failedBody, siteVersion, locale }
175
+ );
173
176
  }
174
177
  const responseBody = await response.json();
175
178
  return responseBody.map(
@@ -517,12 +520,11 @@ Received "${apiKey}" instead.`
517
520
  const failedBody = await (0, import_rest_api_client.failedResponseBody)(response);
518
521
  if (response.status === 404)
519
522
  return null;
520
- console.error(`Failed to get page snapshot for '${pathname}'`, {
521
- response: failedBody,
523
+ throw new import_rest_api_client.RestApiClientError(`Failed to get page snapshot for '${pathname}'`, response, {
524
+ body: failedBody,
522
525
  siteVersion,
523
526
  locale
524
527
  });
525
- throw new Error(`Failed to get page snapshot for '${pathname}': ${responseError(response)}`);
526
528
  }
527
529
  const document = await response.json();
528
530
  const baseLocalizedPage = document.localizedPages.find(({ parentId }) => parentId == null);
@@ -556,12 +558,11 @@ Received "${apiKey}" instead.`
556
558
  if (response.status === 404) {
557
559
  return null;
558
560
  }
559
- console.error(`Failed to get component snapshot for '${id}':`, {
560
- response: failedBody,
561
+ throw new import_rest_api_client.RestApiClientError(`Failed to get component snapshot for '${id}'`, response, {
562
+ body: failedBody,
561
563
  siteVersion,
562
564
  locale
563
565
  });
564
- throw new Error(`Failed to get component snapshot for '${id}': ${responseError(response)}`);
565
566
  }
566
567
  const responseBody = await response.json();
567
568
  const parsed = Schema.componentDocumentResponse.parse(responseBody);
@@ -684,14 +685,9 @@ Received "${apiKey}" instead.`
684
685
  return (0, import_merge.mergeTranslatedContent)(this.getElementDescriptors(), elementTree, translatedData);
685
686
  }
686
687
  async readPreviewToken(token) {
687
- const response = await fetch(new URL("v1/preview-tokens/reads", this.apiOrigin).toString(), {
688
+ const response = await this.fetch("v1/preview-tokens/reads", null, {
688
689
  method: "POST",
689
- headers: {
690
- "x-api-key": this.apiKey,
691
- "makeswift-site-api-key": this.apiKey,
692
- "makeswift-runtime-version": "0.28.8-canary.9",
693
- "content-type": "application/json"
694
- },
690
+ headers: { "content-type": "application/json" },
695
691
  body: JSON.stringify({ token }),
696
692
  cache: "no-store"
697
693
  });
@@ -701,12 +697,13 @@ Received "${apiKey}" instead.`
701
697
  console.error(`Preview token is invalid or expired`, {
702
698
  response: failedBody
703
699
  });
704
- } else if (response.status !== 404) {
705
- console.error(`Failed to verify preview token`, {
706
- response: failedBody
707
- });
700
+ return null;
708
701
  }
709
- return null;
702
+ if (response.status === 404)
703
+ return null;
704
+ throw new import_rest_api_client.RestApiClientError(`Failed to verify preview token`, response, {
705
+ body: failedBody
706
+ });
710
707
  }
711
708
  const json = await response.json();
712
709
  const parsed = Schema.previewTokenPayload.safeParse(json);
@@ -720,11 +717,13 @@ Received "${apiKey}" instead.`
720
717
  async unstable_getFonts(siteVersion = null) {
721
718
  const response = await this.fetch("v1_unstable/fonts", siteVersion);
722
719
  if (!response.ok) {
723
- console.error("Failed to fetch fonts", {
724
- response: await (0, import_rest_api_client.failedResponseBody)(response),
720
+ const failedBody = await (0, import_rest_api_client.failedResponseBody)(response);
721
+ if (response.status === 404)
722
+ return null;
723
+ throw new import_rest_api_client.RestApiClientError("Failed to fetch fonts", response, {
724
+ body: failedBody,
725
725
  siteVersion
726
726
  });
727
- return null;
728
727
  }
729
728
  const json = await response.json();
730
729
  const parsed = Schema.fonts.safeParse(json);
@@ -767,9 +766,6 @@ function getPagesQueryParams({
767
766
  params.set("locale", locale);
768
767
  return params;
769
768
  }
770
- function responseError(response) {
771
- return `${response.status} ${response.statusText}`;
772
- }
773
769
  // Annotate the CommonJS export names for ESM import in node:
774
770
  0 && (module.exports = {
775
771
  MakeswiftClient,