@opennextjs/cloudflare 1.2.1 → 1.3.1

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 (66) hide show
  1. package/dist/cli/args.d.ts +2 -0
  2. package/dist/cli/args.js +37 -19
  3. package/dist/cli/build/build.d.ts +2 -2
  4. package/dist/cli/build/build.js +3 -0
  5. package/dist/cli/build/bundle-server.d.ts +1 -1
  6. package/dist/cli/build/bundle-server.js +4 -7
  7. package/dist/cli/build/open-next/compile-images.d.ts +5 -0
  8. package/dist/cli/build/open-next/compile-images.js +29 -0
  9. package/dist/cli/build/open-next/createServerBundle.js +0 -1
  10. package/dist/cli/build/patches/plugins/next-server.d.ts +0 -2
  11. package/dist/cli/build/patches/plugins/next-server.js +0 -19
  12. package/dist/cli/build/{patches/investigated → utils}/copy-package-cli-files.js +1 -1
  13. package/dist/cli/build/utils/index.d.ts +1 -1
  14. package/dist/cli/build/utils/index.js +1 -1
  15. package/dist/cli/build/utils/test-patch.d.ts +9 -0
  16. package/dist/cli/build/utils/test-patch.js +14 -0
  17. package/dist/cli/build/utils/workerd.js +3 -1
  18. package/dist/cli/templates/images.d.ts +24 -0
  19. package/dist/cli/templates/images.js +82 -0
  20. package/dist/cli/templates/worker.js +3 -3
  21. package/package.json +5 -2
  22. package/dist/api/durable-objects/bucket-cache-purge.spec.d.ts +0 -1
  23. package/dist/api/durable-objects/bucket-cache-purge.spec.js +0 -121
  24. package/dist/api/durable-objects/queue.spec.d.ts +0 -1
  25. package/dist/api/durable-objects/queue.spec.js +0 -287
  26. package/dist/api/durable-objects/sharded-tag-cache.spec.d.ts +0 -1
  27. package/dist/api/durable-objects/sharded-tag-cache.spec.js +0 -37
  28. package/dist/api/overrides/queue/memory-queue.spec.d.ts +0 -1
  29. package/dist/api/overrides/queue/memory-queue.spec.js +0 -76
  30. package/dist/api/overrides/queue/queue-cache.spec.d.ts +0 -1
  31. package/dist/api/overrides/queue/queue-cache.spec.js +0 -92
  32. package/dist/api/overrides/tag-cache/do-sharded-tag-cache.spec.d.ts +0 -1
  33. package/dist/api/overrides/tag-cache/do-sharded-tag-cache.spec.js +0 -413
  34. package/dist/api/overrides/tag-cache/tag-cache-filter.spec.d.ts +0 -1
  35. package/dist/api/overrides/tag-cache/tag-cache-filter.spec.js +0 -97
  36. package/dist/cli/build/patches/ast/patch-vercel-og-library.spec.d.ts +0 -1
  37. package/dist/cli/build/patches/ast/patch-vercel-og-library.spec.js +0 -50
  38. package/dist/cli/build/patches/ast/vercel-og.spec.d.ts +0 -1
  39. package/dist/cli/build/patches/ast/vercel-og.spec.js +0 -22
  40. package/dist/cli/build/patches/ast/webpack-runtime.spec.d.ts +0 -1
  41. package/dist/cli/build/patches/ast/webpack-runtime.spec.js +0 -102
  42. package/dist/cli/build/patches/index.d.ts +0 -1
  43. package/dist/cli/build/patches/index.js +0 -1
  44. package/dist/cli/build/patches/investigated/index.d.ts +0 -2
  45. package/dist/cli/build/patches/investigated/index.js +0 -2
  46. package/dist/cli/build/patches/investigated/patch-require.d.ts +0 -4
  47. package/dist/cli/build/patches/investigated/patch-require.js +0 -6
  48. package/dist/cli/build/patches/plugins/instrumentation.spec.d.ts +0 -1
  49. package/dist/cli/build/patches/plugins/instrumentation.spec.js +0 -91
  50. package/dist/cli/build/patches/plugins/next-server.spec.d.ts +0 -1
  51. package/dist/cli/build/patches/plugins/next-server.spec.js +0 -429
  52. package/dist/cli/build/patches/plugins/patch-depd-deprecations.spec.d.ts +0 -1
  53. package/dist/cli/build/patches/plugins/patch-depd-deprecations.spec.js +0 -29
  54. package/dist/cli/build/patches/plugins/res-revalidate.spec.d.ts +0 -1
  55. package/dist/cli/build/patches/plugins/res-revalidate.spec.js +0 -141
  56. package/dist/cli/build/patches/plugins/use-cache.spec.d.ts +0 -1
  57. package/dist/cli/build/patches/plugins/use-cache.spec.js +0 -156
  58. package/dist/cli/build/utils/apply-patches.d.ts +0 -12
  59. package/dist/cli/build/utils/apply-patches.js +0 -22
  60. package/dist/cli/build/utils/extract-project-env-vars.spec.d.ts +0 -1
  61. package/dist/cli/build/utils/extract-project-env-vars.spec.js +0 -67
  62. package/dist/cli/build/utils/workerd.spec.d.ts +0 -1
  63. package/dist/cli/build/utils/workerd.spec.js +0 -188
  64. package/dist/cli/commands/populate-cache.spec.d.ts +0 -1
  65. package/dist/cli/commands/populate-cache.spec.js +0 -61
  66. /package/dist/cli/build/{patches/investigated → utils}/copy-package-cli-files.d.ts +0 -0
@@ -1,29 +0,0 @@
1
- import { patchCode } from "@opennextjs/aws/build/patch/astCodePatcher.js";
2
- import { describe, expect, test } from "vitest";
3
- import { rule } from "./patch-depd-deprecations.js";
4
- describe("patchDepdDeprecations", () => {
5
- test("patch", () => {
6
- const code = `
7
- function prepareObjectStackTrace(e,t){
8
- return t
9
- }
10
- function wrapfunction(fn,message){
11
- if(typeof fn!=="function"){
12
- throw new TypeError("argument fn must be a function")
13
- }
14
- var args=createArgumentsString(fn.length);
15
- var deprecate=this;
16
- var stack=getStack();
17
- var site=callSiteLocation(stack[1]);
18
- site.name=fn.name;
19
- var deprecatedfn=eval("(function ("+args+") {\\n"+'"use strict"\\n'+"log.call(deprecate, message, site)\\n"+"return fn.apply(this, arguments)\\n"+"})");
20
- return deprecatedfn;
21
- }`;
22
- expect(patchCode(code, rule)).toMatchInlineSnapshot(`
23
- "function prepareObjectStackTrace(e,t){
24
- return t
25
- }
26
- function wrapfunction(fn, message) { if(typeof fn !== 'function') throw new Error("argument fn must be a function"); return function deprecated_fn(...args) { console.warn(message); return fn(...args); } }"
27
- `);
28
- });
29
- });
@@ -1,141 +0,0 @@
1
- import { patchCode } from "@opennextjs/aws/build/patch/astCodePatcher.js";
2
- import { describe, expect, test } from "vitest";
3
- import { rule } from "./res-revalidate.js";
4
- const minifiedApiPageRuntimeCode = `var r=/(?:^|,)\\s*?no-cache\\s*?(?:,|$)/;function t(e){var r=e&&Date.parse(e);return"number"==typeof r?r:NaN}e.exports=function(e,n){var o=e["if-modified-since"],i=e["if-none-match"];if(!o&&!i)return!1;var a=e["cache-control"];if(a&&r.test(a))return!1;if(i&&"*"!==i){var s=n.etag;if(!s)return!1;for(var d=!0,u=function(e){for(var r=0,t=[],n=0,o=0,i=e.length;o<i;o++)switch(e.charCodeAt(o)){case 32:n===r&&(n=r=o+1);break;case 44:t.push(e.substring(n,r)),n=r=o+1;break;default:r=o+1}return t.push(e.substring(n,r)),t}(i),l=0;l<u.length;l++){var p=u[l];if(p===s||p==="W/"+s||"W/"+p===s){d=!1;break}}if(d)return!1}if(o){var c=n["last-modified"];if(!c||!(t(c)<=t(o)))return!1}return!0}}},t={};function n(e){var o=t[e];if(void 0!==o)return o.exports;var i=t[e]={exports:{}},a=!0;try{r[e](i,i.exports,n),a=!1}finally{a&&delete t[e]}return i.exports}n.ab=__dirname+"/";var o=n(695);e.exports=o})()},"./dist/esm/server/crypto-utils.js":(e,r,t)=>{"use strict";t.r(r),t.d(r,{decryptWithSecret:()=>s,encryptWithSecret:()=>a});let n=require("crypto");var o=/*#__PURE__*/t.n(n);let i="aes-256-gcm";function a(e,r){let t=o().randomBytes(16),n=o().randomBytes(64),a=o().pbkdf2Sync(e,n,1e5,32,"sha512"),s=o().createCipheriv(i,a,t),d=Buffer.concat([s.update(r,"utf8"),s.final()]),u=s.getAuthTag();return Buffer.concat([n,t,u,d]).toString("hex")}function s(e,r){let t=Buffer.from(r,"hex"),n=t.slice(0,64),a=t.slice(64,80),s=t.slice(80,96),d=t.slice(96),u=o().pbkdf2Sync(e,n,1e5,32,"sha512"),l=o().createDecipheriv(i,u,a);return l.setAuthTag(s),l.update(d)+l.final("utf8")}},"next/dist/compiled/jsonwebtoken":e=>{"use strict";e.exports=require("next/dist/compiled/jsonwebtoken")},"next/dist/compiled/raw-body":e=>{"use strict";e.exports=require("next/dist/compiled/raw-body")},querystring:e=>{"use strict";e.exports=require("querystring")}},r={};function t(n){var o=r[n];if(void 0!==o)return o.exports;var i=r[n]={exports:{}};return e[n](i,i.exports,t),i.exports}t.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return t.d(r,{a:r}),r},t.d=(e,r)=>{for(var n in r)t.o(r,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:r[n]})},t.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var n={};(()=>{"use strict";t.r(n),t.d(n,{PagesAPIRouteModule:()=>z,default:()=>U});class e{static get(e,r,t){let n=Reflect.get(e,r,t);return"function"==typeof n?n.bind(e):n}static set(e,r,t,n){return Reflect.set(e,r,t,n)}static has(e,r){return Reflect.has(e,r)}static deleteProperty(e,r){return Reflect.deleteProperty(e,r)}}class r extends Error{constructor(){super("Headers cannot be modified. Read more: https://nextjs.org/docs/app/api-reference/functions/headers")}static callable(){throw new r}}class o extends Headers{constructor(r){super(),this.headers=new Proxy(r,{get(t,n,o){if("symbol"==typeof n)return e.get(t,n,o);let i=n.toLowerCase(),a=Object.keys(r).find(e=>e.toLowerCase()===i);if(void 0!==a)return e.get(t,a,o)},set(t,n,o,i){if("symbol"==typeof n)return e.set(t,n,o,i);let a=n.toLowerCase(),s=Object.keys(r).find(e=>e.toLowerCase()===a);return e.set(t,s??n,o,i)},has(t,n){if("symbol"==typeof n)return e.has(t,n);let o=n.toLowerCase(),i=Object.keys(r).find(e=>e.toLowerCase()===o);return void 0!==i&&e.has(t,i)},deleteProperty(t,n){if("symbol"==typeof n)return e.deleteProperty(t,n);let o=n.toLowerCase(),i=Object.keys(r).find(e=>e.toLowerCase()===o);return void 0===i||e.deleteProperty(t,i)}})}static seal(t){return new Proxy(t,{get(t,n,o){switch(n){case"append":case"delete":case"set":return r.callable;default:return e.get(t,n,o)}}})}merge(e){return Array.isArray(e)?e.join(", "):e}static from(e){return e instanceof Headers?e:new o(e)}append(e,r){let t=this.headers[e];"string"==typeof t?this.headers[e]=[t,r]:Array.isArray(t)?t.push(r):this.headers[e]=r}delete(e){delete this.headers[e]}get(e){let r=this.headers[e];return void 0!==r?this.merge(r):null}has(e){return void 0!==this.headers[e]}set(e,r){this.headers[e]=r}forEach(e,r){for(let[t,n]of this.entries())e.call(r,n,t,this)}*entries(){for(let e of Object.keys(this.headers)){let r=e.toLowerCase(),t=this.get(r);yield[r,t]}}*keys(){for(let e of Object.keys(this.headers)){let r=e.toLowerCase();yield r}}*values(){for(let e of Object.keys(this.headers)){let r=this.get(e);yield r}}[Symbol.iterator](){return this.entries()}}let i="x-prerender-revalidate",a="x-prerender-revalidate-if-generated",s={shared:"shared",reactServerComponents:"rsc",serverSideRendering:"ssr",actionBrowser:"action-browser",apiNode:"api-node",apiEdge:"api-edge",middleware:"middleware",instrument:"instrument",edgeAsset:"edge-asset",appPagesBrowser:"app-pages-browser",pagesDirBrowser:"pages-dir-browser",pagesDirEdge:"pages-dir-edge",pagesDirNode:"pages-dir-node"};({...s,GROUP:{builtinReact:[s.reactServerComponents,s.actionBrowser],serverOnly:[s.reactServerComponents,s.actionBrowser,s.instrument,s.middleware],neutralTarget:[s.apiNode,s.apiEdge],clientOnly:[s.serverSideRendering,s.appPagesBrowser],bundled:[s.reactServerComponents,s.actionBrowser,s.serverSideRendering,s.appPagesBrowser,s.shared,s.instrument,s.middleware],appPages:[s.reactServerComponents,s.serverSideRendering,s.appPagesBrowser,s.actionBrowser]}});let d=require("next/dist/server/lib/trace/tracer");var u=/*#__PURE__*/function(e){return e.handleRequest="BaseServer.handleRequest",e.run="BaseServer.run",e.pipe="BaseServer.pipe",e.getStaticHTML="BaseServer.getStaticHTML",e.render="BaseServer.render",e.renderToResponseWithComponents="BaseServer.renderToResponseWithComponents",e.renderToResponse="BaseServer.renderToResponse",e.renderToHTML="BaseServer.renderToHTML",e.renderError="BaseServer.renderError",e.renderErrorToResponse="BaseServer.renderErrorToResponse",e.renderErrorToHTML="BaseServer.renderErrorToHTML",e.render404="BaseServer.render404",e}(u||{}),l=/*#__PURE__*/function(e){return e.loadDefaultErrorComponents="LoadComponents.loadDefaultErrorComponents",e.loadComponents="LoadComponents.loadComponents",e}(l||{}),p=/*#__PURE__*/function(e){return e.getRequestHandler="NextServer.getRequestHandler",e.getServer="NextServer.getServer",e.getServerRequestHandler="NextServer.getServerRequestHandler",e.createServer="createServer.createServer",e}(p||{}),c=/*#__PURE__*/function(e){return e.compression="NextNodeServer.compression",e.getBuildId="NextNodeServer.getBuildId",e.createComponentTree="NextNodeServer.createComponentTree",e.clientComponentLoading="NextNodeServer.clientComponentLoading",e.getLayoutOrPageModule="NextNodeServer.getLayoutOrPageModule",e.generateStaticRoutes="NextNodeServer.generateStaticRoutes",e.generateFsStaticRoutes="NextNodeServer.generateFsStaticRoutes",e.generatePublicRoutes="NextNodeServer.generatePublicRoutes",e.generateImageRoutes="NextNodeServer.generateImageRoutes.route",e.sendRenderResult="NextNodeServer.sendRenderResult",e.proxyRequest="NextNodeServer.proxyRequest",e.runApi="NextNodeServer.runApi",e.render="NextNodeServer.render",e.renderHTML="NextNodeServer.renderHTML",e.imageOptimizer="NextNodeServer.imageOptimizer",e.getPagePath="NextNodeServer.getPagePath",e.getRoutesManifest="NextNodeServer.getRoutesManifest",e.findPageComponents="NextNodeServer.findPageComponents",e.getFontManifest="NextNodeServer.getFontManifest",e.getServerComponentManifest="NextNodeServer.getServerComponentManifest",e.getRequestHandler="NextNodeServer.getRequestHandler",e.renderToHTML="NextNodeServer.renderToHTML",e.renderError="NextNodeServer.renderError",e.renderErrorToHTML="NextNodeServer.renderErrorToHTML",e.render404="NextNodeServer.render404",e.startResponse="NextNodeServer.startResponse",e.route="route",e.onProxyReq="onProxyReq",e.apiResolver="apiResolver",e.internalFetch="internalFetch",e}(c||{}),f=/*#__PURE__*/function(e){return e.startServer="startServer.startServer",e}(f||{}),g=/*#__PURE__*/function(e){return e.getServerSideProps="Render.getServerSideProps",e.getStaticProps="Render.getStaticProps",e.renderToString="Render.renderToString",e.renderDocument="Render.renderDocument",e.createBodyResult="Render.createBodyResult",e}(g||{}),v=/*#__PURE__*/function(e){return e.renderToString="AppRender.renderToString",e.renderToReadableStream="AppRender.renderToReadableStream",e.getBodyResult="AppRender.getBodyResult",e.fetch="AppRender.fetch",e}(v||{}),m=/*#__PURE__*/function(e){return e.executeRoute="Router.executeRoute",e}(m||{}),h=/*#__PURE__*/function(e){return e.runHandler="Node.runHandler",e}(h||{}),y=/*#__PURE__*/function(e){return e.runHandler="AppRouteRouteHandlers.runHandler",e}(y||{}),b=/*#__PURE__*/function(e){return e.generateMetadata="ResolveMetadata.generateMetadata",e.generateViewport="ResolveMetadata.generateViewport",e}(b||{}),x=/*#__PURE__*/function(e){return e.execute="Middleware.execute",e}(x||{});let w="__prerender_bypass",S="__next_preview_data",R=Symbol(S),_=Symbol(w);function E(e,r={}){if(_ in e)return e;let{serialize:n}=t("./dist/compiled/cookie/index.js"),o=e.getHeader("Set-Cookie");return e.setHeader("Set-Cookie",[..."string"==typeof o?[o]:Array.isArray(o)?o:[],n(w,"",{expires:new Date(0),httpOnly:!0,sameSite:"none",secure:!0,path:"/",...void 0!==r.path?{path:r.path}:void 0}),n(S,"",{expires:new Date(0),httpOnly:!0,sameSite:"none",secure:!0,path:"/",...void 0!==r.path?{path:r.path}:void 0})]),Object.defineProperty(e,_,{value:!0,enumerable:!1}),e}class O extends Error{constructor(e,r){super(r),this.statusCode=e}}function C(e,r,t){e.statusCode=r,e.statusMessage=t,e.end(t)}function N({req:e},r,t){let n={configurable:!0,enumerable:!0},o={...n,writable:!0};Object.defineProperty(e,r,{...n,get:()=>{let n=t();return Object.defineProperty(e,r,{...o,value:n}),n},set:t=>{Object.defineProperty(e,r,{...o,value:t})}})}class j{constructor({userland:e,definition:r}){this.userland=e,this.definition=r}}var T=t("./dist/compiled/bytes/index.js"),P=/*#__PURE__*/t.n(T);let A=e=>{let r=e.length,t=0,n=0,o=8997,i=0,a=33826,s=0,d=40164,u=0,l=52210;for(;t<r;)o^=e.charCodeAt(t++),n=435*o,i=435*a,s=435*d,u=435*l,s+=o<<8,u+=a<<8,i+=n>>>16,o=65535&n,s+=i>>>16,a=65535&i,l=u+(s>>>16)&65535,d=65535&s;return(15&l)*0x1000000000000+0x100000000*d+65536*a+(o^l>>4)},H=(e,r=!1)=>(r?'W/"':'"')+A(e).toString(36)+e.length.toString(36)+'"';"undefined"!=typeof performance&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);var M=t("./dist/compiled/fresh/index.js"),k=/*#__PURE__*/t.n(M);let B=require("stream");function L(e){return"object"==typeof e&&null!==e&&"name"in e&&"message"in e}var D=t("./dist/compiled/@edge-runtime/cookies/index.js"),$=t("./dist/compiled/content-type/index.js");async function q(e,r){let n,o;try{n=(0,$.parse)(e.headers["content-type"]||"text/plain")}catch{n=(0,$.parse)("text/plain")}let{type:i,parameters:a}=n,s=a.charset||"utf-8";try{let n=t("next/dist/compiled/raw-body");o=await n(e,{encoding:s,limit:r})}catch(e){if(L(e)&&"entity.too.large"===e.type)throw Object.defineProperty(new O(413,\`Body exceeded \${r} limit\`),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});throw Object.defineProperty(new O(400,"Invalid body"),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0})}let d=o.toString();return"application/json"===i||"application/ld+json"===i?function(e){if(0===e.length)return{};try{return JSON.parse(e)}catch(e){throw Object.defineProperty(new O(400,"Invalid JSON"),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0})}}(d):"application/x-www-form-urlencoded"===i?t("querystring").decode(d):d}function I(e){return"string"==typeof e&&e.length>=16}async function K(e,r,t,n){if("string"!=typeof e||!e.startsWith("/"))throw Object.defineProperty(Error(\`Invalid urlPath provided to revalidate(), must be a path e.g. /blog/post-1, received \${e}\`),"__NEXT_ERROR_CODE",{value:"E153",enumerable:!1,configurable:!0});let o={[i]:n.previewModeId,...r.unstable_onlyGenerated?{[a]:"1"}:{}},s=[...n.allowedRevalidateHeaderKeys||[]];for(let e of((n.trustHostHeader||n.dev)&&s.push("cookie"),n.trustHostHeader&&s.push("x-vercel-protection-bypass"),Object.keys(t.headers)))s.includes(e)&&(o[e]=t.headers[e]);try{if(n.trustHostHeader){let n=await fetch(\`https://\${t.headers.host}\${e}\`,{method:"HEAD",headers:o}),i=n.headers.get("x-vercel-cache")||n.headers.get("x-nextjs-cache");if((null==i?void 0:i.toUpperCase())!=="REVALIDATED"&&200!==n.status&&!(404===n.status&&r.unstable_onlyGenerated))throw Object.defineProperty(Error(\`Invalid response \${n.status}\`),"__NEXT_ERROR_CODE",{value:"E175",enumerable:!1,configurable:!0})}else if(n.revalidate)await n.revalidate({urlPath:e,revalidateHeaders:o,opts:r});else throw Object.defineProperty(Error("Invariant: required internal revalidate method not passed to api-utils"),"__NEXT_ERROR_CODE",{value:"E174",enumerable:!1,configurable:!0})}catch(r){throw Object.defineProperty(Error(\`Failed to revalidate \${e}: \${L(r)?r.message:r}\`),"__NEXT_ERROR_CODE",{value:"E240",enumerable:!1,configurable:!0})}}async function X(e,r,n,s,d,u,l,p,c){try{var f,g,v,m;if(!s){r.statusCode=404,r.end("Not Found");return}let u=s.config||{},l=(null==(f=u.api)?void 0:f.bodyParser)!==!1,p=(null==(g=u.api)?void 0:g.responseLimit)??!0;null==(v=u.api)||v.externalResolver,N({req:e},"cookies",(m=e.headers,function(){let{cookie:e}=m;if(!e)return{};let{parse:r}=t("./dist/compiled/cookie/index.js");return r(Array.isArray(e)?e.join("; "):e)})),e.query=n,N({req:e},"previewData",()=>(function(e,r,n,s){var d,u;let l;if(n&&function(e,r){let t=o.from(e.headers);return{isOnDemandRevalidate:t.get(i)===r.previewModeId,revalidateOnlyGenerated:t.has(a)}}(e,n).isOnDemandRevalidate)return!1;if(R in e)return e[R];let p=o.from(e.headers),c=new D.RequestCookies(p),f=null==(d=c.get(w))?void 0:d.value,g=null==(u=c.get(S))?void 0:u.value;if(f&&!g&&f===n.previewModeId){let r={};return Object.defineProperty(e,R,{value:r,enumerable:!1}),r}if(!f&&!g)return!1;if(!f||!g||f!==n.previewModeId)return s||E(r),!1;try{l=t("next/dist/compiled/jsonwebtoken").verify(g,n.previewModeSigningKey)}catch{return E(r),!1}let{decryptWithSecret:v}=t("./dist/esm/server/crypto-utils.js"),m=v(Buffer.from(n.previewModeEncryptionKey),l.data);try{let r=JSON.parse(m);return Object.defineProperty(e,R,{value:r,enumerable:!1}),r}catch{return!1}})(e,r,d,!!d.multiZoneDraftMode)),N({req:e},"preview",()=>!1!==e.previewData||void 0),N({req:e},"draftMode",()=>e.preview),l&&!e.body&&(e.body=await q(e,u.api&&u.api.bodyParser&&u.api.bodyParser.sizeLimit?u.api.bodyParser.sizeLimit:"1mb"));let c=0,h=p&&"boolean"!=typeof p?P().parse(p):4194304,y=r.write,b=r.end;r.write=(...e)=>(c+=Buffer.byteLength(e[0]||""),y.apply(r,e)),r.end=(...t)=>(t.length&&"function"!=typeof t[0]&&(c+=Buffer.byteLength(t[0]||"")),p&&c>=h&&console.warn(\`API response for \${e.url} exceeds \${P().format(h)}. API Routes are meant to respond quickly. https://nextjs.org/docs/messages/api-routes-response-size-limit\`),b.apply(r,t)),r.status=e=>(r.statusCode=e,r),r.send=t=>(function(e,r,t){var n;if(null==t){r.end();return}if(204===r.statusCode||304===r.statusCode){r.removeHeader("Content-Type"),r.removeHeader("Content-Length"),r.removeHeader("Transfer-Encoding"),r.end();return}let o=r.getHeader("Content-Type");if(t instanceof B.Stream){o||r.setHeader("Content-Type","application/octet-stream"),t.pipe(r);return}let i=["object","number","boolean"].includes(typeof t),a=i?JSON.stringify(t):t;if((n=H(a))&&r.setHeader("ETag",n),!k()(e.headers,{etag:n})||(r.statusCode=304,r.end(),0)){if(Buffer.isBuffer(t)){o||r.setHeader("Content-Type","application/octet-stream"),r.setHeader("Content-Length",t.length),r.end(t);return}i&&r.setHeader("Content-Type","application/json; charset=utf-8"),r.setHeader("Content-Length",Buffer.byteLength(a)),r.end(a)}})(e,r,t),r.json=e=>{r.setHeader("Content-Type","application/json; charset=utf-8"),r.send(JSON.stringify(e))},r.redirect=(e,t)=>(function(e,r,t){if("string"==typeof r&&(t=r,r=307),"number"!=typeof r||"string"!=typeof t)throw Object.defineProperty(Error("Invalid redirect arguments. Please use a single argument URL, e.g. res.redirect('/destination') or use a status code and URL, e.g. res.redirect(307, '/destination')."),"__NEXT_ERROR_CODE",{value:"E389",enumerable:!1,configurable:!0});return e.writeHead(r,{Location:t}),e.write(t),e.end(),e})(r,e,t),r.setDraftMode=(e={enable:!0})=>(function(e,r){if(!I(r.previewModeId))throw Object.defineProperty(Error("invariant: invalid previewModeId"),"__NEXT_ERROR_CODE",{value:"E169",enumerable:!1,configurable:!0});let n=r.enable?void 0:new Date(0),{serialize:o}=t("./dist/compiled/cookie/index.js"),i=e.getHeader("Set-Cookie");return e.setHeader("Set-Cookie",[..."string"==typeof i?[i]:Array.isArray(i)?i:[],o(w,r.previewModeId,{httpOnly:!0,sameSite:"none",secure:!0,path:"/",expires:n})]),e})(r,Object.assign({},d,e)),r.setPreviewData=(e,n={})=>(function(e,r,n){if(!I(n.previewModeId))throw Object.defineProperty(Error("invariant: invalid previewModeId"),"__NEXT_ERROR_CODE",{value:"E169",enumerable:!1,configurable:!0});if(!I(n.previewModeEncryptionKey))throw Object.defineProperty(Error("invariant: invalid previewModeEncryptionKey"),"__NEXT_ERROR_CODE",{value:"E334",enumerable:!1,configurable:!0});if(!I(n.previewModeSigningKey))throw Object.defineProperty(Error("invariant: invalid previewModeSigningKey"),"__NEXT_ERROR_CODE",{value:"E436",enumerable:!1,configurable:!0});let o=t("next/dist/compiled/jsonwebtoken"),{encryptWithSecret:i}=t("./dist/esm/server/crypto-utils.js"),a=o.sign({data:i(Buffer.from(n.previewModeEncryptionKey),JSON.stringify(r))},n.previewModeSigningKey,{algorithm:"HS256",...void 0!==n.maxAge?{expiresIn:n.maxAge}:void 0});if(a.length>2048)throw Object.defineProperty(Error("Preview data is limited to 2KB currently, reduce how much data you are storing as preview data to continue"),"__NEXT_ERROR_CODE",{value:"E465",enumerable:!1,configurable:!0});let{serialize:s}=t("./dist/compiled/cookie/index.js"),d=e.getHeader("Set-Cookie");return e.setHeader("Set-Cookie",[..."string"==typeof d?[d]:Array.isArray(d)?d:[],s(w,n.previewModeId,{httpOnly:!0,sameSite:"none",secure:!0,path:"/",...void 0!==n.maxAge?{maxAge:n.maxAge}:void 0,...void 0!==n.path?{path:n.path}:void 0}),s(S,a,{httpOnly:!0,sameSite:"none",secure:!0,path:"/",...void 0!==n.maxAge?{maxAge:n.maxAge}:void 0,...void 0!==n.path?{path:n.path}:void 0})]),e})(r,e,Object.assign({},d,n)),r.clearPreviewData=(e={})=>E(r,e),r.revalidate=(r,t)=>K(r,t||{},e,d);let x=s.default||s;await x(e,r)}catch(t){if(null==c||c(t,e,{routerKind:"Pages Router",routePath:p||"",routeType:"route",revalidateReason:void 0}),t instanceof O)C(r,t.statusCode,t.message);else{if(l)throw L(t)&&(t.page=p),t;if(console.error(t),u)throw t;C(r,500,"Internal Server Error")}}}class z extends j{constructor(e){if(super(e),"function"!=typeof e.userland.default)throw Object.defineProperty(Error(\`Page \${e.definition.page} does not export a default function.\`),"__NEXT_ERROR_CODE",{value:"E379",enumerable:!1,configurable:!0});this.apiResolverWrapped=function(e,r){return(...t)=>((0,d.getTracer)().setRootSpanAttribute("next.route",e),(0,d.getTracer)().trace(h.runHandler,{spanName:\`executing api route (pages) \${e}\`},()=>r(...t)))}(e.definition.page,X)}async render(e,r,t){let{apiResolverWrapped:n}=this;await n(e,r,t.query,this.userland,{...t.previewProps,revalidate:t.revalidate,trustHostHeader:t.trustHostHeader,allowedRevalidateHeaderKeys:t.allowedRevalidateHeaderKeys,hostname:t.hostname,multiZoneDraftMode:t.multiZoneDraftMode,dev:t.dev},t.minimalMode,t.dev,t.page,t.onError)}}let U=z})(),module.exports=n})();`;
5
- const unminifiedCode = `async function revalidate(urlPath, opts, req, context) {
6
- if (typeof urlPath !== 'string' || !urlPath.startsWith('/')) {
7
- throw Object.defineProperty(new Error(\`Invalid urlPath provided to revalidate(), must be a path e.g. /blog/post-1, received \${urlPath}\`), "__NEXT_ERROR_CODE", {
8
- value: "E153",
9
- enumerable: false,
10
- configurable: true
11
- });
12
- }
13
- const revalidateHeaders = {
14
- [_constants.PRERENDER_REVALIDATE_HEADER]: context.previewModeId,
15
- ...opts.unstable_onlyGenerated ? {
16
- [_constants.PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER]: '1'
17
- } : {}
18
- };
19
- const allowedRevalidateHeaderKeys = [
20
- ...context.allowedRevalidateHeaderKeys || []
21
- ];
22
- if (context.trustHostHeader || context.dev) {
23
- allowedRevalidateHeaderKeys.push('cookie');
24
- }
25
- if (context.trustHostHeader) {
26
- allowedRevalidateHeaderKeys.push('x-vercel-protection-bypass');
27
- }
28
- for (const key of Object.keys(req.headers)){
29
- if (allowedRevalidateHeaderKeys.includes(key)) {
30
- revalidateHeaders[key] = req.headers[key];
31
- }
32
- }
33
- try {
34
- if (context.trustHostHeader) {
35
- const res = await fetch(\`https://\${req.headers.host}\${urlPath}\`, {
36
- method: 'HEAD',
37
- headers: revalidateHeaders
38
- });
39
- // we use the cache header to determine successful revalidate as
40
- // a non-200 status code can be returned from a successful revalidate
41
- // e.g. notFound: true returns 404 status code but is successful
42
- const cacheHeader = res.headers.get('x-vercel-cache') || res.headers.get('x-nextjs-cache');
43
- if ((cacheHeader == null ? void 0 : cacheHeader.toUpperCase()) !== 'REVALIDATED' && res.status !== 200 && !(res.status === 404 && opts.unstable_onlyGenerated)) {
44
- throw Object.defineProperty(new Error(\`Invalid response \${res.status}\`), "__NEXT_ERROR_CODE", {
45
- value: "E175",
46
- enumerable: false,
47
- configurable: true
48
- });
49
- }
50
- } else if (context.revalidate) {
51
- await context.revalidate({
52
- urlPath,
53
- revalidateHeaders,
54
- opts
55
- });
56
- } else {
57
- throw Object.defineProperty(new Error(\`Invariant: required internal revalidate method not passed to api-utils\`), "__NEXT_ERROR_CODE", {
58
- value: "E174",
59
- enumerable: false,
60
- configurable: true
61
- });
62
- }
63
- } catch (err) {
64
- throw Object.defineProperty(new Error(\`Failed to revalidate \${urlPath}: \${(0, _iserror.default)(err) ? err.message : err}\`), "__NEXT_ERROR_CODE", {
65
- value: "E240",
66
- enumerable: false,
67
- configurable: true
68
- });
69
- }
70
- }`;
71
- describe("patchResRevalidate", () => {
72
- test("patch minified code", () => {
73
- expect(patchCode(minifiedApiPageRuntimeCode, rule)).toMatchInlineSnapshot(`"var r=/(?:^|,)\\s*?no-cache\\s*?(?:,|$)/;function t(e){var r=e&&Date.parse(e);return"number"==typeof r?r:NaN}e.exports=function(e,n){var o=e["if-modified-since"],i=e["if-none-match"];if(!o&&!i)return!1;var a=e["cache-control"];if(a&&r.test(a))return!1;if(i&&"*"!==i){var s=n.etag;if(!s)return!1;for(var d=!0,u=function(e){for(var r=0,t=[],n=0,o=0,i=e.length;o<i;o++)switch(e.charCodeAt(o)){case 32:n===r&&(n=r=o+1);break;case 44:t.push(e.substring(n,r)),n=r=o+1;break;default:r=o+1}return t.push(e.substring(n,r)),t}(i),l=0;l<u.length;l++){var p=u[l];if(p===s||p==="W/"+s||"W/"+p===s){d=!1;break}}if(d)return!1}if(o){var c=n["last-modified"];if(!c||!(t(c)<=t(o)))return!1}return!0}}},t={};function n(e){var o=t[e];if(void 0!==o)return o.exports;var i=t[e]={exports:{}},a=!0;try{r[e](i,i.exports,n),a=!1}finally{a&&delete t[e]}return i.exports}n.ab=__dirname+"/";var o=n(695);e.exports=o})()},"./dist/esm/server/crypto-utils.js":(e,r,t)=>{"use strict";t.r(r),t.d(r,{decryptWithSecret:()=>s,encryptWithSecret:()=>a});let n=require("crypto");var o=/*#__PURE__*/t.n(n);let i="aes-256-gcm";function a(e,r){let t=o().randomBytes(16),n=o().randomBytes(64),a=o().pbkdf2Sync(e,n,1e5,32,"sha512"),s=o().createCipheriv(i,a,t),d=Buffer.concat([s.update(r,"utf8"),s.final()]),u=s.getAuthTag();return Buffer.concat([n,t,u,d]).toString("hex")}function s(e,r){let t=Buffer.from(r,"hex"),n=t.slice(0,64),a=t.slice(64,80),s=t.slice(80,96),d=t.slice(96),u=o().pbkdf2Sync(e,n,1e5,32,"sha512"),l=o().createDecipheriv(i,u,a);return l.setAuthTag(s),l.update(d)+l.final("utf8")}},"next/dist/compiled/jsonwebtoken":e=>{"use strict";e.exports=require("next/dist/compiled/jsonwebtoken")},"next/dist/compiled/raw-body":e=>{"use strict";e.exports=require("next/dist/compiled/raw-body")},querystring:e=>{"use strict";e.exports=require("querystring")}},r={};function t(n){var o=r[n];if(void 0!==o)return o.exports;var i=r[n]={exports:{}};return e[n](i,i.exports,t),i.exports}t.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return t.d(r,{a:r}),r},t.d=(e,r)=>{for(var n in r)t.o(r,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:r[n]})},t.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var n={};(()=>{"use strict";t.r(n),t.d(n,{PagesAPIRouteModule:()=>z,default:()=>U});class e{static get(e,r,t){let n=Reflect.get(e,r,t);return"function"==typeof n?n.bind(e):n}static set(e,r,t,n){return Reflect.set(e,r,t,n)}static has(e,r){return Reflect.has(e,r)}static deleteProperty(e,r){return Reflect.deleteProperty(e,r)}}class r extends Error{constructor(){super("Headers cannot be modified. Read more: https://nextjs.org/docs/app/api-reference/functions/headers")}static callable(){throw new r}}class o extends Headers{constructor(r){super(),this.headers=new Proxy(r,{get(t,n,o){if("symbol"==typeof n)return e.get(t,n,o);let i=n.toLowerCase(),a=Object.keys(r).find(e=>e.toLowerCase()===i);if(void 0!==a)return e.get(t,a,o)},set(t,n,o,i){if("symbol"==typeof n)return e.set(t,n,o,i);let a=n.toLowerCase(),s=Object.keys(r).find(e=>e.toLowerCase()===a);return e.set(t,s??n,o,i)},has(t,n){if("symbol"==typeof n)return e.has(t,n);let o=n.toLowerCase(),i=Object.keys(r).find(e=>e.toLowerCase()===o);return void 0!==i&&e.has(t,i)},deleteProperty(t,n){if("symbol"==typeof n)return e.deleteProperty(t,n);let o=n.toLowerCase(),i=Object.keys(r).find(e=>e.toLowerCase()===o);return void 0===i||e.deleteProperty(t,i)}})}static seal(t){return new Proxy(t,{get(t,n,o){switch(n){case"append":case"delete":case"set":return r.callable;default:return e.get(t,n,o)}}})}merge(e){return Array.isArray(e)?e.join(", "):e}static from(e){return e instanceof Headers?e:new o(e)}append(e,r){let t=this.headers[e];"string"==typeof t?this.headers[e]=[t,r]:Array.isArray(t)?t.push(r):this.headers[e]=r}delete(e){delete this.headers[e]}get(e){let r=this.headers[e];return void 0!==r?this.merge(r):null}has(e){return void 0!==this.headers[e]}set(e,r){this.headers[e]=r}forEach(e,r){for(let[t,n]of this.entries())e.call(r,n,t,this)}*entries(){for(let e of Object.keys(this.headers)){let r=e.toLowerCase(),t=this.get(r);yield[r,t]}}*keys(){for(let e of Object.keys(this.headers)){let r=e.toLowerCase();yield r}}*values(){for(let e of Object.keys(this.headers)){let r=this.get(e);yield r}}[Symbol.iterator](){return this.entries()}}let i="x-prerender-revalidate",a="x-prerender-revalidate-if-generated",s={shared:"shared",reactServerComponents:"rsc",serverSideRendering:"ssr",actionBrowser:"action-browser",apiNode:"api-node",apiEdge:"api-edge",middleware:"middleware",instrument:"instrument",edgeAsset:"edge-asset",appPagesBrowser:"app-pages-browser",pagesDirBrowser:"pages-dir-browser",pagesDirEdge:"pages-dir-edge",pagesDirNode:"pages-dir-node"};({...s,GROUP:{builtinReact:[s.reactServerComponents,s.actionBrowser],serverOnly:[s.reactServerComponents,s.actionBrowser,s.instrument,s.middleware],neutralTarget:[s.apiNode,s.apiEdge],clientOnly:[s.serverSideRendering,s.appPagesBrowser],bundled:[s.reactServerComponents,s.actionBrowser,s.serverSideRendering,s.appPagesBrowser,s.shared,s.instrument,s.middleware],appPages:[s.reactServerComponents,s.serverSideRendering,s.appPagesBrowser,s.actionBrowser]}});let d=require("next/dist/server/lib/trace/tracer");var u=/*#__PURE__*/function(e){return e.handleRequest="BaseServer.handleRequest",e.run="BaseServer.run",e.pipe="BaseServer.pipe",e.getStaticHTML="BaseServer.getStaticHTML",e.render="BaseServer.render",e.renderToResponseWithComponents="BaseServer.renderToResponseWithComponents",e.renderToResponse="BaseServer.renderToResponse",e.renderToHTML="BaseServer.renderToHTML",e.renderError="BaseServer.renderError",e.renderErrorToResponse="BaseServer.renderErrorToResponse",e.renderErrorToHTML="BaseServer.renderErrorToHTML",e.render404="BaseServer.render404",e}(u||{}),l=/*#__PURE__*/function(e){return e.loadDefaultErrorComponents="LoadComponents.loadDefaultErrorComponents",e.loadComponents="LoadComponents.loadComponents",e}(l||{}),p=/*#__PURE__*/function(e){return e.getRequestHandler="NextServer.getRequestHandler",e.getServer="NextServer.getServer",e.getServerRequestHandler="NextServer.getServerRequestHandler",e.createServer="createServer.createServer",e}(p||{}),c=/*#__PURE__*/function(e){return e.compression="NextNodeServer.compression",e.getBuildId="NextNodeServer.getBuildId",e.createComponentTree="NextNodeServer.createComponentTree",e.clientComponentLoading="NextNodeServer.clientComponentLoading",e.getLayoutOrPageModule="NextNodeServer.getLayoutOrPageModule",e.generateStaticRoutes="NextNodeServer.generateStaticRoutes",e.generateFsStaticRoutes="NextNodeServer.generateFsStaticRoutes",e.generatePublicRoutes="NextNodeServer.generatePublicRoutes",e.generateImageRoutes="NextNodeServer.generateImageRoutes.route",e.sendRenderResult="NextNodeServer.sendRenderResult",e.proxyRequest="NextNodeServer.proxyRequest",e.runApi="NextNodeServer.runApi",e.render="NextNodeServer.render",e.renderHTML="NextNodeServer.renderHTML",e.imageOptimizer="NextNodeServer.imageOptimizer",e.getPagePath="NextNodeServer.getPagePath",e.getRoutesManifest="NextNodeServer.getRoutesManifest",e.findPageComponents="NextNodeServer.findPageComponents",e.getFontManifest="NextNodeServer.getFontManifest",e.getServerComponentManifest="NextNodeServer.getServerComponentManifest",e.getRequestHandler="NextNodeServer.getRequestHandler",e.renderToHTML="NextNodeServer.renderToHTML",e.renderError="NextNodeServer.renderError",e.renderErrorToHTML="NextNodeServer.renderErrorToHTML",e.render404="NextNodeServer.render404",e.startResponse="NextNodeServer.startResponse",e.route="route",e.onProxyReq="onProxyReq",e.apiResolver="apiResolver",e.internalFetch="internalFetch",e}(c||{}),f=/*#__PURE__*/function(e){return e.startServer="startServer.startServer",e}(f||{}),g=/*#__PURE__*/function(e){return e.getServerSideProps="Render.getServerSideProps",e.getStaticProps="Render.getStaticProps",e.renderToString="Render.renderToString",e.renderDocument="Render.renderDocument",e.createBodyResult="Render.createBodyResult",e}(g||{}),v=/*#__PURE__*/function(e){return e.renderToString="AppRender.renderToString",e.renderToReadableStream="AppRender.renderToReadableStream",e.getBodyResult="AppRender.getBodyResult",e.fetch="AppRender.fetch",e}(v||{}),m=/*#__PURE__*/function(e){return e.executeRoute="Router.executeRoute",e}(m||{}),h=/*#__PURE__*/function(e){return e.runHandler="Node.runHandler",e}(h||{}),y=/*#__PURE__*/function(e){return e.runHandler="AppRouteRouteHandlers.runHandler",e}(y||{}),b=/*#__PURE__*/function(e){return e.generateMetadata="ResolveMetadata.generateMetadata",e.generateViewport="ResolveMetadata.generateViewport",e}(b||{}),x=/*#__PURE__*/function(e){return e.execute="Middleware.execute",e}(x||{});let w="__prerender_bypass",S="__next_preview_data",R=Symbol(S),_=Symbol(w);function E(e,r={}){if(_ in e)return e;let{serialize:n}=t("./dist/compiled/cookie/index.js"),o=e.getHeader("Set-Cookie");return e.setHeader("Set-Cookie",[..."string"==typeof o?[o]:Array.isArray(o)?o:[],n(w,"",{expires:new Date(0),httpOnly:!0,sameSite:"none",secure:!0,path:"/",...void 0!==r.path?{path:r.path}:void 0}),n(S,"",{expires:new Date(0),httpOnly:!0,sameSite:"none",secure:!0,path:"/",...void 0!==r.path?{path:r.path}:void 0})]),Object.defineProperty(e,_,{value:!0,enumerable:!1}),e}class O extends Error{constructor(e,r){super(r),this.statusCode=e}}function C(e,r,t){e.statusCode=r,e.statusMessage=t,e.end(t)}function N({req:e},r,t){let n={configurable:!0,enumerable:!0},o={...n,writable:!0};Object.defineProperty(e,r,{...n,get:()=>{let n=t();return Object.defineProperty(e,r,{...o,value:n}),n},set:t=>{Object.defineProperty(e,r,{...o,value:t})}})}class j{constructor({userland:e,definition:r}){this.userland=e,this.definition=r}}var T=t("./dist/compiled/bytes/index.js"),P=/*#__PURE__*/t.n(T);let A=e=>{let r=e.length,t=0,n=0,o=8997,i=0,a=33826,s=0,d=40164,u=0,l=52210;for(;t<r;)o^=e.charCodeAt(t++),n=435*o,i=435*a,s=435*d,u=435*l,s+=o<<8,u+=a<<8,i+=n>>>16,o=65535&n,s+=i>>>16,a=65535&i,l=u+(s>>>16)&65535,d=65535&s;return(15&l)*0x1000000000000+0x100000000*d+65536*a+(o^l>>4)},H=(e,r=!1)=>(r?'W/"':'"')+A(e).toString(36)+e.length.toString(36)+'"';"undefined"!=typeof performance&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);var M=t("./dist/compiled/fresh/index.js"),k=/*#__PURE__*/t.n(M);let B=require("stream");function L(e){return"object"==typeof e&&null!==e&&"name"in e&&"message"in e}var D=t("./dist/compiled/@edge-runtime/cookies/index.js"),$=t("./dist/compiled/content-type/index.js");async function q(e,r){let n,o;try{n=(0,$.parse)(e.headers["content-type"]||"text/plain")}catch{n=(0,$.parse)("text/plain")}let{type:i,parameters:a}=n,s=a.charset||"utf-8";try{let n=t("next/dist/compiled/raw-body");o=await n(e,{encoding:s,limit:r})}catch(e){if(L(e)&&"entity.too.large"===e.type)throw Object.defineProperty(new O(413,\`Body exceeded \${r} limit\`),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});throw Object.defineProperty(new O(400,"Invalid body"),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0})}let d=o.toString();return"application/json"===i||"application/ld+json"===i?function(e){if(0===e.length)return{};try{return JSON.parse(e)}catch(e){throw Object.defineProperty(new O(400,"Invalid JSON"),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0})}}(d):"application/x-www-form-urlencoded"===i?t("querystring").decode(d):d}function I(e){return"string"==typeof e&&e.length>=16}async function K(e,r,t,n){if("string"!=typeof e||!e.startsWith("/"))throw Object.defineProperty(Error(\`Invalid urlPath provided to revalidate(), must be a path e.g. /blog/post-1, received \${e}\`),"__NEXT_ERROR_CODE",{value:"E153",enumerable:!1,configurable:!0});let o={[i]:n.previewModeId,...r.unstable_onlyGenerated?{[a]:"1"}:{}},s=[...n.allowedRevalidateHeaderKeys||[]];for(let e of((n.trustHostHeader||n.dev)&&s.push("cookie"),n.trustHostHeader&&s.push("x-vercel-protection-bypass"),Object.keys(t.headers)))s.includes(e)&&(o[e]=t.headers[e]);try{if(n.trustHostHeader){let n=await (await import("@opennextjs/cloudflare")).getCloudflareContext().env.WORKER_SELF_REFERENCE.fetch(\`\${t.headers.host.includes("localhost") ? "http":"https" }://\${t.headers.host}\${e}\`,{method:'HEAD', headers:o}),i=n.headers.get("x-vercel-cache")||n.headers.get("x-nextjs-cache");if((null==i?void 0:i.toUpperCase())!=="REVALIDATED"&&200!==n.status&&!(404===n.status&&r.unstable_onlyGenerated))throw Object.defineProperty(Error(\`Invalid response \${n.status}\`),"__NEXT_ERROR_CODE",{value:"E175",enumerable:!1,configurable:!0})}else if(n.revalidate)await n.revalidate({urlPath:e,revalidateHeaders:o,opts:r});else throw Object.defineProperty(Error("Invariant: required internal revalidate method not passed to api-utils"),"__NEXT_ERROR_CODE",{value:"E174",enumerable:!1,configurable:!0})}catch(r){throw Object.defineProperty(Error(\`Failed to revalidate \${e}: \${L(r)?r.message:r}\`),"__NEXT_ERROR_CODE",{value:"E240",enumerable:!1,configurable:!0})}}async function X(e,r,n,s,d,u,l,p,c){try{var f,g,v,m;if(!s){r.statusCode=404,r.end("Not Found");return}let u=s.config||{},l=(null==(f=u.api)?void 0:f.bodyParser)!==!1,p=(null==(g=u.api)?void 0:g.responseLimit)??!0;null==(v=u.api)||v.externalResolver,N({req:e},"cookies",(m=e.headers,function(){let{cookie:e}=m;if(!e)return{};let{parse:r}=t("./dist/compiled/cookie/index.js");return r(Array.isArray(e)?e.join("; "):e)})),e.query=n,N({req:e},"previewData",()=>(function(e,r,n,s){var d,u;let l;if(n&&function(e,r){let t=o.from(e.headers);return{isOnDemandRevalidate:t.get(i)===r.previewModeId,revalidateOnlyGenerated:t.has(a)}}(e,n).isOnDemandRevalidate)return!1;if(R in e)return e[R];let p=o.from(e.headers),c=new D.RequestCookies(p),f=null==(d=c.get(w))?void 0:d.value,g=null==(u=c.get(S))?void 0:u.value;if(f&&!g&&f===n.previewModeId){let r={};return Object.defineProperty(e,R,{value:r,enumerable:!1}),r}if(!f&&!g)return!1;if(!f||!g||f!==n.previewModeId)return s||E(r),!1;try{l=t("next/dist/compiled/jsonwebtoken").verify(g,n.previewModeSigningKey)}catch{return E(r),!1}let{decryptWithSecret:v}=t("./dist/esm/server/crypto-utils.js"),m=v(Buffer.from(n.previewModeEncryptionKey),l.data);try{let r=JSON.parse(m);return Object.defineProperty(e,R,{value:r,enumerable:!1}),r}catch{return!1}})(e,r,d,!!d.multiZoneDraftMode)),N({req:e},"preview",()=>!1!==e.previewData||void 0),N({req:e},"draftMode",()=>e.preview),l&&!e.body&&(e.body=await q(e,u.api&&u.api.bodyParser&&u.api.bodyParser.sizeLimit?u.api.bodyParser.sizeLimit:"1mb"));let c=0,h=p&&"boolean"!=typeof p?P().parse(p):4194304,y=r.write,b=r.end;r.write=(...e)=>(c+=Buffer.byteLength(e[0]||""),y.apply(r,e)),r.end=(...t)=>(t.length&&"function"!=typeof t[0]&&(c+=Buffer.byteLength(t[0]||"")),p&&c>=h&&console.warn(\`API response for \${e.url} exceeds \${P().format(h)}. API Routes are meant to respond quickly. https://nextjs.org/docs/messages/api-routes-response-size-limit\`),b.apply(r,t)),r.status=e=>(r.statusCode=e,r),r.send=t=>(function(e,r,t){var n;if(null==t){r.end();return}if(204===r.statusCode||304===r.statusCode){r.removeHeader("Content-Type"),r.removeHeader("Content-Length"),r.removeHeader("Transfer-Encoding"),r.end();return}let o=r.getHeader("Content-Type");if(t instanceof B.Stream){o||r.setHeader("Content-Type","application/octet-stream"),t.pipe(r);return}let i=["object","number","boolean"].includes(typeof t),a=i?JSON.stringify(t):t;if((n=H(a))&&r.setHeader("ETag",n),!k()(e.headers,{etag:n})||(r.statusCode=304,r.end(),0)){if(Buffer.isBuffer(t)){o||r.setHeader("Content-Type","application/octet-stream"),r.setHeader("Content-Length",t.length),r.end(t);return}i&&r.setHeader("Content-Type","application/json; charset=utf-8"),r.setHeader("Content-Length",Buffer.byteLength(a)),r.end(a)}})(e,r,t),r.json=e=>{r.setHeader("Content-Type","application/json; charset=utf-8"),r.send(JSON.stringify(e))},r.redirect=(e,t)=>(function(e,r,t){if("string"==typeof r&&(t=r,r=307),"number"!=typeof r||"string"!=typeof t)throw Object.defineProperty(Error("Invalid redirect arguments. Please use a single argument URL, e.g. res.redirect('/destination') or use a status code and URL, e.g. res.redirect(307, '/destination')."),"__NEXT_ERROR_CODE",{value:"E389",enumerable:!1,configurable:!0});return e.writeHead(r,{Location:t}),e.write(t),e.end(),e})(r,e,t),r.setDraftMode=(e={enable:!0})=>(function(e,r){if(!I(r.previewModeId))throw Object.defineProperty(Error("invariant: invalid previewModeId"),"__NEXT_ERROR_CODE",{value:"E169",enumerable:!1,configurable:!0});let n=r.enable?void 0:new Date(0),{serialize:o}=t("./dist/compiled/cookie/index.js"),i=e.getHeader("Set-Cookie");return e.setHeader("Set-Cookie",[..."string"==typeof i?[i]:Array.isArray(i)?i:[],o(w,r.previewModeId,{httpOnly:!0,sameSite:"none",secure:!0,path:"/",expires:n})]),e})(r,Object.assign({},d,e)),r.setPreviewData=(e,n={})=>(function(e,r,n){if(!I(n.previewModeId))throw Object.defineProperty(Error("invariant: invalid previewModeId"),"__NEXT_ERROR_CODE",{value:"E169",enumerable:!1,configurable:!0});if(!I(n.previewModeEncryptionKey))throw Object.defineProperty(Error("invariant: invalid previewModeEncryptionKey"),"__NEXT_ERROR_CODE",{value:"E334",enumerable:!1,configurable:!0});if(!I(n.previewModeSigningKey))throw Object.defineProperty(Error("invariant: invalid previewModeSigningKey"),"__NEXT_ERROR_CODE",{value:"E436",enumerable:!1,configurable:!0});let o=t("next/dist/compiled/jsonwebtoken"),{encryptWithSecret:i}=t("./dist/esm/server/crypto-utils.js"),a=o.sign({data:i(Buffer.from(n.previewModeEncryptionKey),JSON.stringify(r))},n.previewModeSigningKey,{algorithm:"HS256",...void 0!==n.maxAge?{expiresIn:n.maxAge}:void 0});if(a.length>2048)throw Object.defineProperty(Error("Preview data is limited to 2KB currently, reduce how much data you are storing as preview data to continue"),"__NEXT_ERROR_CODE",{value:"E465",enumerable:!1,configurable:!0});let{serialize:s}=t("./dist/compiled/cookie/index.js"),d=e.getHeader("Set-Cookie");return e.setHeader("Set-Cookie",[..."string"==typeof d?[d]:Array.isArray(d)?d:[],s(w,n.previewModeId,{httpOnly:!0,sameSite:"none",secure:!0,path:"/",...void 0!==n.maxAge?{maxAge:n.maxAge}:void 0,...void 0!==n.path?{path:n.path}:void 0}),s(S,a,{httpOnly:!0,sameSite:"none",secure:!0,path:"/",...void 0!==n.maxAge?{maxAge:n.maxAge}:void 0,...void 0!==n.path?{path:n.path}:void 0})]),e})(r,e,Object.assign({},d,n)),r.clearPreviewData=(e={})=>E(r,e),r.revalidate=(r,t)=>K(r,t||{},e,d);let x=s.default||s;await x(e,r)}catch(t){if(null==c||c(t,e,{routerKind:"Pages Router",routePath:p||"",routeType:"route",revalidateReason:void 0}),t instanceof O)C(r,t.statusCode,t.message);else{if(l)throw L(t)&&(t.page=p),t;if(console.error(t),u)throw t;C(r,500,"Internal Server Error")}}}class z extends j{constructor(e){if(super(e),"function"!=typeof e.userland.default)throw Object.defineProperty(Error(\`Page \${e.definition.page} does not export a default function.\`),"__NEXT_ERROR_CODE",{value:"E379",enumerable:!1,configurable:!0});this.apiResolverWrapped=function(e,r){return(...t)=>((0,d.getTracer)().setRootSpanAttribute("next.route",e),(0,d.getTracer)().trace(h.runHandler,{spanName:\`executing api route (pages) \${e}\`},()=>r(...t)))}(e.definition.page,X)}async render(e,r,t){let{apiResolverWrapped:n}=this;await n(e,r,t.query,this.userland,{...t.previewProps,revalidate:t.revalidate,trustHostHeader:t.trustHostHeader,allowedRevalidateHeaderKeys:t.allowedRevalidateHeaderKeys,hostname:t.hostname,multiZoneDraftMode:t.multiZoneDraftMode,dev:t.dev},t.minimalMode,t.dev,t.page,t.onError)}}let U=z})(),module.exports=n})();"`);
74
- });
75
- test("patch unminified code", () => {
76
- expect(patchCode(unminifiedCode, rule))
77
- .toMatchInlineSnapshot(`"async function revalidate(urlPath, opts, req, context) {
78
- if (typeof urlPath !== 'string' || !urlPath.startsWith('/')) {
79
- throw Object.defineProperty(new Error(\`Invalid urlPath provided to revalidate(), must be a path e.g. /blog/post-1, received \${urlPath}\`), "__NEXT_ERROR_CODE", {
80
- value: "E153",
81
- enumerable: false,
82
- configurable: true
83
- });
84
- }
85
- const revalidateHeaders = {
86
- [_constants.PRERENDER_REVALIDATE_HEADER]: context.previewModeId,
87
- ...opts.unstable_onlyGenerated ? {
88
- [_constants.PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER]: '1'
89
- } : {}
90
- };
91
- const allowedRevalidateHeaderKeys = [
92
- ...context.allowedRevalidateHeaderKeys || []
93
- ];
94
- if (context.trustHostHeader || context.dev) {
95
- allowedRevalidateHeaderKeys.push('cookie');
96
- }
97
- if (context.trustHostHeader) {
98
- allowedRevalidateHeaderKeys.push('x-vercel-protection-bypass');
99
- }
100
- for (const key of Object.keys(req.headers)){
101
- if (allowedRevalidateHeaderKeys.includes(key)) {
102
- revalidateHeaders[key] = req.headers[key];
103
- }
104
- }
105
- try {
106
- if (context.trustHostHeader) {
107
- const res = await (await import("@opennextjs/cloudflare")).getCloudflareContext().env.WORKER_SELF_REFERENCE.fetch(\`\${req.headers.host.includes("localhost") ? "http":"https" }://\${req.headers.host}\${urlPath}\`,{method:'HEAD', headers:revalidateHeaders});
108
- // we use the cache header to determine successful revalidate as
109
- // a non-200 status code can be returned from a successful revalidate
110
- // e.g. notFound: true returns 404 status code but is successful
111
- const cacheHeader = res.headers.get('x-vercel-cache') || res.headers.get('x-nextjs-cache');
112
- if ((cacheHeader == null ? void 0 : cacheHeader.toUpperCase()) !== 'REVALIDATED' && res.status !== 200 && !(res.status === 404 && opts.unstable_onlyGenerated)) {
113
- throw Object.defineProperty(new Error(\`Invalid response \${res.status}\`), "__NEXT_ERROR_CODE", {
114
- value: "E175",
115
- enumerable: false,
116
- configurable: true
117
- });
118
- }
119
- } else if (context.revalidate) {
120
- await context.revalidate({
121
- urlPath,
122
- revalidateHeaders,
123
- opts
124
- });
125
- } else {
126
- throw Object.defineProperty(new Error(\`Invariant: required internal revalidate method not passed to api-utils\`), "__NEXT_ERROR_CODE", {
127
- value: "E174",
128
- enumerable: false,
129
- configurable: true
130
- });
131
- }
132
- } catch (err) {
133
- throw Object.defineProperty(new Error(\`Failed to revalidate \${urlPath}: \${(0, _iserror.default)(err) ? err.message : err}\`), "__NEXT_ERROR_CODE", {
134
- value: "E240",
135
- enumerable: false,
136
- configurable: true
137
- });
138
- }
139
- }"`);
140
- });
141
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,156 +0,0 @@
1
- import { patchCode } from "@opennextjs/aws/build/patch/astCodePatcher.js";
2
- import { expect, test } from "vitest";
3
- import { rule } from "./use-cache.js";
4
- const codeToPatch = `"use strict";
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- 0 && (module.exports = {
9
- bindSnapshot: null,
10
- createAsyncLocalStorage: null,
11
- createSnapshot: null
12
- });
13
- function _export(target, all) {
14
- for(var name in all)Object.defineProperty(target, name, {
15
- enumerable: true,
16
- get: all[name]
17
- });
18
- }
19
- _export(exports, {
20
- bindSnapshot: function() {
21
- return bindSnapshot;
22
- },
23
- createAsyncLocalStorage: function() {
24
- return createAsyncLocalStorage;
25
- },
26
- createSnapshot: function() {
27
- return createSnapshot;
28
- }
29
- });
30
- const sharedAsyncLocalStorageNotAvailableError = Object.defineProperty(new Error('Invariant: AsyncLocalStorage accessed in runtime where it is not available'), "__NEXT_ERROR_CODE", {
31
- value: "E504",
32
- enumerable: false,
33
- configurable: true
34
- });
35
- class FakeAsyncLocalStorage {
36
- disable() {
37
- throw sharedAsyncLocalStorageNotAvailableError;
38
- }
39
- getStore() {
40
- // This fake implementation of AsyncLocalStorage always returns \`undefined\`.
41
- return undefined;
42
- }
43
- run() {
44
- throw sharedAsyncLocalStorageNotAvailableError;
45
- }
46
- exit() {
47
- throw sharedAsyncLocalStorageNotAvailableError;
48
- }
49
- enterWith() {
50
- throw sharedAsyncLocalStorageNotAvailableError;
51
- }
52
- static bind(fn) {
53
- return fn;
54
- }
55
- }
56
- const maybeGlobalAsyncLocalStorage = typeof globalThis !== 'undefined' && globalThis.AsyncLocalStorage;
57
- function createAsyncLocalStorage() {
58
- if (maybeGlobalAsyncLocalStorage) {
59
- return new maybeGlobalAsyncLocalStorage();
60
- }
61
- return new FakeAsyncLocalStorage();
62
- }
63
- function bindSnapshot(fn) {
64
- if (maybeGlobalAsyncLocalStorage) {
65
- return maybeGlobalAsyncLocalStorage.bind(fn);
66
- }
67
- return FakeAsyncLocalStorage.bind(fn);
68
- }
69
- function createSnapshot() {
70
- if (maybeGlobalAsyncLocalStorage) {
71
- return maybeGlobalAsyncLocalStorage.snapshot();
72
- }
73
- return function(fn, ...args) {
74
- return fn(...args);
75
- };
76
- }
77
-
78
- //# sourceMappingURL=async-local-storage.js.map
79
- `;
80
- test("patch the createSnapshot function", () => {
81
- const patchedCode = patchCode(codeToPatch, rule);
82
- expect(patchedCode).toMatchInlineSnapshot(`""use strict";
83
- Object.defineProperty(exports, "__esModule", {
84
- value: true
85
- });
86
- 0 && (module.exports = {
87
- bindSnapshot: null,
88
- createAsyncLocalStorage: null,
89
- createSnapshot: null
90
- });
91
- function _export(target, all) {
92
- for(var name in all)Object.defineProperty(target, name, {
93
- enumerable: true,
94
- get: all[name]
95
- });
96
- }
97
- _export(exports, {
98
- bindSnapshot: function() {
99
- return bindSnapshot;
100
- },
101
- createAsyncLocalStorage: function() {
102
- return createAsyncLocalStorage;
103
- },
104
- createSnapshot: function() {
105
- return createSnapshot;
106
- }
107
- });
108
- const sharedAsyncLocalStorageNotAvailableError = Object.defineProperty(new Error('Invariant: AsyncLocalStorage accessed in runtime where it is not available'), "__NEXT_ERROR_CODE", {
109
- value: "E504",
110
- enumerable: false,
111
- configurable: true
112
- });
113
- class FakeAsyncLocalStorage {
114
- disable() {
115
- throw sharedAsyncLocalStorageNotAvailableError;
116
- }
117
- getStore() {
118
- // This fake implementation of AsyncLocalStorage always returns \`undefined\`.
119
- return undefined;
120
- }
121
- run() {
122
- throw sharedAsyncLocalStorageNotAvailableError;
123
- }
124
- exit() {
125
- throw sharedAsyncLocalStorageNotAvailableError;
126
- }
127
- enterWith() {
128
- throw sharedAsyncLocalStorageNotAvailableError;
129
- }
130
- static bind(fn) {
131
- return fn;
132
- }
133
- }
134
- const maybeGlobalAsyncLocalStorage = typeof globalThis !== 'undefined' && globalThis.AsyncLocalStorage;
135
- function createAsyncLocalStorage() {
136
- if (maybeGlobalAsyncLocalStorage) {
137
- return new maybeGlobalAsyncLocalStorage();
138
- }
139
- return new FakeAsyncLocalStorage();
140
- }
141
- function bindSnapshot(fn) {
142
- if (maybeGlobalAsyncLocalStorage) {
143
- return maybeGlobalAsyncLocalStorage.bind(fn);
144
- }
145
- return FakeAsyncLocalStorage.bind(fn);
146
- }
147
- function createSnapshot() {
148
- // Ignored snapshot
149
- return function(fn, ...args) {
150
- return fn(...args);
151
- };
152
- }
153
-
154
- //# sourceMappingURL=async-local-storage.js.map
155
- "`);
156
- });
@@ -1,12 +0,0 @@
1
- /**
2
- * Applies multiple code patches in order to a given piece of code, at each step it validates that the code
3
- * has actually been patched/changed, if not an error is thrown
4
- *
5
- * @param code the code to apply the patches to
6
- * @param patches array of tuples, containing a string indicating the target of the patching (for logging) and
7
- * a patching function that takes a string (pre-patch code) and returns a string (post-patch code)
8
- * @returns the patched code
9
- */
10
- export declare function patchCodeWithValidations(code: string, patches: [string, (code: string) => string | Promise<string>, opts?: {
11
- isOptional?: boolean;
12
- }][]): Promise<string>;
@@ -1,22 +0,0 @@
1
- /**
2
- * Applies multiple code patches in order to a given piece of code, at each step it validates that the code
3
- * has actually been patched/changed, if not an error is thrown
4
- *
5
- * @param code the code to apply the patches to
6
- * @param patches array of tuples, containing a string indicating the target of the patching (for logging) and
7
- * a patching function that takes a string (pre-patch code) and returns a string (post-patch code)
8
- * @returns the patched code
9
- */
10
- export async function patchCodeWithValidations(code, patches) {
11
- console.log(`Applying code patches:`);
12
- let patchedCode = code;
13
- for (const [target, patchFunction, opts] of patches) {
14
- console.log(` - patching ${target}`);
15
- const prePatchCode = patchedCode;
16
- patchedCode = await patchFunction(patchedCode);
17
- if (!opts?.isOptional && prePatchCode === patchedCode) {
18
- throw new Error(`Failed to patch ${target}`);
19
- }
20
- }
21
- return patchedCode;
22
- }
@@ -1,67 +0,0 @@
1
- import { appendFileSync, writeFileSync } from "node:fs";
2
- import mockFs from "mock-fs";
3
- import { afterEach, beforeEach, describe, expect, it } from "vitest";
4
- import { extractProjectEnvVars } from "./extract-project-env-vars.js";
5
- const options = { monorepoRoot: "", appPath: "" };
6
- describe("extractProjectEnvVars", () => {
7
- beforeEach(() => {
8
- mockFs({
9
- ".env": "ENV_VAR=value",
10
- ".env.local": "ENV_LOCAL_VAR=value",
11
- ".env.test": "ENV_TEST_VAR=value",
12
- ".env.test.local": "ENV_TEST_LOCAL_VAR=value",
13
- ".env.development": "ENV_DEV_VAR=value",
14
- ".env.development.local": "ENV_DEV_LOCAL_VAR=value",
15
- ".env.production": "ENV_PROD_VAR=value",
16
- ".env.production.local": "ENV_PROD_LOCAL_VAR=value",
17
- });
18
- });
19
- afterEach(() => mockFs.restore());
20
- it("should extract production env vars", () => {
21
- const result = extractProjectEnvVars("production", options);
22
- expect(result).toEqual({
23
- ENV_LOCAL_VAR: "value",
24
- ENV_PROD_LOCAL_VAR: "value",
25
- ENV_PROD_VAR: "value",
26
- ENV_VAR: "value",
27
- });
28
- });
29
- it("should extract development env vars", () => {
30
- writeFileSync(".dev.vars", 'NEXTJS_ENV = "development"');
31
- const result = extractProjectEnvVars("development", options);
32
- expect(result).toEqual({
33
- ENV_LOCAL_VAR: "value",
34
- ENV_DEV_LOCAL_VAR: "value",
35
- ENV_DEV_VAR: "value",
36
- ENV_VAR: "value",
37
- });
38
- });
39
- it("should override env vars with those in a local file", () => {
40
- writeFileSync(".env.production.local", "ENV_PROD_VAR=overridden");
41
- const result = extractProjectEnvVars("production", options);
42
- expect(result).toEqual({
43
- ENV_LOCAL_VAR: "value",
44
- ENV_PROD_VAR: "overridden",
45
- ENV_VAR: "value",
46
- });
47
- });
48
- it("should support referencing variables", () => {
49
- appendFileSync(".env.production.local", "\nENV_PROD_LOCAL_VAR_REF=$ENV_PROD_LOCAL_VAR");
50
- const result = extractProjectEnvVars("production", options);
51
- expect(result).toEqual({
52
- ENV_LOCAL_VAR: "value",
53
- ENV_PROD_LOCAL_VAR: "value",
54
- ENV_PROD_LOCAL_VAR_REF: "value",
55
- ENV_PROD_VAR: "value",
56
- ENV_VAR: "value",
57
- });
58
- });
59
- it("should exclude .env.local files when extracting test env vars", () => {
60
- const result = extractProjectEnvVars("test", options);
61
- expect(result).toEqual({
62
- ENV_TEST_LOCAL_VAR: "value",
63
- ENV_TEST_VAR: "value",
64
- ENV_VAR: "value",
65
- });
66
- });
67
- });
@@ -1 +0,0 @@
1
- export {};