@makeswift/runtime 0.14.5 → 0.16.0-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (472) hide show
  1. package/dist/cjs/api/react.js +3 -17
  2. package/dist/cjs/api/react.js.map +1 -1
  3. package/dist/cjs/api/resource-types.js +24 -0
  4. package/dist/cjs/api/resource-types.js.map +1 -0
  5. package/dist/cjs/builder/serialization/control-serialization.js +3 -2
  6. package/dist/cjs/builder/serialization/control-serialization.js.map +1 -1
  7. package/dist/cjs/components/builtin/Box/Box.js +1 -0
  8. package/dist/cjs/components/builtin/Box/Box.js.map +1 -1
  9. package/dist/cjs/components/builtin/Box/animations.js +1 -0
  10. package/dist/cjs/components/builtin/Box/animations.js.map +1 -1
  11. package/dist/cjs/components/builtin/Box/register.js +2 -3
  12. package/dist/cjs/components/builtin/Box/register.js.map +1 -1
  13. package/dist/cjs/components/builtin/Button/Button.js.map +1 -1
  14. package/dist/cjs/components/builtin/Button/register.js +15 -15
  15. package/dist/cjs/components/builtin/Button/register.js.map +1 -1
  16. package/dist/cjs/components/builtin/Carousel/Carousel.js +1 -0
  17. package/dist/cjs/components/builtin/Carousel/Carousel.js.map +1 -1
  18. package/dist/cjs/components/builtin/Carousel/register.js +2 -3
  19. package/dist/cjs/components/builtin/Carousel/register.js.map +1 -1
  20. package/dist/cjs/components/builtin/Countdown/Countdown.js +1 -0
  21. package/dist/cjs/components/builtin/Countdown/Countdown.js.map +1 -1
  22. package/dist/cjs/components/builtin/Countdown/register.js +2 -3
  23. package/dist/cjs/components/builtin/Countdown/register.js.map +1 -1
  24. package/dist/cjs/components/builtin/Divider/register.js +2 -3
  25. package/dist/cjs/components/builtin/Divider/register.js.map +1 -1
  26. package/dist/cjs/components/builtin/Embed/Embed.js +1 -0
  27. package/dist/cjs/components/builtin/Embed/Embed.js.map +1 -1
  28. package/dist/cjs/components/builtin/Embed/register.js +2 -3
  29. package/dist/cjs/components/builtin/Embed/register.js.map +1 -1
  30. package/dist/cjs/components/builtin/Form/Form.js +3 -2
  31. package/dist/cjs/components/builtin/Form/Form.js.map +1 -1
  32. package/dist/cjs/components/builtin/Form/context/FormContext.js +1 -0
  33. package/dist/cjs/components/builtin/Form/context/FormContext.js.map +1 -1
  34. package/dist/cjs/components/builtin/Form/register.js +4 -4
  35. package/dist/cjs/components/builtin/Form/register.js.map +1 -1
  36. package/dist/cjs/components/builtin/Image/Image.js +1 -0
  37. package/dist/cjs/components/builtin/Image/Image.js.map +1 -1
  38. package/dist/cjs/components/builtin/Image/register.js +4 -4
  39. package/dist/cjs/components/builtin/Image/register.js.map +1 -1
  40. package/dist/cjs/components/builtin/Navigation/Navigation.js +1 -0
  41. package/dist/cjs/components/builtin/Navigation/Navigation.js.map +1 -1
  42. package/dist/cjs/components/builtin/Navigation/components/DropDownButton/index.js.map +1 -1
  43. package/dist/cjs/components/builtin/Navigation/components/MobileMenu/components/MobileDropDownButton/index.js.map +1 -1
  44. package/dist/cjs/components/builtin/Navigation/register.js +4 -4
  45. package/dist/cjs/components/builtin/Navigation/register.js.map +1 -1
  46. package/dist/cjs/components/builtin/Root/register.js +2 -3
  47. package/dist/cjs/components/builtin/Root/register.js.map +1 -1
  48. package/dist/cjs/components/builtin/SocialLinks/register.js +2 -3
  49. package/dist/cjs/components/builtin/SocialLinks/register.js.map +1 -1
  50. package/dist/cjs/components/builtin/Text/register.js +2 -3
  51. package/dist/cjs/components/builtin/Text/register.js.map +1 -1
  52. package/dist/cjs/components/builtin/Video/Video.js +1 -0
  53. package/dist/cjs/components/builtin/Video/Video.js.map +1 -1
  54. package/dist/cjs/components/builtin/Video/register.js +2 -3
  55. package/dist/cjs/components/builtin/Video/register.js.map +1 -1
  56. package/dist/cjs/components/hooks/index.js +3 -1
  57. package/dist/cjs/components/hooks/index.js.map +1 -1
  58. package/dist/cjs/components/hooks/usePageSnippets.js +93 -0
  59. package/dist/cjs/components/hooks/usePageSnippets.js.map +1 -0
  60. package/dist/cjs/components/hooks/usePropControllerLinkData.js +34 -0
  61. package/dist/cjs/components/hooks/usePropControllerLinkData.js.map +1 -0
  62. package/dist/cjs/components/hooks/useRouterLocaleSync.js +49 -0
  63. package/dist/cjs/components/hooks/useRouterLocaleSync.js.map +1 -0
  64. package/dist/cjs/components/page/BodySnippet.js +1 -1
  65. package/dist/cjs/components/page/BodySnippet.js.map +1 -1
  66. package/dist/cjs/components/page/HeadSnippet.js +134 -0
  67. package/dist/cjs/components/page/HeadSnippet.js.map +1 -0
  68. package/dist/cjs/components/page/Page.js +9 -178
  69. package/dist/cjs/components/page/Page.js.map +1 -1
  70. package/dist/cjs/components/page/PageHead.js +109 -0
  71. package/dist/cjs/components/page/PageHead.js.map +1 -0
  72. package/dist/cjs/components/shared/BackgroundsContainer/index.js +1 -0
  73. package/dist/cjs/components/shared/BackgroundsContainer/index.js.map +1 -1
  74. package/dist/cjs/components/shared/Link/index.js +5 -1
  75. package/dist/cjs/components/shared/Link/index.js.map +1 -1
  76. package/dist/cjs/controls/control.js +2 -1
  77. package/dist/cjs/controls/control.js.map +1 -1
  78. package/dist/cjs/controls/rich-text/introspection.js +2 -9
  79. package/dist/cjs/controls/rich-text/introspection.js.map +1 -1
  80. package/dist/cjs/index.js +0 -2
  81. package/dist/cjs/index.js.map +1 -1
  82. package/dist/cjs/next/api-handler/handlers/element-tree.js +17 -8
  83. package/dist/cjs/next/api-handler/handlers/element-tree.js.map +1 -1
  84. package/dist/cjs/next/api-handler/handlers/fonts.js +7 -2
  85. package/dist/cjs/next/api-handler/handlers/fonts.js.map +1 -1
  86. package/dist/cjs/next/api-handler/handlers/manifest.js +20 -8
  87. package/dist/cjs/next/api-handler/handlers/manifest.js.map +1 -1
  88. package/dist/cjs/next/api-handler/handlers/merge-translated-data.js +17 -6
  89. package/dist/cjs/next/api-handler/handlers/merge-translated-data.js.map +1 -1
  90. package/dist/cjs/next/api-handler/handlers/proxy-draft-mode.js +69 -0
  91. package/dist/cjs/next/api-handler/handlers/proxy-draft-mode.js.map +1 -0
  92. package/dist/cjs/next/api-handler/handlers/proxy-preview-mode.js +55 -44
  93. package/dist/cjs/next/api-handler/handlers/proxy-preview-mode.js.map +1 -1
  94. package/dist/cjs/next/api-handler/handlers/revalidate.js +27 -16
  95. package/dist/cjs/next/api-handler/handlers/revalidate.js.map +1 -1
  96. package/dist/cjs/next/api-handler/handlers/translatable-data.js +16 -5
  97. package/dist/cjs/next/api-handler/handlers/translatable-data.js.map +1 -1
  98. package/dist/cjs/next/api-handler/index.js +68 -34
  99. package/dist/cjs/next/api-handler/index.js.map +1 -1
  100. package/dist/cjs/next/client.js +3 -2
  101. package/dist/cjs/next/client.js.map +1 -1
  102. package/dist/cjs/next/components/head-tags.js +77 -0
  103. package/dist/cjs/next/components/head-tags.js.map +1 -0
  104. package/dist/cjs/next/components/page.js +56 -0
  105. package/dist/cjs/next/components/page.js.map +1 -0
  106. package/dist/cjs/next/context/makeswift-host-api-client.js +46 -0
  107. package/dist/cjs/next/context/makeswift-host-api-client.js.map +1 -0
  108. package/dist/cjs/next/context/react-runtime.js +44 -0
  109. package/dist/cjs/next/context/react-runtime.js.map +1 -0
  110. package/dist/cjs/next/draft-mode/draft-mode-script.js +123 -0
  111. package/dist/cjs/next/draft-mode/draft-mode-script.js.map +1 -0
  112. package/dist/cjs/next/draft-mode/index.js +56 -0
  113. package/dist/cjs/next/draft-mode/index.js.map +1 -0
  114. package/dist/cjs/next/hooks/use-is-pages-router.js +37 -0
  115. package/dist/cjs/next/hooks/use-is-pages-router.js.map +1 -0
  116. package/dist/cjs/next/index.js +10 -36
  117. package/dist/cjs/next/index.js.map +1 -1
  118. package/dist/cjs/next/preview-mode.js +4 -2
  119. package/dist/cjs/next/preview-mode.js.map +1 -1
  120. package/dist/cjs/next/root-style-registry.js +90 -0
  121. package/dist/cjs/next/root-style-registry.js.map +1 -0
  122. package/dist/cjs/next/server.js +8 -2
  123. package/dist/cjs/next/server.js.map +1 -1
  124. package/dist/cjs/prop-controllers/copy/navigation-links.js +2 -2
  125. package/dist/cjs/prop-controllers/copy/navigation-links.js.map +1 -1
  126. package/dist/cjs/prop-controllers/copy.js +4 -3
  127. package/dist/cjs/prop-controllers/copy.js.map +1 -1
  128. package/dist/cjs/prop-controllers/descriptors.js +0 -6
  129. package/dist/cjs/prop-controllers/descriptors.js.map +1 -1
  130. package/dist/cjs/prop-controllers/index.js.map +1 -1
  131. package/dist/cjs/prop-controllers/introspection.js +3 -10
  132. package/dist/cjs/prop-controllers/introspection.js.map +1 -1
  133. package/dist/cjs/runtimes/react/components/Element.js +1 -0
  134. package/dist/cjs/runtimes/react/components/Element.js.map +1 -1
  135. package/dist/cjs/runtimes/react/components/LiveProvider.js +6 -13
  136. package/dist/cjs/runtimes/react/components/LiveProvider.js.map +1 -1
  137. package/dist/cjs/runtimes/react/components/PreviewProvider.js +6 -8
  138. package/dist/cjs/runtimes/react/components/PreviewProvider.js.map +1 -1
  139. package/dist/cjs/runtimes/react/components/RuntimeProvider.js +3 -3
  140. package/dist/cjs/runtimes/react/components/RuntimeProvider.js.map +1 -1
  141. package/dist/cjs/runtimes/react/controls/link.js +1 -1
  142. package/dist/cjs/runtimes/react/controls/link.js.map +1 -1
  143. package/dist/cjs/runtimes/react/controls/rich-text/rich-text.js +2 -4
  144. package/dist/cjs/runtimes/react/controls/rich-text/rich-text.js.map +1 -1
  145. package/dist/cjs/runtimes/react/controls/rich-text-v2/rich-text-v2.js +4 -11
  146. package/dist/cjs/runtimes/react/controls/rich-text-v2/rich-text-v2.js.map +1 -1
  147. package/dist/cjs/runtimes/react/controls.js +11 -0
  148. package/dist/cjs/runtimes/react/controls.js.map +1 -1
  149. package/dist/cjs/runtimes/react/hooks/makeswift-api.js +11 -10
  150. package/dist/cjs/runtimes/react/hooks/makeswift-api.js.map +1 -1
  151. package/dist/cjs/runtimes/react/hooks/use-document-key.js +1 -0
  152. package/dist/cjs/runtimes/react/hooks/use-document-key.js.map +1 -1
  153. package/dist/cjs/runtimes/react/hooks/use-page-id.js +1 -0
  154. package/dist/cjs/runtimes/react/hooks/use-page-id.js.map +1 -1
  155. package/dist/cjs/runtimes/react/hooks/use-store.js +1 -0
  156. package/dist/cjs/runtimes/react/hooks/use-store.js.map +1 -1
  157. package/dist/cjs/runtimes/react/use-global-style.js +15 -10
  158. package/dist/cjs/runtimes/react/use-global-style.js.map +1 -1
  159. package/dist/cjs/runtimes/react/use-style.js +7 -6
  160. package/dist/cjs/runtimes/react/use-style.js.map +1 -1
  161. package/dist/cjs/state/actions.js +0 -25
  162. package/dist/cjs/state/actions.js.map +1 -1
  163. package/dist/cjs/state/react-builder-preview.js +1 -24
  164. package/dist/cjs/state/react-builder-preview.js.map +1 -1
  165. package/dist/esm/api/react.js +2 -14
  166. package/dist/esm/api/react.js.map +1 -1
  167. package/dist/esm/api/resource-types.js +8 -0
  168. package/dist/esm/api/resource-types.js.map +1 -0
  169. package/dist/esm/builder/serialization/control-serialization.js +5 -2
  170. package/dist/esm/builder/serialization/control-serialization.js.map +1 -1
  171. package/dist/esm/components/builtin/Box/Box.js +1 -0
  172. package/dist/esm/components/builtin/Box/Box.js.map +1 -1
  173. package/dist/esm/components/builtin/Box/animations.js +1 -0
  174. package/dist/esm/components/builtin/Box/animations.js.map +1 -1
  175. package/dist/esm/components/builtin/Box/register.js +2 -3
  176. package/dist/esm/components/builtin/Box/register.js.map +1 -1
  177. package/dist/esm/components/builtin/Button/Button.js.map +1 -1
  178. package/dist/esm/components/builtin/Button/register.js +4 -4
  179. package/dist/esm/components/builtin/Button/register.js.map +1 -1
  180. package/dist/esm/components/builtin/Carousel/Carousel.js +1 -0
  181. package/dist/esm/components/builtin/Carousel/Carousel.js.map +1 -1
  182. package/dist/esm/components/builtin/Carousel/register.js +2 -3
  183. package/dist/esm/components/builtin/Carousel/register.js.map +1 -1
  184. package/dist/esm/components/builtin/Countdown/Countdown.js +1 -0
  185. package/dist/esm/components/builtin/Countdown/Countdown.js.map +1 -1
  186. package/dist/esm/components/builtin/Countdown/register.js +2 -3
  187. package/dist/esm/components/builtin/Countdown/register.js.map +1 -1
  188. package/dist/esm/components/builtin/Divider/register.js +2 -3
  189. package/dist/esm/components/builtin/Divider/register.js.map +1 -1
  190. package/dist/esm/components/builtin/Embed/Embed.js +1 -0
  191. package/dist/esm/components/builtin/Embed/Embed.js.map +1 -1
  192. package/dist/esm/components/builtin/Embed/register.js +2 -3
  193. package/dist/esm/components/builtin/Embed/register.js.map +1 -1
  194. package/dist/esm/components/builtin/Form/Form.js +3 -2
  195. package/dist/esm/components/builtin/Form/Form.js.map +1 -1
  196. package/dist/esm/components/builtin/Form/context/FormContext.js +1 -0
  197. package/dist/esm/components/builtin/Form/context/FormContext.js.map +1 -1
  198. package/dist/esm/components/builtin/Form/register.js +4 -4
  199. package/dist/esm/components/builtin/Form/register.js.map +1 -1
  200. package/dist/esm/components/builtin/Image/Image.js +1 -0
  201. package/dist/esm/components/builtin/Image/Image.js.map +1 -1
  202. package/dist/esm/components/builtin/Image/register.js +4 -4
  203. package/dist/esm/components/builtin/Image/register.js.map +1 -1
  204. package/dist/esm/components/builtin/Navigation/Navigation.js +1 -0
  205. package/dist/esm/components/builtin/Navigation/Navigation.js.map +1 -1
  206. package/dist/esm/components/builtin/Navigation/components/DropDownButton/index.js.map +1 -1
  207. package/dist/esm/components/builtin/Navigation/components/MobileMenu/components/MobileDropDownButton/index.js.map +1 -1
  208. package/dist/esm/components/builtin/Navigation/register.js +4 -4
  209. package/dist/esm/components/builtin/Navigation/register.js.map +1 -1
  210. package/dist/esm/components/builtin/Root/register.js +2 -3
  211. package/dist/esm/components/builtin/Root/register.js.map +1 -1
  212. package/dist/esm/components/builtin/SocialLinks/register.js +2 -3
  213. package/dist/esm/components/builtin/SocialLinks/register.js.map +1 -1
  214. package/dist/esm/components/builtin/Text/register.js +2 -3
  215. package/dist/esm/components/builtin/Text/register.js.map +1 -1
  216. package/dist/esm/components/builtin/Video/Video.js +1 -0
  217. package/dist/esm/components/builtin/Video/Video.js.map +1 -1
  218. package/dist/esm/components/builtin/Video/register.js +2 -3
  219. package/dist/esm/components/builtin/Video/register.js.map +1 -1
  220. package/dist/esm/components/hooks/index.js +1 -0
  221. package/dist/esm/components/hooks/index.js.map +1 -1
  222. package/dist/esm/components/hooks/usePageSnippets.js +59 -0
  223. package/dist/esm/components/hooks/usePageSnippets.js.map +1 -0
  224. package/dist/esm/components/hooks/usePropControllerLinkData.js +12 -0
  225. package/dist/esm/components/hooks/usePropControllerLinkData.js.map +1 -0
  226. package/dist/esm/components/hooks/useRouterLocaleSync.js +25 -0
  227. package/dist/esm/components/hooks/useRouterLocaleSync.js.map +1 -0
  228. package/dist/esm/components/page/BodySnippet.js +1 -1
  229. package/dist/esm/components/page/BodySnippet.js.map +1 -1
  230. package/dist/esm/components/page/HeadSnippet.js +100 -0
  231. package/dist/esm/components/page/HeadSnippet.js.map +1 -0
  232. package/dist/esm/components/page/Page.js +7 -166
  233. package/dist/esm/components/page/Page.js.map +1 -1
  234. package/dist/esm/components/page/PageHead.js +85 -0
  235. package/dist/esm/components/page/PageHead.js.map +1 -0
  236. package/dist/esm/components/shared/BackgroundsContainer/index.js +1 -0
  237. package/dist/esm/components/shared/BackgroundsContainer/index.js.map +1 -1
  238. package/dist/esm/components/shared/Link/index.js +5 -1
  239. package/dist/esm/components/shared/Link/index.js.map +1 -1
  240. package/dist/esm/controls/control.js +2 -1
  241. package/dist/esm/controls/control.js.map +1 -1
  242. package/dist/esm/controls/rich-text/introspection.js +2 -9
  243. package/dist/esm/controls/rich-text/introspection.js.map +1 -1
  244. package/dist/esm/index.js +0 -2
  245. package/dist/esm/index.js.map +1 -1
  246. package/dist/esm/next/api-handler/handlers/element-tree.js +17 -8
  247. package/dist/esm/next/api-handler/handlers/element-tree.js.map +1 -1
  248. package/dist/esm/next/api-handler/handlers/fonts.js +7 -2
  249. package/dist/esm/next/api-handler/handlers/fonts.js.map +1 -1
  250. package/dist/esm/next/api-handler/handlers/manifest.js +20 -8
  251. package/dist/esm/next/api-handler/handlers/manifest.js.map +1 -1
  252. package/dist/esm/next/api-handler/handlers/merge-translated-data.js +17 -6
  253. package/dist/esm/next/api-handler/handlers/merge-translated-data.js.map +1 -1
  254. package/dist/esm/next/api-handler/handlers/proxy-draft-mode.js +49 -0
  255. package/dist/esm/next/api-handler/handlers/proxy-draft-mode.js.map +1 -0
  256. package/dist/esm/next/api-handler/handlers/proxy-preview-mode.js +55 -44
  257. package/dist/esm/next/api-handler/handlers/proxy-preview-mode.js.map +1 -1
  258. package/dist/esm/next/api-handler/handlers/revalidate.js +27 -16
  259. package/dist/esm/next/api-handler/handlers/revalidate.js.map +1 -1
  260. package/dist/esm/next/api-handler/handlers/translatable-data.js +16 -5
  261. package/dist/esm/next/api-handler/handlers/translatable-data.js.map +1 -1
  262. package/dist/esm/next/api-handler/index.js +68 -34
  263. package/dist/esm/next/api-handler/index.js.map +1 -1
  264. package/dist/esm/next/client.js +3 -2
  265. package/dist/esm/next/client.js.map +1 -1
  266. package/dist/esm/next/components/head-tags.js +40 -0
  267. package/dist/esm/next/components/head-tags.js.map +1 -0
  268. package/dist/esm/next/components/page.js +32 -0
  269. package/dist/esm/next/components/page.js.map +1 -0
  270. package/dist/esm/next/context/makeswift-host-api-client.js +21 -0
  271. package/dist/esm/next/context/makeswift-host-api-client.js.map +1 -0
  272. package/dist/esm/next/context/react-runtime.js +19 -0
  273. package/dist/esm/next/context/react-runtime.js.map +1 -0
  274. package/dist/esm/next/draft-mode/draft-mode-script.js +99 -0
  275. package/dist/esm/next/draft-mode/draft-mode-script.js.map +1 -0
  276. package/dist/esm/next/draft-mode/index.js +30 -0
  277. package/dist/esm/next/draft-mode/index.js.map +1 -0
  278. package/dist/esm/next/hooks/use-is-pages-router.js +13 -0
  279. package/dist/esm/next/hooks/use-is-pages-router.js.map +1 -0
  280. package/dist/esm/next/index.js +5 -32
  281. package/dist/esm/next/index.js.map +1 -1
  282. package/dist/esm/next/preview-mode.js +2 -1
  283. package/dist/esm/next/preview-mode.js.map +1 -1
  284. package/dist/esm/next/root-style-registry.js +55 -0
  285. package/dist/esm/next/root-style-registry.js.map +1 -0
  286. package/dist/esm/next/server.js +5 -1
  287. package/dist/esm/next/server.js.map +1 -1
  288. package/dist/esm/prop-controllers/copy/navigation-links.js +2 -2
  289. package/dist/esm/prop-controllers/copy/navigation-links.js.map +1 -1
  290. package/dist/esm/prop-controllers/copy.js +4 -3
  291. package/dist/esm/prop-controllers/copy.js.map +1 -1
  292. package/dist/esm/prop-controllers/descriptors.js +0 -5
  293. package/dist/esm/prop-controllers/descriptors.js.map +1 -1
  294. package/dist/esm/prop-controllers/index.js.map +1 -1
  295. package/dist/esm/prop-controllers/introspection.js +6 -10
  296. package/dist/esm/prop-controllers/introspection.js.map +1 -1
  297. package/dist/esm/runtimes/react/components/Element.js +1 -0
  298. package/dist/esm/runtimes/react/components/Element.js.map +1 -1
  299. package/dist/esm/runtimes/react/components/LiveProvider.js +6 -13
  300. package/dist/esm/runtimes/react/components/LiveProvider.js.map +1 -1
  301. package/dist/esm/runtimes/react/components/PreviewProvider.js +6 -8
  302. package/dist/esm/runtimes/react/components/PreviewProvider.js.map +1 -1
  303. package/dist/esm/runtimes/react/components/RuntimeProvider.js +3 -3
  304. package/dist/esm/runtimes/react/components/RuntimeProvider.js.map +1 -1
  305. package/dist/esm/runtimes/react/controls/link.js +1 -1
  306. package/dist/esm/runtimes/react/controls/link.js.map +1 -1
  307. package/dist/esm/runtimes/react/controls/rich-text/rich-text.js +3 -5
  308. package/dist/esm/runtimes/react/controls/rich-text/rich-text.js.map +1 -1
  309. package/dist/esm/runtimes/react/controls/rich-text-v2/rich-text-v2.js +4 -11
  310. package/dist/esm/runtimes/react/controls/rich-text-v2/rich-text-v2.js.map +1 -1
  311. package/dist/esm/runtimes/react/controls.js +13 -1
  312. package/dist/esm/runtimes/react/controls.js.map +1 -1
  313. package/dist/esm/runtimes/react/hooks/makeswift-api.js +11 -10
  314. package/dist/esm/runtimes/react/hooks/makeswift-api.js.map +1 -1
  315. package/dist/esm/runtimes/react/hooks/use-document-key.js +1 -0
  316. package/dist/esm/runtimes/react/hooks/use-document-key.js.map +1 -1
  317. package/dist/esm/runtimes/react/hooks/use-page-id.js +1 -0
  318. package/dist/esm/runtimes/react/hooks/use-page-id.js.map +1 -1
  319. package/dist/esm/runtimes/react/hooks/use-store.js +1 -0
  320. package/dist/esm/runtimes/react/hooks/use-store.js.map +1 -1
  321. package/dist/esm/runtimes/react/use-global-style.js +8 -3
  322. package/dist/esm/runtimes/react/use-global-style.js.map +1 -1
  323. package/dist/esm/runtimes/react/use-style.js +2 -1
  324. package/dist/esm/runtimes/react/use-style.js.map +1 -1
  325. package/dist/esm/state/actions.js +0 -22
  326. package/dist/esm/state/actions.js.map +1 -1
  327. package/dist/esm/state/react-builder-preview.js +2 -28
  328. package/dist/esm/state/react-builder-preview.js.map +1 -1
  329. package/dist/types/api/react.d.ts +1 -9
  330. package/dist/types/api/react.d.ts.map +1 -1
  331. package/dist/types/api/resource-types.d.ts +20 -0
  332. package/dist/types/api/resource-types.d.ts.map +1 -0
  333. package/dist/types/builder/serialization/control-serialization.d.ts +9 -8
  334. package/dist/types/builder/serialization/control-serialization.d.ts.map +1 -1
  335. package/dist/types/components/builtin/Box/Box.d.ts.map +1 -1
  336. package/dist/types/components/builtin/Box/animations.d.ts.map +1 -1
  337. package/dist/types/components/builtin/Box/register.d.ts.map +1 -1
  338. package/dist/types/components/builtin/Button/Button.d.ts +3 -2
  339. package/dist/types/components/builtin/Button/Button.d.ts.map +1 -1
  340. package/dist/types/components/builtin/Button/register.d.ts.map +1 -1
  341. package/dist/types/components/builtin/Carousel/Carousel.d.ts.map +1 -1
  342. package/dist/types/components/builtin/Carousel/register.d.ts.map +1 -1
  343. package/dist/types/components/builtin/Countdown/Countdown.d.ts.map +1 -1
  344. package/dist/types/components/builtin/Countdown/register.d.ts.map +1 -1
  345. package/dist/types/components/builtin/Divider/register.d.ts.map +1 -1
  346. package/dist/types/components/builtin/Embed/Embed.d.ts.map +1 -1
  347. package/dist/types/components/builtin/Embed/register.d.ts.map +1 -1
  348. package/dist/types/components/builtin/Form/Form.d.ts +3 -2
  349. package/dist/types/components/builtin/Form/Form.d.ts.map +1 -1
  350. package/dist/types/components/builtin/Form/components/Field/components/Checkbox/index.d.ts +1 -1
  351. package/dist/types/components/builtin/Form/context/FormContext.d.ts.map +1 -1
  352. package/dist/types/components/builtin/Form/register.d.ts.map +1 -1
  353. package/dist/types/components/builtin/Image/Image.d.ts +3 -2
  354. package/dist/types/components/builtin/Image/Image.d.ts.map +1 -1
  355. package/dist/types/components/builtin/Image/register.d.ts.map +1 -1
  356. package/dist/types/components/builtin/Navigation/Navigation.d.ts +3 -2
  357. package/dist/types/components/builtin/Navigation/Navigation.d.ts.map +1 -1
  358. package/dist/types/components/builtin/Navigation/components/DropDownButton/index.d.ts +3 -2
  359. package/dist/types/components/builtin/Navigation/components/DropDownButton/index.d.ts.map +1 -1
  360. package/dist/types/components/builtin/Navigation/components/MobileMenu/components/MobileDropDownButton/index.d.ts +3 -2
  361. package/dist/types/components/builtin/Navigation/components/MobileMenu/components/MobileDropDownButton/index.d.ts.map +1 -1
  362. package/dist/types/components/builtin/Navigation/register.d.ts.map +1 -1
  363. package/dist/types/components/builtin/Root/register.d.ts.map +1 -1
  364. package/dist/types/components/builtin/SocialLinks/register.d.ts.map +1 -1
  365. package/dist/types/components/builtin/Text/register.d.ts.map +1 -1
  366. package/dist/types/components/builtin/Video/Video.d.ts.map +1 -1
  367. package/dist/types/components/builtin/Video/register.d.ts.map +1 -1
  368. package/dist/types/components/hooks/index.d.ts +1 -0
  369. package/dist/types/components/hooks/index.d.ts.map +1 -1
  370. package/dist/types/components/hooks/usePageSnippets.d.ts +36 -0
  371. package/dist/types/components/hooks/usePageSnippets.d.ts.map +1 -0
  372. package/dist/types/components/hooks/usePropControllerLinkData.d.ts +3 -0
  373. package/dist/types/components/hooks/usePropControllerLinkData.d.ts.map +1 -0
  374. package/dist/types/components/hooks/useRouterLocaleSync.d.ts +2 -0
  375. package/dist/types/components/hooks/useRouterLocaleSync.d.ts.map +1 -0
  376. package/dist/types/components/page/BodySnippet.d.ts.map +1 -1
  377. package/dist/types/components/page/HeadSnippet.d.ts +7 -0
  378. package/dist/types/components/page/HeadSnippet.d.ts.map +1 -0
  379. package/dist/types/components/page/Page.d.ts.map +1 -1
  380. package/dist/types/components/page/PageHead.d.ts +8 -0
  381. package/dist/types/components/page/PageHead.d.ts.map +1 -0
  382. package/dist/types/components/shared/BackgroundsContainer/index.d.ts.map +1 -1
  383. package/dist/types/components/shared/Link/index.d.ts +1 -1
  384. package/dist/types/components/shared/Link/index.d.ts.map +1 -1
  385. package/dist/types/controls/control.d.ts.map +1 -1
  386. package/dist/types/controls/rich-text/introspection.d.ts.map +1 -1
  387. package/dist/types/index.d.ts +1 -1
  388. package/dist/types/index.d.ts.map +1 -1
  389. package/dist/types/next/api-handler/handlers/element-tree.d.ts +9 -1
  390. package/dist/types/next/api-handler/handlers/element-tree.d.ts.map +1 -1
  391. package/dist/types/next/api-handler/handlers/fonts.d.ts +10 -1
  392. package/dist/types/next/api-handler/handlers/fonts.d.ts.map +1 -1
  393. package/dist/types/next/api-handler/handlers/manifest.d.ts +9 -0
  394. package/dist/types/next/api-handler/handlers/manifest.d.ts.map +1 -1
  395. package/dist/types/next/api-handler/handlers/merge-translated-data.d.ts +7 -0
  396. package/dist/types/next/api-handler/handlers/merge-translated-data.d.ts.map +1 -1
  397. package/dist/types/next/api-handler/handlers/proxy-draft-mode.d.ts +20 -0
  398. package/dist/types/next/api-handler/handlers/proxy-draft-mode.d.ts.map +1 -0
  399. package/dist/types/next/api-handler/handlers/proxy-preview-mode.d.ts +14 -2
  400. package/dist/types/next/api-handler/handlers/proxy-preview-mode.d.ts.map +1 -1
  401. package/dist/types/next/api-handler/handlers/revalidate.d.ts +9 -0
  402. package/dist/types/next/api-handler/handlers/revalidate.d.ts.map +1 -1
  403. package/dist/types/next/api-handler/handlers/translatable-data.d.ts +7 -0
  404. package/dist/types/next/api-handler/handlers/translatable-data.d.ts.map +1 -1
  405. package/dist/types/next/api-handler/index.d.ts +11 -3
  406. package/dist/types/next/api-handler/index.d.ts.map +1 -1
  407. package/dist/types/next/client.d.ts.map +1 -1
  408. package/dist/types/next/components/head-tags.d.ts +19 -0
  409. package/dist/types/next/components/head-tags.d.ts.map +1 -0
  410. package/dist/types/next/components/page.d.ts +7 -0
  411. package/dist/types/next/components/page.d.ts.map +1 -0
  412. package/dist/types/next/context/makeswift-host-api-client.d.ts +8 -0
  413. package/dist/types/next/context/makeswift-host-api-client.d.ts.map +1 -0
  414. package/dist/types/next/context/react-runtime.d.ts +8 -0
  415. package/dist/types/next/context/react-runtime.d.ts.map +1 -0
  416. package/dist/types/next/draft-mode/draft-mode-script.d.ts +6 -0
  417. package/dist/types/next/draft-mode/draft-mode-script.d.ts.map +1 -0
  418. package/dist/types/next/draft-mode/index.d.ts +15 -0
  419. package/dist/types/next/draft-mode/index.d.ts.map +1 -0
  420. package/dist/types/next/hooks/use-is-pages-router.d.ts +2 -0
  421. package/dist/types/next/hooks/use-is-pages-router.d.ts.map +1 -0
  422. package/dist/types/next/index.d.ts +4 -9
  423. package/dist/types/next/index.d.ts.map +1 -1
  424. package/dist/types/next/preview-mode.d.ts +1 -1
  425. package/dist/types/next/preview-mode.d.ts.map +1 -1
  426. package/dist/types/next/root-style-registry.d.ts +7 -0
  427. package/dist/types/next/root-style-registry.d.ts.map +1 -0
  428. package/dist/types/next/server.d.ts +2 -0
  429. package/dist/types/next/server.d.ts.map +1 -1
  430. package/dist/types/prop-controllers/copy/navigation-links.d.ts.map +1 -1
  431. package/dist/types/prop-controllers/copy.d.ts.map +1 -1
  432. package/dist/types/prop-controllers/descriptors.d.ts +7 -66
  433. package/dist/types/prop-controllers/descriptors.d.ts.map +1 -1
  434. package/dist/types/prop-controllers/index.d.ts +2 -1
  435. package/dist/types/prop-controllers/index.d.ts.map +1 -1
  436. package/dist/types/prop-controllers/introspection.d.ts.map +1 -1
  437. package/dist/types/runtimes/react/components/Element.d.ts.map +1 -1
  438. package/dist/types/runtimes/react/components/LiveProvider.d.ts +3 -5
  439. package/dist/types/runtimes/react/components/LiveProvider.d.ts.map +1 -1
  440. package/dist/types/runtimes/react/components/PreviewProvider.d.ts +3 -5
  441. package/dist/types/runtimes/react/components/PreviewProvider.d.ts.map +1 -1
  442. package/dist/types/runtimes/react/components/RuntimeProvider.d.ts +2 -2
  443. package/dist/types/runtimes/react/components/RuntimeProvider.d.ts.map +1 -1
  444. package/dist/types/runtimes/react/controls/link.d.ts.map +1 -1
  445. package/dist/types/runtimes/react/controls/rich-text/rich-text.d.ts.map +1 -1
  446. package/dist/types/runtimes/react/controls/rich-text-v2/rich-text-v2.d.ts.map +1 -1
  447. package/dist/types/runtimes/react/controls.d.ts.map +1 -1
  448. package/dist/types/runtimes/react/hooks/makeswift-api.d.ts +2 -1
  449. package/dist/types/runtimes/react/hooks/makeswift-api.d.ts.map +1 -1
  450. package/dist/types/runtimes/react/hooks/use-document-key.d.ts.map +1 -1
  451. package/dist/types/runtimes/react/hooks/use-page-id.d.ts.map +1 -1
  452. package/dist/types/runtimes/react/hooks/use-store.d.ts.map +1 -1
  453. package/dist/types/runtimes/react/use-global-style.d.ts.map +1 -1
  454. package/dist/types/runtimes/react/use-style.d.ts.map +1 -1
  455. package/dist/types/state/actions.d.ts +1 -19
  456. package/dist/types/state/actions.d.ts.map +1 -1
  457. package/dist/types/state/react-builder-preview.d.ts +3 -3
  458. package/dist/types/state/react-builder-preview.d.ts.map +1 -1
  459. package/next/plugin/package.json +1 -0
  460. package/package.json +7 -10
  461. package/dist/cjs/next/dynamic.js +0 -52
  462. package/dist/cjs/next/dynamic.js.map +0 -1
  463. package/dist/cjs/prop-controllers/copy/link.js +0 -63
  464. package/dist/cjs/prop-controllers/copy/link.js.map +0 -1
  465. package/dist/esm/next/dynamic.js +0 -31
  466. package/dist/esm/next/dynamic.js.map +0 -1
  467. package/dist/esm/prop-controllers/copy/link.js +0 -39
  468. package/dist/esm/prop-controllers/copy/link.js.map +0 -1
  469. package/dist/types/next/dynamic.d.ts +0 -13
  470. package/dist/types/next/dynamic.d.ts.map +0 -1
  471. package/dist/types/prop-controllers/copy/link.d.ts +0 -4
  472. package/dist/types/prop-controllers/copy/link.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/next/api-handler/handlers/proxy-preview-mode.ts"],"sourcesContent":["import { CookieSerializeOptions, serialize } from 'cookie'\nimport { createProxyServer } from 'http-proxy'\nimport { NextApiRequest, NextApiResponse } from 'next'\nimport { parse } from 'set-cookie-parser'\nimport { MakeswiftPreviewData, MakeswiftSiteVersion } from '../../preview-mode'\n\ntype ProxyPreviewModeError = string\n\nexport type ProxyPreviewModeResponse = ProxyPreviewModeError\n\nexport default async function proxyPreviewMode(\n req: NextApiRequest,\n res: NextApiResponse<ProxyPreviewModeError>,\n { apiKey }: { apiKey: string },\n): Promise<void> {\n const previewModeProxy = createProxyServer()\n\n // TODO: This is a hack to get the locale from the request.\n // Next.js strips the locale from the req.url, and there's no official way to get the locale\n // from an API route: https://github.com/vercel/next.js/discussions/21798.\n // The current workaround is to get the locale from an internal object: RequestMeta,\n // https://github.com/vercel/next.js/blob/a0d1d728b9003f12c9df6c5e9a33bc4c33cef0ab/packages/next/src/server/request-meta.ts\n // One possible way to properly fix this is by updating how we do preview mode. For example,\n // by using partitioned cookies instead of a proxy.\n const NextRequestMetaSymbol = Reflect.ownKeys(req).find(\n key =>\n key.toString() === 'Symbol(NextRequestMeta)' ||\n key.toString() === 'Symbol(NextInternalRequestMeta)',\n ) as keyof NextApiRequest | undefined\n if (NextRequestMetaSymbol) {\n const nextRequestMeta = req[NextRequestMetaSymbol]\n const initUrl = nextRequestMeta?.__NEXT_INIT_URL ?? nextRequestMeta?.initURL\n const isLocaleStripped =\n nextRequestMeta?.__nextStrippedLocale ?? nextRequestMeta?.didStripLocale\n\n try {\n if (isLocaleStripped && initUrl) req.url = new URL(initUrl).pathname\n } catch {}\n }\n\n previewModeProxy.once('proxyReq', proxyReq => {\n proxyReq.removeHeader('X-Makeswift-Preview-Mode')\n\n // The following headers are Next.js-specific and are removed to prevent Next.js from\n // short-circuiting requests, breaking routing.\n proxyReq.removeHeader('X-Invoke-Path')\n proxyReq.removeHeader('X-Invoke-Query')\n\n const url = new URL(proxyReq.path, 'http://n')\n\n url.searchParams.delete('x-makeswift-preview-mode')\n\n proxyReq.path = url.pathname + url.search\n })\n\n if (req.query.secret !== apiKey) return res.status(401).send('Unauthorized')\n\n const host = req.headers.host\n const originalCookies = req.headers.cookie\n\n if (host == null) return res.status(400).send('Bad Request')\n\n const forwardedProtoHeader = req.headers['x-forwarded-proto']\n\n let forwardedProto: string[] = []\n if (Array.isArray(forwardedProtoHeader)) {\n forwardedProto = forwardedProtoHeader\n } else if (typeof forwardedProtoHeader === 'string') {\n forwardedProto = forwardedProtoHeader.split(',')\n }\n\n const isForwardedProtoHttps = forwardedProto.includes('https')\n\n const forwardedSSL = req.headers['x-forwarded-ssl']\n const isForwardedSSL = typeof forwardedSSL === 'string' && forwardedSSL === 'on'\n\n const proto = isForwardedProtoHttps || isForwardedSSL ? 'https' : 'http'\n let target = `${proto}://${host}`\n\n // If the user generates a locally-trusted CA for their SSL cert, it's likely that Node.js won't\n // trust this CA unless they used the `NODE_EXTRA_CA_CERTS` option\n // (see https://stackoverflow.com/a/68135600). To provide a better developer experience, instead\n // of requiring the user to provide the CA to Node.js, we don't enforce SSL during local\n // development.\n const secure = process.env['NODE_ENV'] === 'production'\n\n const previewData: MakeswiftPreviewData = {\n makeswift: true,\n siteVersion: MakeswiftSiteVersion.Working,\n }\n const setCookie = res.setPreviewData(previewData).getHeader('Set-Cookie')\n res.removeHeader('Set-Cookie')\n\n if (!Array.isArray(setCookie)) return res.status(500).send('Internal Server Error')\n\n const additionalCookies = parse(setCookie)\n .map(cookie => serialize(cookie.name, cookie.value, cookie as CookieSerializeOptions))\n .join(';')\n\n const cookie = originalCookies ? `${originalCookies}; ${additionalCookies}` : additionalCookies\n\n return await new Promise<void>((resolve, reject) =>\n previewModeProxy.web(req, res, { target, headers: { cookie }, secure }, err => {\n if (err) reject(err)\n else resolve()\n }),\n )\n}\n"],"mappings":"AAAA,SAAiC,iBAAiB;AAClD,SAAS,yBAAyB;AAElC,SAAS,aAAa;AACtB,SAA+B,4BAA4B;AAM3D,eAAO,iBACL,KACA,KACA,EAAE,OAAO,GACM;AACf,QAAM,mBAAmB,kBAAkB;AAS3C,QAAM,wBAAwB,QAAQ,QAAQ,GAAG,EAAE;AAAA,IACjD,SACE,IAAI,SAAS,MAAM,6BACnB,IAAI,SAAS,MAAM;AAAA,EACvB;AACA,MAAI,uBAAuB;AACzB,UAAM,kBAAkB,IAAI,qBAAqB;AACjD,UAAM,UAAU,iBAAiB,mBAAmB,iBAAiB;AACrE,UAAM,mBACJ,iBAAiB,wBAAwB,iBAAiB;AAE5D,QAAI;AACF,UAAI,oBAAoB;AAAS,YAAI,MAAM,IAAI,IAAI,OAAO,EAAE;AAAA,IAC9D,QAAQ;AAAA,IAAC;AAAA,EACX;AAEA,mBAAiB,KAAK,YAAY,cAAY;AAC5C,aAAS,aAAa,0BAA0B;AAIhD,aAAS,aAAa,eAAe;AACrC,aAAS,aAAa,gBAAgB;AAEtC,UAAM,MAAM,IAAI,IAAI,SAAS,MAAM,UAAU;AAE7C,QAAI,aAAa,OAAO,0BAA0B;AAElD,aAAS,OAAO,IAAI,WAAW,IAAI;AAAA,EACrC,CAAC;AAED,MAAI,IAAI,MAAM,WAAW;AAAQ,WAAO,IAAI,OAAO,GAAG,EAAE,KAAK,cAAc;AAE3E,QAAM,OAAO,IAAI,QAAQ;AACzB,QAAM,kBAAkB,IAAI,QAAQ;AAEpC,MAAI,QAAQ;AAAM,WAAO,IAAI,OAAO,GAAG,EAAE,KAAK,aAAa;AAE3D,QAAM,uBAAuB,IAAI,QAAQ,mBAAmB;AAE5D,MAAI,iBAA2B,CAAC;AAChC,MAAI,MAAM,QAAQ,oBAAoB,GAAG;AACvC,qBAAiB;AAAA,EACnB,WAAW,OAAO,yBAAyB,UAAU;AACnD,qBAAiB,qBAAqB,MAAM,GAAG;AAAA,EACjD;AAEA,QAAM,wBAAwB,eAAe,SAAS,OAAO;AAE7D,QAAM,eAAe,IAAI,QAAQ,iBAAiB;AAClD,QAAM,iBAAiB,OAAO,iBAAiB,YAAY,iBAAiB;AAE5E,QAAM,QAAQ,yBAAyB,iBAAiB,UAAU;AAClE,MAAI,SAAS,GAAG,KAAK,MAAM,IAAI;AAO/B,QAAM,SAAS,QAAQ,IAAI,UAAU,MAAM;AAE3C,QAAM,cAAoC;AAAA,IACxC,WAAW;AAAA,IACX,aAAa,qBAAqB;AAAA,EACpC;AACA,QAAM,YAAY,IAAI,eAAe,WAAW,EAAE,UAAU,YAAY;AACxE,MAAI,aAAa,YAAY;AAE7B,MAAI,CAAC,MAAM,QAAQ,SAAS;AAAG,WAAO,IAAI,OAAO,GAAG,EAAE,KAAK,uBAAuB;AAElF,QAAM,oBAAoB,MAAM,SAAS,EACtC,IAAI,CAAAA,YAAU,UAAUA,QAAO,MAAMA,QAAO,OAAOA,OAAgC,CAAC,EACpF,KAAK,GAAG;AAEX,QAAM,SAAS,kBAAkB,GAAG,eAAe,KAAK,iBAAiB,KAAK;AAE9E,SAAO,MAAM,IAAI;AAAA,IAAc,CAAC,SAAS,WACvC,iBAAiB,IAAI,KAAK,KAAK,EAAE,QAAQ,SAAS,EAAE,OAAO,GAAG,OAAO,GAAG,SAAO;AAC7E,UAAI;AAAK,eAAO,GAAG;AAAA;AACd,gBAAQ;AAAA,IACf,CAAC;AAAA,EACH;AACF;","names":["cookie"]}
1
+ {"version":3,"sources":["../../../../../src/next/api-handler/handlers/proxy-preview-mode.ts"],"sourcesContent":["import { NextApiRequest, NextApiResponse } from 'next'\nimport { MakeswiftPreviewData, MakeswiftSiteVersion } from '../../preview-mode'\nimport { NextRequest, NextResponse } from 'next/server'\nimport { P, match } from 'ts-pattern'\n\ntype Context = { params: { [key: string]: string | string[] } }\n\ntype ProxyPreviewModeError = string\n\ntype ProxyResponse = { __brand: 'ProxyResponse' }\n\nexport type ProxyPreviewModeResponse = ProxyPreviewModeError | ProxyResponse\n\ntype ProxyPreviewModeHandlerArgs =\n | [request: NextRequest, context: Context, params: { apiKey: string }]\n | [\n req: NextApiRequest,\n res: NextApiResponse<ProxyPreviewModeResponse>,\n params: { apiKey: string },\n ]\n\nconst routeHandlerPattern = [P.instanceOf(Request), P.any, P.any] as const\nconst apiRoutePattern = [P.any, P.any, P.any] as const\n\nfunction mapRequestHeadersToHeaders(requestHeaders: NextApiRequest['headers']): Headers {\n const headers = new Headers()\n\n Object.entries(requestHeaders).forEach(([key, value]) => {\n match(value)\n .with(P.array(P.string), value => value.map(val => headers.append(key, val)))\n .with(P.string, value => headers.set(key, value))\n })\n\n return headers\n}\n\nfunction mapRequestToProxyUrl(req: NextApiRequest): URL {\n const isForwardedProtoHttps = match(req.headers['X-Forwarded-Proto'])\n .with(P.string, x => x.split(','))\n .with(P.array(P.string), x => x)\n .otherwise(() => [])\n .includes('https')\n\n const isForwardedSSL = match(req.headers['X-Forwarded-SSL'])\n .with('on', () => true)\n .otherwise(() => false)\n\n const proto = isForwardedProtoHttps || isForwardedSSL ? 'https' : 'http'\n\n return new URL(`${proto}://${req.headers.host}${req.url}`)\n}\n\nexport default async function proxyPreviewMode(\n request: NextRequest,\n context: Context,\n { apiKey }: { apiKey: string },\n): Promise<NextResponse<ProxyPreviewModeResponse>>\nexport default async function proxyPreviewMode(\n req: NextApiRequest,\n res: NextApiResponse<ProxyPreviewModeResponse>,\n { apiKey }: { apiKey: string },\n): Promise<void>\nexport default async function proxyPreviewMode(\n ...args: ProxyPreviewModeHandlerArgs\n): Promise<NextResponse<ProxyPreviewModeResponse> | void> {\n return match(args)\n .with(routeHandlerPattern, args => proxyPreviewModeRouteHandler(...args))\n .with(apiRoutePattern, args => proxyPreviewModeApiRouteHandler(...args))\n .exhaustive()\n}\n\nasync function proxyPreviewModeRouteHandler(\n _request: NextRequest,\n _context: Context,\n {}: { apiKey: string },\n): Promise<NextResponse<ProxyPreviewModeResponse>> {\n const message =\n 'Cannot request preview endpoint from an API handler registered in `app`. Move your Makeswift API handler to the `pages/api` directory'\n console.error(message)\n return NextResponse.json(message, { status: 500 })\n}\n\nasync function proxyPreviewModeApiRouteHandler(\n req: NextApiRequest,\n res: NextApiResponse<ProxyPreviewModeResponse>,\n { apiKey }: { apiKey: string },\n): Promise<void> {\n if (req.query.secret !== apiKey) return res.status(401).send('Unauthorized')\n if (req.headers.host == null) return res.status(400).send('Bad Request')\n\n // TODO: This is a hack to get the locale from the request.\n // Next.js strips the locale from the req.url, and there's no official way to get the locale\n // from an API route: https://github.com/vercel/next.js/discussions/21798.\n // The current workaround is to get the locale from an internal object: RequestMeta,\n // https://github.com/vercel/next.js/blob/a0d1d728b9003f12c9df6c5e9a33bc4c33cef0ab/packages/next/src/server/request-meta.ts\n // One possible way to properly fix this is by updating how we do preview mode. For example,\n // by using partitioned cookies instead of a proxy.\n const NextRequestMetaSymbol = Reflect.ownKeys(req).find(\n key =>\n key.toString() === 'Symbol(NextRequestMeta)' ||\n key.toString() === 'Symbol(NextInternalRequestMeta)',\n ) as keyof NextApiRequest | undefined\n\n if (NextRequestMetaSymbol) {\n const nextRequestMeta = req[NextRequestMetaSymbol]\n const initUrl = nextRequestMeta?.__NEXT_INIT_URL ?? nextRequestMeta?.initURL\n const isLocaleStripped =\n nextRequestMeta?.__nextStrippedLocale ?? nextRequestMeta?.didStripLocale\n\n try {\n if (isLocaleStripped && initUrl) req.url = new URL(initUrl).pathname\n } catch {}\n }\n\n const proxyHeaders = mapRequestHeadersToHeaders(req.headers)\n const proxyUrl = mapRequestToProxyUrl(req)\n\n proxyUrl.searchParams.delete('x-makeswift-preview-mode')\n proxyHeaders.delete('x-makeswift-preview-mode')\n // The following headers are Next.js-specific and are removed to prevent Next.js from\n // short-circuiting requests, breaking routing.\n proxyHeaders.delete('x-invoke-path')\n proxyHeaders.delete('x-invoke-query')\n\n const previewData: MakeswiftPreviewData = {\n makeswift: true,\n // This will eventually be dynamic\n siteVersion: MakeswiftSiteVersion.Working,\n }\n\n const setCookie = res.setPreviewData(previewData).getHeader('set-cookie')\n res.removeHeader('set-cookie')\n\n if (!Array.isArray(setCookie)) return res.status(500).send('Internal Server Error')\n\n setCookie.forEach((cookie) => proxyHeaders.append('cookie', cookie))\n\n const response = await fetch(proxyUrl, {\n headers: proxyHeaders,\n });\n\n response.headers.forEach((value, name) => {\n res.setHeader(name, value);\n })\n\n res.statusCode = response.status;\n res.statusMessage = response.statusText\n\n // `fetch` automatically decompresses the response, but the response headers will keep the\n // `content-encoding` and `content-length` headers. This will cause decoding issues if the client\n // attempts to decompress the response again. To prevent this, we remove these headers.\n //\n // See https://github.com/nodejs/undici/issues/2514.\n if (res.hasHeader('content-encoding')) {\n res.removeHeader('content-encoding')\n res.removeHeader('content-length')\n }\n\n const arrayBuffer = await response.arrayBuffer()\n\n res.write(arrayBuffer)\n res.end()\n}\n"],"mappings":"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","names":["value","args"]}
@@ -1,26 +1,37 @@
1
1
  import isErrorWithMessage from "../../../utils/isErrorWithMessage";
2
- async function revalidate(req, res, { apiKey }) {
3
- if (req.query.secret !== apiKey) {
4
- return res.status(401).json({ message: "Unauthorized" });
2
+ import { NextResponse } from "next/server";
3
+ import { P, match } from "ts-pattern";
4
+ import { revalidatePath } from "next/cache";
5
+ const routeHandlerPattern = [P.instanceOf(Request), P.any, P.any];
6
+ const apiRoutePattern = [P.any, P.any, P.any];
7
+ async function revalidate(...args) {
8
+ const [, , { apiKey }] = args;
9
+ const secret = match(args).with(routeHandlerPattern, ([request]) => request.nextUrl.searchParams.get("secret")).with(apiRoutePattern, ([req]) => req.query.secret).exhaustive();
10
+ if (secret !== apiKey) {
11
+ const body = { message: "Unauthorized" };
12
+ const status = 401;
13
+ return match(args).with(routeHandlerPattern, () => NextResponse.json(body, { status })).with(apiRoutePattern, ([, res]) => res.status(status).json(body)).exhaustive();
5
14
  }
6
- if (typeof req.query.path !== "string") {
7
- return res.status(400).json({ message: "Bad Request" });
8
- }
9
- const revalidate2 = res.revalidate;
10
- if (typeof revalidate2 !== "function") {
11
- const message = `Cannot revalidate path "${req.query.path}" because \`revalidate\` function does not exist in API handler response. Please update to Next.js v12.2.0 or higher for support for on-demand revalidation.
12
- Read more here: https://nextjs.org/blog/next-12-2#on-demand-incremental-static-regeneration-stable`;
13
- console.warn(message);
14
- return res.json({ revalidated: false });
15
+ const path = match(args).with(routeHandlerPattern, ([request]) => request.nextUrl.searchParams.get("path")).with(apiRoutePattern, ([req]) => req.query.path).exhaustive();
16
+ if (typeof path !== "string") {
17
+ const status = 400;
18
+ const body = { message: "Bad Request" };
19
+ return match(args).with(routeHandlerPattern, () => NextResponse.json(body, { status })).with(apiRoutePattern, ([, res]) => res.status(status).json(body)).exhaustive();
15
20
  }
21
+ const revalidate2 = match(args).with(routeHandlerPattern, () => revalidatePath).with(apiRoutePattern, ([, res]) => res.revalidate).exhaustive();
16
22
  try {
17
- await revalidate2(req.query.path);
18
- return res.json({ revalidated: true });
23
+ await revalidate2(path);
24
+ const body = { revalidated: true };
25
+ return match(args).with(routeHandlerPattern, () => NextResponse.json(body)).with(apiRoutePattern, ([, res]) => res.json(body)).exhaustive();
19
26
  } catch (error) {
20
27
  if (isErrorWithMessage(error)) {
21
- return res.status(500).json({ message: error.message });
28
+ const status2 = 500;
29
+ const body2 = { message: error.message };
30
+ return match(args).with(routeHandlerPattern, () => NextResponse.json(body2, { status: status2 })).with(apiRoutePattern, ([, res]) => res.status(status2).json(body2)).exhaustive();
22
31
  }
23
- return res.status(500).json({ message: "Error Revalidating" });
32
+ const status = 500;
33
+ const body = { message: "Error Revalidating" };
34
+ return match(args).with(routeHandlerPattern, () => NextResponse.json(body, { status })).with(apiRoutePattern, ([, res]) => res.status(status).json(body)).exhaustive();
24
35
  }
25
36
  }
26
37
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/next/api-handler/handlers/revalidate.ts"],"sourcesContent":["import { NextApiRequest, NextApiResponse } from 'next'\nimport isErrorWithMessage from '../../../utils/isErrorWithMessage'\n\ntype RevalidationResult = { revalidated: boolean }\n\ntype RevalidationError = { message: string }\n\nexport type RevalidationResponse = RevalidationResult | RevalidationError\n\nexport async function revalidate(\n req: NextApiRequest,\n res: NextApiResponse<RevalidationResponse>,\n { apiKey }: { apiKey: string },\n): Promise<void> {\n if (req.query.secret !== apiKey) {\n return res.status(401).json({ message: 'Unauthorized' })\n }\n\n if (typeof req.query.path !== 'string') {\n return res.status(400).json({ message: 'Bad Request' })\n }\n\n const revalidate = res.revalidate\n\n if (typeof revalidate !== 'function') {\n const message =\n `Cannot revalidate path \"${req.query.path}\" because \\`revalidate\\` function does not exist in API handler response. ` +\n 'Please update to Next.js v12.2.0 or higher for support for on-demand revalidation.\\n' +\n 'Read more here: https://nextjs.org/blog/next-12-2#on-demand-incremental-static-regeneration-stable'\n\n console.warn(message)\n\n return res.json({ revalidated: false })\n }\n\n try {\n await revalidate(req.query.path)\n\n return res.json({ revalidated: true })\n } catch (error) {\n if (isErrorWithMessage(error)) {\n return res.status(500).json({ message: error.message })\n }\n\n return res.status(500).json({ message: 'Error Revalidating' })\n }\n}\n"],"mappings":"AACA,OAAO,wBAAwB;AAQ/B,eAAsB,WACpB,KACA,KACA,EAAE,OAAO,GACM;AACf,MAAI,IAAI,MAAM,WAAW,QAAQ;AAC/B,WAAO,IAAI,OAAO,GAAG,EAAE,KAAK,EAAE,SAAS,eAAe,CAAC;AAAA,EACzD;AAEA,MAAI,OAAO,IAAI,MAAM,SAAS,UAAU;AACtC,WAAO,IAAI,OAAO,GAAG,EAAE,KAAK,EAAE,SAAS,cAAc,CAAC;AAAA,EACxD;AAEA,QAAMA,cAAa,IAAI;AAEvB,MAAI,OAAOA,gBAAe,YAAY;AACpC,UAAM,UACJ,2BAA2B,IAAI,MAAM,IAAI;AAAA;AAI3C,YAAQ,KAAK,OAAO;AAEpB,WAAO,IAAI,KAAK,EAAE,aAAa,MAAM,CAAC;AAAA,EACxC;AAEA,MAAI;AACF,UAAMA,YAAW,IAAI,MAAM,IAAI;AAE/B,WAAO,IAAI,KAAK,EAAE,aAAa,KAAK,CAAC;AAAA,EACvC,SAAS,OAAO;AACd,QAAI,mBAAmB,KAAK,GAAG;AAC7B,aAAO,IAAI,OAAO,GAAG,EAAE,KAAK,EAAE,SAAS,MAAM,QAAQ,CAAC;AAAA,IACxD;AAEA,WAAO,IAAI,OAAO,GAAG,EAAE,KAAK,EAAE,SAAS,qBAAqB,CAAC;AAAA,EAC/D;AACF;","names":["revalidate"]}
1
+ {"version":3,"sources":["../../../../../src/next/api-handler/handlers/revalidate.ts"],"sourcesContent":["import { NextApiRequest, NextApiResponse } from 'next'\nimport isErrorWithMessage from '../../../utils/isErrorWithMessage'\nimport { NextRequest, NextResponse } from 'next/server'\nimport { P, match } from 'ts-pattern'\nimport { revalidatePath } from 'next/cache'\n\ntype Context = { params: { [key: string]: string | string[] } }\n\ntype RevalidationResult = { revalidated: boolean }\n\ntype RevalidationError = { message: string }\n\nexport type RevalidationResponse = RevalidationResult | RevalidationError\n\ntype RevalidateHandlerArgs =\n | [request: NextRequest, context: Context, params: { apiKey: string }]\n | [req: NextApiRequest, res: NextApiResponse<RevalidationResponse>, params: { apiKey: string }]\n\nconst routeHandlerPattern = [P.instanceOf(Request), P.any, P.any] as const\nconst apiRoutePattern = [P.any, P.any, P.any] as const\n\nexport async function revalidate(\n request: NextRequest,\n context: Context,\n { apiKey }: { apiKey: string },\n): Promise<NextResponse<RevalidationResponse>>\nexport async function revalidate(\n req: NextApiRequest,\n res: NextApiResponse<RevalidationResponse>,\n { apiKey }: { apiKey: string },\n): Promise<void>\nexport async function revalidate(\n ...args: RevalidateHandlerArgs\n): Promise<NextResponse<RevalidationResponse> | void> {\n const [, , { apiKey }] = args\n\n const secret = match(args)\n .with(routeHandlerPattern, ([request]) => request.nextUrl.searchParams.get('secret'))\n .with(apiRoutePattern, ([req]) => req.query.secret)\n .exhaustive()\n\n if (secret !== apiKey) {\n const body = { message: 'Unauthorized' }\n const status = 401\n\n return match(args)\n .with(routeHandlerPattern, () => NextResponse.json(body, { status }))\n .with(apiRoutePattern, ([, res]) => res.status(status).json(body))\n .exhaustive()\n }\n\n const path = match(args)\n .with(routeHandlerPattern, ([request]) => request.nextUrl.searchParams.get('path'))\n .with(apiRoutePattern, ([req]) => req.query.path)\n .exhaustive()\n\n if (typeof path !== 'string') {\n const status = 400\n const body = { message: 'Bad Request' }\n\n return match(args)\n .with(routeHandlerPattern, () => NextResponse.json(body, { status }))\n .with(apiRoutePattern, ([, res]) => res.status(status).json(body))\n .exhaustive()\n }\n\n const revalidate = match(args)\n .with(routeHandlerPattern, () => revalidatePath)\n .with(apiRoutePattern, ([, res]) => res.revalidate)\n .exhaustive()\n\n try {\n await revalidate(path)\n\n const body = { revalidated: true }\n\n return match(args)\n .with(routeHandlerPattern, () => NextResponse.json(body))\n .with(apiRoutePattern, ([, res]) => res.json(body))\n .exhaustive()\n } catch (error) {\n if (isErrorWithMessage(error)) {\n const status = 500\n const body = { message: error.message }\n\n return match(args)\n .with(routeHandlerPattern, () => NextResponse.json(body, { status }))\n .with(apiRoutePattern, ([, res]) => res.status(status).json(body))\n .exhaustive()\n }\n\n const status = 500\n const body = { message: 'Error Revalidating' }\n\n return match(args)\n .with(routeHandlerPattern, () => NextResponse.json(body, { status }))\n .with(apiRoutePattern, ([, res]) => res.status(status).json(body))\n .exhaustive()\n }\n}\n"],"mappings":"AACA,OAAO,wBAAwB;AAC/B,SAAsB,oBAAoB;AAC1C,SAAS,GAAG,aAAa;AACzB,SAAS,sBAAsB;AAc/B,MAAM,sBAAsB,CAAC,EAAE,WAAW,OAAO,GAAG,EAAE,KAAK,EAAE,GAAG;AAChE,MAAM,kBAAkB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG;AAY5C,eAAsB,cACjB,MACiD;AACpD,QAAM,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,IAAI;AAEzB,QAAM,SAAS,MAAM,IAAI,EACtB,KAAK,qBAAqB,CAAC,CAAC,OAAO,MAAM,QAAQ,QAAQ,aAAa,IAAI,QAAQ,CAAC,EACnF,KAAK,iBAAiB,CAAC,CAAC,GAAG,MAAM,IAAI,MAAM,MAAM,EACjD,WAAW;AAEd,MAAI,WAAW,QAAQ;AACrB,UAAM,OAAO,EAAE,SAAS,eAAe;AACvC,UAAM,SAAS;AAEf,WAAO,MAAM,IAAI,EACd,KAAK,qBAAqB,MAAM,aAAa,KAAK,MAAM,EAAE,OAAO,CAAC,CAAC,EACnE,KAAK,iBAAiB,CAAC,CAAC,EAAE,GAAG,MAAM,IAAI,OAAO,MAAM,EAAE,KAAK,IAAI,CAAC,EAChE,WAAW;AAAA,EAChB;AAEA,QAAM,OAAO,MAAM,IAAI,EACpB,KAAK,qBAAqB,CAAC,CAAC,OAAO,MAAM,QAAQ,QAAQ,aAAa,IAAI,MAAM,CAAC,EACjF,KAAK,iBAAiB,CAAC,CAAC,GAAG,MAAM,IAAI,MAAM,IAAI,EAC/C,WAAW;AAEd,MAAI,OAAO,SAAS,UAAU;AAC5B,UAAM,SAAS;AACf,UAAM,OAAO,EAAE,SAAS,cAAc;AAEtC,WAAO,MAAM,IAAI,EACd,KAAK,qBAAqB,MAAM,aAAa,KAAK,MAAM,EAAE,OAAO,CAAC,CAAC,EACnE,KAAK,iBAAiB,CAAC,CAAC,EAAE,GAAG,MAAM,IAAI,OAAO,MAAM,EAAE,KAAK,IAAI,CAAC,EAChE,WAAW;AAAA,EAChB;AAEA,QAAMA,cAAa,MAAM,IAAI,EAC1B,KAAK,qBAAqB,MAAM,cAAc,EAC9C,KAAK,iBAAiB,CAAC,CAAC,EAAE,GAAG,MAAM,IAAI,UAAU,EACjD,WAAW;AAEd,MAAI;AACF,UAAMA,YAAW,IAAI;AAErB,UAAM,OAAO,EAAE,aAAa,KAAK;AAEjC,WAAO,MAAM,IAAI,EACd,KAAK,qBAAqB,MAAM,aAAa,KAAK,IAAI,CAAC,EACvD,KAAK,iBAAiB,CAAC,CAAC,EAAE,GAAG,MAAM,IAAI,KAAK,IAAI,CAAC,EACjD,WAAW;AAAA,EAChB,SAAS,OAAO;AACd,QAAI,mBAAmB,KAAK,GAAG;AAC7B,YAAMC,UAAS;AACf,YAAMC,QAAO,EAAE,SAAS,MAAM,QAAQ;AAEtC,aAAO,MAAM,IAAI,EACd,KAAK,qBAAqB,MAAM,aAAa,KAAKA,OAAM,EAAE,QAAAD,QAAO,CAAC,CAAC,EACnE,KAAK,iBAAiB,CAAC,CAAC,EAAE,GAAG,MAAM,IAAI,OAAOA,OAAM,EAAE,KAAKC,KAAI,CAAC,EAChE,WAAW;AAAA,IAChB;AAEA,UAAM,SAAS;AACf,UAAM,OAAO,EAAE,SAAS,qBAAqB;AAE7C,WAAO,MAAM,IAAI,EACd,KAAK,qBAAqB,MAAM,aAAa,KAAK,MAAM,EAAE,OAAO,CAAC,CAAC,EACnE,KAAK,iBAAiB,CAAC,CAAC,EAAE,GAAG,MAAM,IAAI,OAAO,MAAM,EAAE,KAAK,IAAI,CAAC,EAChE,WAAW;AAAA,EAChB;AACF;","names":["revalidate","status","body"]}
@@ -1,13 +1,24 @@
1
- async function translatableData(req, res, client) {
2
- const elementTree = req.body.elementTree;
1
+ import { NextResponse } from "next/server";
2
+ import { P, match } from "ts-pattern";
3
+ const routeHandlerPattern = [P.instanceOf(Request), P.any, P.any];
4
+ const apiRoutePattern = [P.any, P.any, P.any];
5
+ async function translatableData(...args) {
6
+ const [, , client] = args;
7
+ const body = await match(args).with(routeHandlerPattern, ([request]) => request.json()).with(apiRoutePattern, ([req]) => req.body).exhaustive();
8
+ const elementTree = body.elementTree;
3
9
  if (elementTree == null) {
4
- return res.status(400).json({ message: "elementTree must be defined." });
10
+ const status = 400;
11
+ const body2 = { message: "elementTree must be defined." };
12
+ return match(args).with(routeHandlerPattern, () => NextResponse.json(body2, { status })).with(apiRoutePattern, ([, res]) => res.status(status).json(body2)).exhaustive();
5
13
  }
6
14
  try {
7
15
  let translatableData2 = client.getTranslatableData(elementTree);
8
- return res.json({ translatableData: translatableData2 });
16
+ const body2 = { translatableData: translatableData2 };
17
+ return match(args).with(routeHandlerPattern, () => NextResponse.json(body2)).with(apiRoutePattern, ([, res]) => res.json(body2)).exhaustive();
9
18
  } catch (error) {
10
- res.status(500).json({ message: "Failed to get traslatable data." });
19
+ const status = 500;
20
+ const body2 = { message: "Failed to get traslatable data." };
21
+ return match(args).with(routeHandlerPattern, () => NextResponse.json(body2, { status })).with(apiRoutePattern, ([, res]) => res.status(status).json(body2)).exhaustive();
11
22
  }
12
23
  }
13
24
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/next/api-handler/handlers/translatable-data.ts"],"sourcesContent":["import { NextApiRequest, NextApiResponse } from 'next'\nimport { Data } from '../../../state/react-page'\nimport { Makeswift } from '../../client'\n\ntype TranslatableDataResult = { translatableData: Record<string, Data> }\n\ntype TranslatableDataError = { message: string }\n\nexport type TranslatableDataResponse = TranslatableDataResult | TranslatableDataError\n\nexport default async function translatableData(\n req: NextApiRequest,\n res: NextApiResponse<TranslatableDataResponse>,\n client: Makeswift,\n): Promise<void> {\n const elementTree = req.body.elementTree\n\n if (elementTree == null) {\n return res.status(400).json({ message: 'elementTree must be defined.' })\n }\n\n try {\n let translatableData = client.getTranslatableData(elementTree)\n\n return res.json({ translatableData })\n } catch (error) {\n res.status(500).json({ message: 'Failed to get traslatable data.' })\n }\n}\n"],"mappings":"AAUA,eAAO,iBACL,KACA,KACA,QACe;AACf,QAAM,cAAc,IAAI,KAAK;AAE7B,MAAI,eAAe,MAAM;AACvB,WAAO,IAAI,OAAO,GAAG,EAAE,KAAK,EAAE,SAAS,+BAA+B,CAAC;AAAA,EACzE;AAEA,MAAI;AACF,QAAIA,oBAAmB,OAAO,oBAAoB,WAAW;AAE7D,WAAO,IAAI,KAAK,EAAE,kBAAAA,kBAAiB,CAAC;AAAA,EACtC,SAAS,OAAO;AACd,QAAI,OAAO,GAAG,EAAE,KAAK,EAAE,SAAS,kCAAkC,CAAC;AAAA,EACrE;AACF;","names":["translatableData"]}
1
+ {"version":3,"sources":["../../../../../src/next/api-handler/handlers/translatable-data.ts"],"sourcesContent":["import { NextApiRequest, NextApiResponse } from 'next'\nimport { Data } from '../../../state/react-page'\nimport { Makeswift } from '../../client'\nimport { NextRequest, NextResponse } from 'next/server'\nimport { P, match } from 'ts-pattern'\n\ntype Context = { params: { [key: string]: string | string[] } }\n\ntype TranslatableDataResult = { translatableData: Record<string, Data> }\n\ntype TranslatableDataError = { message: string }\n\nexport type TranslatableDataResponse = TranslatableDataResult | TranslatableDataError\n\ntype TranslatableDataHandlerArgs =\n | [request: NextRequest, context: Context, client: Makeswift]\n | [req: NextApiRequest, res: NextApiResponse<TranslatableDataResponse>, client: Makeswift]\n\nconst routeHandlerPattern = [P.instanceOf(Request), P.any, P.any] as const\nconst apiRoutePattern = [P.any, P.any, P.any] as const\n\nexport default async function translatableData(\n request: NextRequest,\n context: Context,\n client: Makeswift,\n): Promise<NextResponse<TranslatableDataResponse>>\nexport default async function translatableData(\n req: NextApiRequest,\n res: NextApiResponse<TranslatableDataResponse>,\n client: Makeswift,\n): Promise<void>\nexport default async function translatableData(\n ...args: TranslatableDataHandlerArgs\n): Promise<NextResponse<TranslatableDataResponse> | void> {\n const [, , client] = args\n\n const body = await match(args)\n .with(routeHandlerPattern, ([request]) => request.json())\n .with(apiRoutePattern, ([req]) => req.body)\n .exhaustive()\n const elementTree = body.elementTree\n\n if (elementTree == null) {\n const status = 400\n const body = { message: 'elementTree must be defined.' }\n\n return match(args)\n .with(routeHandlerPattern, () => NextResponse.json(body, { status }))\n .with(apiRoutePattern, ([, res]) => res.status(status).json(body))\n .exhaustive()\n }\n\n try {\n let translatableData = client.getTranslatableData(elementTree)\n\n const body = { translatableData }\n\n return match(args)\n .with(routeHandlerPattern, () => NextResponse.json(body))\n .with(apiRoutePattern, ([, res]) => res.json(body))\n .exhaustive()\n } catch (error) {\n const status = 500\n const body = { message: 'Failed to get traslatable data.' }\n\n return match(args)\n .with(routeHandlerPattern, () => NextResponse.json(body, { status }))\n .with(apiRoutePattern, ([, res]) => res.status(status).json(body))\n .exhaustive()\n }\n}\n"],"mappings":"AAGA,SAAsB,oBAAoB;AAC1C,SAAS,GAAG,aAAa;AAczB,MAAM,sBAAsB,CAAC,EAAE,WAAW,OAAO,GAAG,EAAE,KAAK,EAAE,GAAG;AAChE,MAAM,kBAAkB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG;AAY5C,eAAO,oBACF,MACqD;AACxD,QAAM,CAAC,EAAE,EAAE,MAAM,IAAI;AAErB,QAAM,OAAO,MAAM,MAAM,IAAI,EAC1B,KAAK,qBAAqB,CAAC,CAAC,OAAO,MAAM,QAAQ,KAAK,CAAC,EACvD,KAAK,iBAAiB,CAAC,CAAC,GAAG,MAAM,IAAI,IAAI,EACzC,WAAW;AACd,QAAM,cAAc,KAAK;AAEzB,MAAI,eAAe,MAAM;AACvB,UAAM,SAAS;AACf,UAAMA,QAAO,EAAE,SAAS,+BAA+B;AAEvD,WAAO,MAAM,IAAI,EACd,KAAK,qBAAqB,MAAM,aAAa,KAAKA,OAAM,EAAE,OAAO,CAAC,CAAC,EACnE,KAAK,iBAAiB,CAAC,CAAC,EAAE,GAAG,MAAM,IAAI,OAAO,MAAM,EAAE,KAAKA,KAAI,CAAC,EAChE,WAAW;AAAA,EAChB;AAEA,MAAI;AACF,QAAIC,oBAAmB,OAAO,oBAAoB,WAAW;AAE7D,UAAMD,QAAO,EAAE,kBAAAC,kBAAiB;AAEhC,WAAO,MAAM,IAAI,EACd,KAAK,qBAAqB,MAAM,aAAa,KAAKD,KAAI,CAAC,EACvD,KAAK,iBAAiB,CAAC,CAAC,EAAE,GAAG,MAAM,IAAI,KAAKA,KAAI,CAAC,EACjD,WAAW;AAAA,EAChB,SAAS,OAAO;AACd,UAAM,SAAS;AACf,UAAMA,QAAO,EAAE,SAAS,kCAAkC;AAE1D,WAAO,MAAM,IAAI,EACd,KAAK,qBAAqB,MAAM,aAAa,KAAKA,OAAM,EAAE,OAAO,CAAC,CAAC,EACnE,KAAK,iBAAiB,CAAC,CAAC,EAAE,GAAG,MAAM,IAAI,OAAO,MAAM,EAAE,KAAKA,KAAI,CAAC,EAChE,WAAW;AAAA,EAChB;AACF;","names":["body","translatableData"]}
@@ -1,14 +1,18 @@
1
1
  import Cors from "cors";
2
+ import { NextResponse } from "next/server";
2
3
  import { match as matchPattern } from "path-to-regexp";
3
4
  import { Makeswift } from "../client";
4
5
  import elementTree from "./handlers/element-tree";
5
6
  import fonts from "./handlers/fonts";
6
7
  import manifest from "./handlers/manifest";
7
8
  import proxyPreviewMode from "./handlers/proxy-preview-mode";
9
+ import proxyDraftMode from "./handlers/proxy-draft-mode";
8
10
  import { revalidate } from "./handlers/revalidate";
9
11
  import translatableData from "./handlers/translatable-data";
10
12
  import mergeTranslatedData from "./handlers/merge-translated-data";
11
13
  import { ReactRuntime } from "../../react";
14
+ import { P, match } from "ts-pattern";
15
+ import { getSiteVersion } from "../draft-mode";
12
16
  function MakeswiftApiHandler(apiKey, {
13
17
  appOrigin = "https://app.makeswift.com",
14
18
  apiOrigin = "https://api.makeswift.com",
@@ -22,16 +26,31 @@ function MakeswiftApiHandler(apiKey, {
22
26
  Received "${apiKey}" instead.`
23
27
  );
24
28
  }
25
- return async function makeswiftApiHandler(req, res) {
26
- await new Promise((resolve, reject) => {
27
- cors(req, res, (err) => {
28
- if (err instanceof Error)
29
- reject(err);
30
- else
31
- resolve();
29
+ const routeHandlerPattern = [P.instanceOf(Request), P.any];
30
+ const apiRoutePattern = [P.any, P.any];
31
+ return function handler(...args) {
32
+ return match(args).with(routeHandlerPattern, async (args2) => {
33
+ const response = await makeswiftApiHandler(...args2);
34
+ response.headers.append("Access-Control-Allow-Origin", appOrigin);
35
+ response.headers.append("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
36
+ response.headers.append("Access-Control-Allow-Headers", "Content-Type, Authorization");
37
+ return response;
38
+ }).with(apiRoutePattern, async (args2) => {
39
+ const [req, res] = args2;
40
+ await new Promise((resolve, reject) => {
41
+ cors(req, res, (err) => {
42
+ if (err instanceof Error)
43
+ reject(err);
44
+ else
45
+ resolve();
46
+ });
32
47
  });
33
- });
34
- const { makeswift } = req.query;
48
+ return await makeswiftApiHandler(...args2);
49
+ }).exhaustive();
50
+ };
51
+ async function makeswiftApiHandler(...args) {
52
+ const params = match(args).with(routeHandlerPattern, ([, context]) => context.params).with(apiRoutePattern, ([req]) => req.query).exhaustive();
53
+ const { makeswift } = params;
35
54
  if (!Array.isArray(makeswift)) {
36
55
  throw new Error(
37
56
  `The Makeswift Next.js API handler must be used in a dynamic catch-all route named \`[...makeswift]\`.
@@ -40,25 +59,39 @@ Read more about dynamic catch-all routes here: https://nextjs.org/docs/routing/d
40
59
  );
41
60
  }
42
61
  const client = new Makeswift(apiKey, { apiOrigin, runtime });
43
- const siteVersion = Makeswift.getSiteVersion(req.previewData);
62
+ const siteVersion = match(args).with(routeHandlerPattern, () => getSiteVersion()).with(apiRoutePattern, ([req]) => Makeswift.getSiteVersion(req.previewData)).exhaustive();
44
63
  const action = "/" + makeswift.join("/");
45
64
  const matches = (pattern) => matchPattern(pattern, { decode: decodeURIComponent })(action);
46
65
  let m;
47
- if (matches("/manifest"))
48
- return manifest(req, res, { apiKey });
49
- if (matches("/revalidate"))
50
- return revalidate(req, res, { apiKey });
51
- if (matches("/proxy-preview-mode"))
52
- return proxyPreviewMode(req, res, { apiKey });
53
- if (matches("/fonts"))
54
- return fonts(req, res, { getFonts });
55
- if (matches("/element-tree"))
56
- return elementTree(req, res);
57
- if (matches("/translatable-data"))
58
- return translatableData(req, res, client);
59
- if (matches("/merge-translated-data"))
60
- return mergeTranslatedData(req, res, client);
61
- const handleResource = (resource) => resource === null ? res.status(404).json({ message: "Not Found" }) : res.json(resource);
66
+ if (matches("/manifest")) {
67
+ return match(args).with(routeHandlerPattern, (args2) => manifest(...args2, { apiKey })).with(apiRoutePattern, (args2) => manifest(...args2, { apiKey })).exhaustive();
68
+ }
69
+ if (matches("/revalidate")) {
70
+ return match(args).with(routeHandlerPattern, (args2) => revalidate(...args2, { apiKey })).with(apiRoutePattern, (args2) => revalidate(...args2, { apiKey })).exhaustive();
71
+ }
72
+ if (matches("/proxy-preview-mode")) {
73
+ return match(args).with(routeHandlerPattern, (args2) => proxyPreviewMode(...args2, { apiKey })).with(apiRoutePattern, (args2) => proxyPreviewMode(...args2, { apiKey })).exhaustive();
74
+ }
75
+ if (matches("/proxy-draft-mode")) {
76
+ return match(args).with(routeHandlerPattern, (args2) => proxyDraftMode(...args2, { apiKey })).with(apiRoutePattern, (args2) => proxyDraftMode(...args2, { apiKey })).exhaustive();
77
+ }
78
+ if (matches("/fonts")) {
79
+ return match(args).with(routeHandlerPattern, (args2) => fonts(...args2, { getFonts })).with(apiRoutePattern, (args2) => fonts(...args2, { getFonts })).exhaustive();
80
+ }
81
+ if (matches("/element-tree")) {
82
+ return match(args).with(routeHandlerPattern, (args2) => elementTree(...args2, runtime)).with(apiRoutePattern, (args2) => elementTree(...args2, runtime)).exhaustive();
83
+ }
84
+ if (matches("/translatable-data")) {
85
+ return match(args).with(routeHandlerPattern, (args2) => translatableData(...args2, client)).with(apiRoutePattern, (args2) => translatableData(...args2, client)).exhaustive();
86
+ }
87
+ if (matches("/merge-translated-data")) {
88
+ return match(args).with(routeHandlerPattern, (args2) => mergeTranslatedData(...args2, client)).with(apiRoutePattern, (args2) => mergeTranslatedData(...args2, client)).exhaustive();
89
+ }
90
+ const handleResource = (resource) => {
91
+ const status2 = resource === null ? 404 : 200;
92
+ const body2 = resource === null ? { message: "Not Found" } : resource;
93
+ return match(args).with(routeHandlerPattern, () => NextResponse.json(body2, { status: status2 })).with(apiRoutePattern, ([, res]) => res.status(status2).json(body2)).exhaustive();
94
+ };
62
95
  if (m = matches("/swatches/:id")) {
63
96
  return client.getSwatch(m.params.id, siteVersion).then(handleResource);
64
97
  }
@@ -74,22 +107,23 @@ Read more about dynamic catch-all routes here: https://nextjs.org/docs/routing/d
74
107
  if (m = matches(
75
108
  "/localized-global-elements/:globalElementId/:locale"
76
109
  )) {
77
- return client.getLocalizedGlobalElement(m.params.globalElementId, m.params.locale, siteVersion).then(
78
- (resource) => (
79
- // We're not returning 404 if it's null because localized global element is nullable.
80
- resource === null ? res.json({ message: "Not Found" }) : res.json(resource)
81
- )
82
- );
110
+ return client.getLocalizedGlobalElement(m.params.globalElementId, m.params.locale, siteVersion).then((resource) => {
111
+ const body2 = resource === null ? { message: "Not Found" } : resource;
112
+ return match(args).with(routeHandlerPattern, () => NextResponse.json(body2)).with(apiRoutePattern, ([, res]) => res.json(body2)).exhaustive();
113
+ });
83
114
  }
84
115
  if (m = matches("/page-pathname-slices/:id")) {
85
- const locale = typeof req.query.locale === "string" ? req.query.locale : void 0;
116
+ const localeParam = match(args).with(routeHandlerPattern, ([request]) => request.nextUrl.searchParams.get("locale")).with(apiRoutePattern, ([req]) => req.query.locale).exhaustive();
117
+ const locale = typeof localeParam === "string" ? localeParam : void 0;
86
118
  return client.getPagePathnameSlice(m.params.id, siteVersion, { locale }).then(handleResource);
87
119
  }
88
120
  if (m = matches("/tables/:id")) {
89
121
  return client.getTable(m.params.id).then(handleResource);
90
122
  }
91
- return res.status(404).json({ message: "Not Found" });
92
- };
123
+ const status = 404;
124
+ const body = { message: "Not Found" };
125
+ return match(args).with(routeHandlerPattern, () => NextResponse.json(body, { status })).with(apiRoutePattern, ([, res]) => res.status(status).json(body)).exhaustive();
126
+ }
93
127
  }
94
128
  export {
95
129
  MakeswiftApiHandler
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/next/api-handler/index.ts"],"sourcesContent":["import Cors from 'cors'\nimport { NextApiHandler } from 'next'\nimport { Match, match as matchPattern } from 'path-to-regexp'\nimport { APIResource } from '../../api'\nimport { Makeswift } from '../client'\n\nimport elementTree, { ElementTreeResponse } from './handlers/element-tree'\nimport fonts, { Font, FontsResponse, GetFonts } from './handlers/fonts'\nimport manifest, { Manifest, ManifestResponse } from './handlers/manifest'\nimport proxyPreviewMode, { ProxyPreviewModeResponse } from './handlers/proxy-preview-mode'\nimport { revalidate, RevalidationResponse } from './handlers/revalidate'\nimport translatableData, { TranslatableDataResponse } from './handlers/translatable-data'\nimport mergeTranslatedData, { TranslatedDataResponse } from './handlers/merge-translated-data'\nimport { ReactRuntime } from '../../react'\n\nexport type { Manifest, Font }\n\ntype MakeswiftApiHandlerConfig = {\n appOrigin?: string\n apiOrigin?: string\n getFonts?: GetFonts\n runtime?: ReactRuntime\n}\n\ntype NotFoundError = { message: string }\n\nexport type MakeswiftApiHandlerResponse =\n | ManifestResponse\n | RevalidationResponse\n | ProxyPreviewModeResponse\n | FontsResponse\n | ElementTreeResponse\n | TranslatableDataResponse\n | TranslatedDataResponse\n | APIResource\n | NotFoundError\n\nexport function MakeswiftApiHandler(\n apiKey: string,\n {\n appOrigin = 'https://app.makeswift.com',\n apiOrigin = 'https://api.makeswift.com',\n getFonts,\n runtime = ReactRuntime,\n }: MakeswiftApiHandlerConfig = {},\n): NextApiHandler<MakeswiftApiHandlerResponse> {\n const cors = Cors({ origin: appOrigin })\n\n if (typeof apiKey !== 'string') {\n throw new Error(\n 'The Makeswift Next.js API handler must be passed a valid Makeswift site API key: ' +\n \"`MakeswiftApiHandler('<makeswift_site_api_key>')`\\n\" +\n `Received \"${apiKey}\" instead.`,\n )\n }\n\n return async function makeswiftApiHandler(req, res) {\n await new Promise<void>((resolve, reject) => {\n cors(req, res, err => {\n if (err instanceof Error) reject(err)\n else resolve()\n })\n })\n\n const { makeswift } = req.query\n\n if (!Array.isArray(makeswift)) {\n throw new Error(\n 'The Makeswift Next.js API handler must be used in a dynamic catch-all route named `[...makeswift]`.\\n' +\n `Received \"${makeswift}\" for the \\`makeswift\\` param instead.\\n` +\n 'Read more about dynamic catch-all routes here: https://nextjs.org/docs/routing/dynamic-routes#catch-all-routes',\n )\n }\n\n const client = new Makeswift(apiKey, { apiOrigin, runtime })\n const siteVersion = Makeswift.getSiteVersion(req.previewData)\n const action = '/' + makeswift.join('/')\n const matches = <T extends object>(pattern: string): Match<T> =>\n matchPattern<T>(pattern, { decode: decodeURIComponent })(action)\n\n let m\n\n if (matches('/manifest')) return manifest(req, res, { apiKey })\n\n if (matches('/revalidate')) return revalidate(req, res, { apiKey })\n\n if (matches('/proxy-preview-mode')) return proxyPreviewMode(req, res, { apiKey })\n\n if (matches('/fonts')) return fonts(req, res, { getFonts })\n\n if (matches('/element-tree')) return elementTree(req, res)\n\n if (matches('/translatable-data')) return translatableData(req, res, client)\n\n if (matches('/merge-translated-data')) return mergeTranslatedData(req, res, client)\n\n const handleResource = <T extends APIResource>(resource: T | null): void =>\n resource === null ? res.status(404).json({ message: 'Not Found' }) : res.json(resource)\n\n if ((m = matches<{ id: string }>('/swatches/:id'))) {\n return client.getSwatch(m.params.id, siteVersion).then(handleResource)\n }\n\n if ((m = matches<{ id: string }>('/files/:id'))) {\n return client.getFile(m.params.id).then(handleResource)\n }\n\n if ((m = matches<{ id: string }>('/typographies/:id'))) {\n return client.getTypography(m.params.id, siteVersion).then(handleResource)\n }\n\n if ((m = matches<{ id: string }>('/global-elements/:id'))) {\n return client.getGlobalElement(m.params.id, siteVersion).then(handleResource)\n }\n\n if (\n (m = matches<{ globalElementId: string; locale: string }>(\n '/localized-global-elements/:globalElementId/:locale',\n ))\n ) {\n return client\n .getLocalizedGlobalElement(m.params.globalElementId, m.params.locale, siteVersion)\n .then(resource =>\n // We're not returning 404 if it's null because localized global element is nullable.\n resource === null ? res.json({ message: 'Not Found' }) : res.json(resource),\n )\n }\n\n if ((m = matches<{ id: string }>('/page-pathname-slices/:id'))) {\n const locale = typeof req.query.locale === 'string' ? req.query.locale : undefined\n\n return client.getPagePathnameSlice(m.params.id, siteVersion, { locale }).then(handleResource)\n }\n\n if ((m = matches<{ id: string }>('/tables/:id'))) {\n return client.getTable(m.params.id).then(handleResource)\n }\n\n return res.status(404).json({ message: 'Not Found' })\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../src/next/api-handler/index.ts"],"sourcesContent":["import Cors from 'cors'\nimport { NextApiRequest, NextApiResponse } from 'next'\nimport { NextRequest, NextResponse } from 'next/server'\nimport { Match, match as matchPattern } from 'path-to-regexp'\nimport { APIResource } from '../../api'\nimport { Makeswift } from '../client'\n\nimport elementTree, { ElementTreeResponse } from './handlers/element-tree'\nimport fonts, { Font, FontsResponse, GetFonts } from './handlers/fonts'\nimport manifest, { Manifest, ManifestResponse } from './handlers/manifest'\nimport proxyPreviewMode, { ProxyPreviewModeResponse } from './handlers/proxy-preview-mode'\nimport proxyDraftMode, { ProxyDraftModeResponse } from './handlers/proxy-draft-mode'\nimport { revalidate, RevalidationResponse } from './handlers/revalidate'\nimport translatableData, { TranslatableDataResponse } from './handlers/translatable-data'\nimport mergeTranslatedData, { TranslatedDataResponse } from './handlers/merge-translated-data'\nimport { ReactRuntime } from '../../react'\nimport { P, match } from 'ts-pattern'\nimport { getSiteVersion } from '../draft-mode'\n\nexport type { Manifest, Font }\n\ntype Context = { params: { [key: string]: string | string[] } }\n\ntype MakeswiftApiHandlerConfig = {\n appOrigin?: string\n apiOrigin?: string\n getFonts?: GetFonts\n runtime?: ReactRuntime\n}\n\ntype NotFoundError = { message: string }\n\nexport type MakeswiftApiHandlerResponse =\n | ManifestResponse\n | RevalidationResponse\n | ProxyPreviewModeResponse\n | ProxyDraftModeResponse\n | FontsResponse\n | ElementTreeResponse\n | TranslatableDataResponse\n | TranslatedDataResponse\n | APIResource\n | NotFoundError\n\ntype MakeswiftApiHandlerArgs =\n | [NextRequest, Context]\n | [NextApiRequest, NextApiResponse<MakeswiftApiHandlerResponse>]\n\nexport function MakeswiftApiHandler(\n apiKey: string,\n {\n appOrigin = 'https://app.makeswift.com',\n apiOrigin = 'https://api.makeswift.com',\n getFonts,\n runtime = ReactRuntime,\n }: MakeswiftApiHandlerConfig = {},\n): (...args: MakeswiftApiHandlerArgs) => Promise<NextResponse<MakeswiftApiHandlerResponse> | void> {\n const cors = Cors({ origin: appOrigin })\n\n if (typeof apiKey !== 'string') {\n throw new Error(\n 'The Makeswift Next.js API handler must be passed a valid Makeswift site API key: ' +\n \"`MakeswiftApiHandler('<makeswift_site_api_key>')`\\n\" +\n `Received \"${apiKey}\" instead.`,\n )\n }\n\n const routeHandlerPattern = [P.instanceOf(Request), P.any] as const\n const apiRoutePattern = [P.any, P.any] as const\n\n return function handler(\n ...args: MakeswiftApiHandlerArgs\n ): Promise<NextResponse<MakeswiftApiHandlerResponse> | void> {\n return match(args)\n .with(routeHandlerPattern, async args => {\n const response = await makeswiftApiHandler(...args)\n\n response.headers.append('Access-Control-Allow-Origin', appOrigin)\n response.headers.append('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS')\n response.headers.append('Access-Control-Allow-Headers', 'Content-Type, Authorization')\n\n return response\n })\n .with(apiRoutePattern, async args => {\n const [req, res] = args\n\n await new Promise<void>((resolve, reject) => {\n cors(req, res, err => {\n if (err instanceof Error) reject(err)\n else resolve()\n })\n })\n\n return await makeswiftApiHandler(...args)\n })\n .exhaustive()\n }\n\n async function makeswiftApiHandler(\n request: NextRequest,\n context: Context,\n ): Promise<NextResponse<MakeswiftApiHandlerResponse>>\n async function makeswiftApiHandler(\n req: NextApiRequest,\n res: NextApiResponse<MakeswiftApiHandlerResponse>,\n ): Promise<void>\n async function makeswiftApiHandler(\n ...args: MakeswiftApiHandlerArgs\n ): Promise<NextResponse<MakeswiftApiHandlerResponse> | void> {\n const params = match(args)\n .with(routeHandlerPattern, ([, context]) => context.params)\n .with(apiRoutePattern, ([req]) => req.query)\n .exhaustive()\n\n const { makeswift } = params\n\n if (!Array.isArray(makeswift)) {\n throw new Error(\n 'The Makeswift Next.js API handler must be used in a dynamic catch-all route named `[...makeswift]`.\\n' +\n `Received \"${makeswift}\" for the \\`makeswift\\` param instead.\\n` +\n 'Read more about dynamic catch-all routes here: https://nextjs.org/docs/routing/dynamic-routes#catch-all-routes',\n )\n }\n\n const client = new Makeswift(apiKey, { apiOrigin, runtime })\n const siteVersion = match(args)\n .with(routeHandlerPattern, () => getSiteVersion())\n .with(apiRoutePattern, ([req]) => Makeswift.getSiteVersion(req.previewData))\n .exhaustive()\n const action = '/' + makeswift.join('/')\n const matches = <T extends object>(pattern: string): Match<T> =>\n matchPattern<T>(pattern, { decode: decodeURIComponent })(action)\n\n let m\n\n if (matches('/manifest')) {\n return match(args)\n .with(routeHandlerPattern, args => manifest(...args, { apiKey }))\n .with(apiRoutePattern, args => manifest(...args, { apiKey }))\n .exhaustive()\n }\n\n if (matches('/revalidate')) {\n return match(args)\n .with(routeHandlerPattern, args => revalidate(...args, { apiKey }))\n .with(apiRoutePattern, args => revalidate(...args, { apiKey }))\n .exhaustive()\n }\n\n if (matches('/proxy-preview-mode')) {\n return match(args)\n .with(routeHandlerPattern, args => proxyPreviewMode(...args, { apiKey }))\n .with(apiRoutePattern, args => proxyPreviewMode(...args, { apiKey }))\n .exhaustive()\n }\n\n if (matches('/proxy-draft-mode')) {\n return match(args)\n .with(routeHandlerPattern, args => proxyDraftMode(...args, { apiKey }))\n .with(apiRoutePattern, args => proxyDraftMode(...args, { apiKey }))\n .exhaustive()\n }\n\n if (matches('/fonts')) {\n return match(args)\n .with(routeHandlerPattern, args => fonts(...args, { getFonts }))\n .with(apiRoutePattern, args => fonts(...args, { getFonts }))\n .exhaustive()\n }\n\n if (matches('/element-tree')) {\n return match(args)\n .with(routeHandlerPattern, args => elementTree(...args, runtime))\n .with(apiRoutePattern, args => elementTree(...args, runtime))\n .exhaustive()\n }\n\n if (matches('/translatable-data')) {\n return match(args)\n .with(routeHandlerPattern, args => translatableData(...args, client))\n .with(apiRoutePattern, args => translatableData(...args, client))\n .exhaustive()\n }\n\n if (matches('/merge-translated-data')) {\n return match(args)\n .with(routeHandlerPattern, args => mergeTranslatedData(...args, client))\n .with(apiRoutePattern, args => mergeTranslatedData(...args, client))\n .exhaustive()\n }\n\n const handleResource = <T extends APIResource>(\n resource: T | null,\n ): NextResponse<MakeswiftApiHandlerResponse> | void => {\n const status = resource === null ? 404 : 200\n const body = resource === null ? { message: 'Not Found' } : resource\n\n return match(args)\n .with(routeHandlerPattern, () => NextResponse.json(body, { status }))\n .with(apiRoutePattern, ([, res]) => res.status(status).json(body))\n .exhaustive()\n }\n\n if ((m = matches<{ id: string }>('/swatches/:id'))) {\n return client.getSwatch(m.params.id, siteVersion).then(handleResource)\n }\n\n if ((m = matches<{ id: string }>('/files/:id'))) {\n return client.getFile(m.params.id).then(handleResource)\n }\n\n if ((m = matches<{ id: string }>('/typographies/:id'))) {\n return client.getTypography(m.params.id, siteVersion).then(handleResource)\n }\n\n if ((m = matches<{ id: string }>('/global-elements/:id'))) {\n return client.getGlobalElement(m.params.id, siteVersion).then(handleResource)\n }\n\n if (\n (m = matches<{ globalElementId: string; locale: string }>(\n '/localized-global-elements/:globalElementId/:locale',\n ))\n ) {\n return client\n .getLocalizedGlobalElement(m.params.globalElementId, m.params.locale, siteVersion)\n .then(resource => {\n const body = resource === null ? { message: 'Not Found' } : resource\n\n // We're not returning 404 if it's null because localized global element is nullable.\n return match(args)\n .with(routeHandlerPattern, () => NextResponse.json(body))\n .with(apiRoutePattern, ([, res]) => res.json(body))\n .exhaustive()\n })\n }\n\n if ((m = matches<{ id: string }>('/page-pathname-slices/:id'))) {\n const localeParam = match(args)\n .with(routeHandlerPattern, ([request]) => request.nextUrl.searchParams.get('locale'))\n .with(apiRoutePattern, ([req]) => req.query.locale)\n .exhaustive()\n const locale = typeof localeParam === 'string' ? localeParam : undefined\n\n return client.getPagePathnameSlice(m.params.id, siteVersion, { locale }).then(handleResource)\n }\n\n if ((m = matches<{ id: string }>('/tables/:id'))) {\n return client.getTable(m.params.id).then(handleResource)\n }\n\n const status = 404\n const body = { message: 'Not Found' }\n\n return match(args)\n .with(routeHandlerPattern, () => NextResponse.json(body, { status }))\n .with(apiRoutePattern, ([, res]) => res.status(status).json(body))\n .exhaustive()\n }\n}\n"],"mappings":"AAAA,OAAO,UAAU;AAEjB,SAAsB,oBAAoB;AAC1C,SAAgB,SAAS,oBAAoB;AAE7C,SAAS,iBAAiB;AAE1B,OAAO,iBAA0C;AACjD,OAAO,WAA8C;AACrD,OAAO,cAA8C;AACrD,OAAO,sBAAoD;AAC3D,OAAO,oBAAgD;AACvD,SAAS,kBAAwC;AACjD,OAAO,sBAAoD;AAC3D,OAAO,yBAAqD;AAC5D,SAAS,oBAAoB;AAC7B,SAAS,GAAG,aAAa;AACzB,SAAS,sBAAsB;AA+BxB,SAAS,oBACd,QACA;AAAA,EACE,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ;AAAA,EACA,UAAU;AACZ,IAA+B,CAAC,GACiE;AACjG,QAAM,OAAO,KAAK,EAAE,QAAQ,UAAU,CAAC;AAEvC,MAAI,OAAO,WAAW,UAAU;AAC9B,UAAM,IAAI;AAAA,MACR;AAAA,YAEe,MAAM;AAAA,IACvB;AAAA,EACF;AAEA,QAAM,sBAAsB,CAAC,EAAE,WAAW,OAAO,GAAG,EAAE,GAAG;AACzD,QAAM,kBAAkB,CAAC,EAAE,KAAK,EAAE,GAAG;AAErC,SAAO,SAAS,WACX,MACwD;AAC3D,WAAO,MAAM,IAAI,EACd,KAAK,qBAAqB,OAAMA,UAAQ;AACvC,YAAM,WAAW,MAAM,oBAAoB,GAAGA,KAAI;AAElD,eAAS,QAAQ,OAAO,+BAA+B,SAAS;AAChE,eAAS,QAAQ,OAAO,gCAAgC,iCAAiC;AACzF,eAAS,QAAQ,OAAO,gCAAgC,6BAA6B;AAErF,aAAO;AAAA,IACT,CAAC,EACA,KAAK,iBAAiB,OAAMA,UAAQ;AACnC,YAAM,CAAC,KAAK,GAAG,IAAIA;AAEnB,YAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AAC3C,aAAK,KAAK,KAAK,SAAO;AACpB,cAAI,eAAe;AAAO,mBAAO,GAAG;AAAA;AAC/B,oBAAQ;AAAA,QACf,CAAC;AAAA,MACH,CAAC;AAED,aAAO,MAAM,oBAAoB,GAAGA,KAAI;AAAA,IAC1C,CAAC,EACA,WAAW;AAAA,EAChB;AAUA,iBAAe,uBACV,MACwD;AAC3D,UAAM,SAAS,MAAM,IAAI,EACtB,KAAK,qBAAqB,CAAC,CAAC,EAAE,OAAO,MAAM,QAAQ,MAAM,EACzD,KAAK,iBAAiB,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,EAC1C,WAAW;AAEd,UAAM,EAAE,UAAU,IAAI;AAEtB,QAAI,CAAC,MAAM,QAAQ,SAAS,GAAG;AAC7B,YAAM,IAAI;AAAA,QACR;AAAA,YACe,SAAS;AAAA;AAAA,MAE1B;AAAA,IACF;AAEA,UAAM,SAAS,IAAI,UAAU,QAAQ,EAAE,WAAW,QAAQ,CAAC;AAC3D,UAAM,cAAc,MAAM,IAAI,EAC3B,KAAK,qBAAqB,MAAM,eAAe,CAAC,EAChD,KAAK,iBAAiB,CAAC,CAAC,GAAG,MAAM,UAAU,eAAe,IAAI,WAAW,CAAC,EAC1E,WAAW;AACd,UAAM,SAAS,MAAM,UAAU,KAAK,GAAG;AACvC,UAAM,UAAU,CAAmB,YACjC,aAAgB,SAAS,EAAE,QAAQ,mBAAmB,CAAC,EAAE,MAAM;AAEjE,QAAI;AAEJ,QAAI,QAAQ,WAAW,GAAG;AACxB,aAAO,MAAM,IAAI,EACd,KAAK,qBAAqB,CAAAA,UAAQ,SAAS,GAAGA,OAAM,EAAE,OAAO,CAAC,CAAC,EAC/D,KAAK,iBAAiB,CAAAA,UAAQ,SAAS,GAAGA,OAAM,EAAE,OAAO,CAAC,CAAC,EAC3D,WAAW;AAAA,IAChB;AAEA,QAAI,QAAQ,aAAa,GAAG;AAC1B,aAAO,MAAM,IAAI,EACd,KAAK,qBAAqB,CAAAA,UAAQ,WAAW,GAAGA,OAAM,EAAE,OAAO,CAAC,CAAC,EACjE,KAAK,iBAAiB,CAAAA,UAAQ,WAAW,GAAGA,OAAM,EAAE,OAAO,CAAC,CAAC,EAC7D,WAAW;AAAA,IAChB;AAEA,QAAI,QAAQ,qBAAqB,GAAG;AAClC,aAAO,MAAM,IAAI,EACd,KAAK,qBAAqB,CAAAA,UAAQ,iBAAiB,GAAGA,OAAM,EAAE,OAAO,CAAC,CAAC,EACvE,KAAK,iBAAiB,CAAAA,UAAQ,iBAAiB,GAAGA,OAAM,EAAE,OAAO,CAAC,CAAC,EACnE,WAAW;AAAA,IAChB;AAEA,QAAI,QAAQ,mBAAmB,GAAG;AAChC,aAAO,MAAM,IAAI,EACd,KAAK,qBAAqB,CAAAA,UAAQ,eAAe,GAAGA,OAAM,EAAE,OAAO,CAAC,CAAC,EACrE,KAAK,iBAAiB,CAAAA,UAAQ,eAAe,GAAGA,OAAM,EAAE,OAAO,CAAC,CAAC,EACjE,WAAW;AAAA,IAChB;AAEA,QAAI,QAAQ,QAAQ,GAAG;AACrB,aAAO,MAAM,IAAI,EACd,KAAK,qBAAqB,CAAAA,UAAQ,MAAM,GAAGA,OAAM,EAAE,SAAS,CAAC,CAAC,EAC9D,KAAK,iBAAiB,CAAAA,UAAQ,MAAM,GAAGA,OAAM,EAAE,SAAS,CAAC,CAAC,EAC1D,WAAW;AAAA,IAChB;AAEA,QAAI,QAAQ,eAAe,GAAG;AAC5B,aAAO,MAAM,IAAI,EACd,KAAK,qBAAqB,CAAAA,UAAQ,YAAY,GAAGA,OAAM,OAAO,CAAC,EAC/D,KAAK,iBAAiB,CAAAA,UAAQ,YAAY,GAAGA,OAAM,OAAO,CAAC,EAC3D,WAAW;AAAA,IAChB;AAEA,QAAI,QAAQ,oBAAoB,GAAG;AACjC,aAAO,MAAM,IAAI,EACd,KAAK,qBAAqB,CAAAA,UAAQ,iBAAiB,GAAGA,OAAM,MAAM,CAAC,EACnE,KAAK,iBAAiB,CAAAA,UAAQ,iBAAiB,GAAGA,OAAM,MAAM,CAAC,EAC/D,WAAW;AAAA,IAChB;AAEA,QAAI,QAAQ,wBAAwB,GAAG;AACrC,aAAO,MAAM,IAAI,EACd,KAAK,qBAAqB,CAAAA,UAAQ,oBAAoB,GAAGA,OAAM,MAAM,CAAC,EACtE,KAAK,iBAAiB,CAAAA,UAAQ,oBAAoB,GAAGA,OAAM,MAAM,CAAC,EAClE,WAAW;AAAA,IAChB;AAEA,UAAM,iBAAiB,CACrB,aACqD;AACrD,YAAMC,UAAS,aAAa,OAAO,MAAM;AACzC,YAAMC,QAAO,aAAa,OAAO,EAAE,SAAS,YAAY,IAAI;AAE5D,aAAO,MAAM,IAAI,EACd,KAAK,qBAAqB,MAAM,aAAa,KAAKA,OAAM,EAAE,QAAAD,QAAO,CAAC,CAAC,EACnE,KAAK,iBAAiB,CAAC,CAAC,EAAE,GAAG,MAAM,IAAI,OAAOA,OAAM,EAAE,KAAKC,KAAI,CAAC,EAChE,WAAW;AAAA,IAChB;AAEA,QAAK,IAAI,QAAwB,eAAe,GAAI;AAClD,aAAO,OAAO,UAAU,EAAE,OAAO,IAAI,WAAW,EAAE,KAAK,cAAc;AAAA,IACvE;AAEA,QAAK,IAAI,QAAwB,YAAY,GAAI;AAC/C,aAAO,OAAO,QAAQ,EAAE,OAAO,EAAE,EAAE,KAAK,cAAc;AAAA,IACxD;AAEA,QAAK,IAAI,QAAwB,mBAAmB,GAAI;AACtD,aAAO,OAAO,cAAc,EAAE,OAAO,IAAI,WAAW,EAAE,KAAK,cAAc;AAAA,IAC3E;AAEA,QAAK,IAAI,QAAwB,sBAAsB,GAAI;AACzD,aAAO,OAAO,iBAAiB,EAAE,OAAO,IAAI,WAAW,EAAE,KAAK,cAAc;AAAA,IAC9E;AAEA,QACG,IAAI;AAAA,MACH;AAAA,IACF,GACA;AACA,aAAO,OACJ,0BAA0B,EAAE,OAAO,iBAAiB,EAAE,OAAO,QAAQ,WAAW,EAChF,KAAK,cAAY;AAChB,cAAMA,QAAO,aAAa,OAAO,EAAE,SAAS,YAAY,IAAI;AAG5D,eAAO,MAAM,IAAI,EACd,KAAK,qBAAqB,MAAM,aAAa,KAAKA,KAAI,CAAC,EACvD,KAAK,iBAAiB,CAAC,CAAC,EAAE,GAAG,MAAM,IAAI,KAAKA,KAAI,CAAC,EACjD,WAAW;AAAA,MAChB,CAAC;AAAA,IACL;AAEA,QAAK,IAAI,QAAwB,2BAA2B,GAAI;AAC9D,YAAM,cAAc,MAAM,IAAI,EAC3B,KAAK,qBAAqB,CAAC,CAAC,OAAO,MAAM,QAAQ,QAAQ,aAAa,IAAI,QAAQ,CAAC,EACnF,KAAK,iBAAiB,CAAC,CAAC,GAAG,MAAM,IAAI,MAAM,MAAM,EACjD,WAAW;AACd,YAAM,SAAS,OAAO,gBAAgB,WAAW,cAAc;AAE/D,aAAO,OAAO,qBAAqB,EAAE,OAAO,IAAI,aAAa,EAAE,OAAO,CAAC,EAAE,KAAK,cAAc;AAAA,IAC9F;AAEA,QAAK,IAAI,QAAwB,aAAa,GAAI;AAChD,aAAO,OAAO,SAAS,EAAE,OAAO,EAAE,EAAE,KAAK,cAAc;AAAA,IACzD;AAEA,UAAM,SAAS;AACf,UAAM,OAAO,EAAE,SAAS,YAAY;AAEpC,WAAO,MAAM,IAAI,EACd,KAAK,qBAAqB,MAAM,aAAa,KAAK,MAAM,EAAE,OAAO,CAAC,CAAC,EACnE,KAAK,iBAAiB,CAAC,CAAC,EAAE,GAAG,MAAM,IAAI,OAAO,MAAM,EAAE,KAAK,IAAI,CAAC,EAChE,WAAW;AAAA,EAChB;AACF;","names":["args","status","body"]}
@@ -23,6 +23,7 @@ const pagePathnameSlicesAPISchema = z.array(
23
23
  id: z.string(),
24
24
  basePageId: z.string(),
25
25
  pathname: z.string(),
26
+ localizedPathname: z.string().optional(),
26
27
  __typename: z.literal("PagePathnameSlice")
27
28
  }).nullable()
28
29
  );
@@ -356,9 +357,9 @@ Received "${apiKey}" instead.`
356
357
  if (pagePathnameSlice == null)
357
358
  return null;
358
359
  return {
360
+ ...pagePathnameSlice,
359
361
  id: pagePathnameSlice.basePageId,
360
- pathname: pagePathnameSlice.pathname,
361
- __typename: pagePathnameSlice.__typename
362
+ localizedPathname: pagePathnameSlice.localizedPathname ?? null
362
363
  };
363
364
  });
364
365
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/next/client.ts"],"sourcesContent":["import { PreviewData } from 'next'\nimport { z } from 'zod'\nimport {\n APIResourceType,\n File,\n GlobalElement,\n LocalizedGlobalElement,\n PagePathnameSlice,\n Swatch,\n Table,\n Typography,\n} from '../api'\nimport { GraphQLClient } from '../api/graphql/client'\nimport { FileQuery, IntrospectedResourcesQuery, TableQuery } from '../api/graphql/documents'\nimport {\n FileQueryResult,\n FileQueryVariables,\n IntrospectedResourcesQueryResult,\n IntrospectedResourcesQueryVariables,\n TableQueryResult,\n TableQueryVariables,\n} from '../api/graphql/generated/types'\nimport { CacheData, SerializedLocalizedResourcesMap } from '../api/react'\nimport { Descriptor as PropControllerDescriptor } from '../prop-controllers/descriptors'\nimport {\n getElementChildren,\n getSwatchIds,\n getFileIds,\n getPageIds,\n getTableIds,\n getTypographyIds,\n} from '../prop-controllers/introspection'\nimport { ReactRuntime } from '../runtimes/react'\nimport {\n Element,\n ElementData,\n getPropControllerDescriptors,\n isElementReference,\n Data,\n} from '../state/react-page'\nimport { getMakeswiftSiteVersion, MakeswiftSiteVersion } from './preview-mode'\n\nexport type MakeswiftPage = {\n id: string\n path: string\n}\n\nexport type MakeswiftPageDocument = {\n id: string\n site: { id: string }\n data: Element\n snippets: Snippet[]\n fonts: Font[]\n meta: Meta\n seo: Seo\n localizedPages: LocalizedPage[]\n locale: string | null\n}\n\nexport type MakeswiftPageSnapshot = {\n document: MakeswiftPageDocument\n apiOrigin: string\n cacheData: CacheData\n preview: boolean\n localizedResourcesMap: SerializedLocalizedResourcesMap\n locale: string | null\n}\n\ntype Snippet = {\n id: string\n code: string\n location: 'HEAD' | 'BODY'\n liveEnabled: boolean\n builderEnabled: boolean\n cleanup: string | null\n}\ntype Font = { family: string; variants: string[] }\n\ntype Meta = {\n title?: string | null\n description?: string | null\n keywords?: string | null\n socialImage?: {\n id: string\n publicUrl: string\n mimetype: string\n } | null\n favicon?: {\n id: string\n publicUrl: string\n mimetype: string\n } | null\n}\ntype Seo = {\n canonicalUrl?: string | null\n isIndexingBlocked?: boolean | null\n}\n\ntype LocalizedPage = {\n id: string\n data: Element\n elementTreeId: string\n parentId: string | null\n meta: Omit<Meta, 'favicon'>\n seo: Seo\n}\n\ntype MakeswiftConfig = {\n apiOrigin?: string\n runtime?: ReactRuntime\n}\n\nexport type Sitemap = {\n id: string\n loc: string\n lastmod?: string\n changefreq?: 'always' | 'hourly' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'never'\n priority?: number\n alternateRefs?: {\n hreflang: string\n href: string\n }[]\n}[]\n\nconst pagePathnameSlicesAPISchema = z.array(\n z\n .object({\n id: z.string(),\n basePageId: z.string(),\n pathname: z.string(),\n __typename: z.literal('PagePathnameSlice'),\n })\n .nullable(),\n)\n\nconst getPageAPISchema = z.object({\n pathname: z.string(),\n locale: z.string(),\n alternate: z.array(\n z.object({\n pathname: z.string(),\n locale: z.string(),\n }),\n ),\n})\n\ntype GetPageAPI = z.infer<typeof getPageAPISchema>\n\nexport class Makeswift {\n private apiKey: string\n private apiOrigin: URL\n private graphqlClient: GraphQLClient\n private runtime: ReactRuntime\n\n static getSiteVersion(previewData: PreviewData): MakeswiftSiteVersion {\n return getMakeswiftSiteVersion(previewData) ?? MakeswiftSiteVersion.Live\n }\n\n constructor(\n apiKey: string,\n { apiOrigin = 'https://api.makeswift.com', runtime = ReactRuntime }: MakeswiftConfig = {},\n ) {\n if (typeof apiKey !== 'string') {\n throw new Error(\n 'The Makeswift client must be passed a valid Makeswift site API key: ' +\n \"`new Makeswift('<makeswift_site_api_key>')`\\n\" +\n `Received \"${apiKey}\" instead.`,\n )\n }\n\n this.apiKey = apiKey\n\n try {\n this.apiOrigin = new URL(apiOrigin)\n } catch {\n throw new Error(\n `The Makeswift client received an invalid \\`apiOrigin\\` parameter: \"${apiOrigin}\".`,\n )\n }\n\n this.graphqlClient = new GraphQLClient(new URL('graphql', apiOrigin).href)\n this.runtime = runtime\n }\n\n private async fetch(\n path: string,\n siteVersion: MakeswiftSiteVersion = MakeswiftSiteVersion.Live,\n init?: RequestInit,\n ): Promise<Response> {\n const response = await fetch(new URL(path, this.apiOrigin).toString(), {\n ...init,\n headers: {\n ['X-API-Key']: this.apiKey,\n 'Makeswift-Site-API-Key': this.apiKey,\n 'Makeswift-Site-Version': siteVersion,\n ...init?.headers,\n },\n })\n\n return response\n }\n\n async getPages({\n siteVersion = MakeswiftSiteVersion.Live,\n }: {\n siteVersion?: MakeswiftSiteVersion\n } = {}): Promise<MakeswiftPage[]> {\n const response = await this.fetch(`v3/pages`, siteVersion)\n\n if (!response.ok) {\n console.error('Failed to get pages', await response.json())\n throw new Error(`Failed to get pages with error: \"${response.statusText}\"`)\n }\n\n const json = await response.json()\n\n return json\n }\n\n async getPage(\n pathname: string,\n {\n siteVersion = MakeswiftSiteVersion.Live,\n locale: localeInput,\n }: { siteVersion?: MakeswiftSiteVersion; locale?: string } = {},\n ): Promise<GetPageAPI | null> {\n const url = new URL(`v2/pages/${encodeURIComponent(pathname)}`, this.apiOrigin)\n if (localeInput) url.searchParams.set('locale', localeInput)\n\n const response = await this.fetch(url.pathname + url.search, siteVersion)\n\n if (!response.ok) {\n if (response.status === 404) return null\n\n console.error('Failed to get page snapshot', await response.json())\n throw new Error(`Failed to get page snapshot with error: \"${response.statusText}\"`)\n }\n\n const json = await response.json()\n\n return getPageAPISchema.parse(json)\n }\n\n private async getTypographies(\n typographyIds: string[],\n siteVersion: MakeswiftSiteVersion,\n ): Promise<(Typography | null)[]> {\n if (typographyIds.length === 0) return []\n\n const url = new URL(`v2/typographies/bulk`, this.apiOrigin)\n\n typographyIds.forEach(id => {\n url.searchParams.append('ids', id)\n })\n\n const response = await this.fetch(url.pathname + url.search, siteVersion)\n\n if (!response.ok) {\n console.error('Failed to get typographies', await response.json())\n\n return []\n }\n\n const body = await response.json()\n\n return body\n }\n\n private async getSwatches(\n ids: string[],\n siteVersion: MakeswiftSiteVersion,\n ): Promise<(Swatch | null)[]> {\n if (ids.length === 0) return []\n\n const url = new URL(`v2/swatches/bulk`, this.apiOrigin)\n\n ids.forEach(id => {\n url.searchParams.append('ids', id)\n })\n\n const response = await this.fetch(url.pathname + url.search, siteVersion)\n\n if (!response.ok) {\n console.error('Failed to get swatches', await response.json())\n\n return []\n }\n\n return await response.json()\n }\n\n private async getIntrospectedResources(\n {\n swatchIds,\n ...introspectedResourceIds\n }: IntrospectedResourcesQueryVariables & { swatchIds: string[] },\n siteVersion: MakeswiftSiteVersion,\n ): Promise<IntrospectedResourcesQueryResult & { swatches: (Swatch | null)[] }> {\n const result = await this.graphqlClient.request<\n IntrospectedResourcesQueryResult,\n IntrospectedResourcesQueryVariables\n >(IntrospectedResourcesQuery, introspectedResourceIds)\n const swatches = await this.getSwatches(swatchIds, siteVersion)\n\n return { ...result, swatches }\n }\n\n private async introspect(\n element: Element,\n siteVersion: MakeswiftSiteVersion,\n locale?: string,\n ): Promise<{ cacheData: CacheData; localizedResourcesMap: SerializedLocalizedResourcesMap }> {\n const runtime = this.runtime\n const descriptors = getPropControllerDescriptors(runtime.store.getState())\n const swatchIds = new Set<string>()\n const fileIds = new Set<string>()\n const typographyIds = new Set<string>()\n const tableIds = new Set<string>()\n const pageIds = new Set<string>()\n const globalElements = new Map<string, GlobalElement | null>()\n const localizedGlobalElements = new Map<string, LocalizedGlobalElement | null>()\n const localizedResourcesMap = new Map<string, string | null>()\n\n const remaining = [element]\n const seen = new Set<string>()\n let current: Element | undefined\n\n while ((current = remaining.pop())) {\n let element: ElementData\n\n if (isElementReference(current)) {\n const globalElementId = current.value\n const globalElement = await this.getGlobalElement(globalElementId, siteVersion)\n let elementData = globalElement?.data\n\n if (locale) {\n const localizedGlobalElement = await this.getLocalizedGlobalElement(\n globalElementId,\n locale,\n siteVersion,\n )\n\n localizedResourcesMap.set(globalElementId, localizedGlobalElement?.id ?? null)\n\n if (localizedGlobalElement) {\n // Update the logic here when we can merge element trees\n elementData = localizedGlobalElement.data\n\n localizedGlobalElements.set(localizedGlobalElement.id, localizedGlobalElement)\n }\n }\n\n globalElements.set(globalElementId, globalElement)\n\n if (elementData == null) continue\n\n element = elementData as ElementData\n } else {\n element = current\n }\n\n const elementDescriptors = descriptors.get(element.type)\n\n if (elementDescriptors == null) continue\n\n getResourcesFromElementDescriptors(elementDescriptors, element.props)\n\n function getResourcesFromElementDescriptors(\n elementDescriptors: Record<string, PropControllerDescriptor>,\n props: ElementData['props'],\n ) {\n Object.entries(elementDescriptors).forEach(([propName, descriptor]) => {\n getSwatchIds(descriptor, props[propName]).forEach(swatchId => {\n swatchIds.add(swatchId)\n })\n\n getFileIds(descriptor, props[propName]).forEach(fileId => fileIds.add(fileId))\n\n getTypographyIds(descriptor, props[propName]).forEach(typographyId =>\n typographyIds.add(typographyId),\n )\n\n getTableIds(descriptor, props[propName]).forEach(tableId => tableIds.add(tableId))\n\n getPageIds(descriptor, props[propName]).forEach(pageId => pageIds.add(pageId))\n\n getElementChildren(descriptor, props[propName]).forEach(child => {\n if (!seen.has(child.key)) {\n seen.add(child.key)\n\n remaining.push(child)\n }\n })\n })\n }\n }\n\n const typographies = await this.getTypographies([...typographyIds], siteVersion)\n\n typographies.forEach(typography => {\n typography?.style.forEach(style => {\n const swatchId = style.value.color?.swatchId\n\n if (swatchId != null) swatchIds.add(swatchId)\n })\n })\n\n const pagePathnames = await this.getPagePathnameSlices([...pageIds], siteVersion, { locale })\n\n const { swatches, files, tables } = await this.getIntrospectedResources(\n {\n swatchIds: [...swatchIds],\n fileIds: [...fileIds],\n tableIds: [...tableIds],\n },\n siteVersion,\n )\n\n const cacheData = {\n [APIResourceType.Swatch]: [...swatchIds].map(id => ({\n id,\n value: swatches.find(swatch => swatch?.id === id) ?? null,\n })),\n [APIResourceType.File]: [...fileIds].map(id => ({\n id,\n value: files.find(file => file?.id === id) ?? null,\n })),\n [APIResourceType.Typography]: [...typographyIds].map(id => ({\n id,\n value: typographies.find(typography => typography?.id === id) ?? null,\n })),\n [APIResourceType.Table]: [...tableIds].map(id => ({\n id,\n value: tables.find(table => table?.id === id) ?? null,\n })),\n [APIResourceType.PagePathnameSlice]: [...pageIds].map(id => ({\n id,\n value: pagePathnames.find(pagePathnameSlice => pagePathnameSlice?.id === id) ?? null,\n })),\n [APIResourceType.GlobalElement]: [...globalElements.entries()].map(([id, value]) => ({\n id,\n value,\n })),\n [APIResourceType.LocalizedGlobalElement]: [...localizedGlobalElements.entries()].map(\n ([id, value]) => ({\n id,\n value,\n }),\n ),\n }\n\n return { cacheData, localizedResourcesMap: Object.fromEntries(localizedResourcesMap.entries()) }\n }\n\n async getPageSnapshot(\n pathname: string,\n { siteVersion, locale: localeInput }: { siteVersion: MakeswiftSiteVersion; locale?: string },\n ): Promise<MakeswiftPageSnapshot | null> {\n const searchParams = new URLSearchParams()\n if (localeInput) {\n searchParams.set('locale', localeInput)\n }\n\n const response = await this.fetch(\n `v3/pages/${encodeURIComponent(pathname)}/document?${searchParams.toString()}`,\n siteVersion,\n )\n\n if (!response.ok) {\n if (response.status === 404) return null\n\n console.error('Failed to get page snapshot', await response.json())\n throw new Error(`Failed to get page snapshot with error: \"${response.statusText}\"`)\n }\n\n const document: MakeswiftPageDocument = await response.json()\n const baseLocalizedPage = document.localizedPages.find(({ parentId }) => parentId == null)\n // We're using the locale from the response instead from the arg because in the server\n // we make the locale null if the locale === defaultLocale.\n const locale = document.locale\n\n const { cacheData, localizedResourcesMap } = await this.introspect(\n baseLocalizedPage?.data ?? document.data,\n siteVersion,\n locale ?? undefined,\n )\n const apiOrigin = this.apiOrigin.href\n const preview = siteVersion === MakeswiftSiteVersion.Working\n\n return {\n document,\n cacheData,\n apiOrigin,\n preview,\n localizedResourcesMap,\n locale,\n }\n }\n\n async getSwatch(swatchId: string, siteVersion: MakeswiftSiteVersion): Promise<Swatch | null> {\n const response = await this.fetch(`v2/swatches/${swatchId}`, siteVersion)\n\n if (!response.ok) {\n if (response.status !== 404) console.error('Failed to get swatch', await response.json())\n\n return null\n }\n\n const swatch = await response.json()\n\n return swatch\n }\n\n async getFile(fileId: string): Promise<File | null> {\n const result = await this.graphqlClient.request<FileQueryResult, FileQueryVariables>(\n FileQuery,\n { fileId },\n )\n\n return result.file\n }\n\n async getTypography(\n typographyId: string,\n siteVersion: MakeswiftSiteVersion,\n ): Promise<Typography | null> {\n const response = await this.fetch(`v2/typographies/${typographyId}`, siteVersion)\n\n if (!response.ok) {\n if (response.status !== 404) console.error('Failed to get typography', await response.json())\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: MakeswiftSiteVersion,\n ): Promise<GlobalElement | null> {\n const response = await this.fetch(`v2/global-elements/${globalElementId}`, siteVersion)\n\n if (!response.ok) {\n if (response.status !== 404)\n console.error('Failed to get global element', await response.json())\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: MakeswiftSiteVersion,\n ): Promise<LocalizedGlobalElement | null> {\n const response = await this.fetch(\n `v2/localized-global-elements/${globalElementId}?locale=${locale}`,\n siteVersion,\n )\n\n if (!response.ok) {\n if (response.status !== 404)\n console.error('Failed to get localized global element', await response.json())\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: MakeswiftSiteVersion,\n { locale }: { locale?: string },\n ): Promise<(PagePathnameSlice | null)[]> {\n if (pageIds.length === 0) return []\n\n const url = new URL(`v2/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 slices', await response.json())\n\n return []\n }\n\n const json = await response.json()\n\n const pagePathnameSlices = pagePathnameSlicesAPISchema.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 id: pagePathnameSlice.basePageId,\n pathname: pagePathnameSlice.pathname,\n __typename: pagePathnameSlice.__typename,\n }\n })\n }\n\n async getPagePathnameSlice(\n pageId: string,\n siteVersion: MakeswiftSiteVersion,\n { locale }: { locale?: string } = {},\n ): Promise<PagePathnameSlice | null> {\n const pagePathnameSlices = await this.getPagePathnameSlices([pageId], siteVersion, { locale })\n\n return pagePathnameSlices.at(0) ?? null\n }\n\n async getTable(tableId: string): Promise<Table | null> {\n const result = await this.graphqlClient.request<TableQueryResult, TableQueryVariables>(\n TableQuery,\n { tableId },\n )\n\n return result.table\n }\n\n async getSitemap({\n limit = 50,\n after,\n pathnamePrefix,\n locale,\n }: {\n limit?: number\n after?: string\n pathnamePrefix?: string\n locale?: string\n } = {}): Promise<Sitemap> {\n const url = new URL('v1/sitemap', this.apiOrigin)\n\n url.searchParams.set('limit', limit.toString())\n if (after != null) url.searchParams.set('after', after)\n if (pathnamePrefix != null) url.searchParams.set('pathnamePrefix', pathnamePrefix)\n if (locale != null) url.searchParams.set('locale', locale)\n\n const response = await this.fetch(url.pathname + url.search)\n\n if (!response.ok) {\n console.error('Failed to get sitemap', await response.json())\n throw new Error(`Failed to get sitemap with error: \"${response.statusText}\"`)\n }\n\n const sitemap = await response.json()\n\n return sitemap\n }\n\n getTranslatableData(elementTree: ElementData): Record<string, Data> {\n return this.runtime.getTranslatableData(elementTree)\n }\n\n mergeTranslatedData(elementTree: ElementData, translatedData: Record<string, Data>): Element {\n return this.runtime.mergeTranslatedData(elementTree, translatedData)\n }\n}\n"],"mappings":"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","names":["getResourcesFromElementDescriptors","elementDescriptors","element"]}
1
+ {"version":3,"sources":["../../../src/next/client.ts"],"sourcesContent":["import { PreviewData } from 'next'\nimport { z } from 'zod'\nimport {\n APIResourceType,\n File,\n GlobalElement,\n LocalizedGlobalElement,\n PagePathnameSlice,\n Swatch,\n Table,\n Typography,\n} from '../api'\nimport { GraphQLClient } from '../api/graphql/client'\nimport { FileQuery, IntrospectedResourcesQuery, TableQuery } from '../api/graphql/documents'\nimport {\n FileQueryResult,\n FileQueryVariables,\n IntrospectedResourcesQueryResult,\n IntrospectedResourcesQueryVariables,\n TableQueryResult,\n TableQueryVariables,\n} from '../api/graphql/generated/types'\nimport { CacheData, SerializedLocalizedResourcesMap } from '../api/react'\nimport { Descriptor as PropControllerDescriptor } from '../prop-controllers/descriptors'\nimport {\n getElementChildren,\n getSwatchIds,\n getFileIds,\n getPageIds,\n getTableIds,\n getTypographyIds,\n} from '../prop-controllers/introspection'\nimport { ReactRuntime } from '../runtimes/react'\nimport {\n Element,\n ElementData,\n getPropControllerDescriptors,\n isElementReference,\n Data,\n} from '../state/react-page'\nimport { getMakeswiftSiteVersion, MakeswiftSiteVersion } from './preview-mode'\n\nexport type MakeswiftPage = {\n id: string\n path: string\n}\n\nexport type MakeswiftPageDocument = {\n id: string\n site: { id: string }\n data: Element\n snippets: Snippet[]\n fonts: Font[]\n meta: Meta\n seo: Seo\n localizedPages: LocalizedPage[]\n locale: string | null\n}\n\nexport type MakeswiftPageSnapshot = {\n document: MakeswiftPageDocument\n apiOrigin: string\n cacheData: CacheData\n preview: boolean\n localizedResourcesMap: SerializedLocalizedResourcesMap\n locale: string | null\n}\n\ntype Snippet = {\n id: string\n code: string\n location: 'HEAD' | 'BODY'\n liveEnabled: boolean\n builderEnabled: boolean\n cleanup: string | null\n}\ntype Font = { family: string; variants: string[] }\n\ntype Meta = {\n title?: string | null\n description?: string | null\n keywords?: string | null\n socialImage?: {\n id: string\n publicUrl: string\n mimetype: string\n } | null\n favicon?: {\n id: string\n publicUrl: string\n mimetype: string\n } | null\n}\ntype Seo = {\n canonicalUrl?: string | null\n isIndexingBlocked?: boolean | null\n}\n\ntype LocalizedPage = {\n id: string\n data: Element\n elementTreeId: string\n parentId: string | null\n meta: Omit<Meta, 'favicon'>\n seo: Seo\n}\n\ntype MakeswiftConfig = {\n apiOrigin?: string\n runtime?: ReactRuntime\n}\n\nexport type Sitemap = {\n id: string\n loc: string\n lastmod?: string\n changefreq?: 'always' | 'hourly' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'never'\n priority?: number\n alternateRefs?: {\n hreflang: string\n href: string\n }[]\n}[]\n\nconst pagePathnameSlicesAPISchema = z.array(\n z\n .object({\n id: z.string(),\n basePageId: z.string(),\n pathname: z.string(),\n localizedPathname: z.string().optional(),\n __typename: z.literal('PagePathnameSlice'),\n })\n .nullable(),\n)\n\nconst getPageAPISchema = z.object({\n pathname: z.string(),\n locale: z.string(),\n alternate: z.array(\n z.object({\n pathname: z.string(),\n locale: z.string(),\n }),\n ),\n})\n\ntype GetPageAPI = z.infer<typeof getPageAPISchema>\n\nexport class Makeswift {\n private apiKey: string\n private apiOrigin: URL\n private graphqlClient: GraphQLClient\n private runtime: ReactRuntime\n\n static getSiteVersion(previewData: PreviewData): MakeswiftSiteVersion {\n return getMakeswiftSiteVersion(previewData) ?? MakeswiftSiteVersion.Live\n }\n\n constructor(\n apiKey: string,\n { apiOrigin = 'https://api.makeswift.com', runtime = ReactRuntime }: MakeswiftConfig = {},\n ) {\n if (typeof apiKey !== 'string') {\n throw new Error(\n 'The Makeswift client must be passed a valid Makeswift site API key: ' +\n \"`new Makeswift('<makeswift_site_api_key>')`\\n\" +\n `Received \"${apiKey}\" instead.`,\n )\n }\n\n this.apiKey = apiKey\n\n try {\n this.apiOrigin = new URL(apiOrigin)\n } catch {\n throw new Error(\n `The Makeswift client received an invalid \\`apiOrigin\\` parameter: \"${apiOrigin}\".`,\n )\n }\n\n this.graphqlClient = new GraphQLClient(new URL('graphql', apiOrigin).href)\n this.runtime = runtime\n }\n\n private async fetch(\n path: string,\n siteVersion: MakeswiftSiteVersion = MakeswiftSiteVersion.Live,\n init?: RequestInit,\n ): Promise<Response> {\n const response = await fetch(new URL(path, this.apiOrigin).toString(), {\n ...init,\n headers: {\n ['X-API-Key']: this.apiKey,\n 'Makeswift-Site-API-Key': this.apiKey,\n 'Makeswift-Site-Version': siteVersion,\n ...init?.headers,\n },\n })\n\n return response\n }\n\n async getPages({\n siteVersion = MakeswiftSiteVersion.Live,\n }: {\n siteVersion?: MakeswiftSiteVersion\n } = {}): Promise<MakeswiftPage[]> {\n const response = await this.fetch(`v3/pages`, siteVersion)\n\n if (!response.ok) {\n console.error('Failed to get pages', await response.json())\n throw new Error(`Failed to get pages with error: \"${response.statusText}\"`)\n }\n\n const json = await response.json()\n\n return json\n }\n\n async getPage(\n pathname: string,\n {\n siteVersion = MakeswiftSiteVersion.Live,\n locale: localeInput,\n }: { siteVersion?: MakeswiftSiteVersion; locale?: string } = {},\n ): Promise<GetPageAPI | null> {\n const url = new URL(`v2/pages/${encodeURIComponent(pathname)}`, this.apiOrigin)\n if (localeInput) url.searchParams.set('locale', localeInput)\n\n const response = await this.fetch(url.pathname + url.search, siteVersion)\n\n if (!response.ok) {\n if (response.status === 404) return null\n\n console.error('Failed to get page snapshot', await response.json())\n throw new Error(`Failed to get page snapshot with error: \"${response.statusText}\"`)\n }\n\n const json = await response.json()\n\n return getPageAPISchema.parse(json)\n }\n\n private async getTypographies(\n typographyIds: string[],\n siteVersion: MakeswiftSiteVersion,\n ): Promise<(Typography | null)[]> {\n if (typographyIds.length === 0) return []\n\n const url = new URL(`v2/typographies/bulk`, this.apiOrigin)\n\n typographyIds.forEach(id => {\n url.searchParams.append('ids', id)\n })\n\n const response = await this.fetch(url.pathname + url.search, siteVersion)\n\n if (!response.ok) {\n console.error('Failed to get typographies', await response.json())\n\n return []\n }\n\n const body = await response.json()\n\n return body\n }\n\n private async getSwatches(\n ids: string[],\n siteVersion: MakeswiftSiteVersion,\n ): Promise<(Swatch | null)[]> {\n if (ids.length === 0) return []\n\n const url = new URL(`v2/swatches/bulk`, this.apiOrigin)\n\n ids.forEach(id => {\n url.searchParams.append('ids', id)\n })\n\n const response = await this.fetch(url.pathname + url.search, siteVersion)\n\n if (!response.ok) {\n console.error('Failed to get swatches', await response.json())\n\n return []\n }\n\n return await response.json()\n }\n\n private async getIntrospectedResources(\n {\n swatchIds,\n ...introspectedResourceIds\n }: IntrospectedResourcesQueryVariables & { swatchIds: string[] },\n siteVersion: MakeswiftSiteVersion,\n ): Promise<IntrospectedResourcesQueryResult & { swatches: (Swatch | null)[] }> {\n const result = await this.graphqlClient.request<\n IntrospectedResourcesQueryResult,\n IntrospectedResourcesQueryVariables\n >(IntrospectedResourcesQuery, introspectedResourceIds)\n const swatches = await this.getSwatches(swatchIds, siteVersion)\n\n return { ...result, swatches }\n }\n\n private async introspect(\n element: Element,\n siteVersion: MakeswiftSiteVersion,\n locale?: string,\n ): Promise<{ cacheData: CacheData; localizedResourcesMap: SerializedLocalizedResourcesMap }> {\n const runtime = this.runtime\n const descriptors = getPropControllerDescriptors(runtime.store.getState())\n const swatchIds = new Set<string>()\n const fileIds = new Set<string>()\n const typographyIds = new Set<string>()\n const tableIds = new Set<string>()\n const pageIds = new Set<string>()\n const globalElements = new Map<string, GlobalElement | null>()\n const localizedGlobalElements = new Map<string, LocalizedGlobalElement | null>()\n const localizedResourcesMap = new Map<string, string | null>()\n\n const remaining = [element]\n const seen = new Set<string>()\n let current: Element | undefined\n\n while ((current = remaining.pop())) {\n let element: ElementData\n\n if (isElementReference(current)) {\n const globalElementId = current.value\n const globalElement = await this.getGlobalElement(globalElementId, siteVersion)\n let elementData = globalElement?.data\n\n if (locale) {\n const localizedGlobalElement = await this.getLocalizedGlobalElement(\n globalElementId,\n locale,\n siteVersion,\n )\n\n localizedResourcesMap.set(globalElementId, localizedGlobalElement?.id ?? null)\n\n if (localizedGlobalElement) {\n // Update the logic here when we can merge element trees\n elementData = localizedGlobalElement.data\n\n localizedGlobalElements.set(localizedGlobalElement.id, localizedGlobalElement)\n }\n }\n\n globalElements.set(globalElementId, globalElement)\n\n if (elementData == null) continue\n\n element = elementData as ElementData\n } else {\n element = current\n }\n\n const elementDescriptors = descriptors.get(element.type)\n\n if (elementDescriptors == null) continue\n\n getResourcesFromElementDescriptors(elementDescriptors, element.props)\n\n function getResourcesFromElementDescriptors(\n elementDescriptors: Record<string, PropControllerDescriptor>,\n props: ElementData['props'],\n ) {\n Object.entries(elementDescriptors).forEach(([propName, descriptor]) => {\n getSwatchIds(descriptor, props[propName]).forEach(swatchId => {\n swatchIds.add(swatchId)\n })\n\n getFileIds(descriptor, props[propName]).forEach(fileId => fileIds.add(fileId))\n\n getTypographyIds(descriptor, props[propName]).forEach(typographyId =>\n typographyIds.add(typographyId),\n )\n\n getTableIds(descriptor, props[propName]).forEach(tableId => tableIds.add(tableId))\n\n getPageIds(descriptor, props[propName]).forEach(pageId => pageIds.add(pageId))\n\n getElementChildren(descriptor, props[propName]).forEach(child => {\n if (!seen.has(child.key)) {\n seen.add(child.key)\n\n remaining.push(child)\n }\n })\n })\n }\n }\n\n const typographies = await this.getTypographies([...typographyIds], siteVersion)\n\n typographies.forEach(typography => {\n typography?.style.forEach(style => {\n const swatchId = style.value.color?.swatchId\n\n if (swatchId != null) swatchIds.add(swatchId)\n })\n })\n\n const pagePathnames = await this.getPagePathnameSlices([...pageIds], siteVersion, { locale })\n\n const { swatches, files, tables } = await this.getIntrospectedResources(\n {\n swatchIds: [...swatchIds],\n fileIds: [...fileIds],\n tableIds: [...tableIds],\n },\n siteVersion,\n )\n\n const cacheData = {\n [APIResourceType.Swatch]: [...swatchIds].map(id => ({\n id,\n value: swatches.find(swatch => swatch?.id === id) ?? null,\n })),\n [APIResourceType.File]: [...fileIds].map(id => ({\n id,\n value: files.find(file => file?.id === id) ?? null,\n })),\n [APIResourceType.Typography]: [...typographyIds].map(id => ({\n id,\n value: typographies.find(typography => typography?.id === id) ?? null,\n })),\n [APIResourceType.Table]: [...tableIds].map(id => ({\n id,\n value: tables.find(table => table?.id === id) ?? null,\n })),\n [APIResourceType.PagePathnameSlice]: [...pageIds].map(id => ({\n id,\n value: pagePathnames.find(pagePathnameSlice => pagePathnameSlice?.id === id) ?? null,\n })),\n [APIResourceType.GlobalElement]: [...globalElements.entries()].map(([id, value]) => ({\n id,\n value,\n })),\n [APIResourceType.LocalizedGlobalElement]: [...localizedGlobalElements.entries()].map(\n ([id, value]) => ({\n id,\n value,\n }),\n ),\n }\n\n return { cacheData, localizedResourcesMap: Object.fromEntries(localizedResourcesMap.entries()) }\n }\n\n async getPageSnapshot(\n pathname: string,\n { siteVersion, locale: localeInput }: { siteVersion: MakeswiftSiteVersion; locale?: string },\n ): Promise<MakeswiftPageSnapshot | null> {\n const searchParams = new URLSearchParams()\n if (localeInput) {\n searchParams.set('locale', localeInput)\n }\n\n const response = await this.fetch(\n `v3/pages/${encodeURIComponent(pathname)}/document?${searchParams.toString()}`,\n siteVersion,\n )\n\n if (!response.ok) {\n if (response.status === 404) return null\n\n console.error('Failed to get page snapshot', await response.json())\n throw new Error(`Failed to get page snapshot with error: \"${response.statusText}\"`)\n }\n\n const document: MakeswiftPageDocument = await response.json()\n const baseLocalizedPage = document.localizedPages.find(({ parentId }) => parentId == null)\n // We're using the locale from the response instead from the arg because in the server\n // we make the locale null if the locale === defaultLocale.\n const locale = document.locale\n\n const { cacheData, localizedResourcesMap } = await this.introspect(\n baseLocalizedPage?.data ?? document.data,\n siteVersion,\n locale ?? undefined,\n )\n const apiOrigin = this.apiOrigin.href\n const preview = siteVersion === MakeswiftSiteVersion.Working\n\n return {\n document,\n cacheData,\n apiOrigin,\n preview,\n localizedResourcesMap,\n locale,\n }\n }\n\n async getSwatch(swatchId: string, siteVersion: MakeswiftSiteVersion): Promise<Swatch | null> {\n const response = await this.fetch(`v2/swatches/${swatchId}`, siteVersion)\n\n if (!response.ok) {\n if (response.status !== 404) console.error('Failed to get swatch', await response.json())\n\n return null\n }\n\n const swatch = await response.json()\n\n return swatch\n }\n\n async getFile(fileId: string): Promise<File | null> {\n const result = await this.graphqlClient.request<FileQueryResult, FileQueryVariables>(\n FileQuery,\n { fileId },\n )\n\n return result.file\n }\n\n async getTypography(\n typographyId: string,\n siteVersion: MakeswiftSiteVersion,\n ): Promise<Typography | null> {\n const response = await this.fetch(`v2/typographies/${typographyId}`, siteVersion)\n\n if (!response.ok) {\n if (response.status !== 404) console.error('Failed to get typography', await response.json())\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: MakeswiftSiteVersion,\n ): Promise<GlobalElement | null> {\n const response = await this.fetch(`v2/global-elements/${globalElementId}`, siteVersion)\n\n if (!response.ok) {\n if (response.status !== 404)\n console.error('Failed to get global element', await response.json())\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: MakeswiftSiteVersion,\n ): Promise<LocalizedGlobalElement | null> {\n const response = await this.fetch(\n `v2/localized-global-elements/${globalElementId}?locale=${locale}`,\n siteVersion,\n )\n\n if (!response.ok) {\n if (response.status !== 404)\n console.error('Failed to get localized global element', await response.json())\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: MakeswiftSiteVersion,\n { locale }: { locale?: string },\n ): Promise<(PagePathnameSlice | null)[]> {\n if (pageIds.length === 0) return []\n\n const url = new URL(`v2/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 slices', await response.json())\n\n return []\n }\n\n const json = await response.json()\n\n const pagePathnameSlices = pagePathnameSlicesAPISchema.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: MakeswiftSiteVersion,\n { locale }: { locale?: string } = {},\n ): Promise<PagePathnameSlice | null> {\n const pagePathnameSlices = await this.getPagePathnameSlices([pageId], siteVersion, { locale })\n\n return pagePathnameSlices.at(0) ?? null\n }\n\n async getTable(tableId: string): Promise<Table | null> {\n const result = await this.graphqlClient.request<TableQueryResult, TableQueryVariables>(\n TableQuery,\n { tableId },\n )\n\n return result.table\n }\n\n async getSitemap({\n limit = 50,\n after,\n pathnamePrefix,\n locale,\n }: {\n limit?: number\n after?: string\n pathnamePrefix?: string\n locale?: string\n } = {}): Promise<Sitemap> {\n const url = new URL('v1/sitemap', this.apiOrigin)\n\n url.searchParams.set('limit', limit.toString())\n if (after != null) url.searchParams.set('after', after)\n if (pathnamePrefix != null) url.searchParams.set('pathnamePrefix', pathnamePrefix)\n if (locale != null) url.searchParams.set('locale', locale)\n\n const response = await this.fetch(url.pathname + url.search)\n\n if (!response.ok) {\n console.error('Failed to get sitemap', await response.json())\n throw new Error(`Failed to get sitemap with error: \"${response.statusText}\"`)\n }\n\n const sitemap = await response.json()\n\n return sitemap\n }\n\n getTranslatableData(elementTree: ElementData): Record<string, Data> {\n return this.runtime.getTranslatableData(elementTree)\n }\n\n mergeTranslatedData(elementTree: ElementData, translatedData: Record<string, Data>): Element {\n return this.runtime.mergeTranslatedData(elementTree, translatedData)\n }\n}\n"],"mappings":"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","names":["getResourcesFromElementDescriptors","elementDescriptors","element"]}