@makeswift/runtime 0.14.5 → 0.15.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 (392) 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/components/builtin/Box/Box.js +1 -0
  6. package/dist/cjs/components/builtin/Box/Box.js.map +1 -1
  7. package/dist/cjs/components/builtin/Box/animations.js +1 -0
  8. package/dist/cjs/components/builtin/Box/animations.js.map +1 -1
  9. package/dist/cjs/components/builtin/Box/register.js +2 -3
  10. package/dist/cjs/components/builtin/Box/register.js.map +1 -1
  11. package/dist/cjs/components/builtin/Button/register.js +2 -3
  12. package/dist/cjs/components/builtin/Button/register.js.map +1 -1
  13. package/dist/cjs/components/builtin/Carousel/Carousel.js +1 -0
  14. package/dist/cjs/components/builtin/Carousel/Carousel.js.map +1 -1
  15. package/dist/cjs/components/builtin/Carousel/register.js +2 -3
  16. package/dist/cjs/components/builtin/Carousel/register.js.map +1 -1
  17. package/dist/cjs/components/builtin/Countdown/Countdown.js +1 -0
  18. package/dist/cjs/components/builtin/Countdown/Countdown.js.map +1 -1
  19. package/dist/cjs/components/builtin/Countdown/register.js +2 -3
  20. package/dist/cjs/components/builtin/Countdown/register.js.map +1 -1
  21. package/dist/cjs/components/builtin/Divider/register.js +2 -3
  22. package/dist/cjs/components/builtin/Divider/register.js.map +1 -1
  23. package/dist/cjs/components/builtin/Embed/Embed.js +1 -0
  24. package/dist/cjs/components/builtin/Embed/Embed.js.map +1 -1
  25. package/dist/cjs/components/builtin/Embed/register.js +2 -3
  26. package/dist/cjs/components/builtin/Embed/register.js.map +1 -1
  27. package/dist/cjs/components/builtin/Form/Form.js +3 -2
  28. package/dist/cjs/components/builtin/Form/Form.js.map +1 -1
  29. package/dist/cjs/components/builtin/Form/context/FormContext.js +1 -0
  30. package/dist/cjs/components/builtin/Form/context/FormContext.js.map +1 -1
  31. package/dist/cjs/components/builtin/Form/register.js +2 -3
  32. package/dist/cjs/components/builtin/Form/register.js.map +1 -1
  33. package/dist/cjs/components/builtin/Image/Image.js +1 -0
  34. package/dist/cjs/components/builtin/Image/Image.js.map +1 -1
  35. package/dist/cjs/components/builtin/Image/register.js +2 -3
  36. package/dist/cjs/components/builtin/Image/register.js.map +1 -1
  37. package/dist/cjs/components/builtin/Navigation/Navigation.js +1 -0
  38. package/dist/cjs/components/builtin/Navigation/Navigation.js.map +1 -1
  39. package/dist/cjs/components/builtin/Navigation/register.js +2 -3
  40. package/dist/cjs/components/builtin/Navigation/register.js.map +1 -1
  41. package/dist/cjs/components/builtin/Root/register.js +2 -3
  42. package/dist/cjs/components/builtin/Root/register.js.map +1 -1
  43. package/dist/cjs/components/builtin/SocialLinks/register.js +2 -3
  44. package/dist/cjs/components/builtin/SocialLinks/register.js.map +1 -1
  45. package/dist/cjs/components/builtin/Text/register.js +2 -3
  46. package/dist/cjs/components/builtin/Text/register.js.map +1 -1
  47. package/dist/cjs/components/builtin/Video/Video.js +1 -0
  48. package/dist/cjs/components/builtin/Video/Video.js.map +1 -1
  49. package/dist/cjs/components/builtin/Video/register.js +2 -3
  50. package/dist/cjs/components/builtin/Video/register.js.map +1 -1
  51. package/dist/cjs/components/hooks/usePageSnippets.js +93 -0
  52. package/dist/cjs/components/hooks/usePageSnippets.js.map +1 -0
  53. package/dist/cjs/components/hooks/useRouterLocaleSync.js +49 -0
  54. package/dist/cjs/components/hooks/useRouterLocaleSync.js.map +1 -0
  55. package/dist/cjs/components/page/BodySnippet.js +1 -1
  56. package/dist/cjs/components/page/BodySnippet.js.map +1 -1
  57. package/dist/cjs/components/page/HeadSnippet.js +134 -0
  58. package/dist/cjs/components/page/HeadSnippet.js.map +1 -0
  59. package/dist/cjs/components/page/Page.js +9 -178
  60. package/dist/cjs/components/page/Page.js.map +1 -1
  61. package/dist/cjs/components/page/PageHead.js +109 -0
  62. package/dist/cjs/components/page/PageHead.js.map +1 -0
  63. package/dist/cjs/components/shared/BackgroundsContainer/index.js +1 -0
  64. package/dist/cjs/components/shared/BackgroundsContainer/index.js.map +1 -1
  65. package/dist/cjs/components/shared/Link/index.js +5 -1
  66. package/dist/cjs/components/shared/Link/index.js.map +1 -1
  67. package/dist/cjs/index.js +0 -2
  68. package/dist/cjs/index.js.map +1 -1
  69. package/dist/cjs/next/api-handler/handlers/element-tree.js +17 -8
  70. package/dist/cjs/next/api-handler/handlers/element-tree.js.map +1 -1
  71. package/dist/cjs/next/api-handler/handlers/fonts.js +7 -2
  72. package/dist/cjs/next/api-handler/handlers/fonts.js.map +1 -1
  73. package/dist/cjs/next/api-handler/handlers/manifest.js +20 -8
  74. package/dist/cjs/next/api-handler/handlers/manifest.js.map +1 -1
  75. package/dist/cjs/next/api-handler/handlers/merge-translated-data.js +17 -6
  76. package/dist/cjs/next/api-handler/handlers/merge-translated-data.js.map +1 -1
  77. package/dist/cjs/next/api-handler/handlers/proxy-draft-mode.js +69 -0
  78. package/dist/cjs/next/api-handler/handlers/proxy-draft-mode.js.map +1 -0
  79. package/dist/cjs/next/api-handler/handlers/proxy-preview-mode.js +55 -44
  80. package/dist/cjs/next/api-handler/handlers/proxy-preview-mode.js.map +1 -1
  81. package/dist/cjs/next/api-handler/handlers/revalidate.js +27 -16
  82. package/dist/cjs/next/api-handler/handlers/revalidate.js.map +1 -1
  83. package/dist/cjs/next/api-handler/handlers/translatable-data.js +16 -5
  84. package/dist/cjs/next/api-handler/handlers/translatable-data.js.map +1 -1
  85. package/dist/cjs/next/api-handler/index.js +68 -34
  86. package/dist/cjs/next/api-handler/index.js.map +1 -1
  87. package/dist/cjs/next/client.js +3 -2
  88. package/dist/cjs/next/client.js.map +1 -1
  89. package/dist/cjs/next/components/head-tags.js +77 -0
  90. package/dist/cjs/next/components/head-tags.js.map +1 -0
  91. package/dist/cjs/next/components/page.js +56 -0
  92. package/dist/cjs/next/components/page.js.map +1 -0
  93. package/dist/cjs/next/context/makeswift-host-api-client.js +46 -0
  94. package/dist/cjs/next/context/makeswift-host-api-client.js.map +1 -0
  95. package/dist/cjs/next/context/react-runtime.js +44 -0
  96. package/dist/cjs/next/context/react-runtime.js.map +1 -0
  97. package/dist/cjs/next/draft-mode/draft-mode-script.js +123 -0
  98. package/dist/cjs/next/draft-mode/draft-mode-script.js.map +1 -0
  99. package/dist/cjs/next/draft-mode/index.js +56 -0
  100. package/dist/cjs/next/draft-mode/index.js.map +1 -0
  101. package/dist/cjs/next/hooks/use-is-pages-router.js +37 -0
  102. package/dist/cjs/next/hooks/use-is-pages-router.js.map +1 -0
  103. package/dist/cjs/next/index.js +10 -36
  104. package/dist/cjs/next/index.js.map +1 -1
  105. package/dist/cjs/next/preview-mode.js +4 -2
  106. package/dist/cjs/next/preview-mode.js.map +1 -1
  107. package/dist/cjs/next/root-style-registry.js +90 -0
  108. package/dist/cjs/next/root-style-registry.js.map +1 -0
  109. package/dist/cjs/next/server.js +8 -2
  110. package/dist/cjs/next/server.js.map +1 -1
  111. package/dist/cjs/runtimes/react/components/Element.js +1 -0
  112. package/dist/cjs/runtimes/react/components/Element.js.map +1 -1
  113. package/dist/cjs/runtimes/react/components/LiveProvider.js +6 -13
  114. package/dist/cjs/runtimes/react/components/LiveProvider.js.map +1 -1
  115. package/dist/cjs/runtimes/react/components/PreviewProvider.js +6 -8
  116. package/dist/cjs/runtimes/react/components/PreviewProvider.js.map +1 -1
  117. package/dist/cjs/runtimes/react/components/RuntimeProvider.js +3 -3
  118. package/dist/cjs/runtimes/react/components/RuntimeProvider.js.map +1 -1
  119. package/dist/cjs/runtimes/react/controls/link.js +1 -1
  120. package/dist/cjs/runtimes/react/controls/link.js.map +1 -1
  121. package/dist/cjs/runtimes/react/controls/rich-text/rich-text.js +2 -4
  122. package/dist/cjs/runtimes/react/controls/rich-text/rich-text.js.map +1 -1
  123. package/dist/cjs/runtimes/react/controls/rich-text-v2/rich-text-v2.js +4 -11
  124. package/dist/cjs/runtimes/react/controls/rich-text-v2/rich-text-v2.js.map +1 -1
  125. package/dist/cjs/runtimes/react/hooks/makeswift-api.js +11 -10
  126. package/dist/cjs/runtimes/react/hooks/makeswift-api.js.map +1 -1
  127. package/dist/cjs/runtimes/react/hooks/use-document-key.js +1 -0
  128. package/dist/cjs/runtimes/react/hooks/use-document-key.js.map +1 -1
  129. package/dist/cjs/runtimes/react/hooks/use-page-id.js +1 -0
  130. package/dist/cjs/runtimes/react/hooks/use-page-id.js.map +1 -1
  131. package/dist/cjs/runtimes/react/hooks/use-store.js +1 -0
  132. package/dist/cjs/runtimes/react/hooks/use-store.js.map +1 -1
  133. package/dist/cjs/runtimes/react/use-global-style.js +15 -10
  134. package/dist/cjs/runtimes/react/use-global-style.js.map +1 -1
  135. package/dist/cjs/runtimes/react/use-style.js +7 -6
  136. package/dist/cjs/runtimes/react/use-style.js.map +1 -1
  137. package/dist/cjs/state/actions.js +0 -25
  138. package/dist/cjs/state/actions.js.map +1 -1
  139. package/dist/cjs/state/react-builder-preview.js +1 -24
  140. package/dist/cjs/state/react-builder-preview.js.map +1 -1
  141. package/dist/esm/api/react.js +2 -14
  142. package/dist/esm/api/react.js.map +1 -1
  143. package/dist/esm/api/resource-types.js +8 -0
  144. package/dist/esm/api/resource-types.js.map +1 -0
  145. package/dist/esm/components/builtin/Box/Box.js +1 -0
  146. package/dist/esm/components/builtin/Box/Box.js.map +1 -1
  147. package/dist/esm/components/builtin/Box/animations.js +1 -0
  148. package/dist/esm/components/builtin/Box/animations.js.map +1 -1
  149. package/dist/esm/components/builtin/Box/register.js +2 -3
  150. package/dist/esm/components/builtin/Box/register.js.map +1 -1
  151. package/dist/esm/components/builtin/Button/register.js +2 -3
  152. package/dist/esm/components/builtin/Button/register.js.map +1 -1
  153. package/dist/esm/components/builtin/Carousel/Carousel.js +1 -0
  154. package/dist/esm/components/builtin/Carousel/Carousel.js.map +1 -1
  155. package/dist/esm/components/builtin/Carousel/register.js +2 -3
  156. package/dist/esm/components/builtin/Carousel/register.js.map +1 -1
  157. package/dist/esm/components/builtin/Countdown/Countdown.js +1 -0
  158. package/dist/esm/components/builtin/Countdown/Countdown.js.map +1 -1
  159. package/dist/esm/components/builtin/Countdown/register.js +2 -3
  160. package/dist/esm/components/builtin/Countdown/register.js.map +1 -1
  161. package/dist/esm/components/builtin/Divider/register.js +2 -3
  162. package/dist/esm/components/builtin/Divider/register.js.map +1 -1
  163. package/dist/esm/components/builtin/Embed/Embed.js +1 -0
  164. package/dist/esm/components/builtin/Embed/Embed.js.map +1 -1
  165. package/dist/esm/components/builtin/Embed/register.js +2 -3
  166. package/dist/esm/components/builtin/Embed/register.js.map +1 -1
  167. package/dist/esm/components/builtin/Form/Form.js +3 -2
  168. package/dist/esm/components/builtin/Form/Form.js.map +1 -1
  169. package/dist/esm/components/builtin/Form/context/FormContext.js +1 -0
  170. package/dist/esm/components/builtin/Form/context/FormContext.js.map +1 -1
  171. package/dist/esm/components/builtin/Form/register.js +2 -3
  172. package/dist/esm/components/builtin/Form/register.js.map +1 -1
  173. package/dist/esm/components/builtin/Image/Image.js +1 -0
  174. package/dist/esm/components/builtin/Image/Image.js.map +1 -1
  175. package/dist/esm/components/builtin/Image/register.js +2 -3
  176. package/dist/esm/components/builtin/Image/register.js.map +1 -1
  177. package/dist/esm/components/builtin/Navigation/Navigation.js +1 -0
  178. package/dist/esm/components/builtin/Navigation/Navigation.js.map +1 -1
  179. package/dist/esm/components/builtin/Navigation/register.js +2 -3
  180. package/dist/esm/components/builtin/Navigation/register.js.map +1 -1
  181. package/dist/esm/components/builtin/Root/register.js +2 -3
  182. package/dist/esm/components/builtin/Root/register.js.map +1 -1
  183. package/dist/esm/components/builtin/SocialLinks/register.js +2 -3
  184. package/dist/esm/components/builtin/SocialLinks/register.js.map +1 -1
  185. package/dist/esm/components/builtin/Text/register.js +2 -3
  186. package/dist/esm/components/builtin/Text/register.js.map +1 -1
  187. package/dist/esm/components/builtin/Video/Video.js +1 -0
  188. package/dist/esm/components/builtin/Video/Video.js.map +1 -1
  189. package/dist/esm/components/builtin/Video/register.js +2 -3
  190. package/dist/esm/components/builtin/Video/register.js.map +1 -1
  191. package/dist/esm/components/hooks/usePageSnippets.js +59 -0
  192. package/dist/esm/components/hooks/usePageSnippets.js.map +1 -0
  193. package/dist/esm/components/hooks/useRouterLocaleSync.js +25 -0
  194. package/dist/esm/components/hooks/useRouterLocaleSync.js.map +1 -0
  195. package/dist/esm/components/page/BodySnippet.js +1 -1
  196. package/dist/esm/components/page/BodySnippet.js.map +1 -1
  197. package/dist/esm/components/page/HeadSnippet.js +100 -0
  198. package/dist/esm/components/page/HeadSnippet.js.map +1 -0
  199. package/dist/esm/components/page/Page.js +7 -166
  200. package/dist/esm/components/page/Page.js.map +1 -1
  201. package/dist/esm/components/page/PageHead.js +85 -0
  202. package/dist/esm/components/page/PageHead.js.map +1 -0
  203. package/dist/esm/components/shared/BackgroundsContainer/index.js +1 -0
  204. package/dist/esm/components/shared/BackgroundsContainer/index.js.map +1 -1
  205. package/dist/esm/components/shared/Link/index.js +5 -1
  206. package/dist/esm/components/shared/Link/index.js.map +1 -1
  207. package/dist/esm/index.js +0 -2
  208. package/dist/esm/index.js.map +1 -1
  209. package/dist/esm/next/api-handler/handlers/element-tree.js +17 -8
  210. package/dist/esm/next/api-handler/handlers/element-tree.js.map +1 -1
  211. package/dist/esm/next/api-handler/handlers/fonts.js +7 -2
  212. package/dist/esm/next/api-handler/handlers/fonts.js.map +1 -1
  213. package/dist/esm/next/api-handler/handlers/manifest.js +20 -8
  214. package/dist/esm/next/api-handler/handlers/manifest.js.map +1 -1
  215. package/dist/esm/next/api-handler/handlers/merge-translated-data.js +17 -6
  216. package/dist/esm/next/api-handler/handlers/merge-translated-data.js.map +1 -1
  217. package/dist/esm/next/api-handler/handlers/proxy-draft-mode.js +49 -0
  218. package/dist/esm/next/api-handler/handlers/proxy-draft-mode.js.map +1 -0
  219. package/dist/esm/next/api-handler/handlers/proxy-preview-mode.js +55 -44
  220. package/dist/esm/next/api-handler/handlers/proxy-preview-mode.js.map +1 -1
  221. package/dist/esm/next/api-handler/handlers/revalidate.js +27 -16
  222. package/dist/esm/next/api-handler/handlers/revalidate.js.map +1 -1
  223. package/dist/esm/next/api-handler/handlers/translatable-data.js +16 -5
  224. package/dist/esm/next/api-handler/handlers/translatable-data.js.map +1 -1
  225. package/dist/esm/next/api-handler/index.js +68 -34
  226. package/dist/esm/next/api-handler/index.js.map +1 -1
  227. package/dist/esm/next/client.js +3 -2
  228. package/dist/esm/next/client.js.map +1 -1
  229. package/dist/esm/next/components/head-tags.js +40 -0
  230. package/dist/esm/next/components/head-tags.js.map +1 -0
  231. package/dist/esm/next/components/page.js +32 -0
  232. package/dist/esm/next/components/page.js.map +1 -0
  233. package/dist/esm/next/context/makeswift-host-api-client.js +21 -0
  234. package/dist/esm/next/context/makeswift-host-api-client.js.map +1 -0
  235. package/dist/esm/next/context/react-runtime.js +19 -0
  236. package/dist/esm/next/context/react-runtime.js.map +1 -0
  237. package/dist/esm/next/draft-mode/draft-mode-script.js +99 -0
  238. package/dist/esm/next/draft-mode/draft-mode-script.js.map +1 -0
  239. package/dist/esm/next/draft-mode/index.js +30 -0
  240. package/dist/esm/next/draft-mode/index.js.map +1 -0
  241. package/dist/esm/next/hooks/use-is-pages-router.js +13 -0
  242. package/dist/esm/next/hooks/use-is-pages-router.js.map +1 -0
  243. package/dist/esm/next/index.js +5 -32
  244. package/dist/esm/next/index.js.map +1 -1
  245. package/dist/esm/next/preview-mode.js +2 -1
  246. package/dist/esm/next/preview-mode.js.map +1 -1
  247. package/dist/esm/next/root-style-registry.js +55 -0
  248. package/dist/esm/next/root-style-registry.js.map +1 -0
  249. package/dist/esm/next/server.js +5 -1
  250. package/dist/esm/next/server.js.map +1 -1
  251. package/dist/esm/runtimes/react/components/Element.js +1 -0
  252. package/dist/esm/runtimes/react/components/Element.js.map +1 -1
  253. package/dist/esm/runtimes/react/components/LiveProvider.js +6 -13
  254. package/dist/esm/runtimes/react/components/LiveProvider.js.map +1 -1
  255. package/dist/esm/runtimes/react/components/PreviewProvider.js +6 -8
  256. package/dist/esm/runtimes/react/components/PreviewProvider.js.map +1 -1
  257. package/dist/esm/runtimes/react/components/RuntimeProvider.js +3 -3
  258. package/dist/esm/runtimes/react/components/RuntimeProvider.js.map +1 -1
  259. package/dist/esm/runtimes/react/controls/link.js +1 -1
  260. package/dist/esm/runtimes/react/controls/link.js.map +1 -1
  261. package/dist/esm/runtimes/react/controls/rich-text/rich-text.js +3 -5
  262. package/dist/esm/runtimes/react/controls/rich-text/rich-text.js.map +1 -1
  263. package/dist/esm/runtimes/react/controls/rich-text-v2/rich-text-v2.js +4 -11
  264. package/dist/esm/runtimes/react/controls/rich-text-v2/rich-text-v2.js.map +1 -1
  265. package/dist/esm/runtimes/react/hooks/makeswift-api.js +11 -10
  266. package/dist/esm/runtimes/react/hooks/makeswift-api.js.map +1 -1
  267. package/dist/esm/runtimes/react/hooks/use-document-key.js +1 -0
  268. package/dist/esm/runtimes/react/hooks/use-document-key.js.map +1 -1
  269. package/dist/esm/runtimes/react/hooks/use-page-id.js +1 -0
  270. package/dist/esm/runtimes/react/hooks/use-page-id.js.map +1 -1
  271. package/dist/esm/runtimes/react/hooks/use-store.js +1 -0
  272. package/dist/esm/runtimes/react/hooks/use-store.js.map +1 -1
  273. package/dist/esm/runtimes/react/use-global-style.js +8 -3
  274. package/dist/esm/runtimes/react/use-global-style.js.map +1 -1
  275. package/dist/esm/runtimes/react/use-style.js +2 -1
  276. package/dist/esm/runtimes/react/use-style.js.map +1 -1
  277. package/dist/esm/state/actions.js +0 -22
  278. package/dist/esm/state/actions.js.map +1 -1
  279. package/dist/esm/state/react-builder-preview.js +2 -28
  280. package/dist/esm/state/react-builder-preview.js.map +1 -1
  281. package/dist/types/api/react.d.ts +1 -9
  282. package/dist/types/api/react.d.ts.map +1 -1
  283. package/dist/types/api/resource-types.d.ts +20 -0
  284. package/dist/types/api/resource-types.d.ts.map +1 -0
  285. package/dist/types/components/builtin/Box/Box.d.ts.map +1 -1
  286. package/dist/types/components/builtin/Box/animations.d.ts.map +1 -1
  287. package/dist/types/components/builtin/Box/register.d.ts.map +1 -1
  288. package/dist/types/components/builtin/Button/register.d.ts.map +1 -1
  289. package/dist/types/components/builtin/Carousel/Carousel.d.ts.map +1 -1
  290. package/dist/types/components/builtin/Carousel/register.d.ts.map +1 -1
  291. package/dist/types/components/builtin/Countdown/Countdown.d.ts.map +1 -1
  292. package/dist/types/components/builtin/Countdown/register.d.ts.map +1 -1
  293. package/dist/types/components/builtin/Divider/register.d.ts.map +1 -1
  294. package/dist/types/components/builtin/Embed/Embed.d.ts.map +1 -1
  295. package/dist/types/components/builtin/Embed/register.d.ts.map +1 -1
  296. package/dist/types/components/builtin/Form/Form.d.ts.map +1 -1
  297. package/dist/types/components/builtin/Form/components/Field/components/Checkbox/index.d.ts +1 -1
  298. package/dist/types/components/builtin/Form/context/FormContext.d.ts.map +1 -1
  299. package/dist/types/components/builtin/Form/register.d.ts.map +1 -1
  300. package/dist/types/components/builtin/Image/Image.d.ts.map +1 -1
  301. package/dist/types/components/builtin/Image/register.d.ts.map +1 -1
  302. package/dist/types/components/builtin/Navigation/Navigation.d.ts.map +1 -1
  303. package/dist/types/components/builtin/Navigation/register.d.ts.map +1 -1
  304. package/dist/types/components/builtin/Root/register.d.ts.map +1 -1
  305. package/dist/types/components/builtin/SocialLinks/register.d.ts.map +1 -1
  306. package/dist/types/components/builtin/Text/register.d.ts.map +1 -1
  307. package/dist/types/components/builtin/Video/Video.d.ts.map +1 -1
  308. package/dist/types/components/builtin/Video/register.d.ts.map +1 -1
  309. package/dist/types/components/hooks/usePageSnippets.d.ts +36 -0
  310. package/dist/types/components/hooks/usePageSnippets.d.ts.map +1 -0
  311. package/dist/types/components/hooks/useRouterLocaleSync.d.ts +2 -0
  312. package/dist/types/components/hooks/useRouterLocaleSync.d.ts.map +1 -0
  313. package/dist/types/components/page/BodySnippet.d.ts.map +1 -1
  314. package/dist/types/components/page/HeadSnippet.d.ts +7 -0
  315. package/dist/types/components/page/HeadSnippet.d.ts.map +1 -0
  316. package/dist/types/components/page/Page.d.ts.map +1 -1
  317. package/dist/types/components/page/PageHead.d.ts +8 -0
  318. package/dist/types/components/page/PageHead.d.ts.map +1 -0
  319. package/dist/types/components/shared/BackgroundsContainer/index.d.ts.map +1 -1
  320. package/dist/types/components/shared/Link/index.d.ts.map +1 -1
  321. package/dist/types/index.d.ts +1 -1
  322. package/dist/types/index.d.ts.map +1 -1
  323. package/dist/types/next/api-handler/handlers/element-tree.d.ts +9 -1
  324. package/dist/types/next/api-handler/handlers/element-tree.d.ts.map +1 -1
  325. package/dist/types/next/api-handler/handlers/fonts.d.ts +10 -1
  326. package/dist/types/next/api-handler/handlers/fonts.d.ts.map +1 -1
  327. package/dist/types/next/api-handler/handlers/manifest.d.ts +9 -0
  328. package/dist/types/next/api-handler/handlers/manifest.d.ts.map +1 -1
  329. package/dist/types/next/api-handler/handlers/merge-translated-data.d.ts +7 -0
  330. package/dist/types/next/api-handler/handlers/merge-translated-data.d.ts.map +1 -1
  331. package/dist/types/next/api-handler/handlers/proxy-draft-mode.d.ts +20 -0
  332. package/dist/types/next/api-handler/handlers/proxy-draft-mode.d.ts.map +1 -0
  333. package/dist/types/next/api-handler/handlers/proxy-preview-mode.d.ts +14 -2
  334. package/dist/types/next/api-handler/handlers/proxy-preview-mode.d.ts.map +1 -1
  335. package/dist/types/next/api-handler/handlers/revalidate.d.ts +9 -0
  336. package/dist/types/next/api-handler/handlers/revalidate.d.ts.map +1 -1
  337. package/dist/types/next/api-handler/handlers/translatable-data.d.ts +7 -0
  338. package/dist/types/next/api-handler/handlers/translatable-data.d.ts.map +1 -1
  339. package/dist/types/next/api-handler/index.d.ts +11 -3
  340. package/dist/types/next/api-handler/index.d.ts.map +1 -1
  341. package/dist/types/next/client.d.ts.map +1 -1
  342. package/dist/types/next/components/head-tags.d.ts +19 -0
  343. package/dist/types/next/components/head-tags.d.ts.map +1 -0
  344. package/dist/types/next/components/page.d.ts +7 -0
  345. package/dist/types/next/components/page.d.ts.map +1 -0
  346. package/dist/types/next/context/makeswift-host-api-client.d.ts +8 -0
  347. package/dist/types/next/context/makeswift-host-api-client.d.ts.map +1 -0
  348. package/dist/types/next/context/react-runtime.d.ts +8 -0
  349. package/dist/types/next/context/react-runtime.d.ts.map +1 -0
  350. package/dist/types/next/draft-mode/draft-mode-script.d.ts +6 -0
  351. package/dist/types/next/draft-mode/draft-mode-script.d.ts.map +1 -0
  352. package/dist/types/next/draft-mode/index.d.ts +15 -0
  353. package/dist/types/next/draft-mode/index.d.ts.map +1 -0
  354. package/dist/types/next/hooks/use-is-pages-router.d.ts +2 -0
  355. package/dist/types/next/hooks/use-is-pages-router.d.ts.map +1 -0
  356. package/dist/types/next/index.d.ts +4 -9
  357. package/dist/types/next/index.d.ts.map +1 -1
  358. package/dist/types/next/preview-mode.d.ts +1 -1
  359. package/dist/types/next/preview-mode.d.ts.map +1 -1
  360. package/dist/types/next/root-style-registry.d.ts +7 -0
  361. package/dist/types/next/root-style-registry.d.ts.map +1 -0
  362. package/dist/types/next/server.d.ts +2 -0
  363. package/dist/types/next/server.d.ts.map +1 -1
  364. package/dist/types/runtimes/react/components/Element.d.ts.map +1 -1
  365. package/dist/types/runtimes/react/components/LiveProvider.d.ts +3 -5
  366. package/dist/types/runtimes/react/components/LiveProvider.d.ts.map +1 -1
  367. package/dist/types/runtimes/react/components/PreviewProvider.d.ts +3 -5
  368. package/dist/types/runtimes/react/components/PreviewProvider.d.ts.map +1 -1
  369. package/dist/types/runtimes/react/components/RuntimeProvider.d.ts +2 -2
  370. package/dist/types/runtimes/react/components/RuntimeProvider.d.ts.map +1 -1
  371. package/dist/types/runtimes/react/controls/link.d.ts.map +1 -1
  372. package/dist/types/runtimes/react/controls/rich-text/rich-text.d.ts.map +1 -1
  373. package/dist/types/runtimes/react/controls/rich-text-v2/rich-text-v2.d.ts.map +1 -1
  374. package/dist/types/runtimes/react/hooks/makeswift-api.d.ts +2 -1
  375. package/dist/types/runtimes/react/hooks/makeswift-api.d.ts.map +1 -1
  376. package/dist/types/runtimes/react/hooks/use-document-key.d.ts.map +1 -1
  377. package/dist/types/runtimes/react/hooks/use-page-id.d.ts.map +1 -1
  378. package/dist/types/runtimes/react/hooks/use-store.d.ts.map +1 -1
  379. package/dist/types/runtimes/react/use-global-style.d.ts.map +1 -1
  380. package/dist/types/runtimes/react/use-style.d.ts.map +1 -1
  381. package/dist/types/state/actions.d.ts +1 -19
  382. package/dist/types/state/actions.d.ts.map +1 -1
  383. package/dist/types/state/react-builder-preview.d.ts +3 -3
  384. package/dist/types/state/react-builder-preview.d.ts.map +1 -1
  385. package/next/plugin/package.json +1 -0
  386. package/package.json +6 -10
  387. package/dist/cjs/next/dynamic.js +0 -52
  388. package/dist/cjs/next/dynamic.js.map +0 -1
  389. package/dist/esm/next/dynamic.js +0 -31
  390. package/dist/esm/next/dynamic.js.map +0 -1
  391. package/dist/types/next/dynamic.d.ts +0 -13
  392. package/dist/types/next/dynamic.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/shared/Link/index.tsx"],"sourcesContent":["import { ComponentPropsWithoutRef, forwardRef, MouseEvent } from 'react'\nimport scrollIntoView from 'scroll-into-view-if-needed'\nimport NextLink from 'next/link'\n\nimport { LinkValue as LinkPropControllerValue } from '../../../prop-controllers/descriptors'\nimport { useElementId } from '../../../runtimes/react'\nimport { usePagePathnameSlice } from '../../../runtimes/react/hooks/makeswift-api'\n\ntype BaseProps = {\n link?: LinkPropControllerValue\n onClick?: (event: MouseEvent<HTMLAnchorElement>) => unknown\n}\n\ntype Props = BaseProps & Omit<ComponentPropsWithoutRef<'a'>, keyof BaseProps>\n\nexport const Link = forwardRef<HTMLAnchorElement, Props>(function Link(\n { link, onClick = () => {}, ...restOfProps }: Props,\n ref,\n) {\n const pageId = link && link.type === 'OPEN_PAGE' ? link.payload.pageId : null\n const page = usePagePathnameSlice(pageId ?? null)\n const elementKey =\n link?.type === 'SCROLL_TO_ELEMENT' ? link.payload.elementIdConfig?.elementKey : null\n const elementId = useElementId(elementKey)\n\n // We don't want to use `next/link` with relative paths because Next.js will attempt to normalize\n // it and mess up the path.\n let useNextLink: boolean | undefined\n let href: string | undefined\n let target: '_blank' | '_self' | undefined\n let block: 'start' | 'center' | 'end' | undefined\n\n if (link) {\n switch (link.type) {\n case 'OPEN_PAGE': {\n if (page) {\n useNextLink = true\n\n href = `/${page.pathname}`\n }\n\n target = link.payload.openInNewTab ? '_blank' : '_self'\n\n break\n }\n\n case 'OPEN_URL': {\n useNextLink = true\n\n href = link.payload.url\n\n target = link.payload.openInNewTab ? '_blank' : '_self'\n\n break\n }\n\n case 'SEND_EMAIL': {\n useNextLink = false\n\n const { to, subject = '', body = '' } = link.payload\n\n if (to != null) href = `mailto:${to}?subject=${subject}&body=${body}`\n\n break\n }\n\n case 'CALL_PHONE': {\n useNextLink = false\n\n href = `tel:${link.payload.phoneNumber}`\n\n break\n }\n\n case 'SCROLL_TO_ELEMENT': {\n useNextLink = false\n\n href = `#${elementId ?? ''}`\n\n block = link.payload.block\n\n break\n }\n\n default:\n throw new RangeError(`Invalid link type \"${(link as any).type}.\"`)\n }\n }\n\n function handleClick(event: MouseEvent<HTMLAnchorElement>) {\n onClick(event)\n\n if (event.defaultPrevented) return\n\n /**\n * When we introduced `next/link` instead of just `a` element slate no longer prevented link from navigating within\n * content mode. This is a hack to compensate for what would be expected as slate's default behavior.\n * On upgrade of slate this can be reevaluated.\n */\n if (event.currentTarget.isContentEditable) return event.preventDefault()\n\n if (link && link.type === 'SCROLL_TO_ELEMENT') {\n let hash: string | undefined\n\n try {\n if (href != null) hash = new URL(`http://www.example.com/${href}`).hash\n } catch (error) {\n console.error(`Link received invalid href: ${href}`, error)\n }\n\n if (href != null && hash != null && href === hash) {\n event.preventDefault()\n const view = event.view as unknown as Window\n\n scrollIntoView(view.document.querySelector(hash)!, {\n behavior: 'smooth',\n block,\n })\n\n if (view.location.hash !== hash) view.history.pushState({}, '', hash)\n }\n }\n }\n\n if (useNextLink && href != null) {\n return (\n <NextLink\n {...restOfProps}\n ref={ref}\n target={target}\n onClick={handleClick}\n href={href}\n // Next.js v12 has legacyBehavior set to true by default\n legacyBehavior={false}\n />\n )\n }\n\n // eslint-disable-next-line\n return <a {...restOfProps} ref={ref} href={href} target={target} onClick={handleClick} />\n})\n"],"mappings":"AA8HM;AA9HN,SAAmC,kBAA8B;AACjE,OAAO,oBAAoB;AAC3B,OAAO,cAAc;AAGrB,SAAS,oBAAoB;AAC7B,SAAS,4BAA4B;AAS9B,MAAM,OAAO,WAAqC,SAASA,MAChE,EAAE,MAAM,UAAU,MAAM;AAAC,GAAG,GAAG,YAAY,GAC3C,KACA;AACA,QAAM,SAAS,QAAQ,KAAK,SAAS,cAAc,KAAK,QAAQ,SAAS;AACzE,QAAM,OAAO,qBAAqB,UAAU,IAAI;AAChD,QAAM,aACJ,MAAM,SAAS,sBAAsB,KAAK,QAAQ,iBAAiB,aAAa;AAClF,QAAM,YAAY,aAAa,UAAU;AAIzC,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI;AAEJ,MAAI,MAAM;AACR,YAAQ,KAAK,MAAM;AAAA,MACjB,KAAK,aAAa;AAChB,YAAI,MAAM;AACR,wBAAc;AAEd,iBAAO,IAAI,KAAK,QAAQ;AAAA,QAC1B;AAEA,iBAAS,KAAK,QAAQ,eAAe,WAAW;AAEhD;AAAA,MACF;AAAA,MAEA,KAAK,YAAY;AACf,sBAAc;AAEd,eAAO,KAAK,QAAQ;AAEpB,iBAAS,KAAK,QAAQ,eAAe,WAAW;AAEhD;AAAA,MACF;AAAA,MAEA,KAAK,cAAc;AACjB,sBAAc;AAEd,cAAM,EAAE,IAAI,UAAU,IAAI,OAAO,GAAG,IAAI,KAAK;AAE7C,YAAI,MAAM;AAAM,iBAAO,UAAU,EAAE,YAAY,OAAO,SAAS,IAAI;AAEnE;AAAA,MACF;AAAA,MAEA,KAAK,cAAc;AACjB,sBAAc;AAEd,eAAO,OAAO,KAAK,QAAQ,WAAW;AAEtC;AAAA,MACF;AAAA,MAEA,KAAK,qBAAqB;AACxB,sBAAc;AAEd,eAAO,IAAI,aAAa,EAAE;AAE1B,gBAAQ,KAAK,QAAQ;AAErB;AAAA,MACF;AAAA,MAEA;AACE,cAAM,IAAI,WAAW,sBAAuB,KAAa,IAAI,IAAI;AAAA,IACrE;AAAA,EACF;AAEA,WAAS,YAAY,OAAsC;AACzD,YAAQ,KAAK;AAEb,QAAI,MAAM;AAAkB;AAO5B,QAAI,MAAM,cAAc;AAAmB,aAAO,MAAM,eAAe;AAEvE,QAAI,QAAQ,KAAK,SAAS,qBAAqB;AAC7C,UAAI;AAEJ,UAAI;AACF,YAAI,QAAQ;AAAM,iBAAO,IAAI,IAAI,0BAA0B,IAAI,EAAE,EAAE;AAAA,MACrE,SAAS,OAAO;AACd,gBAAQ,MAAM,+BAA+B,IAAI,IAAI,KAAK;AAAA,MAC5D;AAEA,UAAI,QAAQ,QAAQ,QAAQ,QAAQ,SAAS,MAAM;AACjD,cAAM,eAAe;AACrB,cAAM,OAAO,MAAM;AAEnB,uBAAe,KAAK,SAAS,cAAc,IAAI,GAAI;AAAA,UACjD,UAAU;AAAA,UACV;AAAA,QACF,CAAC;AAED,YAAI,KAAK,SAAS,SAAS;AAAM,eAAK,QAAQ,UAAU,CAAC,GAAG,IAAI,IAAI;AAAA,MACtE;AAAA,IACF;AAAA,EACF;AAEA,MAAI,eAAe,QAAQ,MAAM;AAC/B,WACE;AAAA,MAAC;AAAA;AAAA,QACE,GAAG;AAAA,QACJ;AAAA,QACA;AAAA,QACA,SAAS;AAAA,QACT;AAAA,QAEA,gBAAgB;AAAA;AAAA,IAClB;AAAA,EAEJ;AAGA,SAAO,oBAAC,OAAG,GAAG,aAAa,KAAU,MAAY,QAAgB,SAAS,aAAa;AACzF,CAAC;","names":["Link"]}
1
+ {"version":3,"sources":["../../../../../src/components/shared/Link/index.tsx"],"sourcesContent":["import { ComponentPropsWithoutRef, forwardRef, MouseEvent } from 'react'\nimport scrollIntoView from 'scroll-into-view-if-needed'\nimport NextLink from 'next/link'\n\nimport { LinkValue as LinkPropControllerValue } from '../../../prop-controllers/descriptors'\nimport { useElementId } from '../../../runtimes/react'\nimport { usePagePathnameSlice } from '../../../runtimes/react/hooks/makeswift-api'\n\ntype BaseProps = {\n link?: LinkPropControllerValue\n onClick?: (event: MouseEvent<HTMLAnchorElement>) => unknown\n}\n\ntype Props = BaseProps & Omit<ComponentPropsWithoutRef<'a'>, keyof BaseProps>\n\nexport const Link = forwardRef<HTMLAnchorElement, Props>(function Link(\n { link, onClick = () => {}, ...restOfProps }: Props,\n ref,\n) {\n const pageId = link && link.type === 'OPEN_PAGE' ? link.payload.pageId : null\n const page = usePagePathnameSlice(pageId ?? null)\n const hasLocalizedPathname = page?.localizedPathname != null\n\n const elementKey =\n link?.type === 'SCROLL_TO_ELEMENT' ? link.payload.elementIdConfig?.elementKey : null\n const elementId = useElementId(elementKey)\n\n // We don't want to use `next/link` with relative paths because Next.js will attempt to normalize\n // it and mess up the path.\n let useNextLink: boolean | undefined\n let href: string | undefined\n let target: '_blank' | '_self' | undefined\n let block: 'start' | 'center' | 'end' | undefined\n\n if (link) {\n switch (link.type) {\n case 'OPEN_PAGE': {\n if (page) {\n useNextLink = true\n\n href = `/${page.localizedPathname ?? page.pathname}`\n }\n\n target = link.payload.openInNewTab ? '_blank' : '_self'\n\n break\n }\n\n case 'OPEN_URL': {\n useNextLink = true\n\n href = link.payload.url\n\n target = link.payload.openInNewTab ? '_blank' : '_self'\n\n break\n }\n\n case 'SEND_EMAIL': {\n useNextLink = false\n\n const { to, subject = '', body = '' } = link.payload\n\n if (to != null) href = `mailto:${to}?subject=${subject}&body=${body}`\n\n break\n }\n\n case 'CALL_PHONE': {\n useNextLink = false\n\n href = `tel:${link.payload.phoneNumber}`\n\n break\n }\n\n case 'SCROLL_TO_ELEMENT': {\n useNextLink = false\n\n href = `#${elementId ?? ''}`\n\n block = link.payload.block\n\n break\n }\n\n default:\n throw new RangeError(`Invalid link type \"${(link as any).type}.\"`)\n }\n }\n\n function handleClick(event: MouseEvent<HTMLAnchorElement>) {\n onClick(event)\n\n if (event.defaultPrevented) return\n\n /**\n * When we introduced `next/link` instead of just `a` element slate no longer prevented link from navigating within\n * content mode. This is a hack to compensate for what would be expected as slate's default behavior.\n * On upgrade of slate this can be reevaluated.\n */\n if (event.currentTarget.isContentEditable) return event.preventDefault()\n\n if (link && link.type === 'SCROLL_TO_ELEMENT') {\n let hash: string | undefined\n\n try {\n if (href != null) hash = new URL(`http://www.example.com/${href}`).hash\n } catch (error) {\n console.error(`Link received invalid href: ${href}`, error)\n }\n\n if (href != null && hash != null && href === hash) {\n event.preventDefault()\n const view = event.view as unknown as Window\n\n scrollIntoView(view.document.querySelector(hash)!, {\n behavior: 'smooth',\n block,\n })\n\n if (view.location.hash !== hash) view.history.pushState({}, '', hash)\n }\n }\n }\n\n if (useNextLink && href != null) {\n return (\n <NextLink\n {...restOfProps}\n ref={ref}\n target={target}\n onClick={handleClick}\n href={href}\n {...(hasLocalizedPathname && {\n locale: false,\n })}\n // Next.js v12 has legacyBehavior set to true by default\n legacyBehavior={false}\n />\n )\n }\n\n // eslint-disable-next-line\n return <a {...restOfProps} ref={ref} href={href} target={target} onClick={handleClick} />\n})\n"],"mappings":"AAgIM;AAhIN,SAAmC,kBAA8B;AACjE,OAAO,oBAAoB;AAC3B,OAAO,cAAc;AAGrB,SAAS,oBAAoB;AAC7B,SAAS,4BAA4B;AAS9B,MAAM,OAAO,WAAqC,SAASA,MAChE,EAAE,MAAM,UAAU,MAAM;AAAC,GAAG,GAAG,YAAY,GAC3C,KACA;AACA,QAAM,SAAS,QAAQ,KAAK,SAAS,cAAc,KAAK,QAAQ,SAAS;AACzE,QAAM,OAAO,qBAAqB,UAAU,IAAI;AAChD,QAAM,uBAAuB,MAAM,qBAAqB;AAExD,QAAM,aACJ,MAAM,SAAS,sBAAsB,KAAK,QAAQ,iBAAiB,aAAa;AAClF,QAAM,YAAY,aAAa,UAAU;AAIzC,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI;AAEJ,MAAI,MAAM;AACR,YAAQ,KAAK,MAAM;AAAA,MACjB,KAAK,aAAa;AAChB,YAAI,MAAM;AACR,wBAAc;AAEd,iBAAO,IAAI,KAAK,qBAAqB,KAAK,QAAQ;AAAA,QACpD;AAEA,iBAAS,KAAK,QAAQ,eAAe,WAAW;AAEhD;AAAA,MACF;AAAA,MAEA,KAAK,YAAY;AACf,sBAAc;AAEd,eAAO,KAAK,QAAQ;AAEpB,iBAAS,KAAK,QAAQ,eAAe,WAAW;AAEhD;AAAA,MACF;AAAA,MAEA,KAAK,cAAc;AACjB,sBAAc;AAEd,cAAM,EAAE,IAAI,UAAU,IAAI,OAAO,GAAG,IAAI,KAAK;AAE7C,YAAI,MAAM;AAAM,iBAAO,UAAU,EAAE,YAAY,OAAO,SAAS,IAAI;AAEnE;AAAA,MACF;AAAA,MAEA,KAAK,cAAc;AACjB,sBAAc;AAEd,eAAO,OAAO,KAAK,QAAQ,WAAW;AAEtC;AAAA,MACF;AAAA,MAEA,KAAK,qBAAqB;AACxB,sBAAc;AAEd,eAAO,IAAI,aAAa,EAAE;AAE1B,gBAAQ,KAAK,QAAQ;AAErB;AAAA,MACF;AAAA,MAEA;AACE,cAAM,IAAI,WAAW,sBAAuB,KAAa,IAAI,IAAI;AAAA,IACrE;AAAA,EACF;AAEA,WAAS,YAAY,OAAsC;AACzD,YAAQ,KAAK;AAEb,QAAI,MAAM;AAAkB;AAO5B,QAAI,MAAM,cAAc;AAAmB,aAAO,MAAM,eAAe;AAEvE,QAAI,QAAQ,KAAK,SAAS,qBAAqB;AAC7C,UAAI;AAEJ,UAAI;AACF,YAAI,QAAQ;AAAM,iBAAO,IAAI,IAAI,0BAA0B,IAAI,EAAE,EAAE;AAAA,MACrE,SAAS,OAAO;AACd,gBAAQ,MAAM,+BAA+B,IAAI,IAAI,KAAK;AAAA,MAC5D;AAEA,UAAI,QAAQ,QAAQ,QAAQ,QAAQ,SAAS,MAAM;AACjD,cAAM,eAAe;AACrB,cAAM,OAAO,MAAM;AAEnB,uBAAe,KAAK,SAAS,cAAc,IAAI,GAAI;AAAA,UACjD,UAAU;AAAA,UACV;AAAA,QACF,CAAC;AAED,YAAI,KAAK,SAAS,SAAS;AAAM,eAAK,QAAQ,UAAU,CAAC,GAAG,IAAI,IAAI;AAAA,MACtE;AAAA,IACF;AAAA,EACF;AAEA,MAAI,eAAe,QAAQ,MAAM;AAC/B,WACE;AAAA,MAAC;AAAA;AAAA,QACE,GAAG;AAAA,QACJ;AAAA,QACA;AAAA,QACA,SAAS;AAAA,QACT;AAAA,QACC,GAAI,wBAAwB;AAAA,UAC3B,QAAQ;AAAA,QACV;AAAA,QAEA,gBAAgB;AAAA;AAAA,IAClB;AAAA,EAEJ;AAGA,SAAO,oBAAC,OAAG,GAAG,aAAa,KAAU,MAAY,QAAgB,SAAS,aAAa;AACzF,CAAC;","names":["Link"]}
package/dist/esm/index.js CHANGED
@@ -11,7 +11,6 @@ import {
11
11
  scrollDocumentElement,
12
12
  unregisterDocument,
13
13
  setBuilderEditMode,
14
- changePathname,
15
14
  builderPointerMove,
16
15
  setBreakpoints,
17
16
  setLocale,
@@ -28,7 +27,6 @@ export {
28
27
  changeApiResource,
29
28
  changeDocument,
30
29
  changeDocumentElementScrollTop,
31
- changePathname,
32
30
  cleanUp,
33
31
  createDocument,
34
32
  evictApiResource,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts"],"sourcesContent":["export type { Action, SetBreakpointsAction } from './state/actions'\nexport {\n ActionTypes,\n changeDocument,\n changeDocumentElementScrollTop,\n cleanUp,\n init,\n messageHostPropController,\n changeApiResource,\n evictApiResource,\n registerDocument,\n scrollDocumentElement,\n unregisterDocument,\n setBuilderEditMode,\n changePathname,\n builderPointerMove,\n setBreakpoints,\n setLocale,\n setLocalizedResourceId,\n} from './state/actions'\nexport type { Operation } from './state/modules/read-write-documents'\nexport type { ComponentMeta } from './state/modules/components-meta'\nexport { ComponentIcon } from './state/modules/components-meta'\nexport type {\n PropControllerDescriptor,\n PropControllerDescriptorValueType,\n} from './prop-controllers'\nexport type { Element } from './state/react-page'\nexport { createDocument } from './state/react-page'\nexport { MakeswiftComponentType } from './components/builtin/constants'\n"],"mappings":"AACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGP,SAAS,qBAAqB;AAM9B,SAAS,sBAAsB;AAC/B,SAAS,8BAA8B;","names":[]}
1
+ {"version":3,"sources":["../../src/index.ts"],"sourcesContent":["export type { Action, SetBreakpointsAction } from './state/actions'\nexport {\n ActionTypes,\n changeDocument,\n changeDocumentElementScrollTop,\n cleanUp,\n init,\n messageHostPropController,\n changeApiResource,\n evictApiResource,\n registerDocument,\n scrollDocumentElement,\n unregisterDocument,\n setBuilderEditMode,\n builderPointerMove,\n setBreakpoints,\n setLocale,\n setLocalizedResourceId,\n} from './state/actions'\nexport type { Operation } from './state/modules/read-write-documents'\nexport type { ComponentMeta } from './state/modules/components-meta'\nexport { ComponentIcon } from './state/modules/components-meta'\nexport type {\n PropControllerDescriptor,\n PropControllerDescriptorValueType,\n} from './prop-controllers'\nexport type { Element } from './state/react-page'\nexport { createDocument } from './state/react-page'\nexport { MakeswiftComponentType } from './components/builtin/constants'\n"],"mappings":"AACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGP,SAAS,qBAAqB;AAM9B,SAAS,sBAAsB;AAC/B,SAAS,8BAA8B;","names":[]}
@@ -1,16 +1,25 @@
1
- import { ReactRuntime } from "../../../react";
2
- async function elementTree(req, res) {
3
- const elementTree2 = req.body.elementTree;
4
- const replacementContext = req.body.replacementContext;
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 elementTree(...args) {
6
+ const [, , runtime] = args;
7
+ const body = await match(args).with(routeHandlerPattern, ([request]) => request.json()).with(apiRoutePattern, ([req]) => req.body).exhaustive();
8
+ const elementTree2 = body.elementTree;
9
+ const replacementContext = body.replacementContext;
5
10
  if (elementTree2 == null) {
6
- return res.status(400).json({ message: "elementTree must be defined" });
11
+ const status = 400;
12
+ const body2 = { message: "elementTree must be defined" };
13
+ return match(args).with(routeHandlerPattern, () => NextResponse.json(body2, { status })).with(apiRoutePattern, ([, res]) => res.status(status).json(body2)).exhaustive();
7
14
  }
8
15
  if (replacementContext == null) {
9
- return res.status(400).json({ message: "replacementContext must be defined" });
16
+ const status = 400;
17
+ const body2 = { message: "replacementContext must be defined" };
18
+ return match(args).with(routeHandlerPattern, () => NextResponse.json(body2, { status })).with(apiRoutePattern, ([, res]) => res.status(status).json(body2)).exhaustive();
10
19
  }
11
- const generatedElementTree = ReactRuntime.copyElementTree(elementTree2, replacementContext);
20
+ const generatedElementTree = runtime.copyElementTree(elementTree2, replacementContext);
12
21
  const response = { elementTree: generatedElementTree };
13
- return res.json(response);
22
+ return match(args).with(routeHandlerPattern, () => NextResponse.json(response)).with(apiRoutePattern, ([, res]) => res.json(response)).exhaustive();
14
23
  }
15
24
  export {
16
25
  elementTree as default
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/next/api-handler/handlers/element-tree.ts"],"sourcesContent":["import { NextApiRequest, NextApiResponse } from 'next'\nimport { ReactRuntime } from '../../../react'\nimport { Element } from '../../../state/react-page'\n\ntype ElementTreeResult = { elementTree: Element }\n\ntype ElementTreeError = { message: string }\n\nexport type ElementTreeResponse = ElementTreeResult | ElementTreeError\n\nexport default async function elementTree(\n req: NextApiRequest,\n res: NextApiResponse<ElementTreeResponse>,\n): Promise<void> {\n const elementTree = req.body.elementTree\n const replacementContext = req.body.replacementContext\n\n if (elementTree == null) {\n return res.status(400).json({ message: 'elementTree must be defined' })\n }\n\n if (replacementContext == null) {\n return res.status(400).json({ message: 'replacementContext must be defined' })\n }\n\n const generatedElementTree = ReactRuntime.copyElementTree(elementTree, replacementContext)\n\n const response = { elementTree: generatedElementTree }\n return res.json(response)\n}\n"],"mappings":"AACA,SAAS,oBAAoB;AAS7B,eAAO,YACL,KACA,KACe;AACf,QAAMA,eAAc,IAAI,KAAK;AAC7B,QAAM,qBAAqB,IAAI,KAAK;AAEpC,MAAIA,gBAAe,MAAM;AACvB,WAAO,IAAI,OAAO,GAAG,EAAE,KAAK,EAAE,SAAS,8BAA8B,CAAC;AAAA,EACxE;AAEA,MAAI,sBAAsB,MAAM;AAC9B,WAAO,IAAI,OAAO,GAAG,EAAE,KAAK,EAAE,SAAS,qCAAqC,CAAC;AAAA,EAC/E;AAEA,QAAM,uBAAuB,aAAa,gBAAgBA,cAAa,kBAAkB;AAEzF,QAAM,WAAW,EAAE,aAAa,qBAAqB;AACrD,SAAO,IAAI,KAAK,QAAQ;AAC1B;","names":["elementTree"]}
1
+ {"version":3,"sources":["../../../../../src/next/api-handler/handlers/element-tree.ts"],"sourcesContent":["import { NextApiRequest, NextApiResponse } from 'next'\nimport { ReactRuntime } from '../../../react'\nimport { Element } from '../../../state/react-page'\nimport { NextRequest, NextResponse } from 'next/server'\nimport { P, match } from 'ts-pattern'\n\ntype Context = { params: { [key: string]: string | string[] } }\n\ntype ElementTreeResult = { elementTree: Element }\n\ntype ElementTreeError = { message: string }\n\nexport type ElementTreeResponse = ElementTreeResult | ElementTreeError\n\ntype ElementTreeHandlerArgs =\n | [request: NextRequest, context: Context, runtime: ReactRuntime]\n | [req: NextApiRequest, res: NextApiResponse<ElementTreeResponse>, runtime: ReactRuntime]\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 elementTree(\n request: NextRequest,\n context: Context,\n runtime: ReactRuntime,\n): Promise<NextResponse<ElementTreeResponse>>\nexport default async function elementTree(\n req: NextApiRequest,\n res: NextApiResponse<ElementTreeResponse>,\n runtime: ReactRuntime,\n): Promise<void>\nexport default async function elementTree(\n ...args: ElementTreeHandlerArgs\n): Promise<NextResponse<ElementTreeResponse> | void> {\n const [, , runtime] = 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 const replacementContext = body.replacementContext\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 if (replacementContext == null) {\n const status = 400\n const body = { message: 'replacementContext 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 const generatedElementTree = runtime.copyElementTree(elementTree, replacementContext)\n\n const response = { elementTree: generatedElementTree }\n\n return match(args)\n .with(routeHandlerPattern, () => NextResponse.json(response))\n .with(apiRoutePattern, ([, res]) => res.json(response))\n .exhaustive()\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,eACF,MACgD;AACnD,QAAM,CAAC,EAAE,EAAE,OAAO,IAAI;AAEtB,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,QAAMA,eAAc,KAAK;AACzB,QAAM,qBAAqB,KAAK;AAEhC,MAAIA,gBAAe,MAAM;AACvB,UAAM,SAAS;AACf,UAAMC,QAAO,EAAE,SAAS,8BAA8B;AAEtD,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,sBAAsB,MAAM;AAC9B,UAAM,SAAS;AACf,UAAMA,QAAO,EAAE,SAAS,qCAAqC;AAE7D,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,QAAM,uBAAuB,QAAQ,gBAAgBD,cAAa,kBAAkB;AAEpF,QAAM,WAAW,EAAE,aAAa,qBAAqB;AAErD,SAAO,MAAM,IAAI,EACd,KAAK,qBAAqB,MAAM,aAAa,KAAK,QAAQ,CAAC,EAC3D,KAAK,iBAAiB,CAAC,CAAC,EAAE,GAAG,MAAM,IAAI,KAAK,QAAQ,CAAC,EACrD,WAAW;AAChB;","names":["elementTree","body"]}
@@ -1,6 +1,11 @@
1
- async function fonts(_req, res, { getFonts } = {}) {
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 fonts(...args) {
6
+ const [, , { getFonts }] = args;
2
7
  const fonts2 = await getFonts?.() ?? [];
3
- return res.json(fonts2);
8
+ return match(args).with(routeHandlerPattern, () => NextResponse.json(fonts2)).with(apiRoutePattern, ([, res]) => res.json(fonts2)).exhaustive();
4
9
  }
5
10
  export {
6
11
  fonts as default
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/next/api-handler/handlers/fonts.ts"],"sourcesContent":["import { NextApiRequest, NextApiResponse } from 'next'\n\ntype FontVariant = { weight: string; style: 'italic' | 'normal'; src?: string }\n\nexport type Font = {\n family: string\n label?: string\n variants: FontVariant[]\n}\n\ntype Fonts = Font[]\n\nexport type GetFonts = () => Fonts | Promise<Fonts>\n\nexport type FontsResponse = Fonts\n\nexport default async function fonts(\n _req: NextApiRequest,\n res: NextApiResponse<FontsResponse>,\n { getFonts }: { getFonts?: GetFonts } = {},\n): Promise<void> {\n const fonts = (await getFonts?.()) ?? []\n\n return res.json(fonts)\n}\n"],"mappings":"AAgBA,eAAO,MACL,MACA,KACA,EAAE,SAAS,IAA6B,CAAC,GAC1B;AACf,QAAMA,SAAS,MAAM,WAAW,KAAM,CAAC;AAEvC,SAAO,IAAI,KAAKA,MAAK;AACvB;","names":["fonts"]}
1
+ {"version":3,"sources":["../../../../../src/next/api-handler/handlers/fonts.ts"],"sourcesContent":["import { NextApiRequest, NextApiResponse } from 'next'\nimport { NextRequest, NextResponse } from 'next/server'\nimport { P, match } from 'ts-pattern'\n\ntype Context = { params: { [key: string]: string | string[] } }\n\ntype FontVariant = { weight: string; style: 'italic' | 'normal'; src?: string }\n\nexport type Font = {\n family: string\n label?: string\n variants: FontVariant[]\n}\n\ntype Fonts = Font[]\n\nexport type GetFonts = () => Fonts | Promise<Fonts>\n\nexport type FontsResponse = Fonts\n\ntype FontsHandlerArgs =\n | [request: NextRequest, context: Context, params: { getFonts?: GetFonts }]\n | [req: NextApiRequest, res: NextApiResponse<FontsResponse>, params: { getFonts?: GetFonts }]\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 fonts(\n request: NextRequest,\n context: Context,\n { getFonts }: { getFonts?: GetFonts },\n): Promise<NextResponse<FontsResponse>>\nexport default async function fonts(\n _req: NextApiRequest,\n res: NextApiResponse<FontsResponse>,\n { getFonts }: { getFonts?: GetFonts },\n): Promise<void>\nexport default async function fonts(\n ...args: FontsHandlerArgs\n): Promise<NextResponse<FontsResponse> | void> {\n const [, , { getFonts }] = args\n\n const fonts = (await getFonts?.()) ?? []\n\n return match(args)\n .with(routeHandlerPattern, () => NextResponse.json(fonts))\n .with(apiRoutePattern, ([, res]) => res.json(fonts))\n .exhaustive()\n}\n"],"mappings":"AACA,SAAsB,oBAAoB;AAC1C,SAAS,GAAG,aAAa;AAsBzB,MAAM,sBAAsB,CAAC,EAAE,WAAW,OAAO,GAAG,EAAE,KAAK,EAAE,GAAG;AAChE,MAAM,kBAAkB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG;AAY5C,eAAO,SACF,MAC0C;AAC7C,QAAM,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,IAAI;AAE3B,QAAMA,SAAS,MAAM,WAAW,KAAM,CAAC;AAEvC,SAAO,MAAM,IAAI,EACd,KAAK,qBAAqB,MAAM,aAAa,KAAKA,MAAK,CAAC,EACxD,KAAK,iBAAiB,CAAC,CAAC,EAAE,GAAG,MAAM,IAAI,KAAKA,MAAK,CAAC,EAClD,WAAW;AAChB;","names":["fonts"]}
@@ -1,18 +1,30 @@
1
- async function handler(req, res, { apiKey }) {
2
- if (req.query.secret !== apiKey) {
3
- return res.status(401).json({ message: "Unauthorized" });
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 handler(...args) {
6
+ const [, , { apiKey }] = args;
7
+ const secret = match(args).with(routeHandlerPattern, ([request]) => request.nextUrl.searchParams.get("secret")).with(apiRoutePattern, ([req]) => req.query.secret).exhaustive();
8
+ if (secret !== apiKey) {
9
+ const status = 401;
10
+ const body2 = { message: "Unauthorized" };
11
+ return match(args).with(routeHandlerPattern, () => NextResponse.json(body2, { status })).with(apiRoutePattern, ([, res]) => res.status(status).json(body2)).exhaustive();
4
12
  }
5
- return res.json({
6
- version: "0.14.5",
7
- previewMode: true,
13
+ const supportsPreviewMode = match(args).with(routeHandlerPattern, () => false).with(apiRoutePattern, () => true).exhaustive();
14
+ const supportsDraftMode = match(args).with(routeHandlerPattern, () => true).with(apiRoutePattern, () => false).exhaustive();
15
+ const body = {
16
+ version: "0.15.0",
17
+ previewMode: supportsPreviewMode,
18
+ draftMode: supportsDraftMode,
8
19
  interactionMode: true,
9
- clientSideNavigation: true,
20
+ clientSideNavigation: false,
10
21
  elementFromPoint: false,
11
22
  customBreakpoints: true,
12
23
  siteVersions: true,
13
24
  unstable_siteVersions: true,
14
25
  localizedPageSSR: true
15
- });
26
+ };
27
+ return match(args).with(routeHandlerPattern, () => NextResponse.json(body)).with(apiRoutePattern, ([, res]) => res.json(body)).exhaustive();
16
28
  }
17
29
  export {
18
30
  handler as default
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/next/api-handler/handlers/manifest.ts"],"sourcesContent":["import { NextApiRequest, NextApiResponse } from 'next'\n\nexport type Manifest = {\n version: string\n previewMode: boolean\n interactionMode: boolean\n clientSideNavigation: boolean\n elementFromPoint: boolean\n customBreakpoints: boolean\n siteVersions: boolean\n unstable_siteVersions: boolean\n localizedPageSSR: boolean\n}\n\ntype ManifestError = { message: string }\n\nexport type ManifestResponse = Manifest | ManifestError\n\nexport default async function handler(\n req: NextApiRequest,\n res: NextApiResponse<ManifestResponse>,\n { apiKey }: { apiKey: string },\n): Promise<void> {\n if (req.query.secret !== apiKey) {\n return res.status(401).json({ message: 'Unauthorized' })\n }\n\n return res.json({\n version: PACKAGE_VERSION,\n previewMode: true,\n interactionMode: true,\n clientSideNavigation: true,\n elementFromPoint: false,\n customBreakpoints: true,\n siteVersions: true,\n unstable_siteVersions: true,\n localizedPageSSR: true,\n })\n}\n"],"mappings":"AAkBA,eAAO,QACL,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,SAAO,IAAI,KAAK;AAAA,IACd,SAAS;AAAA,IACT,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,sBAAsB;AAAA,IACtB,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,cAAc;AAAA,IACd,uBAAuB;AAAA,IACvB,kBAAkB;AAAA,EACpB,CAAC;AACH;","names":[]}
1
+ {"version":3,"sources":["../../../../../src/next/api-handler/handlers/manifest.ts"],"sourcesContent":["import { NextApiRequest, NextApiResponse } from 'next'\nimport { NextRequest, NextResponse } from 'next/server'\nimport { P, match } from 'ts-pattern'\n\ntype Context = { params: { [key: string]: string | string[] } }\n\nexport type Manifest = {\n version: string\n previewMode: boolean\n interactionMode: boolean\n clientSideNavigation: boolean\n elementFromPoint: boolean\n customBreakpoints: boolean\n siteVersions: boolean\n unstable_siteVersions: boolean\n localizedPageSSR: boolean\n}\n\ntype ManifestError = { message: string }\n\nexport type ManifestResponse = Manifest | ManifestError\n\ntype ManifestHandlerArgs =\n | [request: NextRequest, context: Context, params: { apiKey: string }]\n | [req: NextApiRequest, res: NextApiResponse<ManifestResponse>, 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 default async function handler(\n request: NextRequest,\n context: Context,\n { apiKey }: { apiKey: string },\n): Promise<NextResponse<ManifestResponse>>\nexport default async function handler(\n req: NextApiRequest,\n res: NextApiResponse<ManifestResponse>,\n { apiKey }: { apiKey: string },\n): Promise<void>\nexport default async function handler(\n ...args: ManifestHandlerArgs\n): Promise<NextResponse<ManifestResponse> | 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 status = 401\n const body = { message: 'Unauthorized' }\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 supportsPreviewMode = match(args)\n .with(routeHandlerPattern, () => false)\n .with(apiRoutePattern, () => true)\n .exhaustive()\n\n const supportsDraftMode = match(args)\n .with(routeHandlerPattern, () => true)\n .with(apiRoutePattern, () => false)\n .exhaustive()\n\n const body = {\n version: PACKAGE_VERSION,\n previewMode: supportsPreviewMode,\n draftMode: supportsDraftMode,\n interactionMode: true,\n clientSideNavigation: false,\n elementFromPoint: false,\n customBreakpoints: true,\n siteVersions: true,\n unstable_siteVersions: true,\n localizedPageSSR: true,\n }\n\n return match(args)\n .with(routeHandlerPattern, () => NextResponse.json(body))\n .with(apiRoutePattern, ([, res]) => res.json(body))\n .exhaustive()\n}\n"],"mappings":"AACA,SAAsB,oBAAoB;AAC1C,SAAS,GAAG,aAAa;AAwBzB,MAAM,sBAAsB,CAAC,EAAE,WAAW,OAAO,GAAG,EAAE,KAAK,EAAE,GAAG;AAChE,MAAM,kBAAkB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG;AAY5C,eAAO,WACF,MAC6C;AAChD,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,SAAS;AACf,UAAMA,QAAO,EAAE,SAAS,eAAe;AAEvC,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,QAAM,sBAAsB,MAAM,IAAI,EACnC,KAAK,qBAAqB,MAAM,KAAK,EACrC,KAAK,iBAAiB,MAAM,IAAI,EAChC,WAAW;AAEd,QAAM,oBAAoB,MAAM,IAAI,EACjC,KAAK,qBAAqB,MAAM,IAAI,EACpC,KAAK,iBAAiB,MAAM,KAAK,EACjC,WAAW;AAEd,QAAM,OAAO;AAAA,IACX,SAAS;AAAA,IACT,aAAa;AAAA,IACb,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,sBAAsB;AAAA,IACtB,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,cAAc;AAAA,IACd,uBAAuB;AAAA,IACvB,kBAAkB;AAAA,EACpB;AAEA,SAAO,MAAM,IAAI,EACd,KAAK,qBAAqB,MAAM,aAAa,KAAK,IAAI,CAAC,EACvD,KAAK,iBAAiB,CAAC,CAAC,EAAE,GAAG,MAAM,IAAI,KAAK,IAAI,CAAC,EACjD,WAAW;AAChB;","names":["body"]}
@@ -1,14 +1,25 @@
1
- async function mergeTranslatedData(req, res, client) {
2
- const translatedData = req.body.translatedData;
3
- 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 mergeTranslatedData(...args) {
6
+ const [, , client] = args;
7
+ const body = await match(args).with(routeHandlerPattern, ([request]) => request.json()).with(apiRoutePattern, ([req]) => req.body).exhaustive();
8
+ const translatedData = body.translatedData;
9
+ const elementTree = body.elementTree;
4
10
  if (translatedData == null) {
5
- return res.status(400).json({ message: "translatedData must be defined" });
11
+ const status = 400;
12
+ const body2 = { message: "translatedData must be defined" };
13
+ return match(args).with(routeHandlerPattern, () => NextResponse.json(body2, { status })).with(apiRoutePattern, ([, res]) => res.status(status).json(body2)).exhaustive();
6
14
  }
7
15
  if (elementTree == null) {
8
- return res.status(400).json({ message: "elementTree must be defined" });
16
+ const status = 400;
17
+ const body2 = { message: "elementTree must be defined" };
18
+ return match(args).with(routeHandlerPattern, () => NextResponse.json(body2, { status })).with(apiRoutePattern, ([, res]) => res.status(status).json(body2)).exhaustive();
9
19
  }
10
20
  const translatedElementTree = client.mergeTranslatedData(elementTree, translatedData);
11
- return res.json({ elementTree: translatedElementTree });
21
+ const responseBody = { elementTree: translatedElementTree };
22
+ return match(args).with(routeHandlerPattern, () => NextResponse.json(responseBody)).with(apiRoutePattern, ([, res]) => res.json(responseBody)).exhaustive();
12
23
  }
13
24
  export {
14
25
  mergeTranslatedData as default
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/next/api-handler/handlers/merge-translated-data.ts"],"sourcesContent":["import { NextApiRequest, NextApiResponse } from 'next'\nimport { Element } from '../../../state/react-page'\nimport { Makeswift } from '../../client'\n\ntype TranslatedDataResult = { elementTree: Element }\n\ntype TranslatedDataError = { message: string }\n\nexport type TranslatedDataResponse = TranslatedDataResult | TranslatedDataError\n\nexport default async function mergeTranslatedData(\n req: NextApiRequest,\n res: NextApiResponse<TranslatedDataResponse>,\n client: Makeswift,\n): Promise<void> {\n const translatedData = req.body.translatedData\n const elementTree = req.body.elementTree\n\n if (translatedData == null) {\n return res.status(400).json({ message: 'translatedData must be defined' })\n }\n\n if (elementTree == null) {\n return res.status(400).json({ message: 'elementTree must be defined' })\n }\n\n const translatedElementTree = client.mergeTranslatedData(elementTree, translatedData)\n\n return res.json({ elementTree: translatedElementTree })\n}\n"],"mappings":"AAUA,eAAO,oBACL,KACA,KACA,QACe;AACf,QAAM,iBAAiB,IAAI,KAAK;AAChC,QAAM,cAAc,IAAI,KAAK;AAE7B,MAAI,kBAAkB,MAAM;AAC1B,WAAO,IAAI,OAAO,GAAG,EAAE,KAAK,EAAE,SAAS,iCAAiC,CAAC;AAAA,EAC3E;AAEA,MAAI,eAAe,MAAM;AACvB,WAAO,IAAI,OAAO,GAAG,EAAE,KAAK,EAAE,SAAS,8BAA8B,CAAC;AAAA,EACxE;AAEA,QAAM,wBAAwB,OAAO,oBAAoB,aAAa,cAAc;AAEpF,SAAO,IAAI,KAAK,EAAE,aAAa,sBAAsB,CAAC;AACxD;","names":[]}
1
+ {"version":3,"sources":["../../../../../src/next/api-handler/handlers/merge-translated-data.ts"],"sourcesContent":["import { NextApiRequest, NextApiResponse } from 'next'\nimport { Element } 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 TranslatedDataResult = { elementTree: Element }\n\ntype TranslatedDataError = { message: string }\n\nexport type TranslatedDataResponse = TranslatedDataResult | TranslatedDataError\n\ntype MergeTranslatedDataHandlerArgs =\n | [request: NextRequest, context: Context, client: Makeswift]\n | [req: NextApiRequest, res: NextApiResponse<TranslatedDataResponse>, 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 mergeTranslatedData(\n request: NextRequest,\n context: Context,\n client: Makeswift,\n): Promise<NextResponse<TranslatedDataResponse>>\nexport default async function mergeTranslatedData(\n req: NextApiRequest,\n res: NextApiResponse<TranslatedDataResponse>,\n client: Makeswift,\n): Promise<void>\nexport default async function mergeTranslatedData(\n ...args: MergeTranslatedDataHandlerArgs\n): Promise<NextResponse<TranslatedDataResponse> | 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\n const translatedData = body.translatedData\n const elementTree = body.elementTree\n\n if (translatedData == null) {\n const status = 400\n const body = { message: 'translatedData 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 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 const translatedElementTree = client.mergeTranslatedData(elementTree, translatedData)\n\n const responseBody = { elementTree: translatedElementTree }\n\n return match(args)\n .with(routeHandlerPattern, () => NextResponse.json(responseBody))\n .with(apiRoutePattern, ([, res]) => res.json(responseBody))\n .exhaustive()\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,uBACF,MACmD;AACtD,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;AAEd,QAAM,iBAAiB,KAAK;AAC5B,QAAM,cAAc,KAAK;AAEzB,MAAI,kBAAkB,MAAM;AAC1B,UAAM,SAAS;AACf,UAAMA,QAAO,EAAE,SAAS,iCAAiC;AAEzD,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,eAAe,MAAM;AACvB,UAAM,SAAS;AACf,UAAMA,QAAO,EAAE,SAAS,8BAA8B;AAEtD,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,QAAM,wBAAwB,OAAO,oBAAoB,aAAa,cAAc;AAEpF,QAAM,eAAe,EAAE,aAAa,sBAAsB;AAE1D,SAAO,MAAM,IAAI,EACd,KAAK,qBAAqB,MAAM,aAAa,KAAK,YAAY,CAAC,EAC/D,KAAK,iBAAiB,CAAC,CAAC,EAAE,GAAG,MAAM,IAAI,KAAK,YAAY,CAAC,EACzD,WAAW;AAChB;","names":["body"]}
@@ -0,0 +1,49 @@
1
+ import { NextRequest, NextResponse } from "next/server";
2
+ import { P, match } from "ts-pattern";
3
+ import { cookies, draftMode } from "next/headers";
4
+ import { MAKESWIFT_DRAFT_MODE_DATA_COOKIE } from "../../draft-mode";
5
+ import { MakeswiftSiteVersion } from "../../preview-mode";
6
+ const routeHandlerPattern = [P.instanceOf(Request), P.any, P.any];
7
+ const apiRoutePattern = [P.any, P.any, P.any];
8
+ async function proxyDraftMode(...args) {
9
+ return match(args).with(routeHandlerPattern, (args2) => proxyDraftModeRouteHandler(...args2)).with(apiRoutePattern, (args2) => proxyDraftModeApiRouteHandler(...args2)).exhaustive();
10
+ }
11
+ async function proxyDraftModeRouteHandler(request, _context, { apiKey }) {
12
+ const secret = request.nextUrl.searchParams.get("x-makeswift-draft-mode") ?? request.headers.get("X-Makeswift-Draft-Mode");
13
+ if (secret !== apiKey)
14
+ return new NextResponse("Unauthorized", { status: 401 });
15
+ const draftModeData = {
16
+ makeswift: true,
17
+ siteVersion: MakeswiftSiteVersion.Working
18
+ };
19
+ draftMode().enable();
20
+ const proxyUrl = request.nextUrl.clone();
21
+ proxyUrl.searchParams.delete("x-makeswift-draft-mode");
22
+ const proxyRequest = new NextRequest(proxyUrl, { headers: request.headers });
23
+ proxyRequest.headers.delete("x-makeswift-draft-mode");
24
+ const draftModeCookie = cookies().get("__prerender_bypass");
25
+ if (draftModeCookie) {
26
+ proxyRequest.cookies.set(draftModeCookie);
27
+ proxyRequest.cookies.set(MAKESWIFT_DRAFT_MODE_DATA_COOKIE, JSON.stringify(draftModeData));
28
+ }
29
+ draftMode().disable();
30
+ const proxyResponse = await fetch(proxyRequest);
31
+ const response = new NextResponse(proxyResponse.body, {
32
+ headers: proxyResponse.headers,
33
+ status: proxyResponse.status
34
+ });
35
+ if (response.headers.has("content-encoding")) {
36
+ response.headers.delete("content-encoding");
37
+ response.headers.delete("content-length");
38
+ }
39
+ return response;
40
+ }
41
+ async function proxyDraftModeApiRouteHandler(_req, res, {}) {
42
+ const message = "Cannot request draft endpoint from an API handler registered in `pages`. Move your Makeswift API handler to the `app` directory";
43
+ console.error(message);
44
+ return res.status(500).send(message);
45
+ }
46
+ export {
47
+ proxyDraftMode as default
48
+ };
49
+ //# sourceMappingURL=proxy-draft-mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/next/api-handler/handlers/proxy-draft-mode.ts"],"sourcesContent":["import { NextApiRequest, NextApiResponse } from 'next'\nimport { NextRequest, NextResponse } from 'next/server'\nimport { P, match } from 'ts-pattern'\nimport { cookies, draftMode } from 'next/headers'\nimport { MAKESWIFT_DRAFT_MODE_DATA_COOKIE, MakeswiftDraftData } from '../../draft-mode'\nimport { MakeswiftSiteVersion } from '../../preview-mode'\n\ntype Context = { params: { [key: string]: string | string[] } }\n\ntype ProxyDraftModeError = string\n\ntype ProxyResponse = { __brand: 'ProxyResponse' }\n\nexport type ProxyDraftModeResponse = ProxyDraftModeError | ProxyResponse\n\ntype ProxyDraftModeHandlerArgs =\n | [request: NextRequest, context: Context, params: { apiKey: string }]\n | [req: NextApiRequest, res: NextApiResponse<ProxyDraftModeResponse>, 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 default async function proxyDraftMode(\n request: NextRequest,\n context: Context,\n { apiKey }: { apiKey: string },\n): Promise<NextResponse<ProxyDraftModeResponse>>\nexport default async function proxyDraftMode(\n req: NextApiRequest,\n res: NextApiResponse<ProxyDraftModeResponse>,\n { apiKey }: { apiKey: string },\n): Promise<void>\nexport default async function proxyDraftMode(\n ...args: ProxyDraftModeHandlerArgs\n): Promise<NextResponse<ProxyDraftModeResponse> | void> {\n return match(args)\n .with(routeHandlerPattern, args => proxyDraftModeRouteHandler(...args))\n .with(apiRoutePattern, args => proxyDraftModeApiRouteHandler(...args))\n .exhaustive()\n}\n\nasync function proxyDraftModeRouteHandler(\n request: NextRequest,\n _context: Context,\n { apiKey }: { apiKey: string },\n): Promise<NextResponse<ProxyDraftModeResponse>> {\n const secret =\n request.nextUrl.searchParams.get('x-makeswift-draft-mode') ??\n request.headers.get('X-Makeswift-Draft-Mode')\n\n if (secret !== apiKey) return new NextResponse('Unauthorized', { status: 401 })\n\n const draftModeData: MakeswiftDraftData = {\n makeswift: true,\n siteVersion: MakeswiftSiteVersion.Working,\n }\n\n draftMode().enable()\n\n const proxyUrl = request.nextUrl.clone()\n proxyUrl.searchParams.delete('x-makeswift-draft-mode')\n\n const proxyRequest = new NextRequest(proxyUrl, { headers: request.headers })\n proxyRequest.headers.delete('x-makeswift-draft-mode')\n\n const draftModeCookie = cookies().get('__prerender_bypass')\n if (draftModeCookie) {\n proxyRequest.cookies.set(draftModeCookie)\n proxyRequest.cookies.set(MAKESWIFT_DRAFT_MODE_DATA_COOKIE, JSON.stringify(draftModeData))\n }\n\n draftMode().disable()\n\n const proxyResponse = await fetch(proxyRequest)\n\n const response = new NextResponse<ProxyResponse>(proxyResponse.body, {\n headers: proxyResponse.headers,\n status: proxyResponse.status,\n })\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 (response.headers.has('content-encoding')) {\n response.headers.delete('content-encoding')\n response.headers.delete('content-length')\n }\n\n return response\n}\n\nasync function proxyDraftModeApiRouteHandler(\n _req: NextApiRequest,\n res: NextApiResponse<ProxyDraftModeResponse>,\n {}: { apiKey: string },\n): Promise<void> {\n const message =\n 'Cannot request draft endpoint from an API handler registered in `pages`. Move your Makeswift API handler to the `app` directory'\n console.error(message)\n return res.status(500).send(message)\n}\n"],"mappings":"AACA,SAAS,aAAa,oBAAoB;AAC1C,SAAS,GAAG,aAAa;AACzB,SAAS,SAAS,iBAAiB;AACnC,SAAS,wCAA4D;AACrE,SAAS,4BAA4B;AAcrC,MAAM,sBAAsB,CAAC,EAAE,WAAW,OAAO,GAAG,EAAE,KAAK,EAAE,GAAG;AAChE,MAAM,kBAAkB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG;AAY5C,eAAO,kBACF,MACmD;AACtD,SAAO,MAAM,IAAI,EACd,KAAK,qBAAqB,CAAAA,UAAQ,2BAA2B,GAAGA,KAAI,CAAC,EACrE,KAAK,iBAAiB,CAAAA,UAAQ,8BAA8B,GAAGA,KAAI,CAAC,EACpE,WAAW;AAChB;AAEA,eAAe,2BACb,SACA,UACA,EAAE,OAAO,GACsC;AAC/C,QAAM,SACJ,QAAQ,QAAQ,aAAa,IAAI,wBAAwB,KACzD,QAAQ,QAAQ,IAAI,wBAAwB;AAE9C,MAAI,WAAW;AAAQ,WAAO,IAAI,aAAa,gBAAgB,EAAE,QAAQ,IAAI,CAAC;AAE9E,QAAM,gBAAoC;AAAA,IACxC,WAAW;AAAA,IACX,aAAa,qBAAqB;AAAA,EACpC;AAEA,YAAU,EAAE,OAAO;AAEnB,QAAM,WAAW,QAAQ,QAAQ,MAAM;AACvC,WAAS,aAAa,OAAO,wBAAwB;AAErD,QAAM,eAAe,IAAI,YAAY,UAAU,EAAE,SAAS,QAAQ,QAAQ,CAAC;AAC3E,eAAa,QAAQ,OAAO,wBAAwB;AAEpD,QAAM,kBAAkB,QAAQ,EAAE,IAAI,oBAAoB;AAC1D,MAAI,iBAAiB;AACnB,iBAAa,QAAQ,IAAI,eAAe;AACxC,iBAAa,QAAQ,IAAI,kCAAkC,KAAK,UAAU,aAAa,CAAC;AAAA,EAC1F;AAEA,YAAU,EAAE,QAAQ;AAEpB,QAAM,gBAAgB,MAAM,MAAM,YAAY;AAE9C,QAAM,WAAW,IAAI,aAA4B,cAAc,MAAM;AAAA,IACnE,SAAS,cAAc;AAAA,IACvB,QAAQ,cAAc;AAAA,EACxB,CAAC;AAOD,MAAI,SAAS,QAAQ,IAAI,kBAAkB,GAAG;AAC5C,aAAS,QAAQ,OAAO,kBAAkB;AAC1C,aAAS,QAAQ,OAAO,gBAAgB;AAAA,EAC1C;AAEA,SAAO;AACT;AAEA,eAAe,8BACb,MACA,KACA,CAAC,GACc;AACf,QAAM,UACJ;AACF,UAAQ,MAAM,OAAO;AACrB,SAAO,IAAI,OAAO,GAAG,EAAE,KAAK,OAAO;AACrC;","names":["args"]}
@@ -1,9 +1,34 @@
1
- import { serialize } from "cookie";
2
- import { createProxyServer } from "http-proxy";
3
- import { parse } from "set-cookie-parser";
4
1
  import { MakeswiftSiteVersion } from "../../preview-mode";
5
- async function proxyPreviewMode(req, res, { apiKey }) {
6
- const previewModeProxy = createProxyServer();
2
+ import { NextResponse } from "next/server";
3
+ import { P, match } from "ts-pattern";
4
+ const routeHandlerPattern = [P.instanceOf(Request), P.any, P.any];
5
+ const apiRoutePattern = [P.any, P.any, P.any];
6
+ function mapRequestHeadersToHeaders(requestHeaders) {
7
+ const headers = new Headers();
8
+ Object.entries(requestHeaders).forEach(([key, value]) => {
9
+ match(value).with(P.array(P.string), (value2) => value2.map((val) => headers.append(key, val))).with(P.string, (value2) => headers.set(key, value2));
10
+ });
11
+ return headers;
12
+ }
13
+ function mapRequestToProxyUrl(req) {
14
+ const isForwardedProtoHttps = match(req.headers["X-Forwarded-Proto"]).with(P.string, (x) => x.split(",")).with(P.array(P.string), (x) => x).otherwise(() => []).includes("https");
15
+ const isForwardedSSL = match(req.headers["X-Forwarded-SSL"]).with("on", () => true).otherwise(() => false);
16
+ const proto = isForwardedProtoHttps || isForwardedSSL ? "https" : "http";
17
+ return new URL(`${proto}://${req.headers.host}${req.url}`);
18
+ }
19
+ async function proxyPreviewMode(...args) {
20
+ return match(args).with(routeHandlerPattern, (args2) => proxyPreviewModeRouteHandler(...args2)).with(apiRoutePattern, (args2) => proxyPreviewModeApiRouteHandler(...args2)).exhaustive();
21
+ }
22
+ async function proxyPreviewModeRouteHandler(_request, _context, {}) {
23
+ const message = "Cannot request preview endpoint from an API handler registered in `app`. Move your Makeswift API handler to the `pages/api` directory";
24
+ console.error(message);
25
+ return NextResponse.json(message, { status: 500 });
26
+ }
27
+ async function proxyPreviewModeApiRouteHandler(req, res, { apiKey }) {
28
+ if (req.query.secret !== apiKey)
29
+ return res.status(401).send("Unauthorized");
30
+ if (req.headers.host == null)
31
+ return res.status(400).send("Bad Request");
7
32
  const NextRequestMetaSymbol = Reflect.ownKeys(req).find(
8
33
  (key) => key.toString() === "Symbol(NextRequestMeta)" || key.toString() === "Symbol(NextInternalRequestMeta)"
9
34
  );
@@ -17,51 +42,37 @@ async function proxyPreviewMode(req, res, { apiKey }) {
17
42
  } catch {
18
43
  }
19
44
  }
20
- previewModeProxy.once("proxyReq", (proxyReq) => {
21
- proxyReq.removeHeader("X-Makeswift-Preview-Mode");
22
- proxyReq.removeHeader("X-Invoke-Path");
23
- proxyReq.removeHeader("X-Invoke-Query");
24
- const url = new URL(proxyReq.path, "http://n");
25
- url.searchParams.delete("x-makeswift-preview-mode");
26
- proxyReq.path = url.pathname + url.search;
27
- });
28
- if (req.query.secret !== apiKey)
29
- return res.status(401).send("Unauthorized");
30
- const host = req.headers.host;
31
- const originalCookies = req.headers.cookie;
32
- if (host == null)
33
- return res.status(400).send("Bad Request");
34
- const forwardedProtoHeader = req.headers["x-forwarded-proto"];
35
- let forwardedProto = [];
36
- if (Array.isArray(forwardedProtoHeader)) {
37
- forwardedProto = forwardedProtoHeader;
38
- } else if (typeof forwardedProtoHeader === "string") {
39
- forwardedProto = forwardedProtoHeader.split(",");
40
- }
41
- const isForwardedProtoHttps = forwardedProto.includes("https");
42
- const forwardedSSL = req.headers["x-forwarded-ssl"];
43
- const isForwardedSSL = typeof forwardedSSL === "string" && forwardedSSL === "on";
44
- const proto = isForwardedProtoHttps || isForwardedSSL ? "https" : "http";
45
- let target = `${proto}://${host}`;
46
- const secure = process.env["NODE_ENV"] === "production";
45
+ const proxyHeaders = mapRequestHeadersToHeaders(req.headers);
46
+ const proxyUrl = mapRequestToProxyUrl(req);
47
+ proxyUrl.searchParams.delete("x-makeswift-preview-mode");
48
+ proxyHeaders.delete("x-makeswift-preview-mode");
49
+ proxyHeaders.delete("x-invoke-path");
50
+ proxyHeaders.delete("x-invoke-query");
47
51
  const previewData = {
48
52
  makeswift: true,
53
+ // This will eventually be dynamic
49
54
  siteVersion: MakeswiftSiteVersion.Working
50
55
  };
51
- const setCookie = res.setPreviewData(previewData).getHeader("Set-Cookie");
52
- res.removeHeader("Set-Cookie");
56
+ const setCookie = res.setPreviewData(previewData).getHeader("set-cookie");
57
+ res.removeHeader("set-cookie");
53
58
  if (!Array.isArray(setCookie))
54
59
  return res.status(500).send("Internal Server Error");
55
- const additionalCookies = parse(setCookie).map((cookie2) => serialize(cookie2.name, cookie2.value, cookie2)).join(";");
56
- const cookie = originalCookies ? `${originalCookies}; ${additionalCookies}` : additionalCookies;
57
- return await new Promise(
58
- (resolve, reject) => previewModeProxy.web(req, res, { target, headers: { cookie }, secure }, (err) => {
59
- if (err)
60
- reject(err);
61
- else
62
- resolve();
63
- })
64
- );
60
+ setCookie.forEach((cookie) => proxyHeaders.append("cookie", cookie));
61
+ const response = await fetch(proxyUrl, {
62
+ headers: proxyHeaders
63
+ });
64
+ response.headers.forEach((value, name) => {
65
+ res.setHeader(name, value);
66
+ });
67
+ res.statusCode = response.status;
68
+ res.statusMessage = response.statusText;
69
+ if (res.hasHeader("content-encoding")) {
70
+ res.removeHeader("content-encoding");
71
+ res.removeHeader("content-length");
72
+ }
73
+ const arrayBuffer = await response.arrayBuffer();
74
+ res.write(arrayBuffer);
75
+ res.end();
65
76
  }
66
77
  export {
67
78
  proxyPreviewMode as default
@@ -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":"AACA,SAA+B,4BAA4B;AAC3D,SAAsB,oBAAoB;AAC1C,SAAS,GAAG,aAAa;AAkBzB,MAAM,sBAAsB,CAAC,EAAE,WAAW,OAAO,GAAG,EAAE,KAAK,EAAE,GAAG;AAChE,MAAM,kBAAkB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG;AAE5C,SAAS,2BAA2B,gBAAoD;AACtF,QAAM,UAAU,IAAI,QAAQ;AAE5B,SAAO,QAAQ,cAAc,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACvD,UAAM,KAAK,EACR,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,CAAAA,WAASA,OAAM,IAAI,SAAO,QAAQ,OAAO,KAAK,GAAG,CAAC,CAAC,EAC3E,KAAK,EAAE,QAAQ,CAAAA,WAAS,QAAQ,IAAI,KAAKA,MAAK,CAAC;AAAA,EACpD,CAAC;AAED,SAAO;AACT;AAEA,SAAS,qBAAqB,KAA0B;AACtD,QAAM,wBAAwB,MAAM,IAAI,QAAQ,mBAAmB,CAAC,EACjE,KAAK,EAAE,QAAQ,OAAK,EAAE,MAAM,GAAG,CAAC,EAChC,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,OAAK,CAAC,EAC9B,UAAU,MAAM,CAAC,CAAC,EAClB,SAAS,OAAO;AAEnB,QAAM,iBAAiB,MAAM,IAAI,QAAQ,iBAAiB,CAAC,EACxD,KAAK,MAAM,MAAM,IAAI,EACrB,UAAU,MAAM,KAAK;AAExB,QAAM,QAAQ,yBAAyB,iBAAiB,UAAU;AAElE,SAAO,IAAI,IAAI,GAAG,KAAK,MAAM,IAAI,QAAQ,IAAI,GAAG,IAAI,GAAG,EAAE;AAC3D;AAYA,eAAO,oBACF,MACqD;AACxD,SAAO,MAAM,IAAI,EACd,KAAK,qBAAqB,CAAAC,UAAQ,6BAA6B,GAAGA,KAAI,CAAC,EACvE,KAAK,iBAAiB,CAAAA,UAAQ,gCAAgC,GAAGA,KAAI,CAAC,EACtE,WAAW;AAChB;AAEA,eAAe,6BACb,UACA,UACA,CAAC,GACgD;AACjD,QAAM,UACJ;AACF,UAAQ,MAAM,OAAO;AACrB,SAAO,aAAa,KAAK,SAAS,EAAE,QAAQ,IAAI,CAAC;AACnD;AAEA,eAAe,gCACb,KACA,KACA,EAAE,OAAO,GACM;AACf,MAAI,IAAI,MAAM,WAAW;AAAQ,WAAO,IAAI,OAAO,GAAG,EAAE,KAAK,cAAc;AAC3E,MAAI,IAAI,QAAQ,QAAQ;AAAM,WAAO,IAAI,OAAO,GAAG,EAAE,KAAK,aAAa;AASvE,QAAM,wBAAwB,QAAQ,QAAQ,GAAG,EAAE;AAAA,IACjD,SACE,IAAI,SAAS,MAAM,6BACnB,IAAI,SAAS,MAAM;AAAA,EACvB;AAEA,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,QAAM,eAAe,2BAA2B,IAAI,OAAO;AAC3D,QAAM,WAAW,qBAAqB,GAAG;AAEzC,WAAS,aAAa,OAAO,0BAA0B;AACvD,eAAa,OAAO,0BAA0B;AAG9C,eAAa,OAAO,eAAe;AACnC,eAAa,OAAO,gBAAgB;AAEpC,QAAM,cAAoC;AAAA,IACxC,WAAW;AAAA;AAAA,IAEX,aAAa,qBAAqB;AAAA,EACpC;AAEA,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,YAAU,QAAQ,CAAC,WAAW,aAAa,OAAO,UAAU,MAAM,CAAC;AAEnE,QAAM,WAAW,MAAM,MAAM,UAAU;AAAA,IACrC,SAAS;AAAA,EACX,CAAC;AAED,WAAS,QAAQ,QAAQ,CAAC,OAAO,SAAS;AACxC,QAAI,UAAU,MAAM,KAAK;AAAA,EAC3B,CAAC;AAED,MAAI,aAAa,SAAS;AAC1B,MAAI,gBAAgB,SAAS;AAO7B,MAAI,IAAI,UAAU,kBAAkB,GAAG;AACrC,QAAI,aAAa,kBAAkB;AACnC,QAAI,aAAa,gBAAgB;AAAA,EACnC;AAEA,QAAM,cAAc,MAAM,SAAS,YAAY;AAE/C,MAAI,MAAM,WAAW;AACrB,MAAI,IAAI;AACV;","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"]}