@makeswift/runtime 0.28.8-canary.8 → 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 (513) 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/EditableText/useSyncDOMSelection.js.map +1 -0
  205. package/dist/esm/runtimes/react/controls/rich-text/EditableText/useSyncWithBuilder.js.map +1 -0
  206. package/dist/esm/runtimes/react/controls/rich-text/rich-text.js +1 -1
  207. package/dist/esm/runtimes/react/controls/rich-text/rich-text.js.map +1 -1
  208. package/dist/esm/runtimes/react/controls/rich-text-v2/EditableTextV2/usePresetValue.js.map +1 -0
  209. package/dist/esm/runtimes/react/controls/rich-text-v2/EditableTextV2/useRemoteChanges.js.map +1 -0
  210. package/dist/esm/runtimes/react/controls/rich-text-v2/EditableTextV2/useSyncDOMSelection.js.map +1 -0
  211. package/dist/esm/runtimes/react/controls/slot/index.js +5 -0
  212. package/dist/esm/runtimes/react/controls/slot/index.js.map +1 -0
  213. package/dist/esm/runtimes/react/controls/slot/render-slot.js +13 -0
  214. package/dist/esm/runtimes/react/controls/slot/render-slot.js.map +1 -0
  215. package/dist/esm/runtimes/react/controls/{slot.js → slot/slot-value.js} +34 -23
  216. package/dist/esm/runtimes/react/controls/slot/slot-value.js.map +1 -0
  217. package/dist/esm/runtimes/react/element-imperative-handle.js +1 -1
  218. package/dist/esm/runtimes/react/element-imperative-handle.js.map +1 -1
  219. package/dist/esm/runtimes/react/hooks/use-control-instance.js +62 -0
  220. package/dist/esm/runtimes/react/hooks/use-control-instance.js.map +1 -0
  221. package/dist/esm/runtimes/react/hooks/use-control-instances.js +1 -11
  222. package/dist/esm/runtimes/react/hooks/use-control-instances.js.map +1 -1
  223. package/dist/esm/runtimes/react/hooks/use-disable-register-element.js +2 -2
  224. package/dist/esm/runtimes/react/hooks/use-disable-register-element.js.map +1 -1
  225. package/dist/esm/runtimes/react/hooks/use-resolved-props.js +10 -9
  226. package/dist/esm/runtimes/react/hooks/use-resolved-props.js.map +1 -1
  227. package/dist/esm/runtimes/react/hooks/use-resolved-value-override.js +35 -0
  228. package/dist/esm/runtimes/react/hooks/use-resolved-value-override.js.map +1 -0
  229. package/dist/esm/runtimes/react/hooks/use-selector.js +8 -2
  230. package/dist/esm/runtimes/react/hooks/use-selector.js.map +1 -1
  231. package/dist/esm/runtimes/react/testing/index.js +3 -0
  232. package/dist/esm/runtimes/react/testing/index.js.map +1 -0
  233. package/dist/esm/runtimes/react/testing/react-provider.js +14 -0
  234. package/dist/esm/runtimes/react/testing/react-provider.js.map +1 -0
  235. package/dist/esm/state/actions/index.js +2 -2
  236. package/dist/esm/state/actions/index.js.map +1 -1
  237. package/dist/esm/state/actions/internal/action-types.js +10 -0
  238. package/dist/esm/state/actions/internal/action-types.js.map +1 -0
  239. package/dist/esm/state/actions/internal/index.js +0 -9
  240. package/dist/esm/state/actions/internal/index.js.map +1 -1
  241. package/dist/esm/state/actions/internal/read-only-action-types.js +20 -0
  242. package/dist/esm/state/actions/internal/read-only-action-types.js.map +1 -0
  243. package/dist/esm/state/actions/internal/read-only-actions.js +1 -73
  244. package/dist/esm/state/actions/internal/read-only-actions.js.map +1 -1
  245. package/dist/esm/state/actions/internal/read-write-action-types.js +20 -0
  246. package/dist/esm/state/actions/internal/read-write-action-types.js.map +1 -0
  247. package/dist/esm/state/actions/internal/read-write-actions.js +108 -8
  248. package/dist/esm/state/actions/internal/read-write-actions.js.map +1 -1
  249. package/dist/esm/state/api-client/state.js +7 -0
  250. package/dist/esm/state/api-client/state.js.map +1 -1
  251. package/dist/esm/state/builder-api/action-types.js +25 -0
  252. package/dist/esm/state/builder-api/action-types.js.map +1 -0
  253. package/dist/esm/state/builder-api/actions.js +1 -24
  254. package/dist/esm/state/builder-api/actions.js.map +1 -1
  255. package/dist/esm/state/builder-api/proxy.js +2 -1
  256. package/dist/esm/state/builder-api/proxy.js.map +1 -1
  257. package/dist/esm/state/host-api/action-types.js +19 -0
  258. package/dist/esm/state/host-api/action-types.js.map +1 -0
  259. package/dist/esm/state/{host-api.js → host-api/actions.js} +2 -17
  260. package/dist/esm/state/host-api/actions.js.map +1 -0
  261. package/dist/esm/state/host-api/index.js +3 -0
  262. package/dist/esm/state/host-api/index.js.map +1 -0
  263. package/dist/esm/state/middleware/read-write/builder-api/index.js +1 -57
  264. package/dist/esm/state/middleware/read-write/builder-api/index.js.map +1 -1
  265. package/dist/esm/state/middleware/read-write/builder-api/initialize-connection.js +3 -0
  266. package/dist/esm/state/middleware/read-write/builder-api/initialize-connection.js.map +1 -1
  267. package/dist/esm/state/middleware/read-write/builder-api/middleware.js +65 -0
  268. package/dist/esm/state/middleware/read-write/builder-api/middleware.js.map +1 -0
  269. package/dist/esm/state/middleware/read-write/builder-api/mount-change-action-buffer.js +48 -0
  270. package/dist/esm/state/middleware/read-write/builder-api/mount-change-action-buffer.js.map +1 -0
  271. package/dist/esm/state/middleware/read-write/measure-box-models.js +3 -3
  272. package/dist/esm/state/middleware/read-write/measure-box-models.js.map +1 -1
  273. package/dist/esm/state/middleware/read-write/prop-controller-handles.js +13 -47
  274. package/dist/esm/state/middleware/read-write/prop-controller-handles.js.map +1 -1
  275. package/dist/esm/state/modules/api-resources.js +2 -2
  276. package/dist/esm/state/modules/api-resources.js.map +1 -1
  277. package/dist/esm/state/modules/breakpoints.js +2 -2
  278. package/dist/esm/state/modules/breakpoints.js.map +1 -1
  279. package/dist/esm/state/modules/components-meta.js +1 -1
  280. package/dist/esm/state/modules/components-meta.js.map +1 -1
  281. package/dist/esm/state/modules/element-trees.js +2 -2
  282. package/dist/esm/state/modules/element-trees.js.map +1 -1
  283. package/dist/esm/state/modules/is-in-builder.js +1 -1
  284. package/dist/esm/state/modules/is-in-builder.js.map +1 -1
  285. package/dist/esm/state/modules/is-read-only.js +1 -1
  286. package/dist/esm/state/modules/is-read-only.js.map +1 -1
  287. package/dist/esm/state/modules/locale.js +1 -1
  288. package/dist/esm/state/modules/locale.js.map +1 -1
  289. package/dist/esm/state/modules/localized-resources-map.js +1 -1
  290. package/dist/esm/state/modules/localized-resources-map.js.map +1 -1
  291. package/dist/esm/state/modules/{prop-controllers.js → prop-controller-descriptors.js} +2 -2
  292. package/dist/esm/state/modules/prop-controller-descriptors.js.map +1 -0
  293. package/dist/esm/state/modules/react-components.js +1 -1
  294. package/dist/esm/state/modules/react-components.js.map +1 -1
  295. package/dist/esm/state/modules/read-write/box-models.js +2 -2
  296. package/dist/esm/state/modules/read-write/box-models.js.map +1 -1
  297. package/dist/esm/state/modules/read-write/element-imperative-handles.js +3 -3
  298. package/dist/esm/state/modules/read-write/element-imperative-handles.js.map +1 -1
  299. package/dist/esm/state/modules/{prop-controller-handles.js → read-write/prop-controllers.js} +2 -2
  300. package/dist/esm/state/modules/read-write/prop-controllers.js.map +1 -0
  301. package/dist/esm/state/modules/read-write/resolved-value-overrides.js +43 -0
  302. package/dist/esm/state/modules/read-write/resolved-value-overrides.js.map +1 -0
  303. package/dist/esm/state/read-only-state.js +9 -41
  304. package/dist/esm/state/read-only-state.js.map +1 -1
  305. package/dist/esm/state/read-write-state.js +56 -1
  306. package/dist/esm/state/read-write-state.js.map +1 -1
  307. package/dist/esm/state/shared-api/action-types.js +9 -0
  308. package/dist/esm/state/shared-api/action-types.js.map +1 -0
  309. package/dist/esm/state/{shared-api.js → shared-api/actions.js} +2 -7
  310. package/dist/esm/state/shared-api/actions.js.map +1 -0
  311. package/dist/esm/state/shared-api/index.js +3 -0
  312. package/dist/esm/state/shared-api/index.js.map +1 -0
  313. package/dist/esm/state/store.js +3 -1
  314. package/dist/esm/state/store.js.map +1 -1
  315. package/dist/esm/state/translations/get.js.map +1 -1
  316. package/dist/esm/state/translations/merge.js +3 -1
  317. package/dist/esm/state/translations/merge.js.map +1 -1
  318. package/dist/esm/state/unified-state.js +4 -0
  319. package/dist/esm/state/unified-state.js.map +1 -1
  320. package/dist/esm/testing/breakpoints.js +9 -0
  321. package/dist/esm/testing/breakpoints.js.map +1 -0
  322. package/dist/esm/testing/element-data.js +76 -0
  323. package/dist/esm/testing/element-data.js.map +1 -0
  324. package/dist/esm/testing/read-write-state.js +8 -0
  325. package/dist/esm/testing/read-write-state.js.map +1 -0
  326. package/dist/esm/translations/index.js.map +1 -1
  327. package/dist/types/api/__tests__/rest-api-client.retries.test.d.ts +2 -0
  328. package/dist/types/api/__tests__/rest-api-client.retries.test.d.ts.map +1 -0
  329. package/dist/types/api/api-resources-client.d.ts +1 -0
  330. package/dist/types/api/api-resources-client.d.ts.map +1 -1
  331. package/dist/types/api/rest-api-client.d.ts +4 -0
  332. package/dist/types/api/rest-api-client.d.ts.map +1 -1
  333. package/dist/types/api/schema/page-pathname-slice.d.ts +2 -2
  334. package/dist/types/api/types.d.ts +1 -1
  335. package/dist/types/api/types.d.ts.map +1 -1
  336. package/dist/types/api-handler/handlers/webhook/diff-projection.d.ts +6 -6
  337. package/dist/types/api-handler/handlers/webhook/types.d.ts +20 -20
  338. package/dist/types/builder/host-to-builder-actions.d.ts.map +1 -1
  339. package/dist/types/client/index.d.ts.map +1 -1
  340. package/dist/types/components/builtin/Form/Form.d.ts +1 -1
  341. package/dist/types/components/builtin/Form/Form.d.ts.map +1 -1
  342. package/dist/types/components/hooks/useIsomorphicLayoutEffect.d.ts +2 -2
  343. package/dist/types/components/hooks/useIsomorphicLayoutEffect.d.ts.map +1 -1
  344. package/dist/types/controls/__tests__/slot.test.d.ts +3 -0
  345. package/dist/types/controls/__tests__/slot.test.d.ts.map +1 -0
  346. package/dist/types/controls/rich-text/control.d.ts +5 -1
  347. package/dist/types/controls/rich-text/control.d.ts.map +1 -1
  348. package/dist/types/controls/rich-text/rich-text.d.ts +2 -2
  349. package/dist/types/controls/rich-text/rich-text.d.ts.map +1 -1
  350. package/dist/types/controls/rich-text-v2/control.d.ts +6 -2
  351. package/dist/types/controls/rich-text-v2/control.d.ts.map +1 -1
  352. package/dist/types/controls/rich-text-v2/rich-text-v2.d.ts +2 -2
  353. package/dist/types/controls/rich-text-v2/rich-text-v2.d.ts.map +1 -1
  354. package/dist/types/controls/slot.d.ts +1 -1
  355. package/dist/types/controls/slot.d.ts.map +1 -1
  356. package/dist/types/locale.d.ts +1 -1
  357. package/dist/types/next/testing/breakpoints.d.ts +1 -3
  358. package/dist/types/next/testing/breakpoints.d.ts.map +1 -1
  359. package/dist/types/next/testing/element-data.d.ts +1 -54
  360. package/dist/types/next/testing/element-data.d.ts.map +1 -1
  361. package/dist/types/next/testing/react-runtime.d.ts.map +1 -1
  362. package/dist/types/prop-controllers/instances.d.ts +9 -3
  363. package/dist/types/prop-controllers/instances.d.ts.map +1 -1
  364. package/dist/types/runtimes/react/components/Element.d.ts.map +1 -1
  365. package/dist/types/runtimes/react/components/ElementRegistration.d.ts +4 -4
  366. package/dist/types/runtimes/react/components/ElementRegistration.d.ts.map +1 -1
  367. package/dist/types/runtimes/react/components/__tests__/element-registration.test.d.ts +3 -0
  368. package/dist/types/runtimes/react/components/__tests__/element-registration.test.d.ts.map +1 -0
  369. package/dist/types/runtimes/react/components/control-instances-context.d.ts +9 -0
  370. package/dist/types/runtimes/react/components/control-instances-context.d.ts.map +1 -0
  371. package/dist/types/runtimes/react/components/framework-context.d.ts.map +1 -1
  372. package/dist/types/runtimes/react/components/resolve-props.d.ts.map +1 -1
  373. package/dist/types/runtimes/react/controls/node-value/editable-node-value.d.ts +7 -0
  374. package/dist/types/runtimes/react/controls/node-value/editable-node-value.d.ts.map +1 -0
  375. package/dist/types/runtimes/react/controls/node-value/index.d.ts +6 -0
  376. package/dist/types/runtimes/react/controls/node-value/index.d.ts.map +1 -0
  377. package/dist/types/runtimes/react/controls/rich-text/EditableText/editable-text.d.ts +1 -1
  378. package/dist/types/runtimes/react/controls/rich-text/EditableText/editable-text.d.ts.map +1 -1
  379. package/dist/types/runtimes/react/controls/slot/index.d.ts +2 -0
  380. package/dist/types/runtimes/react/controls/slot/index.d.ts.map +1 -0
  381. package/dist/types/runtimes/react/controls/slot/render-slot.d.ts +9 -0
  382. package/dist/types/runtimes/react/controls/slot/render-slot.d.ts.map +1 -0
  383. package/dist/types/runtimes/react/controls/{slot.d.ts → slot/slot-value.d.ts} +7 -7
  384. package/dist/types/runtimes/react/controls/slot/slot-value.d.ts.map +1 -0
  385. package/dist/types/runtimes/react/element-imperative-handle.d.ts +1 -1
  386. package/dist/types/runtimes/react/element-imperative-handle.d.ts.map +1 -1
  387. package/dist/types/runtimes/react/hooks/__tests__/use-control-instance.test.d.ts +3 -0
  388. package/dist/types/runtimes/react/hooks/__tests__/use-control-instance.test.d.ts.map +1 -0
  389. package/dist/types/runtimes/react/hooks/use-control-instance.d.ts +7 -0
  390. package/dist/types/runtimes/react/hooks/use-control-instance.d.ts.map +1 -0
  391. package/dist/types/runtimes/react/hooks/use-control-instances.d.ts +1 -2
  392. package/dist/types/runtimes/react/hooks/use-control-instances.d.ts.map +1 -1
  393. package/dist/types/runtimes/react/hooks/use-disable-register-element.d.ts +1 -1
  394. package/dist/types/runtimes/react/hooks/use-disable-register-element.d.ts.map +1 -1
  395. package/dist/types/runtimes/react/hooks/use-resolved-props.d.ts +4 -3
  396. package/dist/types/runtimes/react/hooks/use-resolved-props.d.ts.map +1 -1
  397. package/dist/types/runtimes/react/hooks/use-resolved-value-override.d.ts +5 -0
  398. package/dist/types/runtimes/react/hooks/use-resolved-value-override.d.ts.map +1 -0
  399. package/dist/types/runtimes/react/hooks/use-selector.d.ts +2 -5
  400. package/dist/types/runtimes/react/hooks/use-selector.d.ts.map +1 -1
  401. package/dist/types/runtimes/react/hooks/use-store.d.ts +2 -4
  402. package/dist/types/runtimes/react/hooks/use-store.d.ts.map +1 -1
  403. package/dist/types/runtimes/react/testing/index.d.ts +3 -0
  404. package/dist/types/runtimes/react/testing/index.d.ts.map +1 -0
  405. package/dist/types/runtimes/react/testing/react-provider.d.ts +8 -0
  406. package/dist/types/runtimes/react/testing/react-provider.d.ts.map +1 -0
  407. package/dist/types/slate/InlineModePlugin/index.d.ts +1 -1
  408. package/dist/types/slate/LinkPlugin/getValue.d.ts.map +1 -1
  409. package/dist/types/slate/LinkPlugin/index.d.ts.map +1 -1
  410. package/dist/types/slate/TypographyPlugin/getValue.d.ts.map +1 -1
  411. package/dist/types/slate/TypographyPlugin/index.d.ts.map +1 -1
  412. package/dist/types/state/__tests__/test-store.d.ts +2 -4
  413. package/dist/types/state/__tests__/test-store.d.ts.map +1 -1
  414. package/dist/types/state/actions/index.d.ts +9 -6
  415. package/dist/types/state/actions/index.d.ts.map +1 -1
  416. package/dist/types/state/actions/internal/action-types.d.ts +29 -0
  417. package/dist/types/state/actions/internal/action-types.d.ts.map +1 -0
  418. package/dist/types/state/actions/internal/index.d.ts +0 -25
  419. package/dist/types/state/actions/internal/index.d.ts.map +1 -1
  420. package/dist/types/state/actions/internal/read-only-action-types.d.ts +15 -0
  421. package/dist/types/state/actions/internal/read-only-action-types.d.ts.map +1 -0
  422. package/dist/types/state/actions/internal/read-only-actions.d.ts +3 -76
  423. package/dist/types/state/actions/internal/read-only-actions.d.ts.map +1 -1
  424. package/dist/types/state/actions/internal/read-write-action-types.d.ts +17 -0
  425. package/dist/types/state/actions/internal/read-write-action-types.d.ts.map +1 -0
  426. package/dist/types/state/actions/internal/read-write-actions.d.ts +89 -8
  427. package/dist/types/state/actions/internal/read-write-actions.d.ts.map +1 -1
  428. package/dist/types/state/api-client/state.d.ts +1 -0
  429. package/dist/types/state/api-client/state.d.ts.map +1 -1
  430. package/dist/types/state/builder-api/action-types.d.ts +22 -0
  431. package/dist/types/state/builder-api/action-types.d.ts.map +1 -0
  432. package/dist/types/state/builder-api/actions.d.ts +3 -23
  433. package/dist/types/state/builder-api/actions.d.ts.map +1 -1
  434. package/dist/types/state/builder-api/proxy.d.ts.map +1 -1
  435. package/dist/types/state/host-api/action-types.d.ts +17 -0
  436. package/dist/types/state/host-api/action-types.d.ts.map +1 -0
  437. package/dist/types/state/{host-api.d.ts → host-api/actions.d.ts} +7 -22
  438. package/dist/types/state/host-api/actions.d.ts.map +1 -0
  439. package/dist/types/state/host-api/index.d.ts +3 -0
  440. package/dist/types/state/host-api/index.d.ts.map +1 -0
  441. package/dist/types/state/middleware/read-write/__tests__/fixtures/operations.d.ts.map +1 -0
  442. package/dist/types/state/middleware/read-write/__tests__/fixtures/root-elements.d.ts.map +1 -0
  443. package/dist/types/state/middleware/read-write/__tests__/prop-controller-handles.test.d.ts +2 -0
  444. package/dist/types/state/middleware/read-write/__tests__/prop-controller-handles.test.d.ts.map +1 -0
  445. package/dist/types/state/middleware/read-write/__tests__/update-element-tree.test.d.ts +2 -0
  446. package/dist/types/state/middleware/read-write/__tests__/update-element-tree.test.d.ts.map +1 -0
  447. package/dist/types/state/middleware/read-write/builder-api/__tests__/middleware.test.d.ts +2 -0
  448. package/dist/types/state/middleware/read-write/builder-api/__tests__/middleware.test.d.ts.map +1 -0
  449. package/dist/types/state/middleware/read-write/builder-api/__tests__/mount-change-action-buffer.test.d.ts +2 -0
  450. package/dist/types/state/middleware/read-write/builder-api/__tests__/mount-change-action-buffer.test.d.ts.map +1 -0
  451. package/dist/types/state/middleware/read-write/builder-api/index.d.ts +1 -4
  452. package/dist/types/state/middleware/read-write/builder-api/index.d.ts.map +1 -1
  453. package/dist/types/state/middleware/read-write/builder-api/initialize-connection.d.ts.map +1 -1
  454. package/dist/types/state/middleware/read-write/builder-api/middleware.d.ts +5 -0
  455. package/dist/types/state/middleware/read-write/builder-api/middleware.d.ts.map +1 -0
  456. package/dist/types/state/middleware/read-write/builder-api/mount-change-action-buffer.d.ts +28 -0
  457. package/dist/types/state/middleware/read-write/builder-api/mount-change-action-buffer.d.ts.map +1 -0
  458. package/dist/types/state/middleware/read-write/prop-controller-handles.d.ts.map +1 -1
  459. package/dist/types/state/modules/element-trees.d.ts +1 -1
  460. package/dist/types/state/modules/element-trees.d.ts.map +1 -1
  461. package/dist/types/state/modules/{prop-controllers.d.ts → prop-controller-descriptors.d.ts} +1 -1
  462. package/dist/types/state/modules/prop-controller-descriptors.d.ts.map +1 -0
  463. package/dist/types/state/modules/{prop-controller-handles.d.ts → read-write/prop-controllers.d.ts} +4 -4
  464. package/dist/types/state/modules/{prop-controller-handles.d.ts.map → read-write/prop-controllers.d.ts.map} +1 -1
  465. package/dist/types/state/modules/read-write/resolved-value-overrides.d.ts +15 -0
  466. package/dist/types/state/modules/read-write/resolved-value-overrides.d.ts.map +1 -0
  467. package/dist/types/state/read-only-state.d.ts +6 -70
  468. package/dist/types/state/read-only-state.d.ts.map +1 -1
  469. package/dist/types/state/read-write-state.d.ts +74 -4
  470. package/dist/types/state/read-write-state.d.ts.map +1 -1
  471. package/dist/types/state/shared-api/action-types.d.ts +6 -0
  472. package/dist/types/state/shared-api/action-types.d.ts.map +1 -0
  473. package/dist/types/state/{shared-api.d.ts → shared-api/actions.d.ts} +3 -7
  474. package/dist/types/state/shared-api/actions.d.ts.map +1 -0
  475. package/dist/types/state/shared-api/index.d.ts +3 -0
  476. package/dist/types/state/shared-api/index.d.ts.map +1 -0
  477. package/dist/types/state/store.d.ts +4 -8
  478. package/dist/types/state/store.d.ts.map +1 -1
  479. package/dist/types/state/translations/get.d.ts +1 -1
  480. package/dist/types/state/translations/get.d.ts.map +1 -1
  481. package/dist/types/state/translations/merge.d.ts +1 -1
  482. package/dist/types/state/translations/merge.d.ts.map +1 -1
  483. package/dist/types/state/unified-state.d.ts +2 -0
  484. package/dist/types/state/unified-state.d.ts.map +1 -1
  485. package/dist/types/testing/breakpoints.d.ts +4 -0
  486. package/dist/types/testing/breakpoints.d.ts.map +1 -0
  487. package/dist/types/testing/element-data.d.ts +59 -0
  488. package/dist/types/testing/element-data.d.ts.map +1 -0
  489. package/dist/types/testing/read-write-state.d.ts +3 -0
  490. package/dist/types/testing/read-write-state.d.ts.map +1 -0
  491. package/dist/types/translations/index.d.ts +1 -1
  492. package/dist/types/translations/index.d.ts.map +1 -1
  493. package/package.json +7 -5
  494. package/dist/cjs/runtimes/react/controls/slot.js.map +0 -1
  495. package/dist/cjs/state/host-api.js.map +0 -1
  496. package/dist/cjs/state/modules/prop-controller-handles.js.map +0 -1
  497. package/dist/cjs/state/modules/prop-controllers.js.map +0 -1
  498. package/dist/cjs/state/shared-api.js.map +0 -1
  499. package/dist/esm/runtimes/react/controls/slot.js.map +0 -1
  500. package/dist/esm/state/host-api.js.map +0 -1
  501. package/dist/esm/state/modules/prop-controller-handles.js.map +0 -1
  502. package/dist/esm/state/modules/prop-controllers.js.map +0 -1
  503. package/dist/esm/state/shared-api.js.map +0 -1
  504. package/dist/types/runtimes/react/controls/slot.d.ts.map +0 -1
  505. package/dist/types/state/__tests__/fixtures/operations.d.ts.map +0 -1
  506. package/dist/types/state/__tests__/fixtures/root-elements.d.ts.map +0 -1
  507. package/dist/types/state/__tests__/react-builder-preview.test.d.ts +0 -2
  508. package/dist/types/state/__tests__/react-builder-preview.test.d.ts.map +0 -1
  509. package/dist/types/state/host-api.d.ts.map +0 -1
  510. package/dist/types/state/modules/prop-controllers.d.ts.map +0 -1
  511. package/dist/types/state/shared-api.d.ts.map +0 -1
  512. /package/dist/types/state/{__tests__ → middleware/read-write/__tests__}/fixtures/operations.d.ts +0 -0
  513. /package/dist/types/state/{__tests__ → middleware/read-write/__tests__}/fixtures/root-elements.d.ts +0 -0
@@ -1,4 +1,9 @@
1
+ import ky, { HTTPError, isHTTPError } from "ky";
1
2
  import * as Schema from "./schema";
3
+ const RetryBackoffConfig = {
4
+ MaxAttempts: 3,
5
+ MaxDelayMs: 5e3
6
+ };
2
7
  class MakeswiftRestAPIClient {
3
8
  _fetch;
4
9
  apiKey;
@@ -8,7 +13,28 @@ class MakeswiftRestAPIClient {
8
13
  apiKey,
9
14
  apiOrigin
10
15
  }) {
11
- this._fetch = fetch;
16
+ this._fetch = ky.create({
17
+ fetch,
18
+ timeout: false,
19
+ retry: {
20
+ statusCodes: [429],
21
+ limit: RetryBackoffConfig.MaxAttempts,
22
+ backoffLimit: RetryBackoffConfig.MaxDelayMs,
23
+ delay: (attemptCount) => 2 ** (attemptCount - 1) * 1e3,
24
+ jitter: true
25
+ },
26
+ hooks: {
27
+ beforeRetry: [
28
+ async ({ request, error, retryCount }) => {
29
+ console.warn(
30
+ `Request to ${request.url} failed with ${error}. Retrying (${retryCount}/${RetryBackoffConfig.MaxAttempts})`
31
+ );
32
+ if (isHTTPError(error))
33
+ await failedResponseBody(error.response);
34
+ }
35
+ ]
36
+ }
37
+ });
12
38
  this.apiKey = apiKey;
13
39
  this.apiOrigin = apiOrigin;
14
40
  }
@@ -16,13 +42,12 @@ class MakeswiftRestAPIClient {
16
42
  const response = await this.fetch(`v3/swatches/${swatchId}`, siteVersion);
17
43
  if (!response.ok) {
18
44
  const failedBody = await failedResponseBody(response);
19
- if (response.status !== 404) {
20
- console.error(`Failed to get swatch '${swatchId}'`, {
21
- response: failedBody,
22
- siteVersion
23
- });
24
- }
25
- return null;
45
+ if (response.status === 404)
46
+ return null;
47
+ throw new RestApiClientError(`Failed to get swatch '${swatchId}'`, response, {
48
+ body: failedBody,
49
+ siteVersion
50
+ });
26
51
  }
27
52
  const swatch = await response.json();
28
53
  return swatch;
@@ -31,13 +56,12 @@ class MakeswiftRestAPIClient {
31
56
  const response = await this.fetch(`v3/typographies/${typographyId}`, siteVersion);
32
57
  if (!response.ok) {
33
58
  const failedBody = await failedResponseBody(response);
34
- if (response.status !== 404) {
35
- console.error(`Failed to get typography '${typographyId}'`, {
36
- response: failedBody,
37
- siteVersion
38
- });
39
- }
40
- return null;
59
+ if (response.status === 404)
60
+ return null;
61
+ throw new RestApiClientError(`Failed to get typography '${typographyId}'`, response, {
62
+ body: failedBody,
63
+ siteVersion
64
+ });
41
65
  }
42
66
  const typography = await response.json();
43
67
  return typography;
@@ -46,13 +70,12 @@ class MakeswiftRestAPIClient {
46
70
  const response = await this.fetch(`v3/global-elements/${globalElementId}`, siteVersion);
47
71
  if (!response.ok) {
48
72
  const failedBody = await failedResponseBody(response);
49
- if (response.status !== 404) {
50
- console.error(`Failed to get global element '${globalElementId}'`, {
51
- response: failedBody,
52
- siteVersion
53
- });
54
- }
55
- return null;
73
+ if (response.status === 404)
74
+ return null;
75
+ throw new RestApiClientError(`Failed to get global element '${globalElementId}'`, response, {
76
+ body: failedBody,
77
+ siteVersion
78
+ });
56
79
  }
57
80
  const globalElement = await response.json();
58
81
  return globalElement;
@@ -64,14 +87,13 @@ class MakeswiftRestAPIClient {
64
87
  );
65
88
  if (!response.ok) {
66
89
  const failedBody = await failedResponseBody(response);
67
- if (response.status !== 404) {
68
- console.error(`Failed to get localized global element '${globalElementId}'`, {
69
- response: failedBody,
70
- siteVersion,
71
- locale
72
- });
73
- }
74
- return null;
90
+ if (response.status === 404)
91
+ return null;
92
+ throw new RestApiClientError(
93
+ `Failed to get localized global element '${globalElementId}'`,
94
+ response,
95
+ { body: failedBody, siteVersion, locale }
96
+ );
75
97
  }
76
98
  const localizedGlobalElement = await response.json();
77
99
  return localizedGlobalElement;
@@ -85,12 +107,14 @@ class MakeswiftRestAPIClient {
85
107
  url.searchParams.set("locale", locale);
86
108
  const response = await this.fetch(url.pathname + url.search, siteVersion);
87
109
  if (!response.ok) {
88
- console.error(`Failed to get page pathname slice(s) for ${pageIds.join(", ")}`, {
89
- response: await failedResponseBody(response),
90
- siteVersion,
91
- locale
92
- });
93
- return [];
110
+ const failedBody = await failedResponseBody(response);
111
+ if (response.status === 404)
112
+ return [];
113
+ throw new RestApiClientError(
114
+ `Failed to get page pathname slice(s) for ${pageIds.join(", ")}`,
115
+ response,
116
+ { body: failedBody, siteVersion, locale }
117
+ );
94
118
  }
95
119
  const json = await response.json();
96
120
  const pagePathnameSlices = Schema.pagePathnameSlices.parse(json);
@@ -113,7 +137,7 @@ class MakeswiftRestAPIClient {
113
137
  const requestHeaders = new Headers({
114
138
  "x-api-key": this.apiKey,
115
139
  "makeswift-site-api-key": this.apiKey,
116
- "makeswift-runtime-version": "0.28.8-canary.8"
140
+ "makeswift-runtime-version": "0.28.8"
117
141
  });
118
142
  if (siteVersion?.token) {
119
143
  requestUrl.searchParams.set("version", siteVersion.version);
@@ -124,12 +148,17 @@ class MakeswiftRestAPIClient {
124
148
  requestHeaders.set(key, value);
125
149
  });
126
150
  }
127
- const response = await this._fetch(requestUrl.toString(), {
128
- ...init,
129
- headers: requestHeaders,
130
- ...siteVersion != null ? { cache: "no-store" } : {}
131
- });
132
- return response;
151
+ try {
152
+ return await this._fetch(requestUrl.toString(), {
153
+ ...init,
154
+ headers: requestHeaders,
155
+ ...siteVersion != null ? { cache: "no-store" } : {}
156
+ });
157
+ } catch (error) {
158
+ if (error instanceof HTTPError)
159
+ return error.response;
160
+ throw error;
161
+ }
133
162
  }
134
163
  }
135
164
  async function failedResponseBody(response) {
@@ -144,8 +173,20 @@ async function failedResponseBody(response) {
144
173
  return `Failed to extract response body: ${e}`;
145
174
  }
146
175
  }
176
+ function responseError(response) {
177
+ return `${response.status} ${response.statusText}`;
178
+ }
179
+ class RestApiClientError extends Error {
180
+ status;
181
+ constructor(message, response, cause) {
182
+ super(`${message}: ${responseError(response)}`, { cause });
183
+ this.name = "RestApiClientError";
184
+ this.status = response.status;
185
+ }
186
+ }
147
187
  export {
148
188
  MakeswiftRestAPIClient,
189
+ RestApiClientError,
149
190
  failedResponseBody
150
191
  };
151
192
  //# 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":[]}
@@ -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":"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":"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":[]}
@@ -8,7 +8,7 @@ async function manifestHandler(req, { apiKey, manifest }) {
8
8
  return ApiResponse.json({ message: "Unauthorized" }, { status: 401 });
9
9
  }
10
10
  return ApiResponse.json({
11
- version: "0.28.8-canary.8",
11
+ version: "0.28.8",
12
12
  interactionMode: true,
13
13
  clientSideNavigation: false,
14
14
  elementFromPoint: false,
@@ -1,8 +1,6 @@
1
1
  import { isAction } from "@reduxjs/toolkit";
2
- import {
3
- ReadOnlyActionTypes
4
- } from "../state/actions/internal/read-only-actions";
5
- import { BuilderActionTypes } from "../state/builder-api/actions";
2
+ import { ReadOnlyActionTypes } from "../state/actions/internal/read-only-action-types";
3
+ import { BuilderActionTypes } from "../state/builder-api/action-types";
6
4
  const HostToBuilderActionTypes = {
7
5
  ...BuilderActionTypes,
8
6
  REGISTER_COMPONENT: ReadOnlyActionTypes.REGISTER_COMPONENT,
@@ -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,SAAS,gBAAgB;AAMzB;AAAA,EAGE;AAAA,OACK;AAEP,SAA6B,0BAA0B;AAEhD,MAAM,2BAA2B;AAAA,EACtC,GAAG;AAAA,EACH,oBAAoB,oBAAoB;AAAA,EACxC,sBAAsB,oBAAoB;AAC5C;AAOO,SAAS,sBAAsB,QAAgD;AACpF,SAAO,SAAS,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,SAAS,gBAAgB;AAMzB,SAAS,2BAA2B;AAMpC,SAAS,0BAA0B;AAG5B,MAAM,2BAA2B;AAAA,EACtC,GAAG;AAAA,EACH,oBAAoB,oBAAoB;AAAA,EACxC,sBAAsB,oBAAoB;AAC5C;AAOO,SAAS,sBAAsB,QAAgD;AACpF,SAAO,SAAS,MAAM,KAAK,OAAO,OAAO,0BAA0B,OAAO,IAAI;AAChF;","names":[]}
@@ -3,7 +3,11 @@ import {
3
3
  } from "../api/types";
4
4
  import { CacheData } from "../api/api-resources-client";
5
5
  import { MakeswiftGraphQLApiClient } from "../api/graphql-api-client";
6
- import { MakeswiftRestAPIClient, failedResponseBody } from "../api/rest-api-client";
6
+ import {
7
+ MakeswiftRestAPIClient,
8
+ failedResponseBody,
9
+ RestApiClientError
10
+ } from "../api/rest-api-client";
7
11
  import {
8
12
  getElementChildren,
9
13
  getSwatchIds,
@@ -58,12 +62,12 @@ Received "${apiKey}" instead.`
58
62
  const queryParams = getPagesQueryParams(params);
59
63
  const response = await this.fetch(`v5/pages?${queryParams.toString()}`, siteVersion);
60
64
  if (!response.ok) {
61
- console.error("Failed to get pages", {
62
- response: await failedResponseBody(response),
65
+ const body = await failedResponseBody(response);
66
+ throw new RestApiClientError("Failed to get pages", response, {
67
+ body,
63
68
  siteVersion,
64
69
  params
65
70
  });
66
- throw new Error(`Failed to get pages: ${responseError(response)}`);
67
71
  }
68
72
  const result = await response.json();
69
73
  const parsedResponse = Schema.getPagesResult.safeParse(result);
@@ -84,12 +88,11 @@ Received "${apiKey}" instead.`
84
88
  const failedBody = await failedResponseBody(response);
85
89
  if (response.status === 404)
86
90
  return null;
87
- console.error(`Failed to get page snapshot for '${pathname}'`, {
88
- response: failedBody,
91
+ throw new RestApiClientError(`Failed to get page snapshot for '${pathname}'`, response, {
92
+ body: failedBody,
89
93
  siteVersion,
90
94
  locale
91
95
  });
92
- throw new Error(`Failed to get page snapshot for '${pathname}': ${responseError(response)}`);
93
96
  }
94
97
  const json = await response.json();
95
98
  return Schema.getPageResult.parse(json);
@@ -103,11 +106,14 @@ Received "${apiKey}" instead.`
103
106
  });
104
107
  const response = await this.fetch(url.pathname + url.search, siteVersion);
105
108
  if (!response.ok) {
106
- console.error(`Failed to get typographies for [${typographyIds.join(", ")}]`, {
107
- response: await failedResponseBody(response),
108
- siteVersion
109
- });
110
- return [];
109
+ const failedBody = await failedResponseBody(response);
110
+ if (response.status === 404)
111
+ return [];
112
+ throw new RestApiClientError(
113
+ `Failed to get typographies for [${typographyIds.join(", ")}]`,
114
+ response,
115
+ { body: failedBody, siteVersion }
116
+ );
111
117
  }
112
118
  const body = await response.json();
113
119
  return body;
@@ -121,11 +127,13 @@ Received "${apiKey}" instead.`
121
127
  });
122
128
  const response = await this.fetch(url.pathname + url.search, siteVersion);
123
129
  if (!response.ok) {
124
- console.error(`Failed to get swatches for ${ids.join(", ")}`, {
125
- response: await failedResponseBody(response),
130
+ const failedBody = await failedResponseBody(response);
131
+ if (response.status === 404)
132
+ return [];
133
+ throw new RestApiClientError(`Failed to get swatches for ${ids.join(", ")}`, response, {
134
+ body: failedBody,
126
135
  siteVersion
127
136
  });
128
- return [];
129
137
  }
130
138
  return await response.json();
131
139
  }
@@ -144,12 +152,11 @@ Received "${apiKey}" instead.`
144
152
  const failedBody = await failedResponseBody(response);
145
153
  if (response.status === 404)
146
154
  return ids.map(() => null);
147
- console.error(`Failed to get element trees for [${ids.join(", ")}]`, {
148
- response: failedBody,
149
- siteVersion,
150
- locale
151
- });
152
- throw new Error(`Failed to get element trees: ${responseError(response)}`);
155
+ throw new RestApiClientError(
156
+ `Failed to get element trees for [${ids.join(", ")}]`,
157
+ response,
158
+ { body: failedBody, siteVersion, locale }
159
+ );
153
160
  }
154
161
  const responseBody = await response.json();
155
162
  return responseBody.map(
@@ -497,12 +504,11 @@ Received "${apiKey}" instead.`
497
504
  const failedBody = await failedResponseBody(response);
498
505
  if (response.status === 404)
499
506
  return null;
500
- console.error(`Failed to get page snapshot for '${pathname}'`, {
501
- response: failedBody,
507
+ throw new RestApiClientError(`Failed to get page snapshot for '${pathname}'`, response, {
508
+ body: failedBody,
502
509
  siteVersion,
503
510
  locale
504
511
  });
505
- throw new Error(`Failed to get page snapshot for '${pathname}': ${responseError(response)}`);
506
512
  }
507
513
  const document = await response.json();
508
514
  const baseLocalizedPage = document.localizedPages.find(({ parentId }) => parentId == null);
@@ -536,12 +542,11 @@ Received "${apiKey}" instead.`
536
542
  if (response.status === 404) {
537
543
  return null;
538
544
  }
539
- console.error(`Failed to get component snapshot for '${id}':`, {
540
- response: failedBody,
545
+ throw new RestApiClientError(`Failed to get component snapshot for '${id}'`, response, {
546
+ body: failedBody,
541
547
  siteVersion,
542
548
  locale
543
549
  });
544
- throw new Error(`Failed to get component snapshot for '${id}': ${responseError(response)}`);
545
550
  }
546
551
  const responseBody = await response.json();
547
552
  const parsed = Schema.componentDocumentResponse.parse(responseBody);
@@ -664,14 +669,9 @@ Received "${apiKey}" instead.`
664
669
  return mergeTranslatedContent(this.getElementDescriptors(), elementTree, translatedData);
665
670
  }
666
671
  async readPreviewToken(token) {
667
- const response = await fetch(new URL("v1/preview-tokens/reads", this.apiOrigin).toString(), {
672
+ const response = await this.fetch("v1/preview-tokens/reads", null, {
668
673
  method: "POST",
669
- headers: {
670
- "x-api-key": this.apiKey,
671
- "makeswift-site-api-key": this.apiKey,
672
- "makeswift-runtime-version": "0.28.8-canary.8",
673
- "content-type": "application/json"
674
- },
674
+ headers: { "content-type": "application/json" },
675
675
  body: JSON.stringify({ token }),
676
676
  cache: "no-store"
677
677
  });
@@ -681,12 +681,13 @@ Received "${apiKey}" instead.`
681
681
  console.error(`Preview token is invalid or expired`, {
682
682
  response: failedBody
683
683
  });
684
- } else if (response.status !== 404) {
685
- console.error(`Failed to verify preview token`, {
686
- response: failedBody
687
- });
684
+ return null;
688
685
  }
689
- return null;
686
+ if (response.status === 404)
687
+ return null;
688
+ throw new RestApiClientError(`Failed to verify preview token`, response, {
689
+ body: failedBody
690
+ });
690
691
  }
691
692
  const json = await response.json();
692
693
  const parsed = Schema.previewTokenPayload.safeParse(json);
@@ -700,11 +701,13 @@ Received "${apiKey}" instead.`
700
701
  async unstable_getFonts(siteVersion = null) {
701
702
  const response = await this.fetch("v1_unstable/fonts", siteVersion);
702
703
  if (!response.ok) {
703
- console.error("Failed to fetch fonts", {
704
- response: await failedResponseBody(response),
704
+ const failedBody = await failedResponseBody(response);
705
+ if (response.status === 404)
706
+ return null;
707
+ throw new RestApiClientError("Failed to fetch fonts", response, {
708
+ body: failedBody,
705
709
  siteVersion
706
710
  });
707
- return null;
708
711
  }
709
712
  const json = await response.json();
710
713
  const parsed = Schema.fonts.safeParse(json);
@@ -747,9 +750,6 @@ function getPagesQueryParams({
747
750
  params.set("locale", locale);
748
751
  return params;
749
752
  }
750
- function responseError(response) {
751
- return `${response.status} ${response.statusText}`;
752
- }
753
753
  export {
754
754
  MakeswiftClient,
755
755
  SnippetLocation,