@makeswift/runtime 0.24.9-canary.0 → 0.25.0-canary.2

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 (250) hide show
  1. package/dist/cjs/api/site-version.js +8 -2
  2. package/dist/cjs/api/site-version.js.map +1 -1
  3. package/dist/cjs/api-handler/cookies.js +38 -0
  4. package/dist/cjs/api-handler/cookies.js.map +1 -0
  5. package/dist/cjs/api-handler/cors.js +48 -0
  6. package/dist/cjs/api-handler/cors.js.map +1 -0
  7. package/dist/cjs/api-handler/handlers/clear-draft.js +41 -0
  8. package/dist/cjs/api-handler/handlers/clear-draft.js.map +1 -0
  9. package/dist/cjs/api-handler/handlers/element-tree.js +41 -0
  10. package/dist/cjs/api-handler/handlers/element-tree.js.map +1 -0
  11. package/dist/cjs/{next/api-handler → api-handler}/handlers/fonts.js +9 -9
  12. package/dist/cjs/api-handler/handlers/fonts.js.map +1 -0
  13. package/dist/cjs/api-handler/handlers/manifest.js +50 -0
  14. package/dist/cjs/api-handler/handlers/manifest.js.map +1 -0
  15. package/dist/cjs/api-handler/handlers/merge-translated-data.js +41 -0
  16. package/dist/cjs/api-handler/handlers/merge-translated-data.js.map +1 -0
  17. package/dist/cjs/api-handler/handlers/revalidate.js +60 -0
  18. package/dist/cjs/api-handler/handlers/revalidate.js.map +1 -0
  19. package/dist/cjs/api-handler/handlers/translatable-data.js +42 -0
  20. package/dist/cjs/api-handler/handlers/translatable-data.js.map +1 -0
  21. package/dist/cjs/{next/api-handler → api-handler}/handlers/webhook/index.js +16 -23
  22. package/dist/cjs/api-handler/handlers/webhook/index.js.map +1 -0
  23. package/dist/cjs/{next/api-handler → api-handler}/handlers/webhook/site-published.js +2 -4
  24. package/dist/cjs/api-handler/handlers/webhook/site-published.js.map +1 -0
  25. package/dist/cjs/api-handler/handlers/webhook/types.js.map +1 -0
  26. package/dist/cjs/api-handler/index.js +116 -0
  27. package/dist/cjs/api-handler/index.js.map +1 -0
  28. package/dist/cjs/api-handler/request-response.js +43 -0
  29. package/dist/cjs/api-handler/request-response.js.map +1 -0
  30. package/dist/cjs/next/api-handler/config/app-router.js +65 -0
  31. package/dist/cjs/next/api-handler/config/app-router.js.map +1 -0
  32. package/dist/cjs/next/api-handler/config/base.js +39 -0
  33. package/dist/cjs/next/api-handler/config/base.js.map +1 -0
  34. package/dist/cjs/next/api-handler/config/pages-router.js +123 -0
  35. package/dist/cjs/next/api-handler/config/pages-router.js.map +1 -0
  36. package/dist/cjs/next/api-handler/{handlers/utils/draft.js → draft.js} +2 -14
  37. package/dist/cjs/next/api-handler/draft.js.map +1 -0
  38. package/dist/cjs/next/api-handler/handlers/redirect-draft.js +8 -17
  39. package/dist/cjs/next/api-handler/handlers/redirect-draft.js.map +1 -1
  40. package/dist/cjs/next/api-handler/handlers/redirect-preview.js +12 -19
  41. package/dist/cjs/next/api-handler/handlers/redirect-preview.js.map +1 -1
  42. package/dist/cjs/next/api-handler/index.js +19 -154
  43. package/dist/cjs/next/api-handler/index.js.map +1 -1
  44. package/dist/cjs/next/middleware/request-utils.js +1 -1
  45. package/dist/cjs/next/middleware/request-utils.js.map +1 -1
  46. package/dist/cjs/next/server.js.map +1 -1
  47. package/dist/cjs/next/tests/__fixtures__/element-tree.js +1776 -0
  48. package/dist/cjs/next/tests/__fixtures__/element-tree.js.map +1 -0
  49. package/dist/cjs/next/tests/__fixtures__/resources.js +99 -0
  50. package/dist/cjs/next/tests/__fixtures__/resources.js.map +1 -0
  51. package/dist/cjs/next/tests/__fixtures__/translated-data.js +83 -0
  52. package/dist/cjs/next/tests/__fixtures__/translated-data.js.map +1 -0
  53. package/dist/cjs/next/tests/test-utils.js +98 -23
  54. package/dist/cjs/next/tests/test-utils.js.map +1 -1
  55. package/dist/esm/api/site-version.js +6 -1
  56. package/dist/esm/api/site-version.js.map +1 -1
  57. package/dist/esm/api-handler/cookies.js +13 -0
  58. package/dist/esm/api-handler/cookies.js.map +1 -0
  59. package/dist/esm/api-handler/cors.js +24 -0
  60. package/dist/esm/api-handler/cors.js.map +1 -0
  61. package/dist/esm/api-handler/handlers/clear-draft.js +17 -0
  62. package/dist/esm/api-handler/handlers/clear-draft.js.map +1 -0
  63. package/dist/esm/api-handler/handlers/element-tree.js +17 -0
  64. package/dist/esm/api-handler/handlers/element-tree.js.map +1 -0
  65. package/dist/esm/api-handler/handlers/fonts.js +9 -0
  66. package/dist/esm/api-handler/handlers/fonts.js.map +1 -0
  67. package/dist/esm/api-handler/handlers/manifest.js +29 -0
  68. package/dist/esm/api-handler/handlers/manifest.js.map +1 -0
  69. package/dist/esm/api-handler/handlers/merge-translated-data.js +17 -0
  70. package/dist/esm/api-handler/handlers/merge-translated-data.js.map +1 -0
  71. package/dist/esm/api-handler/handlers/revalidate.js +29 -0
  72. package/dist/esm/api-handler/handlers/revalidate.js.map +1 -0
  73. package/dist/esm/api-handler/handlers/translatable-data.js +18 -0
  74. package/dist/esm/api-handler/handlers/translatable-data.js.map +1 -0
  75. package/dist/esm/api-handler/handlers/webhook/index.js +30 -0
  76. package/dist/esm/api-handler/handlers/webhook/index.js.map +1 -0
  77. package/dist/esm/api-handler/handlers/webhook/site-published.js +13 -0
  78. package/dist/esm/api-handler/handlers/webhook/site-published.js.map +1 -0
  79. package/dist/esm/api-handler/handlers/webhook/types.js.map +1 -0
  80. package/dist/esm/api-handler/index.js +95 -0
  81. package/dist/esm/api-handler/index.js.map +1 -0
  82. package/dist/esm/api-handler/request-response.js +18 -0
  83. package/dist/esm/api-handler/request-response.js.map +1 -0
  84. package/dist/esm/next/api-handler/config/app-router.js +40 -0
  85. package/dist/esm/next/api-handler/config/app-router.js.map +1 -0
  86. package/dist/esm/next/api-handler/config/base.js +15 -0
  87. package/dist/esm/next/api-handler/config/base.js.map +1 -0
  88. package/dist/esm/next/api-handler/config/pages-router.js +98 -0
  89. package/dist/esm/next/api-handler/config/pages-router.js.map +1 -0
  90. package/dist/esm/next/api-handler/{handlers/utils/draft.js → draft.js} +1 -11
  91. package/dist/esm/next/api-handler/draft.js.map +1 -0
  92. package/dist/esm/next/api-handler/handlers/redirect-draft.js +5 -21
  93. package/dist/esm/next/api-handler/handlers/redirect-draft.js.map +1 -1
  94. package/dist/esm/next/api-handler/handlers/redirect-preview.js +4 -21
  95. package/dist/esm/next/api-handler/handlers/redirect-preview.js.map +1 -1
  96. package/dist/esm/next/api-handler/index.js +20 -159
  97. package/dist/esm/next/api-handler/index.js.map +1 -1
  98. package/dist/esm/next/middleware/request-utils.js +1 -4
  99. package/dist/esm/next/middleware/request-utils.js.map +1 -1
  100. package/dist/esm/next/server.js.map +1 -1
  101. package/dist/esm/next/tests/__fixtures__/element-tree.js +1752 -0
  102. package/dist/esm/next/tests/__fixtures__/element-tree.js.map +1 -0
  103. package/dist/esm/next/tests/__fixtures__/resources.js +69 -0
  104. package/dist/esm/next/tests/__fixtures__/resources.js.map +1 -0
  105. package/dist/esm/next/tests/__fixtures__/translated-data.js +59 -0
  106. package/dist/esm/next/tests/__fixtures__/translated-data.js.map +1 -0
  107. package/dist/esm/next/tests/test-utils.js +98 -23
  108. package/dist/esm/next/tests/test-utils.js.map +1 -1
  109. package/dist/types/api/site-version.d.ts +1 -0
  110. package/dist/types/api/site-version.d.ts.map +1 -1
  111. package/dist/types/api-handler/cookies.d.ts +9 -0
  112. package/dist/types/api-handler/cookies.d.ts.map +1 -0
  113. package/dist/types/api-handler/cors.d.ts +10 -0
  114. package/dist/types/api-handler/cors.d.ts.map +1 -0
  115. package/dist/types/api-handler/handlers/clear-draft.d.ts +7 -0
  116. package/dist/types/api-handler/handlers/clear-draft.d.ts.map +1 -0
  117. package/dist/types/api-handler/handlers/element-tree.d.ts +9 -0
  118. package/dist/types/api-handler/handlers/element-tree.d.ts.map +1 -0
  119. package/dist/types/api-handler/handlers/fonts.d.ts +18 -0
  120. package/dist/types/api-handler/handlers/fonts.d.ts.map +1 -0
  121. package/dist/types/api-handler/handlers/manifest.d.ts +20 -0
  122. package/dist/types/api-handler/handlers/manifest.d.ts.map +1 -0
  123. package/dist/types/api-handler/handlers/merge-translated-data.d.ts +11 -0
  124. package/dist/types/api-handler/handlers/merge-translated-data.d.ts.map +1 -0
  125. package/dist/types/api-handler/handlers/revalidate.d.ts +10 -0
  126. package/dist/types/api-handler/handlers/revalidate.d.ts.map +1 -0
  127. package/dist/types/api-handler/handlers/translatable-data.d.ts +15 -0
  128. package/dist/types/api-handler/handlers/translatable-data.d.ts.map +1 -0
  129. package/dist/types/api-handler/handlers/webhook/index.d.ts +12 -0
  130. package/dist/types/api-handler/handlers/webhook/index.d.ts.map +1 -0
  131. package/dist/types/{next/api-handler → api-handler}/handlers/webhook/site-published.d.ts +2 -1
  132. package/dist/types/api-handler/handlers/webhook/site-published.d.ts.map +1 -0
  133. package/dist/types/{next/api-handler → api-handler}/handlers/webhook/types.d.ts +2 -4
  134. package/dist/types/api-handler/handlers/webhook/types.d.ts.map +1 -0
  135. package/dist/types/api-handler/index.d.ts +35 -0
  136. package/dist/types/api-handler/index.d.ts.map +1 -0
  137. package/dist/types/api-handler/request-response.d.ts +12 -0
  138. package/dist/types/api-handler/request-response.d.ts.map +1 -0
  139. package/dist/types/next/api-handler/config/app-router.d.ts +16 -0
  140. package/dist/types/next/api-handler/config/app-router.d.ts.map +1 -0
  141. package/dist/types/next/api-handler/config/base.d.ts +15 -0
  142. package/dist/types/next/api-handler/config/base.d.ts.map +1 -0
  143. package/dist/types/next/api-handler/config/pages-router.d.ts +10 -0
  144. package/dist/types/next/api-handler/config/pages-router.d.ts.map +1 -0
  145. package/dist/types/next/api-handler/{handlers/utils/draft.d.ts → draft.d.ts} +0 -8
  146. package/dist/types/next/api-handler/draft.d.ts.map +1 -0
  147. package/dist/types/next/api-handler/handlers/redirect-draft.d.ts +3 -16
  148. package/dist/types/next/api-handler/handlers/redirect-draft.d.ts.map +1 -1
  149. package/dist/types/next/api-handler/handlers/redirect-preview.d.ts +1 -14
  150. package/dist/types/next/api-handler/handlers/redirect-preview.d.ts.map +1 -1
  151. package/dist/types/next/api-handler/index.d.ts +10 -36
  152. package/dist/types/next/api-handler/index.d.ts.map +1 -1
  153. package/dist/types/next/middleware/request-utils.d.ts.map +1 -1
  154. package/dist/types/next/server.d.ts +2 -1
  155. package/dist/types/next/server.d.ts.map +1 -1
  156. package/dist/types/next/tests/__fixtures__/element-tree.d.ts +3 -0
  157. package/dist/types/next/tests/__fixtures__/element-tree.d.ts.map +1 -0
  158. package/dist/types/next/tests/__fixtures__/resources.d.ts +9 -0
  159. package/dist/types/next/tests/__fixtures__/resources.d.ts.map +1 -0
  160. package/dist/types/next/tests/__fixtures__/translated-data.d.ts +56 -0
  161. package/dist/types/next/tests/__fixtures__/translated-data.d.ts.map +1 -0
  162. package/dist/types/next/tests/server.api-handler-clear-draft.test.d.ts +2 -0
  163. package/dist/types/next/tests/server.api-handler-clear-draft.test.d.ts.map +1 -0
  164. package/dist/types/next/tests/server.api-handler-cors.test.d.ts +2 -0
  165. package/dist/types/next/tests/server.api-handler-cors.test.d.ts.map +1 -0
  166. package/dist/types/next/tests/server.api-handler-element-tree.test.d.ts +2 -0
  167. package/dist/types/next/tests/server.api-handler-element-tree.test.d.ts.map +1 -0
  168. package/dist/types/next/tests/server.api-handler-error-handling.test.d.ts +2 -0
  169. package/dist/types/next/tests/server.api-handler-error-handling.test.d.ts.map +1 -0
  170. package/dist/types/next/tests/server.api-handler-fonts.test.d.ts +2 -0
  171. package/dist/types/next/tests/server.api-handler-fonts.test.d.ts.map +1 -0
  172. package/dist/types/next/tests/server.api-handler-manifest.test.d.ts +2 -0
  173. package/dist/types/next/tests/server.api-handler-manifest.test.d.ts.map +1 -0
  174. package/dist/types/next/tests/server.api-handler-merge-translated-data.test.d.ts +2 -0
  175. package/dist/types/next/tests/server.api-handler-merge-translated-data.test.d.ts.map +1 -0
  176. package/dist/types/next/tests/server.api-handler-redirect-draft.test.d.ts +2 -0
  177. package/dist/types/next/tests/server.api-handler-redirect-draft.test.d.ts.map +1 -0
  178. package/dist/types/next/tests/server.api-handler-redirect-preview.test.d.ts +2 -0
  179. package/dist/types/next/tests/server.api-handler-redirect-preview.test.d.ts.map +1 -0
  180. package/dist/types/next/tests/server.api-handler-resources.test.d.ts +2 -0
  181. package/dist/types/next/tests/server.api-handler-resources.test.d.ts.map +1 -0
  182. package/dist/types/next/tests/server.api-handler-revalidate.test.d.ts +2 -0
  183. package/dist/types/next/tests/server.api-handler-revalidate.test.d.ts.map +1 -0
  184. package/dist/types/next/tests/server.api-handler-translatable-data.test.d.ts +2 -0
  185. package/dist/types/next/tests/server.api-handler-translatable-data.test.d.ts.map +1 -0
  186. package/dist/types/next/tests/server.api-handler-webhook.test.d.ts +2 -0
  187. package/dist/types/next/tests/server.api-handler-webhook.test.d.ts.map +1 -0
  188. package/dist/types/next/tests/test-utils.d.ts +37 -4
  189. package/dist/types/next/tests/test-utils.d.ts.map +1 -1
  190. package/package.json +3 -3
  191. package/dist/cjs/next/api-handler/handlers/clear-draft.js +0 -64
  192. package/dist/cjs/next/api-handler/handlers/clear-draft.js.map +0 -1
  193. package/dist/cjs/next/api-handler/handlers/element-tree.js +0 -47
  194. package/dist/cjs/next/api-handler/handlers/element-tree.js.map +0 -1
  195. package/dist/cjs/next/api-handler/handlers/fonts.js.map +0 -1
  196. package/dist/cjs/next/api-handler/handlers/manifest.js +0 -55
  197. package/dist/cjs/next/api-handler/handlers/manifest.js.map +0 -1
  198. package/dist/cjs/next/api-handler/handlers/merge-translated-data.js +0 -47
  199. package/dist/cjs/next/api-handler/handlers/merge-translated-data.js.map +0 -1
  200. package/dist/cjs/next/api-handler/handlers/revalidate.js +0 -74
  201. package/dist/cjs/next/api-handler/handlers/revalidate.js.map +0 -1
  202. package/dist/cjs/next/api-handler/handlers/translatable-data.js +0 -47
  203. package/dist/cjs/next/api-handler/handlers/translatable-data.js.map +0 -1
  204. package/dist/cjs/next/api-handler/handlers/utils/draft.js.map +0 -1
  205. package/dist/cjs/next/api-handler/handlers/webhook/index.js.map +0 -1
  206. package/dist/cjs/next/api-handler/handlers/webhook/site-published.js.map +0 -1
  207. package/dist/cjs/next/api-handler/handlers/webhook/types.js.map +0 -1
  208. package/dist/esm/next/api-handler/handlers/clear-draft.js +0 -50
  209. package/dist/esm/next/api-handler/handlers/clear-draft.js.map +0 -1
  210. package/dist/esm/next/api-handler/handlers/element-tree.js +0 -27
  211. package/dist/esm/next/api-handler/handlers/element-tree.js.map +0 -1
  212. package/dist/esm/next/api-handler/handlers/fonts.js +0 -13
  213. package/dist/esm/next/api-handler/handlers/fonts.js.map +0 -1
  214. package/dist/esm/next/api-handler/handlers/manifest.js +0 -35
  215. package/dist/esm/next/api-handler/handlers/manifest.js.map +0 -1
  216. package/dist/esm/next/api-handler/handlers/merge-translated-data.js +0 -27
  217. package/dist/esm/next/api-handler/handlers/merge-translated-data.js.map +0 -1
  218. package/dist/esm/next/api-handler/handlers/revalidate.js +0 -40
  219. package/dist/esm/next/api-handler/handlers/revalidate.js.map +0 -1
  220. package/dist/esm/next/api-handler/handlers/translatable-data.js +0 -27
  221. package/dist/esm/next/api-handler/handlers/translatable-data.js.map +0 -1
  222. package/dist/esm/next/api-handler/handlers/utils/draft.js.map +0 -1
  223. package/dist/esm/next/api-handler/handlers/webhook/index.js +0 -41
  224. package/dist/esm/next/api-handler/handlers/webhook/index.js.map +0 -1
  225. package/dist/esm/next/api-handler/handlers/webhook/site-published.js +0 -15
  226. package/dist/esm/next/api-handler/handlers/webhook/site-published.js.map +0 -1
  227. package/dist/esm/next/api-handler/handlers/webhook/types.js.map +0 -1
  228. package/dist/types/next/api-handler/handlers/clear-draft.d.ts +0 -20
  229. package/dist/types/next/api-handler/handlers/clear-draft.d.ts.map +0 -1
  230. package/dist/types/next/api-handler/handlers/element-tree.d.ts +0 -20
  231. package/dist/types/next/api-handler/handlers/element-tree.d.ts.map +0 -1
  232. package/dist/types/next/api-handler/handlers/fonts.d.ts +0 -28
  233. package/dist/types/next/api-handler/handlers/fonts.d.ts.map +0 -1
  234. package/dist/types/next/api-handler/handlers/manifest.d.ts +0 -32
  235. package/dist/types/next/api-handler/handlers/manifest.d.ts.map +0 -1
  236. package/dist/types/next/api-handler/handlers/merge-translated-data.d.ts +0 -20
  237. package/dist/types/next/api-handler/handlers/merge-translated-data.d.ts.map +0 -1
  238. package/dist/types/next/api-handler/handlers/revalidate.d.ts +0 -22
  239. package/dist/types/next/api-handler/handlers/revalidate.d.ts.map +0 -1
  240. package/dist/types/next/api-handler/handlers/translatable-data.d.ts +0 -20
  241. package/dist/types/next/api-handler/handlers/translatable-data.d.ts.map +0 -1
  242. package/dist/types/next/api-handler/handlers/utils/draft.d.ts.map +0 -1
  243. package/dist/types/next/api-handler/handlers/webhook/index.d.ts +0 -19
  244. package/dist/types/next/api-handler/handlers/webhook/index.d.ts.map +0 -1
  245. package/dist/types/next/api-handler/handlers/webhook/site-published.d.ts.map +0 -1
  246. package/dist/types/next/api-handler/handlers/webhook/types.d.ts.map +0 -1
  247. package/dist/types/next/tests/server.makeswift-api-handler.test.d.ts +0 -2
  248. package/dist/types/next/tests/server.makeswift-api-handler.test.d.ts.map +0 -1
  249. /package/dist/cjs/{next/api-handler → api-handler}/handlers/webhook/types.js +0 -0
  250. /package/dist/esm/{next/api-handler → api-handler}/handlers/webhook/types.js +0 -0
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var api_handler_exports = {};
20
+ __export(api_handler_exports, {
21
+ createApiHandler: () => createApiHandler
22
+ });
23
+ module.exports = __toCommonJS(api_handler_exports);
24
+ var import_path_to_regexp = require("path-to-regexp");
25
+ var import_site_version = require("../api/site-version");
26
+ var import_clear_draft = require("./handlers/clear-draft");
27
+ var import_element_tree = require("./handlers/element-tree");
28
+ var import_fonts = require("./handlers/fonts");
29
+ var import_manifest = require("./handlers/manifest");
30
+ var import_merge_translated_data = require("./handlers/merge-translated-data");
31
+ var import_revalidate = require("./handlers/revalidate");
32
+ var import_translatable_data = require("./handlers/translatable-data");
33
+ var import_webhook = require("./handlers/webhook");
34
+ var import_request_response = require("./request-response");
35
+ var import_cors = require("./cors");
36
+ function createApiHandler(apiKey, {
37
+ runtime,
38
+ appOrigin = "https://app.makeswift.com",
39
+ getFonts,
40
+ events,
41
+ client,
42
+ manifest,
43
+ revalidationHandler,
44
+ draftCookieNames
45
+ }) {
46
+ if (typeof apiKey !== "string") {
47
+ throw new Error(
48
+ `The Makeswift API handler must be passed a valid Makeswift site API key. Received "${apiKey}" instead.`
49
+ );
50
+ }
51
+ return async function(req, route) {
52
+ const res = req.method.toUpperCase() !== "OPTIONS" ? await apiRouteHandler(req, route) : new Response(null, { status: 204, headers: [["Content-Length", "0"]] });
53
+ (0, import_cors.applyCorsHeaders)(res.headers, {
54
+ origin: appOrigin,
55
+ allowedHeaders: ["Content-Type", "Authorization"]
56
+ });
57
+ return res;
58
+ };
59
+ async function apiRouteHandler(req, route) {
60
+ const siteVersion = (0, import_site_version.parseSiteVersion)(req.headers.get(import_site_version.API_HANDLER_SITE_VERSION_HEADER));
61
+ const matches = (pattern) => (0, import_path_to_regexp.match)(pattern, { decode: decodeURIComponent })(route);
62
+ if (matches("/clear-draft"))
63
+ return (0, import_clear_draft.clearDraftHandler)(req, { draftCookieNames });
64
+ if (matches("/element-tree"))
65
+ return (0, import_element_tree.elementTreeHandler)(req, { runtime });
66
+ if (matches("/fonts"))
67
+ return (0, import_fonts.fontsHandler)(req, { getFonts });
68
+ if (matches("/manifest"))
69
+ return (0, import_manifest.manifestHandler)(req, { apiKey, manifest });
70
+ if (matches("/merge-translated-data"))
71
+ return (0, import_merge_translated_data.mergeTranslatedDataHandler)(req, { client });
72
+ if (matches("/revalidate")) {
73
+ return (0, import_revalidate.revalidateHandler)(req, { apiKey, revalidatePath: revalidationHandler });
74
+ }
75
+ if (matches("/translatable-data"))
76
+ return (0, import_translatable_data.translatableDataHandler)(req, { client });
77
+ if (matches("/webhook")) {
78
+ return (0, import_webhook.webhookHandler)(req, { apiKey, events, revalidate: revalidationHandler });
79
+ }
80
+ const handleResource = (resource) => {
81
+ return resource !== null ? import_request_response.ApiResponse.json(resource) : import_request_response.ApiResponse.json({ message: "Not Found" }, { status: 404 });
82
+ };
83
+ let m;
84
+ if (m = matches("/swatches/:id")) {
85
+ return client.getSwatch(m.params.id, siteVersion).then(handleResource);
86
+ }
87
+ if (m = matches("/files/:id")) {
88
+ return client.getFile(m.params.id).then(handleResource);
89
+ }
90
+ if (m = matches("/typographies/:id")) {
91
+ return client.getTypography(m.params.id, siteVersion).then(handleResource);
92
+ }
93
+ if (m = matches("/global-elements/:id")) {
94
+ return client.getGlobalElement(m.params.id, siteVersion).then(handleResource);
95
+ }
96
+ if (m = matches(
97
+ "/localized-global-elements/:globalElementId/:locale"
98
+ )) {
99
+ return client.getLocalizedGlobalElement(m.params.globalElementId, m.params.locale, siteVersion).then(handleResource);
100
+ }
101
+ if (m = matches("/page-pathname-slices/:id")) {
102
+ const localeParam = (0, import_request_response.searchParams)(req).get("locale");
103
+ const locale = typeof localeParam === "string" ? localeParam : void 0;
104
+ return client.getPagePathnameSlice(m.params.id, siteVersion, { locale }).then(handleResource);
105
+ }
106
+ if (m = matches("/tables/:id")) {
107
+ return client.getTable(m.params.id).then(handleResource);
108
+ }
109
+ return import_request_response.ApiResponse.json({ message: "Not Found" }, { status: 404 });
110
+ }
111
+ }
112
+ // Annotate the CommonJS export names for ESM import in node:
113
+ 0 && (module.exports = {
114
+ createApiHandler
115
+ });
116
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/api-handler/index.ts"],"sourcesContent":["import { Match, match as matchPattern } from 'path-to-regexp'\n\nimport { APIResource } from '../api'\nimport { API_HANDLER_SITE_VERSION_HEADER, parseSiteVersion } from '../api/site-version'\n\nimport { MakeswiftClient } from '../client'\nimport { ReactRuntime } from '../react'\n\nimport { clearDraftHandler } from './handlers/clear-draft'\nimport { elementTreeHandler } from './handlers/element-tree'\nimport { fontsHandler, type Font, type GetFonts } from './handlers/fonts'\nimport { manifestHandler, type Manifest } from './handlers/manifest'\nimport { mergeTranslatedDataHandler } from './handlers/merge-translated-data'\nimport { revalidateHandler } from './handlers/revalidate'\nimport { translatableDataHandler } from './handlers/translatable-data'\nimport { webhookHandler } from './handlers/webhook'\nimport { type OnPublish } from './handlers/webhook/types'\n\nimport {\n type ApiRequest,\n type ErrorResponseBody,\n ApiResponse,\n searchParams,\n} from './request-response'\n\nimport { applyCorsHeaders } from './cors'\n\nexport type { Manifest, Font }\n\ntype Events = { onPublish: OnPublish }\n\nexport type ApiHandlerUserConfig = {\n runtime: ReactRuntime\n appOrigin?: string\n apiOrigin?: string\n getFonts?: GetFonts\n events?: Events\n}\n\nexport type ApiHandlerInternalConfig = {\n client: MakeswiftClient\n manifest: Partial<Manifest>\n revalidationHandler: (path?: string) => Promise<void>\n draftCookieNames: string[]\n}\n\ntype ApiHandlerConfig = ApiHandlerUserConfig & ApiHandlerInternalConfig\n\ntype ResponseType =\n | Awaited<\n | ReturnType<typeof clearDraftHandler>\n | ReturnType<typeof elementTreeHandler>\n | ReturnType<typeof fontsHandler>\n | ReturnType<typeof manifestHandler>\n | ReturnType<typeof mergeTranslatedDataHandler>\n | ReturnType<typeof revalidateHandler>\n | ReturnType<typeof translatableDataHandler>\n | ReturnType<typeof webhookHandler>\n >\n | ApiResponse<APIResource>\n | ApiResponse<ErrorResponseBody>\n | Response\n\ntype ApiHandler = (req: ApiRequest, route: string) => Promise<ResponseType>\n\nexport function createApiHandler(\n apiKey: string,\n {\n runtime,\n appOrigin = 'https://app.makeswift.com',\n getFonts,\n events,\n client,\n manifest,\n revalidationHandler,\n draftCookieNames,\n }: ApiHandlerConfig,\n): ApiHandler {\n if (typeof apiKey !== 'string') {\n throw new Error(\n 'The Makeswift API handler must be passed a valid Makeswift site API key. ' +\n `Received \"${apiKey}\" instead.`,\n )\n }\n\n return async function (req: ApiRequest, route: string): Promise<ResponseType> {\n const res =\n req.method.toUpperCase() !== 'OPTIONS'\n ? await apiRouteHandler(req, route)\n : new Response(null, { status: 204, headers: [['Content-Length', '0']] })\n\n applyCorsHeaders(res.headers, {\n origin: appOrigin,\n allowedHeaders: ['Content-Type', 'Authorization'],\n })\n\n return res\n }\n\n async function apiRouteHandler(req: ApiRequest, route: string): Promise<ResponseType> {\n const siteVersion = parseSiteVersion(req.headers.get(API_HANDLER_SITE_VERSION_HEADER))\n const matches = <T extends object>(pattern: string): Match<T> =>\n matchPattern<T>(pattern, { decode: decodeURIComponent })(route)\n\n if (matches('/clear-draft')) return clearDraftHandler(req, { draftCookieNames })\n if (matches('/element-tree')) return elementTreeHandler(req, { runtime })\n if (matches('/fonts')) return fontsHandler(req, { getFonts })\n if (matches('/manifest')) return manifestHandler(req, { apiKey, manifest })\n if (matches('/merge-translated-data')) return mergeTranslatedDataHandler(req, { client })\n if (matches('/revalidate')) {\n return revalidateHandler(req, { apiKey, revalidatePath: revalidationHandler })\n }\n\n if (matches('/translatable-data')) return translatableDataHandler(req, { client })\n if (matches('/webhook')) {\n return webhookHandler(req, { apiKey, events, revalidate: revalidationHandler })\n }\n\n const handleResource = <T extends APIResource>(\n resource: T | null,\n ): ApiResponse<APIResource | ErrorResponseBody> => {\n return resource !== null\n ? ApiResponse.json(resource)\n : ApiResponse.json({ message: 'Not Found' }, { status: 404 })\n }\n\n let m\n\n if ((m = matches<{ id: string }>('/swatches/:id'))) {\n return client.getSwatch(m.params.id, siteVersion).then(handleResource)\n }\n\n if ((m = matches<{ id: string }>('/files/:id'))) {\n return client.getFile(m.params.id).then(handleResource)\n }\n\n if ((m = matches<{ id: string }>('/typographies/:id'))) {\n return client.getTypography(m.params.id, siteVersion).then(handleResource)\n }\n\n if ((m = matches<{ id: string }>('/global-elements/:id'))) {\n return client.getGlobalElement(m.params.id, siteVersion).then(handleResource)\n }\n\n if (\n (m = matches<{ globalElementId: string; locale: string }>(\n '/localized-global-elements/:globalElementId/:locale',\n ))\n ) {\n return client\n .getLocalizedGlobalElement(m.params.globalElementId, m.params.locale, siteVersion)\n .then(handleResource)\n }\n\n if ((m = matches<{ id: string }>('/page-pathname-slices/:id'))) {\n const localeParam = searchParams(req).get('locale')\n const locale = typeof localeParam === 'string' ? localeParam : undefined\n\n return client.getPagePathnameSlice(m.params.id, siteVersion, { locale }).then(handleResource)\n }\n\n if ((m = matches<{ id: string }>('/tables/:id'))) {\n return client.getTable(m.params.id).then(handleResource)\n }\n\n return ApiResponse.json({ message: 'Not Found' }, { status: 404 })\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAA6C;AAG7C,0BAAkE;AAKlE,yBAAkC;AAClC,0BAAmC;AACnC,mBAAuD;AACvD,sBAA+C;AAC/C,mCAA2C;AAC3C,wBAAkC;AAClC,+BAAwC;AACxC,qBAA+B;AAG/B,8BAKO;AAEP,kBAAiC;AAwC1B,SAAS,iBACd,QACA;AAAA,EACE;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACY;AACZ,MAAI,OAAO,WAAW,UAAU;AAC9B,UAAM,IAAI;AAAA,MACR,sFACe,MAAM;AAAA,IACvB;AAAA,EACF;AAEA,SAAO,eAAgB,KAAiB,OAAsC;AAC5E,UAAM,MACJ,IAAI,OAAO,YAAY,MAAM,YACzB,MAAM,gBAAgB,KAAK,KAAK,IAChC,IAAI,SAAS,MAAM,EAAE,QAAQ,KAAK,SAAS,CAAC,CAAC,kBAAkB,GAAG,CAAC,EAAE,CAAC;AAE5E,sCAAiB,IAAI,SAAS;AAAA,MAC5B,QAAQ;AAAA,MACR,gBAAgB,CAAC,gBAAgB,eAAe;AAAA,IAClD,CAAC;AAED,WAAO;AAAA,EACT;AAEA,iBAAe,gBAAgB,KAAiB,OAAsC;AACpF,UAAM,kBAAc,sCAAiB,IAAI,QAAQ,IAAI,mDAA+B,CAAC;AACrF,UAAM,UAAU,CAAmB,gBACjC,sBAAAA,OAAgB,SAAS,EAAE,QAAQ,mBAAmB,CAAC,EAAE,KAAK;AAEhE,QAAI,QAAQ,cAAc;AAAG,iBAAO,sCAAkB,KAAK,EAAE,iBAAiB,CAAC;AAC/E,QAAI,QAAQ,eAAe;AAAG,iBAAO,wCAAmB,KAAK,EAAE,QAAQ,CAAC;AACxE,QAAI,QAAQ,QAAQ;AAAG,iBAAO,2BAAa,KAAK,EAAE,SAAS,CAAC;AAC5D,QAAI,QAAQ,WAAW;AAAG,iBAAO,iCAAgB,KAAK,EAAE,QAAQ,SAAS,CAAC;AAC1E,QAAI,QAAQ,wBAAwB;AAAG,iBAAO,yDAA2B,KAAK,EAAE,OAAO,CAAC;AACxF,QAAI,QAAQ,aAAa,GAAG;AAC1B,iBAAO,qCAAkB,KAAK,EAAE,QAAQ,gBAAgB,oBAAoB,CAAC;AAAA,IAC/E;AAEA,QAAI,QAAQ,oBAAoB;AAAG,iBAAO,kDAAwB,KAAK,EAAE,OAAO,CAAC;AACjF,QAAI,QAAQ,UAAU,GAAG;AACvB,iBAAO,+BAAe,KAAK,EAAE,QAAQ,QAAQ,YAAY,oBAAoB,CAAC;AAAA,IAChF;AAEA,UAAM,iBAAiB,CACrB,aACiD;AACjD,aAAO,aAAa,OAChB,oCAAY,KAAK,QAAQ,IACzB,oCAAY,KAAK,EAAE,SAAS,YAAY,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,IAChE;AAEA,QAAI;AAEJ,QAAK,IAAI,QAAwB,eAAe,GAAI;AAClD,aAAO,OAAO,UAAU,EAAE,OAAO,IAAI,WAAW,EAAE,KAAK,cAAc;AAAA,IACvE;AAEA,QAAK,IAAI,QAAwB,YAAY,GAAI;AAC/C,aAAO,OAAO,QAAQ,EAAE,OAAO,EAAE,EAAE,KAAK,cAAc;AAAA,IACxD;AAEA,QAAK,IAAI,QAAwB,mBAAmB,GAAI;AACtD,aAAO,OAAO,cAAc,EAAE,OAAO,IAAI,WAAW,EAAE,KAAK,cAAc;AAAA,IAC3E;AAEA,QAAK,IAAI,QAAwB,sBAAsB,GAAI;AACzD,aAAO,OAAO,iBAAiB,EAAE,OAAO,IAAI,WAAW,EAAE,KAAK,cAAc;AAAA,IAC9E;AAEA,QACG,IAAI;AAAA,MACH;AAAA,IACF,GACA;AACA,aAAO,OACJ,0BAA0B,EAAE,OAAO,iBAAiB,EAAE,OAAO,QAAQ,WAAW,EAChF,KAAK,cAAc;AAAA,IACxB;AAEA,QAAK,IAAI,QAAwB,2BAA2B,GAAI;AAC9D,YAAM,kBAAc,sCAAa,GAAG,EAAE,IAAI,QAAQ;AAClD,YAAM,SAAS,OAAO,gBAAgB,WAAW,cAAc;AAE/D,aAAO,OAAO,qBAAqB,EAAE,OAAO,IAAI,aAAa,EAAE,OAAO,CAAC,EAAE,KAAK,cAAc;AAAA,IAC9F;AAEA,QAAK,IAAI,QAAwB,aAAa,GAAI;AAChD,aAAO,OAAO,SAAS,EAAE,OAAO,EAAE,EAAE,KAAK,cAAc;AAAA,IACzD;AAEA,WAAO,oCAAY,KAAK,EAAE,SAAS,YAAY,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACnE;AACF;","names":["matchPattern"]}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var request_response_exports = {};
20
+ __export(request_response_exports, {
21
+ ApiResponse: () => ApiResponse,
22
+ searchParams: () => searchParams
23
+ });
24
+ module.exports = __toCommonJS(request_response_exports);
25
+ function searchParams(req) {
26
+ return new URL(req.url, "http://localhost").searchParams;
27
+ }
28
+ const ApiResponse = {
29
+ json(body, init) {
30
+ const headers = new Headers(init?.headers);
31
+ headers.set("Content-Type", "application/json");
32
+ return new Response(JSON.stringify(body), {
33
+ ...init,
34
+ headers
35
+ });
36
+ }
37
+ };
38
+ // Annotate the CommonJS export names for ESM import in node:
39
+ 0 && (module.exports = {
40
+ ApiResponse,
41
+ searchParams
42
+ });
43
+ //# sourceMappingURL=request-response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/api-handler/request-response.ts"],"sourcesContent":["export type ApiRequest = Pick<Request, 'method' | 'json' | 'headers' | 'url'>\n\nexport function searchParams(req: ApiRequest): URLSearchParams {\n // provide a placeholder domain to enable parsing of relative URLs\n return new URL(req.url, 'http://localhost').searchParams\n}\n\nexport interface ApiResponse<R extends unknown = unknown> extends Response {\n readonly __responseType?: R // prevent unsafe assignment between instances with incompatible `R`\n}\n\nexport const ApiResponse = {\n json<T>(body: T, init?: ResponseInit): ApiResponse<T> {\n const headers = new Headers(init?.headers)\n headers.set('Content-Type', 'application/json')\n\n return new Response(JSON.stringify(body), {\n ...init,\n headers,\n }) as ApiResponse<T>\n },\n} as const\n\nexport type ErrorResponseBody = { message: string }\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,SAAS,aAAa,KAAkC;AAE7D,SAAO,IAAI,IAAI,IAAI,KAAK,kBAAkB,EAAE;AAC9C;AAMO,MAAM,cAAc;AAAA,EACzB,KAAQ,MAAS,MAAqC;AACpD,UAAM,UAAU,IAAI,QAAQ,MAAM,OAAO;AACzC,YAAQ,IAAI,gBAAgB,kBAAkB;AAE9C,WAAO,IAAI,SAAS,KAAK,UAAU,IAAI,GAAG;AAAA,MACxC,GAAG;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AACF;","names":[]}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var app_router_exports = {};
20
+ __export(app_router_exports, {
21
+ argsPattern: () => argsPattern,
22
+ config: () => config
23
+ });
24
+ module.exports = __toCommonJS(app_router_exports);
25
+ var import_ts_pattern = require("ts-pattern");
26
+ var import_cache = require("next/cache");
27
+ var import_cache2 = require("../../cache");
28
+ var import_redirect_draft = require("../handlers/redirect-draft");
29
+ var import_draft = require("../draft");
30
+ var import_base = require("./base");
31
+ const argsPattern = [import_ts_pattern.P.instanceOf(Request), import_ts_pattern.P.any];
32
+ async function config({
33
+ req,
34
+ context,
35
+ apiKey
36
+ }) {
37
+ return {
38
+ req,
39
+ route: (0, import_base.validateApiRoute)(await context.params),
40
+ manifest: {
41
+ draftMode: true
42
+ },
43
+ draftCookieNames: [import_draft.PRERENDER_BYPASS_COOKIE, import_draft.MAKESWIFT_DRAFT_DATA_COOKIE],
44
+ sendResponse: async (res) => res,
45
+ revalidationHandler: async (path) => {
46
+ if (path != null) {
47
+ (0, import_cache.revalidatePath)(path);
48
+ } else {
49
+ (0, import_cache.revalidateTag)(import_cache2.MAKESWIFT_CACHE_TAG);
50
+ }
51
+ },
52
+ customRoutes: async (route) => {
53
+ if (route === "/draft") {
54
+ return { res: await (0, import_redirect_draft.redirectDraftHandler)(req, context, { apiKey }) };
55
+ }
56
+ return null;
57
+ }
58
+ };
59
+ }
60
+ // Annotate the CommonJS export names for ESM import in node:
61
+ 0 && (module.exports = {
62
+ argsPattern,
63
+ config
64
+ });
65
+ //# sourceMappingURL=app-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/next/api-handler/config/app-router.ts"],"sourcesContent":["import { P } from 'ts-pattern'\nimport { revalidatePath, revalidateTag } from 'next/cache'\nimport { NextRequest } from 'next/server'\n\nimport { MAKESWIFT_CACHE_TAG } from '../../cache'\nimport { type ApiResponse } from '../../../api-handler/request-response'\n\nimport { redirectDraftHandler } from '../handlers/redirect-draft'\nimport { MAKESWIFT_DRAFT_DATA_COOKIE, PRERENDER_BYPASS_COOKIE } from '../draft'\n\nimport { validateApiRoute, type ApiHandlerConfig } from './base'\n\ntype Context = { params: { [key: string]: string | string[] } }\n\nexport type ApiHandlerArgs = [NextRequest, Context]\nexport const argsPattern = [P.instanceOf(Request), P.any] as const\n\nexport async function config({\n req,\n context,\n apiKey,\n}: {\n req: NextRequest\n context: Context\n apiKey: string\n}): Promise<ApiHandlerConfig> {\n return {\n req,\n route: validateApiRoute(await context.params),\n manifest: {\n draftMode: true,\n },\n draftCookieNames: [PRERENDER_BYPASS_COOKIE, MAKESWIFT_DRAFT_DATA_COOKIE],\n sendResponse: async (res: ApiResponse): Promise<Response | void> => res,\n revalidationHandler: async (path?: string): Promise<void> => {\n if (path != null) {\n revalidatePath(path)\n } else {\n revalidateTag(MAKESWIFT_CACHE_TAG)\n }\n },\n customRoutes: async (route: string) => {\n if (route === '/draft') {\n return { res: await redirectDraftHandler(req, context, { apiKey }) }\n }\n\n return null\n },\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAAkB;AAClB,mBAA8C;AAG9C,IAAAA,gBAAoC;AAGpC,4BAAqC;AACrC,mBAAqE;AAErE,kBAAwD;AAKjD,MAAM,cAAc,CAAC,oBAAE,WAAW,OAAO,GAAG,oBAAE,GAAG;AAExD,eAAsB,OAAO;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AACF,GAI8B;AAC5B,SAAO;AAAA,IACL;AAAA,IACA,WAAO,8BAAiB,MAAM,QAAQ,MAAM;AAAA,IAC5C,UAAU;AAAA,MACR,WAAW;AAAA,IACb;AAAA,IACA,kBAAkB,CAAC,sCAAyB,wCAA2B;AAAA,IACvE,cAAc,OAAO,QAA+C;AAAA,IACpE,qBAAqB,OAAO,SAAiC;AAC3D,UAAI,QAAQ,MAAM;AAChB,yCAAe,IAAI;AAAA,MACrB,OAAO;AACL,wCAAc,iCAAmB;AAAA,MACnC;AAAA,IACF;AAAA,IACA,cAAc,OAAO,UAAkB;AACrC,UAAI,UAAU,UAAU;AACtB,eAAO,EAAE,KAAK,UAAM,4CAAqB,KAAK,SAAS,EAAE,OAAO,CAAC,EAAE;AAAA,MACrE;AAEA,aAAO;AAAA,IACT;AAAA,EACF;AACF;","names":["import_cache"]}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var base_exports = {};
20
+ __export(base_exports, {
21
+ validateApiRoute: () => validateApiRoute
22
+ });
23
+ module.exports = __toCommonJS(base_exports);
24
+ function validateApiRoute(params) {
25
+ const { makeswift } = params;
26
+ if (!Array.isArray(makeswift)) {
27
+ throw new Error(
28
+ `The Makeswift Next.js API handler must be used in a dynamic catch-all route named \`[...makeswift]\`.
29
+ Received "${makeswift}" for the \`makeswift\` param instead.
30
+ Read more about dynamic catch-all routes here: https://nextjs.org/docs/routing/dynamic-routes#catch-all-routes`
31
+ );
32
+ }
33
+ return "/" + makeswift.join("/");
34
+ }
35
+ // Annotate the CommonJS export names for ESM import in node:
36
+ 0 && (module.exports = {
37
+ validateApiRoute
38
+ });
39
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/next/api-handler/config/base.ts"],"sourcesContent":["import { type ApiHandlerInternalConfig } from '../../../api-handler'\nimport { type ApiRequest, type ApiResponse } from '../../../api-handler/request-response'\n\nexport type ApiHandlerConfig = Omit<ApiHandlerInternalConfig, 'client' | 'revalidationHandler'> & {\n req: ApiRequest\n route: string\n sendResponse: (res: ApiResponse) => Promise<Response | void>\n revalidationHandler: (path?: string) => Promise<void>\n customRoutes: (route: string) => Promise<{ res: Response | void } | null>\n}\n\nexport function validateApiRoute(params: Partial<{ [key: string]: string | string[] }>): string {\n const { makeswift } = params\n\n if (!Array.isArray(makeswift)) {\n throw new Error(\n 'The Makeswift Next.js API handler must be used in a dynamic catch-all route named `[...makeswift]`.\\n' +\n `Received \"${makeswift}\" for the \\`makeswift\\` param instead.\\n` +\n 'Read more about dynamic catch-all routes here: https://nextjs.org/docs/routing/dynamic-routes#catch-all-routes',\n )\n }\n\n return '/' + makeswift.join('/')\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAWO,SAAS,iBAAiB,QAA+D;AAC9F,QAAM,EAAE,UAAU,IAAI;AAEtB,MAAI,CAAC,MAAM,QAAQ,SAAS,GAAG;AAC7B,UAAM,IAAI;AAAA,MACR;AAAA,YACe,SAAS;AAAA;AAAA,IAE1B;AAAA,EACF;AAEA,SAAO,MAAM,UAAU,KAAK,GAAG;AACjC;","names":[]}
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var pages_router_exports = {};
20
+ __export(pages_router_exports, {
21
+ argsPattern: () => argsPattern,
22
+ config: () => config
23
+ });
24
+ module.exports = __toCommonJS(pages_router_exports);
25
+ var import_ts_pattern = require("ts-pattern");
26
+ var import_redirect_preview = require("../handlers/redirect-preview");
27
+ var import_draft = require("../draft");
28
+ var import_base = require("./base");
29
+ const argsPattern = [import_ts_pattern.P.any, import_ts_pattern.P.any];
30
+ async function config({
31
+ req,
32
+ res,
33
+ apiKey
34
+ }) {
35
+ return {
36
+ req: {
37
+ headers: requestHeaders(req.headers),
38
+ method: req.method ?? "GET",
39
+ url: req.url ?? "",
40
+ json() {
41
+ return req.body;
42
+ }
43
+ },
44
+ route: (0, import_base.validateApiRoute)(await apiRequestParams(req)),
45
+ manifest: {
46
+ previewMode: true
47
+ },
48
+ draftCookieNames: [import_draft.PRERENDER_BYPASS_COOKIE, import_draft.PREVIEW_DATA_COOKIE],
49
+ sendResponse: async (apiResponse) => {
50
+ const headers = responseHeaders(apiResponse.headers);
51
+ Object.entries(headers).forEach(([key, value]) => {
52
+ res.setHeader(key, value);
53
+ });
54
+ res.status(apiResponse.status);
55
+ if (apiResponse.body) {
56
+ await pipeTo(apiResponse.body, res);
57
+ }
58
+ res.end();
59
+ },
60
+ revalidationHandler: async (path) => {
61
+ if (path != null) {
62
+ res.revalidate(path);
63
+ } else {
64
+ }
65
+ },
66
+ customRoutes: async (route) => {
67
+ if (route === "/preview") {
68
+ return { res: await (0, import_redirect_preview.redirectPreviewHandler)(req, res, { apiKey }) };
69
+ }
70
+ return null;
71
+ }
72
+ };
73
+ }
74
+ function apiRequestParams(request) {
75
+ return Promise.resolve(request.query);
76
+ }
77
+ function requestHeaders(headers) {
78
+ const result = new Headers();
79
+ for (const [key, value] of Object.entries(headers)) {
80
+ if (value != null) {
81
+ if (Array.isArray(value)) {
82
+ value.forEach((v) => result.append(key, v));
83
+ } else {
84
+ result.append(key, value);
85
+ }
86
+ }
87
+ }
88
+ return result;
89
+ }
90
+ function responseHeaders(headers) {
91
+ return [...headers.entries()].reduce((acc, [key, value]) => {
92
+ if (key in acc) {
93
+ const existingValue = acc[key];
94
+ if (Array.isArray(existingValue)) {
95
+ existingValue.push(value);
96
+ } else {
97
+ acc[key] = [existingValue, value];
98
+ }
99
+ } else {
100
+ acc[key] = value;
101
+ }
102
+ return acc;
103
+ }, {});
104
+ }
105
+ async function pipeTo(stream, res) {
106
+ try {
107
+ const reader = stream.getReader();
108
+ while (true) {
109
+ const { done, value } = await reader.read();
110
+ if (done)
111
+ break;
112
+ res.write(value);
113
+ }
114
+ } catch (error) {
115
+ res.destroy(error instanceof Error ? error : new Error(`${error}`));
116
+ }
117
+ }
118
+ // Annotate the CommonJS export names for ESM import in node:
119
+ 0 && (module.exports = {
120
+ argsPattern,
121
+ config
122
+ });
123
+ //# sourceMappingURL=pages-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/next/api-handler/config/pages-router.ts"],"sourcesContent":["import { P } from 'ts-pattern'\nimport { NextApiRequest, NextApiResponse } from 'next'\n\nimport { type ApiResponse } from '../../../api-handler/request-response'\n\nimport { redirectPreviewHandler } from '../handlers/redirect-preview'\nimport { PRERENDER_BYPASS_COOKIE, PREVIEW_DATA_COOKIE } from '../draft'\n\nimport { validateApiRoute, type ApiHandlerConfig } from './base'\n\nexport type ApiHandlerArgs = [NextApiRequest, NextApiResponse]\nexport const argsPattern = [P.any, P.any] as const\n\nexport async function config({\n req,\n res,\n apiKey,\n}: {\n req: NextApiRequest\n res: NextApiResponse\n apiKey: string\n}): Promise<ApiHandlerConfig> {\n return {\n req: {\n headers: requestHeaders(req.headers),\n method: req.method ?? 'GET',\n url: req.url ?? '',\n json() {\n return req.body\n },\n },\n route: validateApiRoute(await apiRequestParams(req)),\n manifest: {\n previewMode: true,\n },\n draftCookieNames: [PRERENDER_BYPASS_COOKIE, PREVIEW_DATA_COOKIE],\n sendResponse: async (apiResponse: ApiResponse): Promise<Response | void> => {\n const headers = responseHeaders(apiResponse.headers)\n Object.entries(headers).forEach(([key, value]) => {\n res.setHeader(key, value)\n })\n\n res.status(apiResponse.status)\n\n if (apiResponse.body) {\n await pipeTo(apiResponse.body, res)\n }\n\n res.end()\n },\n revalidationHandler: async (path?: string): Promise<void> => {\n if (path != null) {\n res.revalidate(path)\n } else {\n // No-op, Pages Router does not support tag-based revalidation\n }\n },\n customRoutes: async (route: string) => {\n if (route === '/preview') {\n return { res: await redirectPreviewHandler(req, res, { apiKey }) }\n }\n\n return null\n },\n }\n}\n\nfunction apiRequestParams(request: NextApiRequest): Promise<NextApiRequest['query']> {\n // `NextApiRequest.query` prop became async in Next.js 15, but it's not reflected in the type definition;\n // force-casting it to a `Promise` manually\n return Promise.resolve(request.query)\n}\n\nfunction requestHeaders(headers: NextApiRequest['headers']): Headers {\n const result = new Headers()\n for (const [key, value] of Object.entries(headers)) {\n if (value != null) {\n if (Array.isArray(value)) {\n value.forEach(v => result.append(key, v))\n } else {\n result.append(key, value)\n }\n }\n }\n\n return result\n}\n\nfunction responseHeaders(headers: Headers): Record<string, string | string[]> {\n return [...headers.entries()].reduce<Record<string, string | string[]>>((acc, [key, value]) => {\n if (key in acc) {\n const existingValue = acc[key]\n if (Array.isArray(existingValue)) {\n existingValue.push(value)\n } else {\n acc[key] = [existingValue, value]\n }\n } else {\n acc[key] = value\n }\n return acc\n }, {})\n}\n\nasync function pipeTo(stream: ReadableStream<Uint8Array>, res: NextApiResponse): Promise<void> {\n try {\n const reader = stream.getReader()\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n res.write(value)\n }\n } catch (error) {\n res.destroy(error instanceof Error ? error : new Error(`${error}`))\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAAkB;AAKlB,8BAAuC;AACvC,mBAA6D;AAE7D,kBAAwD;AAGjD,MAAM,cAAc,CAAC,oBAAE,KAAK,oBAAE,GAAG;AAExC,eAAsB,OAAO;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AACF,GAI8B;AAC5B,SAAO;AAAA,IACL,KAAK;AAAA,MACH,SAAS,eAAe,IAAI,OAAO;AAAA,MACnC,QAAQ,IAAI,UAAU;AAAA,MACtB,KAAK,IAAI,OAAO;AAAA,MAChB,OAAO;AACL,eAAO,IAAI;AAAA,MACb;AAAA,IACF;AAAA,IACA,WAAO,8BAAiB,MAAM,iBAAiB,GAAG,CAAC;AAAA,IACnD,UAAU;AAAA,MACR,aAAa;AAAA,IACf;AAAA,IACA,kBAAkB,CAAC,sCAAyB,gCAAmB;AAAA,IAC/D,cAAc,OAAO,gBAAuD;AAC1E,YAAM,UAAU,gBAAgB,YAAY,OAAO;AACnD,aAAO,QAAQ,OAAO,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAChD,YAAI,UAAU,KAAK,KAAK;AAAA,MAC1B,CAAC;AAED,UAAI,OAAO,YAAY,MAAM;AAE7B,UAAI,YAAY,MAAM;AACpB,cAAM,OAAO,YAAY,MAAM,GAAG;AAAA,MACpC;AAEA,UAAI,IAAI;AAAA,IACV;AAAA,IACA,qBAAqB,OAAO,SAAiC;AAC3D,UAAI,QAAQ,MAAM;AAChB,YAAI,WAAW,IAAI;AAAA,MACrB,OAAO;AAAA,MAEP;AAAA,IACF;AAAA,IACA,cAAc,OAAO,UAAkB;AACrC,UAAI,UAAU,YAAY;AACxB,eAAO,EAAE,KAAK,UAAM,gDAAuB,KAAK,KAAK,EAAE,OAAO,CAAC,EAAE;AAAA,MACnE;AAEA,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEA,SAAS,iBAAiB,SAA2D;AAGnF,SAAO,QAAQ,QAAQ,QAAQ,KAAK;AACtC;AAEA,SAAS,eAAe,SAA6C;AACnE,QAAM,SAAS,IAAI,QAAQ;AAC3B,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,OAAO,GAAG;AAClD,QAAI,SAAS,MAAM;AACjB,UAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,cAAM,QAAQ,OAAK,OAAO,OAAO,KAAK,CAAC,CAAC;AAAA,MAC1C,OAAO;AACL,eAAO,OAAO,KAAK,KAAK;AAAA,MAC1B;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,gBAAgB,SAAqD;AAC5E,SAAO,CAAC,GAAG,QAAQ,QAAQ,CAAC,EAAE,OAA0C,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM;AAC7F,QAAI,OAAO,KAAK;AACd,YAAM,gBAAgB,IAAI,GAAG;AAC7B,UAAI,MAAM,QAAQ,aAAa,GAAG;AAChC,sBAAc,KAAK,KAAK;AAAA,MAC1B,OAAO;AACL,YAAI,GAAG,IAAI,CAAC,eAAe,KAAK;AAAA,MAClC;AAAA,IACF,OAAO;AACL,UAAI,GAAG,IAAI;AAAA,IACb;AACA,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AACP;AAEA,eAAe,OAAO,QAAoC,KAAqC;AAC7F,MAAI;AACF,UAAM,SAAS,OAAO,UAAU;AAChC,WAAO,MAAM;AACX,YAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,UAAI;AAAM;AACV,UAAI,MAAM,KAAK;AAAA,IACjB;AAAA,EACF,SAAS,OAAO;AACd,QAAI,QAAQ,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,GAAG,KAAK,EAAE,CAAC;AAAA,EACpE;AACF;","names":[]}
@@ -21,33 +21,21 @@ __export(draft_exports, {
21
21
  MAKESWIFT_DRAFT_DATA_COOKIE: () => MAKESWIFT_DRAFT_DATA_COOKIE,
22
22
  PRERENDER_BYPASS_COOKIE: () => PRERENDER_BYPASS_COOKIE,
23
23
  PREVIEW_DATA_COOKIE: () => PREVIEW_DATA_COOKIE,
24
- SET_COOKIE_HEADER: () => SET_COOKIE_HEADER,
25
- SearchParams: () => SearchParams,
26
- cookieSettingOptions: () => cookieSettingOptions
24
+ SearchParams: () => SearchParams
27
25
  });
28
26
  module.exports = __toCommonJS(draft_exports);
29
27
  const PRERENDER_BYPASS_COOKIE = "__prerender_bypass";
30
28
  const PREVIEW_DATA_COOKIE = "__next_preview_data";
31
29
  const MAKESWIFT_DRAFT_DATA_COOKIE = "x-makeswift-draft-data";
32
- const SET_COOKIE_HEADER = "set-cookie";
33
30
  const SearchParams = {
34
31
  DraftMode: "x-makeswift-draft-mode",
35
32
  PreviewMode: "x-makeswift-preview-mode"
36
33
  };
37
- const cookieSettingOptions = {
38
- path: "/",
39
- sameSite: "none",
40
- secure: true,
41
- httpOnly: true,
42
- partitioned: true
43
- };
44
34
  // Annotate the CommonJS export names for ESM import in node:
45
35
  0 && (module.exports = {
46
36
  MAKESWIFT_DRAFT_DATA_COOKIE,
47
37
  PRERENDER_BYPASS_COOKIE,
48
38
  PREVIEW_DATA_COOKIE,
49
- SET_COOKIE_HEADER,
50
- SearchParams,
51
- cookieSettingOptions
39
+ SearchParams
52
40
  });
53
41
  //# sourceMappingURL=draft.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/next/api-handler/draft.ts"],"sourcesContent":["export const PRERENDER_BYPASS_COOKIE = '__prerender_bypass'\nexport const PREVIEW_DATA_COOKIE = '__next_preview_data'\n\nexport const MAKESWIFT_DRAFT_DATA_COOKIE = 'x-makeswift-draft-data'\n\nexport const SearchParams = {\n DraftMode: 'x-makeswift-draft-mode',\n PreviewMode: 'x-makeswift-preview-mode',\n} as const\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,MAAM,0BAA0B;AAChC,MAAM,sBAAsB;AAE5B,MAAM,8BAA8B;AAEpC,MAAM,eAAe;AAAA,EAC1B,WAAW;AAAA,EACX,aAAa;AACf;","names":[]}
@@ -18,26 +18,21 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var redirect_draft_exports = {};
20
20
  __export(redirect_draft_exports, {
21
- default: () => redirectDraftHandler,
22
- originalRequestProtocol: () => originalRequestProtocol
21
+ originalRequestProtocol: () => originalRequestProtocol,
22
+ redirectDraftHandler: () => redirectDraftHandler
23
23
  });
24
24
  module.exports = __toCommonJS(redirect_draft_exports);
25
25
  var import_server = require("next/server");
26
- var import_ts_pattern = require("ts-pattern");
27
26
  var import_headers = require("next/headers");
28
27
  var import_cookie = require("cookie");
29
28
  var import_site_version = require("../../../api/site-version");
30
- var import_draft = require("./utils/draft");
31
- const routeHandlerPattern = [import_ts_pattern.P.instanceOf(Request), import_ts_pattern.P.any, import_ts_pattern.P.any];
32
- const apiRoutePattern = [import_ts_pattern.P.any, import_ts_pattern.P.any, import_ts_pattern.P.any];
33
- async function redirectDraftHandler(...args) {
34
- return (0, import_ts_pattern.match)(args).with(routeHandlerPattern, (args2) => redirectDraftRouteHandler(...args2)).with(apiRoutePattern, (args2) => redirectDraftApiRouteHandler(...args2)).exhaustive();
35
- }
29
+ var import_cookies = require("../../../api-handler/cookies");
30
+ var import_draft = require("../draft");
36
31
  function originalRequestProtocol(request) {
37
32
  const forwardedProto = request.headers.get("x-forwarded-proto");
38
33
  return forwardedProto != null ? forwardedProto.split(",")[0].trim() : null;
39
34
  }
40
- async function redirectDraftRouteHandler(request, _context, { apiKey }) {
35
+ async function redirectDraftHandler(request, _context, { apiKey }) {
41
36
  const secret = request.nextUrl.searchParams.get(import_draft.SearchParams.DraftMode);
42
37
  if (secret == null) {
43
38
  return new import_server.NextResponse("Unauthorized to enable draft mode: no secret provided", {
@@ -70,17 +65,13 @@ async function redirectDraftRouteHandler(request, _context, { apiKey }) {
70
65
  redirectUrl.searchParams.delete(import_draft.SearchParams.DraftMode);
71
66
  const headers = new Headers();
72
67
  draftCookies.forEach(({ name, value }) => {
73
- headers.append(import_draft.SET_COOKIE_HEADER, (0, import_cookie.serialize)(name, value, { ...import_draft.cookieSettingOptions }));
68
+ headers.append(import_cookies.SET_COOKIE_HEADER, (0, import_cookie.serialize)(name, value, { ...import_cookies.cookieSettingOptions }));
74
69
  });
75
70
  return import_server.NextResponse.redirect(redirectUrl, { headers });
76
71
  }
77
- async function redirectDraftApiRouteHandler(_req, res, {}) {
78
- const message = "Cannot request draft endpoint from an API handler registered in `pages`. Move your Makeswift API handler to the `app` directory";
79
- console.error(message);
80
- return res.status(500).send(message);
81
- }
82
72
  // Annotate the CommonJS export names for ESM import in node:
83
73
  0 && (module.exports = {
84
- originalRequestProtocol
74
+ originalRequestProtocol,
75
+ redirectDraftHandler
85
76
  });
86
77
  //# sourceMappingURL=redirect-draft.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/next/api-handler/handlers/redirect-draft.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'\n\nimport { serialize as serializeCookie } from 'cookie'\n\nimport { MakeswiftSiteVersion } from '../../../api/site-version'\nimport {\n cookieSettingOptions,\n MAKESWIFT_DRAFT_DATA_COOKIE,\n PRERENDER_BYPASS_COOKIE,\n SearchParams,\n SET_COOKIE_HEADER,\n} from './utils/draft'\n\ntype Context = { params: { [key: string]: string | string[] } }\n\ntype RedirectDraftError = string\n\ntype Response = unknown\n\nexport type RedirectDraftResponse = RedirectDraftError | Response\n\ntype RedirectDraftHandlerArgs =\n | [request: NextRequest, context: Context, params: { apiKey: string }]\n | [req: NextApiRequest, res: NextApiResponse<RedirectDraftResponse>, 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 redirectDraftHandler(\n request: NextRequest,\n context: Context,\n { apiKey }: { apiKey: string },\n): Promise<NextResponse<RedirectDraftResponse>>\nexport default async function redirectDraftHandler(\n req: NextApiRequest,\n res: NextApiResponse<RedirectDraftResponse>,\n { apiKey }: { apiKey: string },\n): Promise<void>\nexport default async function redirectDraftHandler(\n ...args: RedirectDraftHandlerArgs\n): Promise<NextResponse<RedirectDraftResponse> | void> {\n return match(args)\n .with(routeHandlerPattern, args => redirectDraftRouteHandler(...args))\n .with(apiRoutePattern, args => redirectDraftApiRouteHandler(...args))\n .exhaustive()\n}\n\nexport function originalRequestProtocol(request: NextRequest): string | null {\n // The `x-forwarded-proto` header is not formally standardized, but many proxies\n // *append* the protocol used for the request to the existing value. As a result,\n // if the request passes through multiple proxies, the header may contain a\n // comma-separated list of protocols: https://code.djangoproject.com/ticket/33569\n const forwardedProto = request.headers.get('x-forwarded-proto')\n return forwardedProto != null ? forwardedProto.split(',')[0].trim() : null\n}\n\nasync function redirectDraftRouteHandler(\n request: NextRequest,\n _context: Context,\n { apiKey }: { apiKey: string },\n): Promise<NextResponse<RedirectDraftResponse>> {\n const secret = request.nextUrl.searchParams.get(SearchParams.DraftMode)\n\n if (secret == null) {\n return new NextResponse('Unauthorized to enable draft mode: no secret provided', {\n status: 401,\n })\n }\n if (secret !== apiKey) {\n return new NextResponse('Unauthorized to enable draft mode: incorrect secret', { status: 401 })\n }\n\n const draft = await draftMode()\n const cookieStore = await cookies()\n\n draft.enable()\n\n const prerenderBypassCookie = cookieStore.get(PRERENDER_BYPASS_COOKIE)\n\n if (prerenderBypassCookie?.value == null) {\n return new NextResponse('Could not retrieve draft mode bypass cookie', { status: 500 })\n }\n\n const draftCookies: { name: string; value: string }[] = [\n prerenderBypassCookie,\n {\n name: MAKESWIFT_DRAFT_DATA_COOKIE,\n // Eventually, we can make this value dynamic using the request\n value: JSON.stringify({ makeswift: true, siteVersion: MakeswiftSiteVersion.Working }),\n },\n ]\n\n const redirectProtocol =\n originalRequestProtocol(request) ?? request.nextUrl.protocol.replace(':', '')\n\n const redirectHost =\n request.headers.get('x-forwarded-host') ?? request.headers.get('host') ?? request.nextUrl.host\n\n const redirectUrl = new URL(\n `${redirectProtocol}://${redirectHost}${request.nextUrl.pathname}${request.nextUrl.search}`,\n )\n\n redirectUrl.searchParams.delete(SearchParams.DraftMode)\n\n const headers = new Headers()\n draftCookies.forEach(({ name, value }) => {\n headers.append(SET_COOKIE_HEADER, serializeCookie(name, value, { ...cookieSettingOptions }))\n })\n\n return NextResponse.redirect(redirectUrl, { headers })\n}\n\nasync function redirectDraftApiRouteHandler(\n _req: NextApiRequest,\n res: NextApiResponse<RedirectDraftResponse>,\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":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,oBAA0C;AAC1C,wBAAyB;AACzB,qBAAmC;AAEnC,oBAA6C;AAE7C,0BAAqC;AACrC,mBAMO;AAcP,MAAM,sBAAsB,CAAC,oBAAE,WAAW,OAAO,GAAG,oBAAE,KAAK,oBAAE,GAAG;AAChE,MAAM,kBAAkB,CAAC,oBAAE,KAAK,oBAAE,KAAK,oBAAE,GAAG;AAY5C,eAAO,wBACF,MACkD;AACrD,aAAO,yBAAM,IAAI,EACd,KAAK,qBAAqB,CAAAA,UAAQ,0BAA0B,GAAGA,KAAI,CAAC,EACpE,KAAK,iBAAiB,CAAAA,UAAQ,6BAA6B,GAAGA,KAAI,CAAC,EACnE,WAAW;AAChB;AAEO,SAAS,wBAAwB,SAAqC;AAK3E,QAAM,iBAAiB,QAAQ,QAAQ,IAAI,mBAAmB;AAC9D,SAAO,kBAAkB,OAAO,eAAe,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK,IAAI;AACxE;AAEA,eAAe,0BACb,SACA,UACA,EAAE,OAAO,GACqC;AAC9C,QAAM,SAAS,QAAQ,QAAQ,aAAa,IAAI,0BAAa,SAAS;AAEtE,MAAI,UAAU,MAAM;AAClB,WAAO,IAAI,2BAAa,yDAAyD;AAAA,MAC/E,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AACA,MAAI,WAAW,QAAQ;AACrB,WAAO,IAAI,2BAAa,uDAAuD,EAAE,QAAQ,IAAI,CAAC;AAAA,EAChG;AAEA,QAAM,QAAQ,UAAM,0BAAU;AAC9B,QAAM,cAAc,UAAM,wBAAQ;AAElC,QAAM,OAAO;AAEb,QAAM,wBAAwB,YAAY,IAAI,oCAAuB;AAErE,MAAI,uBAAuB,SAAS,MAAM;AACxC,WAAO,IAAI,2BAAa,+CAA+C,EAAE,QAAQ,IAAI,CAAC;AAAA,EACxF;AAEA,QAAM,eAAkD;AAAA,IACtD;AAAA,IACA;AAAA,MACE,MAAM;AAAA;AAAA,MAEN,OAAO,KAAK,UAAU,EAAE,WAAW,MAAM,aAAa,yCAAqB,QAAQ,CAAC;AAAA,IACtF;AAAA,EACF;AAEA,QAAM,mBACJ,wBAAwB,OAAO,KAAK,QAAQ,QAAQ,SAAS,QAAQ,KAAK,EAAE;AAE9E,QAAM,eACJ,QAAQ,QAAQ,IAAI,kBAAkB,KAAK,QAAQ,QAAQ,IAAI,MAAM,KAAK,QAAQ,QAAQ;AAE5F,QAAM,cAAc,IAAI;AAAA,IACtB,GAAG,gBAAgB,MAAM,YAAY,GAAG,QAAQ,QAAQ,QAAQ,GAAG,QAAQ,QAAQ,MAAM;AAAA,EAC3F;AAEA,cAAY,aAAa,OAAO,0BAAa,SAAS;AAEtD,QAAM,UAAU,IAAI,QAAQ;AAC5B,eAAa,QAAQ,CAAC,EAAE,MAAM,MAAM,MAAM;AACxC,YAAQ,OAAO,oCAAmB,cAAAC,WAAgB,MAAM,OAAO,EAAE,GAAG,kCAAqB,CAAC,CAAC;AAAA,EAC7F,CAAC;AAED,SAAO,2BAAa,SAAS,aAAa,EAAE,QAAQ,CAAC;AACvD;AAEA,eAAe,6BACb,MACA,KACA,CAAC,GACc;AACf,QAAM,UACJ;AACF,UAAQ,MAAM,OAAO;AACrB,SAAO,IAAI,OAAO,GAAG,EAAE,KAAK,OAAO;AACrC;","names":["args","serializeCookie"]}
1
+ {"version":3,"sources":["../../../../../src/next/api-handler/handlers/redirect-draft.ts"],"sourcesContent":["import { NextRequest, NextResponse } from 'next/server'\nimport { cookies, draftMode } from 'next/headers'\n\nimport { serialize as serializeCookie } from 'cookie'\n\nimport { MakeswiftSiteVersion } from '../../../api/site-version'\nimport { cookieSettingOptions, SET_COOKIE_HEADER } from '../../../api-handler/cookies'\n\nimport { MAKESWIFT_DRAFT_DATA_COOKIE, PRERENDER_BYPASS_COOKIE, SearchParams } from '../draft'\n\nexport function originalRequestProtocol(request: NextRequest): string | null {\n // The `x-forwarded-proto` header is not formally standardized, but many proxies\n // *append* the protocol used for the request to the existing value. As a result,\n // if the request passes through multiple proxies, the header may contain a\n // comma-separated list of protocols: https://code.djangoproject.com/ticket/33569\n const forwardedProto = request.headers.get('x-forwarded-proto')\n return forwardedProto != null ? forwardedProto.split(',')[0].trim() : null\n}\n\nexport async function redirectDraftHandler(\n request: NextRequest,\n _context: any,\n { apiKey }: { apiKey: string },\n): Promise<NextResponse> {\n const secret = request.nextUrl.searchParams.get(SearchParams.DraftMode)\n\n if (secret == null) {\n return new NextResponse('Unauthorized to enable draft mode: no secret provided', {\n status: 401,\n })\n }\n\n if (secret !== apiKey) {\n return new NextResponse('Unauthorized to enable draft mode: incorrect secret', { status: 401 })\n }\n\n const draft = await draftMode()\n const cookieStore = await cookies()\n\n draft.enable()\n\n const prerenderBypassCookie = cookieStore.get(PRERENDER_BYPASS_COOKIE)\n\n if (prerenderBypassCookie?.value == null) {\n return new NextResponse('Could not retrieve draft mode bypass cookie', { status: 500 })\n }\n\n const draftCookies: { name: string; value: string }[] = [\n prerenderBypassCookie,\n {\n name: MAKESWIFT_DRAFT_DATA_COOKIE,\n // Eventually, we can make this value dynamic using the request\n value: JSON.stringify({ makeswift: true, siteVersion: MakeswiftSiteVersion.Working }),\n },\n ]\n\n const redirectProtocol =\n originalRequestProtocol(request) ?? request.nextUrl.protocol.replace(':', '')\n\n const redirectHost =\n request.headers.get('x-forwarded-host') ?? request.headers.get('host') ?? request.nextUrl.host\n\n const redirectUrl = new URL(\n `${redirectProtocol}://${redirectHost}${request.nextUrl.pathname}${request.nextUrl.search}`,\n )\n\n redirectUrl.searchParams.delete(SearchParams.DraftMode)\n\n const headers = new Headers()\n draftCookies.forEach(({ name, value }) => {\n headers.append(SET_COOKIE_HEADER, serializeCookie(name, value, { ...cookieSettingOptions }))\n })\n\n return NextResponse.redirect(redirectUrl, { headers })\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA0C;AAC1C,qBAAmC;AAEnC,oBAA6C;AAE7C,0BAAqC;AACrC,qBAAwD;AAExD,mBAAmF;AAE5E,SAAS,wBAAwB,SAAqC;AAK3E,QAAM,iBAAiB,QAAQ,QAAQ,IAAI,mBAAmB;AAC9D,SAAO,kBAAkB,OAAO,eAAe,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK,IAAI;AACxE;AAEA,eAAsB,qBACpB,SACA,UACA,EAAE,OAAO,GACc;AACvB,QAAM,SAAS,QAAQ,QAAQ,aAAa,IAAI,0BAAa,SAAS;AAEtE,MAAI,UAAU,MAAM;AAClB,WAAO,IAAI,2BAAa,yDAAyD;AAAA,MAC/E,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AAEA,MAAI,WAAW,QAAQ;AACrB,WAAO,IAAI,2BAAa,uDAAuD,EAAE,QAAQ,IAAI,CAAC;AAAA,EAChG;AAEA,QAAM,QAAQ,UAAM,0BAAU;AAC9B,QAAM,cAAc,UAAM,wBAAQ;AAElC,QAAM,OAAO;AAEb,QAAM,wBAAwB,YAAY,IAAI,oCAAuB;AAErE,MAAI,uBAAuB,SAAS,MAAM;AACxC,WAAO,IAAI,2BAAa,+CAA+C,EAAE,QAAQ,IAAI,CAAC;AAAA,EACxF;AAEA,QAAM,eAAkD;AAAA,IACtD;AAAA,IACA;AAAA,MACE,MAAM;AAAA;AAAA,MAEN,OAAO,KAAK,UAAU,EAAE,WAAW,MAAM,aAAa,yCAAqB,QAAQ,CAAC;AAAA,IACtF;AAAA,EACF;AAEA,QAAM,mBACJ,wBAAwB,OAAO,KAAK,QAAQ,QAAQ,SAAS,QAAQ,KAAK,EAAE;AAE9E,QAAM,eACJ,QAAQ,QAAQ,IAAI,kBAAkB,KAAK,QAAQ,QAAQ,IAAI,MAAM,KAAK,QAAQ,QAAQ;AAE5F,QAAM,cAAc,IAAI;AAAA,IACtB,GAAG,gBAAgB,MAAM,YAAY,GAAG,QAAQ,QAAQ,QAAQ,GAAG,QAAQ,QAAQ,MAAM;AAAA,EAC3F;AAEA,cAAY,aAAa,OAAO,0BAAa,SAAS;AAEtD,QAAM,UAAU,IAAI,QAAQ;AAC5B,eAAa,QAAQ,CAAC,EAAE,MAAM,MAAM,MAAM;AACxC,YAAQ,OAAO,sCAAmB,cAAAA,WAAgB,MAAM,OAAO,EAAE,GAAG,oCAAqB,CAAC,CAAC;AAAA,EAC7F,CAAC;AAED,SAAO,2BAAa,SAAS,aAAa,EAAE,QAAQ,CAAC;AACvD;","names":["serializeCookie"]}
@@ -18,26 +18,15 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var redirect_preview_exports = {};
20
20
  __export(redirect_preview_exports, {
21
- default: () => redirectPreviewHandler
21
+ redirectPreviewHandler: () => redirectPreviewHandler
22
22
  });
23
23
  module.exports = __toCommonJS(redirect_preview_exports);
24
- var import_server = require("next/server");
25
- var import_ts_pattern = require("ts-pattern");
26
24
  var import_set_cookie_parser = require("set-cookie-parser");
27
25
  var import_cookie = require("cookie");
28
26
  var import_site_version = require("../../../api/site-version");
29
- var import_draft = require("./utils/draft");
30
- const routeHandlerPattern = [import_ts_pattern.P.instanceOf(Request), import_ts_pattern.P.any, import_ts_pattern.P.any];
31
- const apiRoutePattern = [import_ts_pattern.P.any, import_ts_pattern.P.any, import_ts_pattern.P.any];
32
- async function redirectPreviewHandler(...args) {
33
- return (0, import_ts_pattern.match)(args).with(routeHandlerPattern, (args2) => redirectPreviewRouteHandler(...args2)).with(apiRoutePattern, (args2) => redirectPreviewApiRouteHandler(...args2)).exhaustive();
34
- }
35
- async function redirectPreviewRouteHandler(_request, _context, {}) {
36
- const message = "Cannot request preview endpoint from an API handler registered in `app`. Move your Makeswift API handler to the `pages/api` directory";
37
- console.error(message);
38
- return import_server.NextResponse.json(message, { status: 500 });
39
- }
40
- async function redirectPreviewApiRouteHandler(req, res, { apiKey }) {
27
+ var import_cookies = require("../../../api-handler/cookies");
28
+ var import_draft = require("../draft");
29
+ async function redirectPreviewHandler(req, res, { apiKey }) {
41
30
  const secret = req.query[import_draft.SearchParams.PreviewMode];
42
31
  const pathname = req.query.path;
43
32
  if (secret == null) {
@@ -49,8 +38,8 @@ async function redirectPreviewApiRouteHandler(req, res, { apiKey }) {
49
38
  if (pathname == null) {
50
39
  return res.status(400).send("Bad request: incoming request does not have an associated pathname");
51
40
  }
52
- const setCookie = res.setPreviewData({ makeswift: true, siteVersion: import_site_version.MakeswiftSiteVersion.Working }).getHeader(import_draft.SET_COOKIE_HEADER);
53
- res.removeHeader(import_draft.SET_COOKIE_HEADER);
41
+ const setCookie = res.setPreviewData({ makeswift: true, siteVersion: import_site_version.MakeswiftSiteVersion.Working }).getHeader(import_cookies.SET_COOKIE_HEADER);
42
+ res.removeHeader(import_cookies.SET_COOKIE_HEADER);
54
43
  const parsedCookies = (0, import_set_cookie_parser.parse)(Array.isArray(setCookie) ? setCookie : "");
55
44
  const prerenderBypassCookie = parsedCookies.find((c) => c.name === import_draft.PRERENDER_BYPASS_COOKIE);
56
45
  const previewDataCookie = parsedCookies.find((c) => c.name === import_draft.PREVIEW_DATA_COOKIE);
@@ -58,11 +47,15 @@ async function redirectPreviewApiRouteHandler(req, res, { apiKey }) {
58
47
  return res.status(500).send("Could not retrieve preview mode cookies");
59
48
  }
60
49
  const patchedCookies = [prerenderBypassCookie, previewDataCookie].map(({ name, value }) => {
61
- return (0, import_cookie.serialize)(name, value, { ...import_draft.cookieSettingOptions });
50
+ return (0, import_cookie.serialize)(name, value, { ...import_cookies.cookieSettingOptions });
62
51
  });
63
- res.setHeader(import_draft.SET_COOKIE_HEADER, patchedCookies);
52
+ res.setHeader(import_cookies.SET_COOKIE_HEADER, patchedCookies);
64
53
  const destinationUrl = new URL(pathname, "http://test.com");
65
54
  destinationUrl.searchParams.delete(import_draft.SearchParams.PreviewMode);
66
55
  res.redirect(`${destinationUrl.pathname}?${destinationUrl.searchParams.toString()}`);
67
56
  }
57
+ // Annotate the CommonJS export names for ESM import in node:
58
+ 0 && (module.exports = {
59
+ redirectPreviewHandler
60
+ });
68
61
  //# sourceMappingURL=redirect-preview.js.map