waku 1.0.0-beta.0 → 1.0.0-beta.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 (95) hide show
  1. package/README.md +21 -3
  2. package/dist/adapters/aws-lambda.d.ts +6 -1
  3. package/dist/adapters/aws-lambda.js +15 -5
  4. package/dist/adapters/aws-lambda.js.map +1 -1
  5. package/dist/adapters/bun.d.ts +6 -1
  6. package/dist/adapters/bun.js +15 -5
  7. package/dist/adapters/bun.js.map +1 -1
  8. package/dist/adapters/cloudflare.d.ts +6 -1
  9. package/dist/adapters/cloudflare.js +26 -10
  10. package/dist/adapters/cloudflare.js.map +1 -1
  11. package/dist/adapters/default.d.ts +4 -1
  12. package/dist/adapters/deno.d.ts +6 -1
  13. package/dist/adapters/deno.js +15 -5
  14. package/dist/adapters/deno.js.map +1 -1
  15. package/dist/adapters/edge.d.ts +6 -1
  16. package/dist/adapters/edge.js +15 -5
  17. package/dist/adapters/edge.js.map +1 -1
  18. package/dist/adapters/netlify-build-enhancer.js +4 -4
  19. package/dist/adapters/netlify-build-enhancer.js.map +1 -1
  20. package/dist/adapters/netlify.d.ts +6 -1
  21. package/dist/adapters/netlify.js +15 -5
  22. package/dist/adapters/netlify.js.map +1 -1
  23. package/dist/adapters/node.d.ts +6 -1
  24. package/dist/adapters/node.js +15 -5
  25. package/dist/adapters/node.js.map +1 -1
  26. package/dist/adapters/vercel-build-enhancer.js +3 -2
  27. package/dist/adapters/vercel-build-enhancer.js.map +1 -1
  28. package/dist/adapters/vercel.d.ts +6 -1
  29. package/dist/adapters/vercel.js +15 -5
  30. package/dist/adapters/vercel.js.map +1 -1
  31. package/dist/lib/env.d.ts +5 -0
  32. package/dist/lib/env.js +12 -0
  33. package/dist/lib/env.js.map +1 -0
  34. package/dist/lib/hono/middleware.d.ts +7 -3
  35. package/dist/lib/hono/middleware.js +2 -9
  36. package/dist/lib/hono/middleware.js.map +1 -1
  37. package/dist/lib/types.d.ts +0 -1
  38. package/dist/lib/types.js.map +1 -1
  39. package/dist/lib/utils/initial-rsc.d.ts +8 -0
  40. package/dist/lib/utils/initial-rsc.js +36 -0
  41. package/dist/lib/utils/initial-rsc.js.map +1 -0
  42. package/dist/lib/utils/log.d.ts +1 -0
  43. package/dist/lib/utils/log.js +9 -0
  44. package/dist/lib/utils/log.js.map +1 -0
  45. package/dist/lib/utils/path.js +4 -3
  46. package/dist/lib/utils/path.js.map +1 -1
  47. package/dist/lib/utils/prefetch-cache.d.ts +14 -0
  48. package/dist/lib/utils/prefetch-cache.js +50 -0
  49. package/dist/lib/utils/prefetch-cache.js.map +1 -0
  50. package/dist/lib/utils/react-debug-channel.d.ts +1 -3
  51. package/dist/lib/utils/react-debug-channel.js +6 -7
  52. package/dist/lib/utils/react-debug-channel.js.map +1 -1
  53. package/dist/lib/utils/render.js +2 -1
  54. package/dist/lib/utils/render.js.map +1 -1
  55. package/dist/lib/utils/request.js +37 -0
  56. package/dist/lib/utils/request.js.map +1 -1
  57. package/dist/lib/utils/ssr.d.ts +0 -1
  58. package/dist/lib/utils/ssr.js +2 -32
  59. package/dist/lib/utils/ssr.js.map +1 -1
  60. package/dist/lib/vite-entries/entry.build.js +5 -8
  61. package/dist/lib/vite-entries/entry.build.js.map +1 -1
  62. package/dist/lib/vite-entries/entry.server.js +2 -2
  63. package/dist/lib/vite-entries/entry.server.js.map +1 -1
  64. package/dist/lib/vite-plugins/combined-plugins.js +20 -2
  65. package/dist/lib/vite-plugins/combined-plugins.js.map +1 -1
  66. package/dist/lib/vite-plugins/static-build.js +2 -1
  67. package/dist/lib/vite-plugins/static-build.js.map +1 -1
  68. package/dist/lib/vite-rsc/handler.js +14 -7
  69. package/dist/lib/vite-rsc/handler.js.map +1 -1
  70. package/dist/lib/vite-rsc/ssr.js +2 -3
  71. package/dist/lib/vite-rsc/ssr.js.map +1 -1
  72. package/dist/minimal/client.js +70 -57
  73. package/dist/minimal/client.js.map +1 -1
  74. package/dist/router/client.d.ts +1 -3
  75. package/dist/router/client.js +39 -46
  76. package/dist/router/client.js.map +1 -1
  77. package/dist/router/create-pages.d.ts +3 -1
  78. package/dist/router/create-pages.js +11 -2
  79. package/dist/router/create-pages.js.map +1 -1
  80. package/dist/router/define-router.d.ts +20 -2
  81. package/dist/router/define-router.js +262 -232
  82. package/dist/router/define-router.js.map +1 -1
  83. package/dist/router/fs-router.d.ts +6 -0
  84. package/dist/router/fs-router.js +10 -5
  85. package/dist/router/fs-router.js.map +1 -1
  86. package/dist/router/server.d.ts +3 -2
  87. package/dist/router/server.js +1 -1
  88. package/dist/router/server.js.map +1 -1
  89. package/dist/server.d.ts +1 -7
  90. package/dist/server.js +1 -15
  91. package/dist/server.js.map +1 -1
  92. package/package.json +4 -4
  93. package/dist/lib/context.d.ts +0 -9
  94. package/dist/lib/context.js +0 -26
  95. package/dist/lib/context.js.map +0 -1
package/README.md CHANGED
@@ -15,8 +15,6 @@ visit [waku.gg](https://waku.gg) or `npm create waku@latest`
15
15
 
16
16
  **Waku** _(wah-ku)_ or **わく** is the minimal React framework. It’s lightweight and designed for a fun developer experience, yet supports all the latest React 19 features like server components and actions. Built for marketing sites, headless commerce, and web apps. For large enterprise applications, you may prefer a heavier framework.
17
17
 
18
- > Please try Waku on non-production projects and report any issues you find. Contributors are welcome.
19
-
20
18
  ## Getting started
21
19
 
22
20
  Start a new Waku project with the `create` command for your preferred package manager. It will scaffold a new project with our default [Waku starter](https://github.com/wakujs/waku/tree/main/examples/01_template).
@@ -31,7 +29,7 @@ npm create waku@latest
31
29
  - `waku build` to generate a production build
32
30
  - `waku start` to serve the production build locally
33
31
 
34
- **Node.js version requirement:** `^26.0.0` or `^24.0.0` or `^22.12.0`
32
+ **Node.js version requirement:** `^26.0.0` or `^24.0.0` or `^22.13.0`
35
33
 
36
34
  ## Rendering
37
35
 
@@ -1047,6 +1045,26 @@ export default logger;
1047
1045
 
1048
1046
  If you provide a custom `./src/waku.server.tsx`, pass middleware through the adapter options with `middlewareModules` or `middlewareFns`.
1049
1047
 
1048
+ ## Interceptors
1049
+
1050
+ Files in `./src/pages/_interceptors` are loaded as handler interceptors. Each file should default export a `HandlerInterceptor` from `waku/router/server`.
1051
+
1052
+ An interceptor wraps each render, in both the request and build phases, and runs inside the request scope. Use it for cross-cutting concerns around a render, such as logging or installing an `AsyncLocalStorage`.
1053
+
1054
+ ```ts
1055
+ // ./src/pages/_interceptors/logger.ts
1056
+ import type { HandlerInterceptor } from 'waku/router/server';
1057
+
1058
+ const logger: HandlerInterceptor = async (next) => {
1059
+ console.log('render start');
1060
+ const result = await next();
1061
+ console.log('render end');
1062
+ return result;
1063
+ };
1064
+
1065
+ export default logger;
1066
+ ```
1067
+
1050
1068
  ## Data fetching
1051
1069
 
1052
1070
  ### Server
@@ -1,7 +1,12 @@
1
1
  import type { MiddlewareHandler } from 'hono';
2
+ import { bodyLimit } from 'hono/body-limit';
3
+ import { Hono } from 'hono/tiny';
2
4
  declare const _default: (handlers: import("../lib/types.js").Unstable_Handlers, options?: {
3
5
  streaming?: boolean;
4
- middlewareFns?: (() => MiddlewareHandler)[];
6
+ bodyLimit?: Parameters<typeof bodyLimit>[0] | false;
7
+ middlewareFns?: ((opts: {
8
+ app: Hono;
9
+ }) => MiddlewareHandler)[];
5
10
  middlewareModules?: Record<string, () => Promise<unknown>>;
6
11
  } | undefined) => import("../lib/types.js").Unstable_ServerEntry;
7
12
  export default _default;
@@ -1,13 +1,15 @@
1
1
  import path from 'node:path';
2
2
  import { serveStatic } from '@hono/node-server/serve-static';
3
3
  import * as honoAwsLambda from 'hono/aws-lambda';
4
+ import { bodyLimit } from 'hono/body-limit';
4
5
  import { Hono } from 'hono/tiny';
5
6
  import { unstable_createServerEntryAdapter as createServerEntryAdapter } from 'waku/adapter-builders';
6
7
  import { unstable_constants as constants, unstable_honoMiddleware as honoMiddleware } from 'waku/internals';
7
8
  const { DIST_PUBLIC } = constants;
8
- const { contextMiddleware, rscMiddleware, middlewareRunner } = honoMiddleware;
9
+ const { rscMiddleware, middlewareRunner } = honoMiddleware;
10
+ const DEFAULT_BODY_LIMIT_MAX_SIZE = 100 * 1024 * 1024;
9
11
  export default createServerEntryAdapter(({ processRequest, processBuild, config, isBuild, notFoundHtml }, options)=>{
10
- const { middlewareFns = [], middlewareModules = {} } = options || {};
12
+ const { bodyLimit: bodyLimitOptions, middlewareFns = [], middlewareModules = {} } = options || {};
11
13
  const app = new Hono();
12
14
  app.notFound((c)=>{
13
15
  if (notFoundHtml) {
@@ -20,11 +22,19 @@ export default createServerEntryAdapter(({ processRequest, processBuild, config,
20
22
  root: path.join(config.distDir, DIST_PUBLIC)
21
23
  }));
22
24
  }
23
- app.use(contextMiddleware());
25
+ if (bodyLimitOptions !== false) {
26
+ app.use(bodyLimit(bodyLimitOptions ?? {
27
+ maxSize: DEFAULT_BODY_LIMIT_MAX_SIZE
28
+ }));
29
+ }
24
30
  for (const middlewareFn of middlewareFns){
25
- app.use(middlewareFn());
31
+ app.use(middlewareFn({
32
+ app
33
+ }));
26
34
  }
27
- app.use(middlewareRunner(middlewareModules));
35
+ app.use(middlewareRunner(middlewareModules, {
36
+ app
37
+ }));
28
38
  app.use(rscMiddleware({
29
39
  processRequest
30
40
  }));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/adapters/aws-lambda.ts"],"sourcesContent":["import path from 'node:path';\nimport { serveStatic } from '@hono/node-server/serve-static';\nimport type { MiddlewareHandler } from 'hono';\nimport * as honoAwsLambda from 'hono/aws-lambda';\nimport { Hono } from 'hono/tiny';\nimport { unstable_createServerEntryAdapter as createServerEntryAdapter } from 'waku/adapter-builders';\nimport {\n unstable_constants as constants,\n unstable_honoMiddleware as honoMiddleware,\n} from 'waku/internals';\nimport type { BuildOptions } from './aws-lambda-build-enhancer.js';\n\nconst { DIST_PUBLIC } = constants;\nconst { contextMiddleware, rscMiddleware, middlewareRunner } = honoMiddleware;\n\nexport default createServerEntryAdapter(\n (\n { processRequest, processBuild, config, isBuild, notFoundHtml },\n options?: {\n streaming?: boolean;\n middlewareFns?: (() => MiddlewareHandler)[];\n middlewareModules?: Record<string, () => Promise<unknown>>;\n },\n ) => {\n const { middlewareFns = [], middlewareModules = {} } = options || {};\n const app = new Hono();\n app.notFound((c) => {\n if (notFoundHtml) {\n return c.html(notFoundHtml, 404);\n }\n return c.text('404 Not Found', 404);\n });\n if (isBuild) {\n app.use(serveStatic({ root: path.join(config.distDir, DIST_PUBLIC) }));\n }\n app.use(contextMiddleware());\n for (const middlewareFn of middlewareFns) {\n app.use(middlewareFn());\n }\n app.use(middlewareRunner(middlewareModules as never));\n app.use(rscMiddleware({ processRequest }));\n const buildOptions: BuildOptions = {\n distDir: config.distDir,\n };\n (globalThis as any).__WAKU_AWS_LAMBDA_HANDLE__ = options?.streaming\n ? honoAwsLambda.streamHandle\n : honoAwsLambda.handle;\n return {\n fetch: app.fetch,\n build: processBuild,\n buildOptions,\n buildEnhancers: ['waku/adapters/aws-lambda-build-enhancer'],\n };\n },\n);\n"],"names":["path","serveStatic","honoAwsLambda","Hono","unstable_createServerEntryAdapter","createServerEntryAdapter","unstable_constants","constants","unstable_honoMiddleware","honoMiddleware","DIST_PUBLIC","contextMiddleware","rscMiddleware","middlewareRunner","processRequest","processBuild","config","isBuild","notFoundHtml","options","middlewareFns","middlewareModules","app","notFound","c","html","text","use","root","join","distDir","middlewareFn","buildOptions","globalThis","__WAKU_AWS_LAMBDA_HANDLE__","streaming","streamHandle","handle","fetch","build","buildEnhancers"],"mappings":"AAAA,OAAOA,UAAU,YAAY;AAC7B,SAASC,WAAW,QAAQ,iCAAiC;AAE7D,YAAYC,mBAAmB,kBAAkB;AACjD,SAASC,IAAI,QAAQ,YAAY;AACjC,SAASC,qCAAqCC,wBAAwB,QAAQ,wBAAwB;AACtG,SACEC,sBAAsBC,SAAS,EAC/BC,2BAA2BC,cAAc,QACpC,iBAAiB;AAGxB,MAAM,EAAEC,WAAW,EAAE,GAAGH;AACxB,MAAM,EAAEI,iBAAiB,EAAEC,aAAa,EAAEC,gBAAgB,EAAE,GAAGJ;AAE/D,eAAeJ,yBACb,CACE,EAAES,cAAc,EAAEC,YAAY,EAAEC,MAAM,EAAEC,OAAO,EAAEC,YAAY,EAAE,EAC/DC;IAMA,MAAM,EAAEC,gBAAgB,EAAE,EAAEC,oBAAoB,CAAC,CAAC,EAAE,GAAGF,WAAW,CAAC;IACnE,MAAMG,MAAM,IAAInB;IAChBmB,IAAIC,QAAQ,CAAC,CAACC;QACZ,IAAIN,cAAc;YAChB,OAAOM,EAAEC,IAAI,CAACP,cAAc;QAC9B;QACA,OAAOM,EAAEE,IAAI,CAAC,iBAAiB;IACjC;IACA,IAAIT,SAAS;QACXK,IAAIK,GAAG,CAAC1B,YAAY;YAAE2B,MAAM5B,KAAK6B,IAAI,CAACb,OAAOc,OAAO,EAAEpB;QAAa;IACrE;IACAY,IAAIK,GAAG,CAAChB;IACR,KAAK,MAAMoB,gBAAgBX,cAAe;QACxCE,IAAIK,GAAG,CAACI;IACV;IACAT,IAAIK,GAAG,CAACd,iBAAiBQ;IACzBC,IAAIK,GAAG,CAACf,cAAc;QAAEE;IAAe;IACvC,MAAMkB,eAA6B;QACjCF,SAASd,OAAOc,OAAO;IACzB;IACCG,WAAmBC,0BAA0B,GAAGf,SAASgB,YACtDjC,cAAckC,YAAY,GAC1BlC,cAAcmC,MAAM;IACxB,OAAO;QACLC,OAAOhB,IAAIgB,KAAK;QAChBC,OAAOxB;QACPiB;QACAQ,gBAAgB;YAAC;SAA0C;IAC7D;AACF,GACA"}
1
+ {"version":3,"sources":["../../src/adapters/aws-lambda.ts"],"sourcesContent":["import path from 'node:path';\nimport { serveStatic } from '@hono/node-server/serve-static';\nimport type { MiddlewareHandler } from 'hono';\nimport * as honoAwsLambda from 'hono/aws-lambda';\nimport { bodyLimit } from 'hono/body-limit';\nimport { Hono } from 'hono/tiny';\nimport { unstable_createServerEntryAdapter as createServerEntryAdapter } from 'waku/adapter-builders';\nimport {\n unstable_constants as constants,\n unstable_honoMiddleware as honoMiddleware,\n} from 'waku/internals';\nimport type { BuildOptions } from './aws-lambda-build-enhancer.js';\n\nconst { DIST_PUBLIC } = constants;\nconst { rscMiddleware, middlewareRunner } = honoMiddleware;\n\nconst DEFAULT_BODY_LIMIT_MAX_SIZE = 100 * 1024 * 1024;\n\nexport default createServerEntryAdapter(\n (\n { processRequest, processBuild, config, isBuild, notFoundHtml },\n options?: {\n streaming?: boolean;\n bodyLimit?: Parameters<typeof bodyLimit>[0] | false;\n middlewareFns?: ((opts: { app: Hono }) => MiddlewareHandler)[];\n middlewareModules?: Record<string, () => Promise<unknown>>;\n },\n ) => {\n const {\n bodyLimit: bodyLimitOptions,\n middlewareFns = [],\n middlewareModules = {},\n } = options || {};\n const app = new Hono();\n app.notFound((c) => {\n if (notFoundHtml) {\n return c.html(notFoundHtml, 404);\n }\n return c.text('404 Not Found', 404);\n });\n if (isBuild) {\n app.use(serveStatic({ root: path.join(config.distDir, DIST_PUBLIC) }));\n }\n if (bodyLimitOptions !== false) {\n app.use(\n bodyLimit(bodyLimitOptions ?? { maxSize: DEFAULT_BODY_LIMIT_MAX_SIZE }),\n );\n }\n for (const middlewareFn of middlewareFns) {\n app.use(middlewareFn({ app }));\n }\n app.use(middlewareRunner(middlewareModules as never, { app }));\n app.use(rscMiddleware({ processRequest }));\n const buildOptions: BuildOptions = {\n distDir: config.distDir,\n };\n (globalThis as any).__WAKU_AWS_LAMBDA_HANDLE__ = options?.streaming\n ? honoAwsLambda.streamHandle\n : honoAwsLambda.handle;\n return {\n fetch: app.fetch,\n build: processBuild,\n buildOptions,\n buildEnhancers: ['waku/adapters/aws-lambda-build-enhancer'],\n };\n },\n);\n"],"names":["path","serveStatic","honoAwsLambda","bodyLimit","Hono","unstable_createServerEntryAdapter","createServerEntryAdapter","unstable_constants","constants","unstable_honoMiddleware","honoMiddleware","DIST_PUBLIC","rscMiddleware","middlewareRunner","DEFAULT_BODY_LIMIT_MAX_SIZE","processRequest","processBuild","config","isBuild","notFoundHtml","options","bodyLimitOptions","middlewareFns","middlewareModules","app","notFound","c","html","text","use","root","join","distDir","maxSize","middlewareFn","buildOptions","globalThis","__WAKU_AWS_LAMBDA_HANDLE__","streaming","streamHandle","handle","fetch","build","buildEnhancers"],"mappings":"AAAA,OAAOA,UAAU,YAAY;AAC7B,SAASC,WAAW,QAAQ,iCAAiC;AAE7D,YAAYC,mBAAmB,kBAAkB;AACjD,SAASC,SAAS,QAAQ,kBAAkB;AAC5C,SAASC,IAAI,QAAQ,YAAY;AACjC,SAASC,qCAAqCC,wBAAwB,QAAQ,wBAAwB;AACtG,SACEC,sBAAsBC,SAAS,EAC/BC,2BAA2BC,cAAc,QACpC,iBAAiB;AAGxB,MAAM,EAAEC,WAAW,EAAE,GAAGH;AACxB,MAAM,EAAEI,aAAa,EAAEC,gBAAgB,EAAE,GAAGH;AAE5C,MAAMI,8BAA8B,MAAM,OAAO;AAEjD,eAAeR,yBACb,CACE,EAAES,cAAc,EAAEC,YAAY,EAAEC,MAAM,EAAEC,OAAO,EAAEC,YAAY,EAAE,EAC/DC;IAOA,MAAM,EACJjB,WAAWkB,gBAAgB,EAC3BC,gBAAgB,EAAE,EAClBC,oBAAoB,CAAC,CAAC,EACvB,GAAGH,WAAW,CAAC;IAChB,MAAMI,MAAM,IAAIpB;IAChBoB,IAAIC,QAAQ,CAAC,CAACC;QACZ,IAAIP,cAAc;YAChB,OAAOO,EAAEC,IAAI,CAACR,cAAc;QAC9B;QACA,OAAOO,EAAEE,IAAI,CAAC,iBAAiB;IACjC;IACA,IAAIV,SAAS;QACXM,IAAIK,GAAG,CAAC5B,YAAY;YAAE6B,MAAM9B,KAAK+B,IAAI,CAACd,OAAOe,OAAO,EAAErB;QAAa;IACrE;IACA,IAAIU,qBAAqB,OAAO;QAC9BG,IAAIK,GAAG,CACL1B,UAAUkB,oBAAoB;YAAEY,SAASnB;QAA4B;IAEzE;IACA,KAAK,MAAMoB,gBAAgBZ,cAAe;QACxCE,IAAIK,GAAG,CAACK,aAAa;YAAEV;QAAI;IAC7B;IACAA,IAAIK,GAAG,CAAChB,iBAAiBU,mBAA4B;QAAEC;IAAI;IAC3DA,IAAIK,GAAG,CAACjB,cAAc;QAAEG;IAAe;IACvC,MAAMoB,eAA6B;QACjCH,SAASf,OAAOe,OAAO;IACzB;IACCI,WAAmBC,0BAA0B,GAAGjB,SAASkB,YACtDpC,cAAcqC,YAAY,GAC1BrC,cAAcsC,MAAM;IACxB,OAAO;QACLC,OAAOjB,IAAIiB,KAAK;QAChBC,OAAO1B;QACPmB;QACAQ,gBAAgB;YAAC;SAA0C;IAC7D;AACF,GACA"}
@@ -1,6 +1,11 @@
1
1
  import type { MiddlewareHandler } from 'hono';
2
+ import { bodyLimit } from 'hono/body-limit';
3
+ import { Hono } from 'hono/tiny';
2
4
  declare const _default: (handlers: import("../lib/types.js").Unstable_Handlers, options?: {
3
- middlewareFns?: (() => MiddlewareHandler)[];
5
+ bodyLimit?: Parameters<typeof bodyLimit>[0] | false;
6
+ middlewareFns?: ((opts: {
7
+ app: Hono;
8
+ }) => MiddlewareHandler)[];
4
9
  middlewareModules?: Record<string, () => Promise<unknown>>;
5
10
  } | undefined) => import("../lib/types.js").Unstable_ServerEntry;
6
11
  export default _default;
@@ -1,12 +1,14 @@
1
1
  import path from 'node:path';
2
+ import { bodyLimit } from 'hono/body-limit';
2
3
  import { serveStatic } from 'hono/bun';
3
4
  import { Hono } from 'hono/tiny';
4
5
  import { unstable_createServerEntryAdapter as createServerEntryAdapter } from 'waku/adapter-builders';
5
6
  import { unstable_constants as constants, unstable_honoMiddleware as honoMiddleware } from 'waku/internals';
6
7
  const { DIST_PUBLIC } = constants;
7
- const { contextMiddleware, rscMiddleware, middlewareRunner } = honoMiddleware;
8
+ const { rscMiddleware, middlewareRunner } = honoMiddleware;
9
+ const DEFAULT_BODY_LIMIT_MAX_SIZE = 100 * 1024 * 1024;
8
10
  export default createServerEntryAdapter(({ processRequest, processBuild, config, isBuild, notFoundHtml }, options)=>{
9
- const { middlewareFns = [], middlewareModules = {} } = options || {};
11
+ const { bodyLimit: bodyLimitOptions, middlewareFns = [], middlewareModules = {} } = options || {};
10
12
  const app = new Hono();
11
13
  app.notFound((c)=>{
12
14
  if (notFoundHtml) {
@@ -20,11 +22,19 @@ export default createServerEntryAdapter(({ processRequest, processBuild, config,
20
22
  rewriteRequestPath: (path)=>path.slice(config.basePath.length - 1)
21
23
  }));
22
24
  }
23
- app.use(contextMiddleware());
25
+ if (bodyLimitOptions !== false) {
26
+ app.use(bodyLimit(bodyLimitOptions ?? {
27
+ maxSize: DEFAULT_BODY_LIMIT_MAX_SIZE
28
+ }));
29
+ }
24
30
  for (const middlewareFn of middlewareFns){
25
- app.use(middlewareFn());
31
+ app.use(middlewareFn({
32
+ app
33
+ }));
26
34
  }
27
- app.use(middlewareRunner(middlewareModules));
35
+ app.use(middlewareRunner(middlewareModules, {
36
+ app
37
+ }));
28
38
  app.use(rscMiddleware({
29
39
  processRequest
30
40
  }));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/adapters/bun.ts"],"sourcesContent":["import path from 'node:path';\nimport type { MiddlewareHandler } from 'hono';\nimport { serveStatic } from 'hono/bun';\nimport { Hono } from 'hono/tiny';\nimport { unstable_createServerEntryAdapter as createServerEntryAdapter } from 'waku/adapter-builders';\nimport {\n unstable_constants as constants,\n unstable_honoMiddleware as honoMiddleware,\n} from 'waku/internals';\nimport type { BuildOptions } from './bun-build-enhancer.js';\n\nconst { DIST_PUBLIC } = constants;\nconst { contextMiddleware, rscMiddleware, middlewareRunner } = honoMiddleware;\n\nexport default createServerEntryAdapter(\n (\n { processRequest, processBuild, config, isBuild, notFoundHtml },\n options?: {\n middlewareFns?: (() => MiddlewareHandler)[];\n middlewareModules?: Record<string, () => Promise<unknown>>;\n },\n ) => {\n const { middlewareFns = [], middlewareModules = {} } = options || {};\n const app = new Hono();\n app.notFound((c) => {\n if (notFoundHtml) {\n return c.html(notFoundHtml, 404);\n }\n return c.text('404 Not Found', 404);\n });\n if (isBuild) {\n app.use(\n `${config.basePath}*`,\n serveStatic({\n root: path.join(config.distDir, DIST_PUBLIC),\n rewriteRequestPath: (path) => path.slice(config.basePath.length - 1),\n }),\n );\n }\n app.use(contextMiddleware());\n for (const middlewareFn of middlewareFns) {\n app.use(middlewareFn());\n }\n app.use(middlewareRunner(middlewareModules as never));\n app.use(rscMiddleware({ processRequest }));\n const buildOptions: BuildOptions = {\n distDir: config.distDir,\n };\n return {\n fetch: app.fetch,\n build: processBuild,\n buildOptions,\n buildEnhancers: ['waku/adapters/bun-build-enhancer'],\n };\n },\n);\n"],"names":["path","serveStatic","Hono","unstable_createServerEntryAdapter","createServerEntryAdapter","unstable_constants","constants","unstable_honoMiddleware","honoMiddleware","DIST_PUBLIC","contextMiddleware","rscMiddleware","middlewareRunner","processRequest","processBuild","config","isBuild","notFoundHtml","options","middlewareFns","middlewareModules","app","notFound","c","html","text","use","basePath","root","join","distDir","rewriteRequestPath","slice","length","middlewareFn","buildOptions","fetch","build","buildEnhancers"],"mappings":"AAAA,OAAOA,UAAU,YAAY;AAE7B,SAASC,WAAW,QAAQ,WAAW;AACvC,SAASC,IAAI,QAAQ,YAAY;AACjC,SAASC,qCAAqCC,wBAAwB,QAAQ,wBAAwB;AACtG,SACEC,sBAAsBC,SAAS,EAC/BC,2BAA2BC,cAAc,QACpC,iBAAiB;AAGxB,MAAM,EAAEC,WAAW,EAAE,GAAGH;AACxB,MAAM,EAAEI,iBAAiB,EAAEC,aAAa,EAAEC,gBAAgB,EAAE,GAAGJ;AAE/D,eAAeJ,yBACb,CACE,EAAES,cAAc,EAAEC,YAAY,EAAEC,MAAM,EAAEC,OAAO,EAAEC,YAAY,EAAE,EAC/DC;IAKA,MAAM,EAAEC,gBAAgB,EAAE,EAAEC,oBAAoB,CAAC,CAAC,EAAE,GAAGF,WAAW,CAAC;IACnE,MAAMG,MAAM,IAAInB;IAChBmB,IAAIC,QAAQ,CAAC,CAACC;QACZ,IAAIN,cAAc;YAChB,OAAOM,EAAEC,IAAI,CAACP,cAAc;QAC9B;QACA,OAAOM,EAAEE,IAAI,CAAC,iBAAiB;IACjC;IACA,IAAIT,SAAS;QACXK,IAAIK,GAAG,CACL,GAAGX,OAAOY,QAAQ,CAAC,CAAC,CAAC,EACrB1B,YAAY;YACV2B,MAAM5B,KAAK6B,IAAI,CAACd,OAAOe,OAAO,EAAErB;YAChCsB,oBAAoB,CAAC/B,OAASA,KAAKgC,KAAK,CAACjB,OAAOY,QAAQ,CAACM,MAAM,GAAG;QACpE;IAEJ;IACAZ,IAAIK,GAAG,CAAChB;IACR,KAAK,MAAMwB,gBAAgBf,cAAe;QACxCE,IAAIK,GAAG,CAACQ;IACV;IACAb,IAAIK,GAAG,CAACd,iBAAiBQ;IACzBC,IAAIK,GAAG,CAACf,cAAc;QAAEE;IAAe;IACvC,MAAMsB,eAA6B;QACjCL,SAASf,OAAOe,OAAO;IACzB;IACA,OAAO;QACLM,OAAOf,IAAIe,KAAK;QAChBC,OAAOvB;QACPqB;QACAG,gBAAgB;YAAC;SAAmC;IACtD;AACF,GACA"}
1
+ {"version":3,"sources":["../../src/adapters/bun.ts"],"sourcesContent":["import path from 'node:path';\nimport type { MiddlewareHandler } from 'hono';\nimport { bodyLimit } from 'hono/body-limit';\nimport { serveStatic } from 'hono/bun';\nimport { Hono } from 'hono/tiny';\nimport { unstable_createServerEntryAdapter as createServerEntryAdapter } from 'waku/adapter-builders';\nimport {\n unstable_constants as constants,\n unstable_honoMiddleware as honoMiddleware,\n} from 'waku/internals';\nimport type { BuildOptions } from './bun-build-enhancer.js';\n\nconst { DIST_PUBLIC } = constants;\nconst { rscMiddleware, middlewareRunner } = honoMiddleware;\n\nconst DEFAULT_BODY_LIMIT_MAX_SIZE = 100 * 1024 * 1024;\n\nexport default createServerEntryAdapter(\n (\n { processRequest, processBuild, config, isBuild, notFoundHtml },\n options?: {\n bodyLimit?: Parameters<typeof bodyLimit>[0] | false;\n middlewareFns?: ((opts: { app: Hono }) => MiddlewareHandler)[];\n middlewareModules?: Record<string, () => Promise<unknown>>;\n },\n ) => {\n const {\n bodyLimit: bodyLimitOptions,\n middlewareFns = [],\n middlewareModules = {},\n } = options || {};\n const app = new Hono();\n app.notFound((c) => {\n if (notFoundHtml) {\n return c.html(notFoundHtml, 404);\n }\n return c.text('404 Not Found', 404);\n });\n if (isBuild) {\n app.use(\n `${config.basePath}*`,\n serveStatic({\n root: path.join(config.distDir, DIST_PUBLIC),\n rewriteRequestPath: (path) => path.slice(config.basePath.length - 1),\n }),\n );\n }\n if (bodyLimitOptions !== false) {\n app.use(\n bodyLimit(bodyLimitOptions ?? { maxSize: DEFAULT_BODY_LIMIT_MAX_SIZE }),\n );\n }\n for (const middlewareFn of middlewareFns) {\n app.use(middlewareFn({ app }));\n }\n app.use(middlewareRunner(middlewareModules as never, { app }));\n app.use(rscMiddleware({ processRequest }));\n const buildOptions: BuildOptions = {\n distDir: config.distDir,\n };\n return {\n fetch: app.fetch,\n build: processBuild,\n buildOptions,\n buildEnhancers: ['waku/adapters/bun-build-enhancer'],\n };\n },\n);\n"],"names":["path","bodyLimit","serveStatic","Hono","unstable_createServerEntryAdapter","createServerEntryAdapter","unstable_constants","constants","unstable_honoMiddleware","honoMiddleware","DIST_PUBLIC","rscMiddleware","middlewareRunner","DEFAULT_BODY_LIMIT_MAX_SIZE","processRequest","processBuild","config","isBuild","notFoundHtml","options","bodyLimitOptions","middlewareFns","middlewareModules","app","notFound","c","html","text","use","basePath","root","join","distDir","rewriteRequestPath","slice","length","maxSize","middlewareFn","buildOptions","fetch","build","buildEnhancers"],"mappings":"AAAA,OAAOA,UAAU,YAAY;AAE7B,SAASC,SAAS,QAAQ,kBAAkB;AAC5C,SAASC,WAAW,QAAQ,WAAW;AACvC,SAASC,IAAI,QAAQ,YAAY;AACjC,SAASC,qCAAqCC,wBAAwB,QAAQ,wBAAwB;AACtG,SACEC,sBAAsBC,SAAS,EAC/BC,2BAA2BC,cAAc,QACpC,iBAAiB;AAGxB,MAAM,EAAEC,WAAW,EAAE,GAAGH;AACxB,MAAM,EAAEI,aAAa,EAAEC,gBAAgB,EAAE,GAAGH;AAE5C,MAAMI,8BAA8B,MAAM,OAAO;AAEjD,eAAeR,yBACb,CACE,EAAES,cAAc,EAAEC,YAAY,EAAEC,MAAM,EAAEC,OAAO,EAAEC,YAAY,EAAE,EAC/DC;IAMA,MAAM,EACJlB,WAAWmB,gBAAgB,EAC3BC,gBAAgB,EAAE,EAClBC,oBAAoB,CAAC,CAAC,EACvB,GAAGH,WAAW,CAAC;IAChB,MAAMI,MAAM,IAAIpB;IAChBoB,IAAIC,QAAQ,CAAC,CAACC;QACZ,IAAIP,cAAc;YAChB,OAAOO,EAAEC,IAAI,CAACR,cAAc;QAC9B;QACA,OAAOO,EAAEE,IAAI,CAAC,iBAAiB;IACjC;IACA,IAAIV,SAAS;QACXM,IAAIK,GAAG,CACL,GAAGZ,OAAOa,QAAQ,CAAC,CAAC,CAAC,EACrB3B,YAAY;YACV4B,MAAM9B,KAAK+B,IAAI,CAACf,OAAOgB,OAAO,EAAEtB;YAChCuB,oBAAoB,CAACjC,OAASA,KAAKkC,KAAK,CAAClB,OAAOa,QAAQ,CAACM,MAAM,GAAG;QACpE;IAEJ;IACA,IAAIf,qBAAqB,OAAO;QAC9BG,IAAIK,GAAG,CACL3B,UAAUmB,oBAAoB;YAAEgB,SAASvB;QAA4B;IAEzE;IACA,KAAK,MAAMwB,gBAAgBhB,cAAe;QACxCE,IAAIK,GAAG,CAACS,aAAa;YAAEd;QAAI;IAC7B;IACAA,IAAIK,GAAG,CAAChB,iBAAiBU,mBAA4B;QAAEC;IAAI;IAC3DA,IAAIK,GAAG,CAACjB,cAAc;QAAEG;IAAe;IACvC,MAAMwB,eAA6B;QACjCN,SAAShB,OAAOgB,OAAO;IACzB;IACA,OAAO;QACLO,OAAOhB,IAAIgB,KAAK;QAChBC,OAAOzB;QACPuB;QACAG,gBAAgB;YAAC;SAAmC;IACtD;AACF,GACA"}
@@ -1,9 +1,14 @@
1
1
  import type { MiddlewareHandler } from 'hono';
2
+ import { bodyLimit } from 'hono/body-limit';
3
+ import { Hono } from 'hono/tiny';
2
4
  declare const _default: (handlers: import("../lib/types.js").Unstable_Handlers, options?: {
3
5
  static?: boolean;
4
6
  handlers?: Record<string, unknown>;
5
7
  assetsDir?: string;
6
- middlewareFns?: (() => MiddlewareHandler)[];
8
+ bodyLimit?: Parameters<typeof bodyLimit>[0] | false;
9
+ middlewareFns?: ((opts: {
10
+ app: Hono;
11
+ }) => MiddlewareHandler)[];
7
12
  middlewareModules?: Record<string, () => Promise<unknown>>;
8
13
  internalPathToBuildStaticFiles?: string;
9
14
  } | undefined) => import("../lib/types.js").Unstable_ServerEntry;
@@ -1,8 +1,10 @@
1
+ import { bodyLimit } from 'hono/body-limit';
1
2
  import { Hono } from 'hono/tiny';
2
3
  import { unstable_createServerEntryAdapter as createServerEntryAdapter, unstable_startPreviewServer as startPreviewServer } from 'waku/adapter-builders';
3
4
  import { unstable_constants as constants, unstable_consumeMultiplexedStream as consumeMultiplexedStream, unstable_honoMiddleware as honoMiddleware, unstable_produceMultiplexedStream as produceMultiplexedStream } from 'waku/internals';
4
5
  const { DIST_PUBLIC } = constants;
5
- const { contextMiddleware, rscMiddleware, middlewareRunner } = honoMiddleware;
6
+ const { rscMiddleware, middlewareRunner } = honoMiddleware;
7
+ const DEFAULT_BODY_LIMIT_MAX_SIZE = 100 * 1024 * 1024;
6
8
  const DO_NOT_BUNDLE = '';
7
9
  const PRUNABLE_KEY_PREFIX = '\0__prunable__/';
8
10
  const emptyStream = ()=>new ReadableStream({
@@ -10,9 +12,9 @@ const emptyStream = ()=>new ReadableStream({
10
12
  controller.close();
11
13
  }
12
14
  });
13
- function isWranglerDev(req) {
15
+ function isProductionWorker(req) {
14
16
  // This header seems to only be set for production cloudflare workers
15
- return !req.headers.get('cf-visitor');
17
+ return !!req.headers.get('cf-visitor');
16
18
  }
17
19
  function removeGzipEncoding(res) {
18
20
  const contentType = res.headers.get('content-type');
@@ -28,7 +30,7 @@ function removeGzipEncoding(res) {
28
30
  return res;
29
31
  }
30
32
  export default createServerEntryAdapter(({ processRequest, processBuild, setAllEnv, config, notFoundHtml }, options)=>{
31
- const { middlewareFns = [], middlewareModules = {}, internalPathToBuildStaticFiles = '__waku_internal_build_static_files' } = options || {};
33
+ const { bodyLimit: bodyLimitOptions, middlewareFns = [], middlewareModules = {}, internalPathToBuildStaticFiles = '__waku_internal_build_static_files' } = options || {};
32
34
  const app = new Hono();
33
35
  app.notFound((c)=>{
34
36
  if (notFoundHtml) {
@@ -36,11 +38,19 @@ export default createServerEntryAdapter(({ processRequest, processBuild, setAllE
36
38
  }
37
39
  return c.text('404 Not Found', 404);
38
40
  });
39
- app.use(contextMiddleware());
41
+ if (bodyLimitOptions !== false) {
42
+ app.use(bodyLimit(bodyLimitOptions ?? {
43
+ maxSize: DEFAULT_BODY_LIMIT_MAX_SIZE
44
+ }));
45
+ }
40
46
  for (const middlewareFn of middlewareFns){
41
- app.use(middlewareFn());
47
+ app.use(middlewareFn({
48
+ app
49
+ }));
42
50
  }
43
- app.use(middlewareRunner(middlewareModules));
51
+ app.use(middlewareRunner(middlewareModules, {
52
+ app
53
+ }));
44
54
  app.use(rscMiddleware({
45
55
  processRequest
46
56
  }));
@@ -57,7 +67,7 @@ export default createServerEntryAdapter(({ processRequest, processBuild, setAllE
57
67
  });
58
68
  });
59
69
  const fetchFn = async (req)=>{
60
- if (new URL(req.url).pathname === `/${internalPathToBuildStaticFiles}`) {
70
+ if (new URL(req.url).pathname === `/${internalPathToBuildStaticFiles}` && !isProductionWorker(req)) {
61
71
  return new Response(buildBody());
62
72
  }
63
73
  let cloudflareContext;
@@ -78,7 +88,7 @@ export default createServerEntryAdapter(({ processRequest, processBuild, setAllE
78
88
  res = app.fetch(req);
79
89
  }
80
90
  // Workaround https://github.com/cloudflare/workers-sdk/issues/6577
81
- if (import.meta.env?.PROD && isWranglerDev(req)) {
91
+ if (import.meta.env?.PROD && !isProductionWorker(req)) {
82
92
  if ('then' in res) {
83
93
  res = res.then((res)=>removeGzipEncoding(res));
84
94
  } else {
@@ -100,7 +110,11 @@ export default createServerEntryAdapter(({ processRequest, processBuild, setAllE
100
110
  next(err);
101
111
  }
102
112
  });
103
- const response = await fetch(server.baseUrl + internalPathToBuildStaticFiles);
113
+ const response = await fetch(server.baseUrl + internalPathToBuildStaticFiles, {
114
+ headers: {
115
+ connection: 'close'
116
+ }
117
+ });
104
118
  await consumeMultiplexedStream(response.body, async (key, stream)=>{
105
119
  if (key.startsWith(PRUNABLE_KEY_PREFIX)) {
106
120
  utils.unstable_registerPrunableFile(key.slice(PRUNABLE_KEY_PREFIX.length));
@@ -108,6 +122,8 @@ export default createServerEntryAdapter(({ processRequest, processBuild, setAllE
108
122
  }
109
123
  await utils.emitFile(key, stream);
110
124
  });
125
+ // https://github.com/nodejs/node/issues/56645
126
+ await new Promise((resolve)=>setTimeout(resolve, 100));
111
127
  await server.close();
112
128
  },
113
129
  buildOptions,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/adapters/cloudflare.ts"],"sourcesContent":["import type { MiddlewareHandler } from 'hono';\nimport { Hono } from 'hono/tiny';\nimport {\n unstable_createServerEntryAdapter as createServerEntryAdapter,\n unstable_startPreviewServer as startPreviewServer,\n} from 'waku/adapter-builders';\nimport {\n unstable_constants as constants,\n unstable_consumeMultiplexedStream as consumeMultiplexedStream,\n unstable_honoMiddleware as honoMiddleware,\n unstable_produceMultiplexedStream as produceMultiplexedStream,\n} from 'waku/internals';\nimport type { BuildOptions } from './cloudflare-build-enhancer.js';\n\nconst { DIST_PUBLIC } = constants;\nconst { contextMiddleware, rscMiddleware, middlewareRunner } = honoMiddleware;\n\nconst DO_NOT_BUNDLE = '';\n\nconst PRUNABLE_KEY_PREFIX = '\\0__prunable__/';\n\nconst emptyStream = () =>\n new ReadableStream<Uint8Array>({\n start(controller) {\n controller.close();\n },\n });\n\nfunction isWranglerDev(req: Request): boolean {\n // This header seems to only be set for production cloudflare workers\n return !req.headers.get('cf-visitor');\n}\n\nfunction removeGzipEncoding(res: Response): Response {\n const contentType = res.headers.get('content-type');\n if (\n !contentType ||\n contentType.includes('text/html') ||\n contentType.includes('text/plain')\n ) {\n const headers = new Headers(res.headers);\n headers.set('content-encoding', 'Identity');\n return new Response(res.body, {\n status: res.status,\n statusText: res.statusText,\n headers,\n });\n }\n return res;\n}\n\nexport default createServerEntryAdapter(\n (\n { processRequest, processBuild, setAllEnv, config, notFoundHtml },\n options?: {\n static?: boolean;\n handlers?: Record<string, unknown>;\n assetsDir?: string;\n middlewareFns?: (() => MiddlewareHandler)[];\n middlewareModules?: Record<string, () => Promise<unknown>>;\n internalPathToBuildStaticFiles?: string;\n },\n ) => {\n const {\n middlewareFns = [],\n middlewareModules = {},\n internalPathToBuildStaticFiles = '__waku_internal_build_static_files',\n } = options || {};\n const app = new Hono();\n app.notFound((c) => {\n if (notFoundHtml) {\n return c.html(notFoundHtml, 404);\n }\n return c.text('404 Not Found', 404);\n });\n app.use(contextMiddleware());\n for (const middlewareFn of middlewareFns) {\n app.use(middlewareFn());\n }\n app.use(middlewareRunner(middlewareModules as never));\n app.use(rscMiddleware({ processRequest }));\n const buildOptions: BuildOptions = {\n srcDir: config.srcDir,\n distDir: config.distDir,\n DIST_PUBLIC,\n serverless: !options?.static,\n };\n\n const buildBody = () =>\n produceMultiplexedStream(async (emitFile) => {\n await processBuild({\n emitFile,\n unstable_registerPrunableFile: (srcPath) =>\n emitFile(PRUNABLE_KEY_PREFIX + srcPath, emptyStream()),\n });\n });\n\n const fetchFn = async (req: Request) => {\n if (new URL(req.url).pathname === `/${internalPathToBuildStaticFiles}`) {\n return new Response(buildBody());\n }\n let cloudflareContext;\n try {\n cloudflareContext = await import(\n /* @vite-ignore */ DO_NOT_BUNDLE + 'cloudflare:workers'\n );\n } catch {\n // Not in a Cloudflare environment\n }\n let res: Response | Promise<Response>;\n if (cloudflareContext) {\n const { env, waitUntil, passThroughOnException } = cloudflareContext;\n res = app.fetch(req, env, {\n waitUntil,\n passThroughOnException,\n props: undefined,\n });\n } else {\n res = app.fetch(req);\n }\n // Workaround https://github.com/cloudflare/workers-sdk/issues/6577\n if (import.meta.env?.PROD && isWranglerDev(req)) {\n if ('then' in res) {\n res = res.then((res) => removeGzipEncoding(res));\n } else {\n res = removeGzipEncoding(res);\n }\n }\n return res;\n };\n\n return {\n fetch: fetchFn,\n build: async (utils) => {\n const server = await startPreviewServer();\n // Fallback middleware for the case without @cloudflare/vite-plugin\n server.middlewares.use(async (_req, res, next) => {\n try {\n const { Readable } = await import(\n /* @vite-ignore */ DO_NOT_BUNDLE + 'node:stream'\n );\n Readable.fromWeb(buildBody() as never).pipe(res);\n } catch (err) {\n next(err);\n }\n });\n const response = await fetch(\n server.baseUrl + internalPathToBuildStaticFiles,\n );\n await consumeMultiplexedStream(response.body!, async (key, stream) => {\n if (key.startsWith(PRUNABLE_KEY_PREFIX)) {\n utils.unstable_registerPrunableFile(\n key.slice(PRUNABLE_KEY_PREFIX.length),\n );\n return;\n }\n await utils.emitFile(key, stream);\n });\n await server.close();\n },\n buildOptions,\n buildEnhancers: ['waku/adapters/cloudflare-build-enhancer'],\n defaultExport: {\n ...options?.handlers,\n fetch(req: Request, env: Record<string, string>) {\n setAllEnv(env);\n return fetchFn(req);\n },\n },\n };\n },\n);\n"],"names":["Hono","unstable_createServerEntryAdapter","createServerEntryAdapter","unstable_startPreviewServer","startPreviewServer","unstable_constants","constants","unstable_consumeMultiplexedStream","consumeMultiplexedStream","unstable_honoMiddleware","honoMiddleware","unstable_produceMultiplexedStream","produceMultiplexedStream","DIST_PUBLIC","contextMiddleware","rscMiddleware","middlewareRunner","DO_NOT_BUNDLE","PRUNABLE_KEY_PREFIX","emptyStream","ReadableStream","start","controller","close","isWranglerDev","req","headers","get","removeGzipEncoding","res","contentType","includes","Headers","set","Response","body","status","statusText","processRequest","processBuild","setAllEnv","config","notFoundHtml","options","middlewareFns","middlewareModules","internalPathToBuildStaticFiles","app","notFound","c","html","text","use","middlewareFn","buildOptions","srcDir","distDir","serverless","static","buildBody","emitFile","unstable_registerPrunableFile","srcPath","fetchFn","URL","url","pathname","cloudflareContext","env","waitUntil","passThroughOnException","fetch","props","undefined","PROD","then","build","utils","server","middlewares","_req","next","Readable","fromWeb","pipe","err","response","baseUrl","key","stream","startsWith","slice","length","buildEnhancers","defaultExport","handlers"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/adapters/cloudflare.ts"],"sourcesContent":["import type { MiddlewareHandler } from 'hono';\nimport { bodyLimit } from 'hono/body-limit';\nimport { Hono } from 'hono/tiny';\nimport {\n unstable_createServerEntryAdapter as createServerEntryAdapter,\n unstable_startPreviewServer as startPreviewServer,\n} from 'waku/adapter-builders';\nimport {\n unstable_constants as constants,\n unstable_consumeMultiplexedStream as consumeMultiplexedStream,\n unstable_honoMiddleware as honoMiddleware,\n unstable_produceMultiplexedStream as produceMultiplexedStream,\n} from 'waku/internals';\nimport type { BuildOptions } from './cloudflare-build-enhancer.js';\n\nconst { DIST_PUBLIC } = constants;\nconst { rscMiddleware, middlewareRunner } = honoMiddleware;\n\nconst DEFAULT_BODY_LIMIT_MAX_SIZE = 100 * 1024 * 1024;\n\nconst DO_NOT_BUNDLE = '';\n\nconst PRUNABLE_KEY_PREFIX = '\\0__prunable__/';\n\nconst emptyStream = () =>\n new ReadableStream<Uint8Array>({\n start(controller) {\n controller.close();\n },\n });\n\nfunction isProductionWorker(req: Request): boolean {\n // This header seems to only be set for production cloudflare workers\n return !!req.headers.get('cf-visitor');\n}\n\nfunction removeGzipEncoding(res: Response): Response {\n const contentType = res.headers.get('content-type');\n if (\n !contentType ||\n contentType.includes('text/html') ||\n contentType.includes('text/plain')\n ) {\n const headers = new Headers(res.headers);\n headers.set('content-encoding', 'Identity');\n return new Response(res.body, {\n status: res.status,\n statusText: res.statusText,\n headers,\n });\n }\n return res;\n}\n\nexport default createServerEntryAdapter(\n (\n { processRequest, processBuild, setAllEnv, config, notFoundHtml },\n options?: {\n static?: boolean;\n handlers?: Record<string, unknown>;\n assetsDir?: string;\n bodyLimit?: Parameters<typeof bodyLimit>[0] | false;\n middlewareFns?: ((opts: { app: Hono }) => MiddlewareHandler)[];\n middlewareModules?: Record<string, () => Promise<unknown>>;\n internalPathToBuildStaticFiles?: string;\n },\n ) => {\n const {\n bodyLimit: bodyLimitOptions,\n middlewareFns = [],\n middlewareModules = {},\n internalPathToBuildStaticFiles = '__waku_internal_build_static_files',\n } = options || {};\n const app = new Hono();\n app.notFound((c) => {\n if (notFoundHtml) {\n return c.html(notFoundHtml, 404);\n }\n return c.text('404 Not Found', 404);\n });\n if (bodyLimitOptions !== false) {\n app.use(\n bodyLimit(bodyLimitOptions ?? { maxSize: DEFAULT_BODY_LIMIT_MAX_SIZE }),\n );\n }\n for (const middlewareFn of middlewareFns) {\n app.use(middlewareFn({ app }));\n }\n app.use(middlewareRunner(middlewareModules as never, { app }));\n app.use(rscMiddleware({ processRequest }));\n const buildOptions: BuildOptions = {\n srcDir: config.srcDir,\n distDir: config.distDir,\n DIST_PUBLIC,\n serverless: !options?.static,\n };\n\n const buildBody = () =>\n produceMultiplexedStream(async (emitFile) => {\n await processBuild({\n emitFile,\n unstable_registerPrunableFile: (srcPath) =>\n emitFile(PRUNABLE_KEY_PREFIX + srcPath, emptyStream()),\n });\n });\n\n const fetchFn = async (req: Request) => {\n if (\n new URL(req.url).pathname === `/${internalPathToBuildStaticFiles}` &&\n !isProductionWorker(req)\n ) {\n return new Response(buildBody());\n }\n let cloudflareContext;\n try {\n cloudflareContext = await import(\n /* @vite-ignore */ DO_NOT_BUNDLE + 'cloudflare:workers'\n );\n } catch {\n // Not in a Cloudflare environment\n }\n let res: Response | Promise<Response>;\n if (cloudflareContext) {\n const { env, waitUntil, passThroughOnException } = cloudflareContext;\n res = app.fetch(req, env, {\n waitUntil,\n passThroughOnException,\n props: undefined,\n });\n } else {\n res = app.fetch(req);\n }\n // Workaround https://github.com/cloudflare/workers-sdk/issues/6577\n if (import.meta.env?.PROD && !isProductionWorker(req)) {\n if ('then' in res) {\n res = res.then((res) => removeGzipEncoding(res));\n } else {\n res = removeGzipEncoding(res);\n }\n }\n return res;\n };\n\n return {\n fetch: fetchFn,\n build: async (utils) => {\n const server = await startPreviewServer();\n // Fallback middleware for the case without @cloudflare/vite-plugin\n server.middlewares.use(async (_req, res, next) => {\n try {\n const { Readable } = await import(\n /* @vite-ignore */ DO_NOT_BUNDLE + 'node:stream'\n );\n Readable.fromWeb(buildBody() as never).pipe(res);\n } catch (err) {\n next(err);\n }\n });\n const response = await fetch(\n server.baseUrl + internalPathToBuildStaticFiles,\n { headers: { connection: 'close' } },\n );\n await consumeMultiplexedStream(response.body!, async (key, stream) => {\n if (key.startsWith(PRUNABLE_KEY_PREFIX)) {\n utils.unstable_registerPrunableFile(\n key.slice(PRUNABLE_KEY_PREFIX.length),\n );\n return;\n }\n await utils.emitFile(key, stream);\n });\n // https://github.com/nodejs/node/issues/56645\n await new Promise((resolve) => setTimeout(resolve, 100));\n await server.close();\n },\n buildOptions,\n buildEnhancers: ['waku/adapters/cloudflare-build-enhancer'],\n defaultExport: {\n ...options?.handlers,\n fetch(req: Request, env: Record<string, string>) {\n setAllEnv(env);\n return fetchFn(req);\n },\n },\n };\n },\n);\n"],"names":["bodyLimit","Hono","unstable_createServerEntryAdapter","createServerEntryAdapter","unstable_startPreviewServer","startPreviewServer","unstable_constants","constants","unstable_consumeMultiplexedStream","consumeMultiplexedStream","unstable_honoMiddleware","honoMiddleware","unstable_produceMultiplexedStream","produceMultiplexedStream","DIST_PUBLIC","rscMiddleware","middlewareRunner","DEFAULT_BODY_LIMIT_MAX_SIZE","DO_NOT_BUNDLE","PRUNABLE_KEY_PREFIX","emptyStream","ReadableStream","start","controller","close","isProductionWorker","req","headers","get","removeGzipEncoding","res","contentType","includes","Headers","set","Response","body","status","statusText","processRequest","processBuild","setAllEnv","config","notFoundHtml","options","bodyLimitOptions","middlewareFns","middlewareModules","internalPathToBuildStaticFiles","app","notFound","c","html","text","use","maxSize","middlewareFn","buildOptions","srcDir","distDir","serverless","static","buildBody","emitFile","unstable_registerPrunableFile","srcPath","fetchFn","URL","url","pathname","cloudflareContext","env","waitUntil","passThroughOnException","fetch","props","undefined","PROD","then","build","utils","server","middlewares","_req","next","Readable","fromWeb","pipe","err","response","baseUrl","connection","key","stream","startsWith","slice","length","Promise","resolve","setTimeout","buildEnhancers","defaultExport","handlers"],"mappings":"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"}
@@ -8,7 +8,10 @@ declare const _default: (handlers: import("../lib/types.js").Unstable_Handlers,
8
8
  static?: boolean;
9
9
  handlers?: Record<string, unknown>;
10
10
  assetsDir?: string;
11
- middlewareFns?: (() => import("hono").MiddlewareHandler)[];
11
+ bodyLimit?: Parameters<typeof import("hono/body-limit").bodyLimit>[0] | false;
12
+ middlewareFns?: ((opts: {
13
+ app: import("hono/tiny").Hono;
14
+ }) => import("hono").MiddlewareHandler)[];
12
15
  middlewareModules?: Record<string, () => Promise<unknown>>;
13
16
  internalPathToBuildStaticFiles?: string;
14
17
  } | undefined) => import("../lib/types.js").Unstable_ServerEntry;
@@ -1,6 +1,11 @@
1
1
  import type { MiddlewareHandler } from 'hono';
2
+ import { bodyLimit } from 'hono/body-limit';
3
+ import { Hono as HonoForDevAndBuild } from 'hono/tiny';
2
4
  declare const _default: (handlers: import("../lib/types.js").Unstable_Handlers, options?: {
3
- middlewareFns?: (() => MiddlewareHandler)[];
5
+ bodyLimit?: Parameters<typeof bodyLimit>[0] | false;
6
+ middlewareFns?: ((opts: {
7
+ app: HonoForDevAndBuild;
8
+ }) => MiddlewareHandler)[];
4
9
  middlewareModules?: Record<string, () => Promise<unknown>>;
5
10
  } | undefined) => import("../lib/types.js").Unstable_ServerEntry;
6
11
  export default _default;
@@ -1,12 +1,14 @@
1
1
  import path from 'node:path';
2
+ import { bodyLimit } from 'hono/body-limit';
2
3
  // FIXME hopefully we should avoid bundling this
3
4
  import { Hono as HonoForDevAndBuild } from 'hono/tiny';
4
5
  import { unstable_createServerEntryAdapter as createServerEntryAdapter } from 'waku/adapter-builders';
5
6
  import { unstable_constants as constants, unstable_honoMiddleware as honoMiddleware } from 'waku/internals';
6
7
  const { DIST_PUBLIC } = constants;
7
- const { contextMiddleware, rscMiddleware, middlewareRunner } = honoMiddleware;
8
+ const { rscMiddleware, middlewareRunner } = honoMiddleware;
9
+ const DEFAULT_BODY_LIMIT_MAX_SIZE = 100 * 1024 * 1024;
8
10
  export default createServerEntryAdapter(({ processRequest, processBuild, config, notFoundHtml }, options)=>{
9
- const { middlewareFns = [], middlewareModules = {} } = options || {};
11
+ const { bodyLimit: bodyLimitOptions, middlewareFns = [], middlewareModules = {} } = options || {};
10
12
  const { __WAKU_DENO_ADAPTER_HONO__: Hono = HonoForDevAndBuild, __WAKU_DENO_ADAPTER_SERVE_STATIC__: serveStatic } = globalThis;
11
13
  const app = new Hono();
12
14
  app.notFound((c)=>{
@@ -20,11 +22,19 @@ export default createServerEntryAdapter(({ processRequest, processBuild, config,
20
22
  root: path.join(config.distDir, DIST_PUBLIC)
21
23
  }));
22
24
  }
23
- app.use(contextMiddleware());
25
+ if (bodyLimitOptions !== false) {
26
+ app.use(bodyLimit(bodyLimitOptions ?? {
27
+ maxSize: DEFAULT_BODY_LIMIT_MAX_SIZE
28
+ }));
29
+ }
24
30
  for (const middlewareFn of middlewareFns){
25
- app.use(middlewareFn());
31
+ app.use(middlewareFn({
32
+ app
33
+ }));
26
34
  }
27
- app.use(middlewareRunner(middlewareModules));
35
+ app.use(middlewareRunner(middlewareModules, {
36
+ app
37
+ }));
28
38
  app.use(rscMiddleware({
29
39
  processRequest
30
40
  }));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/adapters/deno.ts"],"sourcesContent":["import path from 'node:path';\nimport type { MiddlewareHandler } from 'hono';\n// FIXME hopefully we should avoid bundling this\nimport { Hono as HonoForDevAndBuild } from 'hono/tiny';\nimport { unstable_createServerEntryAdapter as createServerEntryAdapter } from 'waku/adapter-builders';\nimport {\n unstable_constants as constants,\n unstable_honoMiddleware as honoMiddleware,\n} from 'waku/internals';\nimport type { BuildOptions } from './deno-build-enhancer.js';\n\nconst { DIST_PUBLIC } = constants;\nconst { contextMiddleware, rscMiddleware, middlewareRunner } = honoMiddleware;\n\nexport default createServerEntryAdapter(\n (\n { processRequest, processBuild, config, notFoundHtml },\n options?: {\n middlewareFns?: (() => MiddlewareHandler)[];\n middlewareModules?: Record<string, () => Promise<unknown>>;\n },\n ) => {\n const { middlewareFns = [], middlewareModules = {} } = options || {};\n const {\n __WAKU_DENO_ADAPTER_HONO__: Hono = HonoForDevAndBuild,\n __WAKU_DENO_ADAPTER_SERVE_STATIC__: serveStatic,\n } = globalThis as any;\n const app = new Hono();\n app.notFound((c: any) => {\n if (notFoundHtml) {\n return c.html(notFoundHtml, 404);\n }\n return c.text('404 Not Found', 404);\n });\n if (serveStatic) {\n app.use(serveStatic({ root: path.join(config.distDir, DIST_PUBLIC) }));\n }\n app.use(contextMiddleware());\n for (const middlewareFn of middlewareFns) {\n app.use(middlewareFn());\n }\n app.use(middlewareRunner(middlewareModules as never));\n app.use(rscMiddleware({ processRequest }));\n const buildOptions: BuildOptions = {\n distDir: config.distDir,\n };\n return {\n fetch: app.fetch,\n build: processBuild,\n buildOptions,\n buildEnhancers: ['waku/adapters/deno-build-enhancer'],\n };\n },\n);\n"],"names":["path","Hono","HonoForDevAndBuild","unstable_createServerEntryAdapter","createServerEntryAdapter","unstable_constants","constants","unstable_honoMiddleware","honoMiddleware","DIST_PUBLIC","contextMiddleware","rscMiddleware","middlewareRunner","processRequest","processBuild","config","notFoundHtml","options","middlewareFns","middlewareModules","__WAKU_DENO_ADAPTER_HONO__","__WAKU_DENO_ADAPTER_SERVE_STATIC__","serveStatic","globalThis","app","notFound","c","html","text","use","root","join","distDir","middlewareFn","buildOptions","fetch","build","buildEnhancers"],"mappings":"AAAA,OAAOA,UAAU,YAAY;AAE7B,gDAAgD;AAChD,SAASC,QAAQC,kBAAkB,QAAQ,YAAY;AACvD,SAASC,qCAAqCC,wBAAwB,QAAQ,wBAAwB;AACtG,SACEC,sBAAsBC,SAAS,EAC/BC,2BAA2BC,cAAc,QACpC,iBAAiB;AAGxB,MAAM,EAAEC,WAAW,EAAE,GAAGH;AACxB,MAAM,EAAEI,iBAAiB,EAAEC,aAAa,EAAEC,gBAAgB,EAAE,GAAGJ;AAE/D,eAAeJ,yBACb,CACE,EAAES,cAAc,EAAEC,YAAY,EAAEC,MAAM,EAAEC,YAAY,EAAE,EACtDC;IAKA,MAAM,EAAEC,gBAAgB,EAAE,EAAEC,oBAAoB,CAAC,CAAC,EAAE,GAAGF,WAAW,CAAC;IACnE,MAAM,EACJG,4BAA4BnB,OAAOC,kBAAkB,EACrDmB,oCAAoCC,WAAW,EAChD,GAAGC;IACJ,MAAMC,MAAM,IAAIvB;IAChBuB,IAAIC,QAAQ,CAAC,CAACC;QACZ,IAAIV,cAAc;YAChB,OAAOU,EAAEC,IAAI,CAACX,cAAc;QAC9B;QACA,OAAOU,EAAEE,IAAI,CAAC,iBAAiB;IACjC;IACA,IAAIN,aAAa;QACfE,IAAIK,GAAG,CAACP,YAAY;YAAEQ,MAAM9B,KAAK+B,IAAI,CAAChB,OAAOiB,OAAO,EAAEvB;QAAa;IACrE;IACAe,IAAIK,GAAG,CAACnB;IACR,KAAK,MAAMuB,gBAAgBf,cAAe;QACxCM,IAAIK,GAAG,CAACI;IACV;IACAT,IAAIK,GAAG,CAACjB,iBAAiBO;IACzBK,IAAIK,GAAG,CAAClB,cAAc;QAAEE;IAAe;IACvC,MAAMqB,eAA6B;QACjCF,SAASjB,OAAOiB,OAAO;IACzB;IACA,OAAO;QACLG,OAAOX,IAAIW,KAAK;QAChBC,OAAOtB;QACPoB;QACAG,gBAAgB;YAAC;SAAoC;IACvD;AACF,GACA"}
1
+ {"version":3,"sources":["../../src/adapters/deno.ts"],"sourcesContent":["import path from 'node:path';\nimport type { MiddlewareHandler } from 'hono';\nimport { bodyLimit } from 'hono/body-limit';\n// FIXME hopefully we should avoid bundling this\nimport { Hono as HonoForDevAndBuild } from 'hono/tiny';\nimport { unstable_createServerEntryAdapter as createServerEntryAdapter } from 'waku/adapter-builders';\nimport {\n unstable_constants as constants,\n unstable_honoMiddleware as honoMiddleware,\n} from 'waku/internals';\nimport type { BuildOptions } from './deno-build-enhancer.js';\n\nconst { DIST_PUBLIC } = constants;\nconst { rscMiddleware, middlewareRunner } = honoMiddleware;\n\nconst DEFAULT_BODY_LIMIT_MAX_SIZE = 100 * 1024 * 1024;\n\nexport default createServerEntryAdapter(\n (\n { processRequest, processBuild, config, notFoundHtml },\n options?: {\n bodyLimit?: Parameters<typeof bodyLimit>[0] | false;\n middlewareFns?: ((opts: {\n app: HonoForDevAndBuild;\n }) => MiddlewareHandler)[];\n middlewareModules?: Record<string, () => Promise<unknown>>;\n },\n ) => {\n const {\n bodyLimit: bodyLimitOptions,\n middlewareFns = [],\n middlewareModules = {},\n } = options || {};\n const {\n __WAKU_DENO_ADAPTER_HONO__: Hono = HonoForDevAndBuild,\n __WAKU_DENO_ADAPTER_SERVE_STATIC__: serveStatic,\n } = globalThis as any;\n const app = new Hono();\n app.notFound((c: any) => {\n if (notFoundHtml) {\n return c.html(notFoundHtml, 404);\n }\n return c.text('404 Not Found', 404);\n });\n if (serveStatic) {\n app.use(serveStatic({ root: path.join(config.distDir, DIST_PUBLIC) }));\n }\n if (bodyLimitOptions !== false) {\n app.use(\n bodyLimit(bodyLimitOptions ?? { maxSize: DEFAULT_BODY_LIMIT_MAX_SIZE }),\n );\n }\n for (const middlewareFn of middlewareFns) {\n app.use(middlewareFn({ app }));\n }\n app.use(middlewareRunner(middlewareModules as never, { app }));\n app.use(rscMiddleware({ processRequest }));\n const buildOptions: BuildOptions = {\n distDir: config.distDir,\n };\n return {\n fetch: app.fetch,\n build: processBuild,\n buildOptions,\n buildEnhancers: ['waku/adapters/deno-build-enhancer'],\n };\n },\n);\n"],"names":["path","bodyLimit","Hono","HonoForDevAndBuild","unstable_createServerEntryAdapter","createServerEntryAdapter","unstable_constants","constants","unstable_honoMiddleware","honoMiddleware","DIST_PUBLIC","rscMiddleware","middlewareRunner","DEFAULT_BODY_LIMIT_MAX_SIZE","processRequest","processBuild","config","notFoundHtml","options","bodyLimitOptions","middlewareFns","middlewareModules","__WAKU_DENO_ADAPTER_HONO__","__WAKU_DENO_ADAPTER_SERVE_STATIC__","serveStatic","globalThis","app","notFound","c","html","text","use","root","join","distDir","maxSize","middlewareFn","buildOptions","fetch","build","buildEnhancers"],"mappings":"AAAA,OAAOA,UAAU,YAAY;AAE7B,SAASC,SAAS,QAAQ,kBAAkB;AAC5C,gDAAgD;AAChD,SAASC,QAAQC,kBAAkB,QAAQ,YAAY;AACvD,SAASC,qCAAqCC,wBAAwB,QAAQ,wBAAwB;AACtG,SACEC,sBAAsBC,SAAS,EAC/BC,2BAA2BC,cAAc,QACpC,iBAAiB;AAGxB,MAAM,EAAEC,WAAW,EAAE,GAAGH;AACxB,MAAM,EAAEI,aAAa,EAAEC,gBAAgB,EAAE,GAAGH;AAE5C,MAAMI,8BAA8B,MAAM,OAAO;AAEjD,eAAeR,yBACb,CACE,EAAES,cAAc,EAAEC,YAAY,EAAEC,MAAM,EAAEC,YAAY,EAAE,EACtDC;IAQA,MAAM,EACJjB,WAAWkB,gBAAgB,EAC3BC,gBAAgB,EAAE,EAClBC,oBAAoB,CAAC,CAAC,EACvB,GAAGH,WAAW,CAAC;IAChB,MAAM,EACJI,4BAA4BpB,OAAOC,kBAAkB,EACrDoB,oCAAoCC,WAAW,EAChD,GAAGC;IACJ,MAAMC,MAAM,IAAIxB;IAChBwB,IAAIC,QAAQ,CAAC,CAACC;QACZ,IAAIX,cAAc;YAChB,OAAOW,EAAEC,IAAI,CAACZ,cAAc;QAC9B;QACA,OAAOW,EAAEE,IAAI,CAAC,iBAAiB;IACjC;IACA,IAAIN,aAAa;QACfE,IAAIK,GAAG,CAACP,YAAY;YAAEQ,MAAMhC,KAAKiC,IAAI,CAACjB,OAAOkB,OAAO,EAAExB;QAAa;IACrE;IACA,IAAIS,qBAAqB,OAAO;QAC9BO,IAAIK,GAAG,CACL9B,UAAUkB,oBAAoB;YAAEgB,SAAStB;QAA4B;IAEzE;IACA,KAAK,MAAMuB,gBAAgBhB,cAAe;QACxCM,IAAIK,GAAG,CAACK,aAAa;YAAEV;QAAI;IAC7B;IACAA,IAAIK,GAAG,CAACnB,iBAAiBS,mBAA4B;QAAEK;IAAI;IAC3DA,IAAIK,GAAG,CAACpB,cAAc;QAAEG;IAAe;IACvC,MAAMuB,eAA6B;QACjCH,SAASlB,OAAOkB,OAAO;IACzB;IACA,OAAO;QACLI,OAAOZ,IAAIY,KAAK;QAChBC,OAAOxB;QACPsB;QACAG,gBAAgB;YAAC;SAAoC;IACvD;AACF,GACA"}
@@ -1,4 +1,6 @@
1
1
  import type { MiddlewareHandler } from 'hono';
2
+ import { bodyLimit } from 'hono/body-limit';
3
+ import { Hono } from 'hono/tiny';
2
4
  import type { ImportGlobFunction } from 'vite/types/importGlob.d.ts';
3
5
  declare global {
4
6
  interface ImportMeta {
@@ -6,7 +8,10 @@ declare global {
6
8
  }
7
9
  }
8
10
  declare const _default: (handlers: import("../lib/types.js").Unstable_Handlers, options?: {
9
- middlewareFns?: (() => MiddlewareHandler)[];
11
+ bodyLimit?: Parameters<typeof bodyLimit>[0] | false;
12
+ middlewareFns?: ((opts: {
13
+ app: Hono;
14
+ }) => MiddlewareHandler)[];
10
15
  middlewareModules?: Record<string, () => Promise<unknown>>;
11
16
  } | undefined) => import("../lib/types.js").Unstable_ServerEntry;
12
17
  export default _default;
@@ -1,9 +1,11 @@
1
+ import { bodyLimit } from 'hono/body-limit';
1
2
  import { Hono } from 'hono/tiny';
2
3
  import { unstable_createServerEntryAdapter as createServerEntryAdapter } from 'waku/adapter-builders';
3
4
  import { unstable_honoMiddleware as honoMiddleware } from 'waku/internals';
4
- const { contextMiddleware, rscMiddleware, middlewareRunner } = honoMiddleware;
5
+ const { rscMiddleware, middlewareRunner } = honoMiddleware;
6
+ const DEFAULT_BODY_LIMIT_MAX_SIZE = 100 * 1024 * 1024;
5
7
  export default createServerEntryAdapter(({ processRequest, processBuild, notFoundHtml }, options)=>{
6
- const { middlewareFns = [], middlewareModules = {} } = options || {};
8
+ const { bodyLimit: bodyLimitOptions, middlewareFns = [], middlewareModules = {} } = options || {};
7
9
  const app = new Hono();
8
10
  app.notFound((c)=>{
9
11
  if (notFoundHtml) {
@@ -11,11 +13,19 @@ export default createServerEntryAdapter(({ processRequest, processBuild, notFoun
11
13
  }
12
14
  return c.text('404 Not Found', 404);
13
15
  });
14
- app.use(contextMiddleware());
16
+ if (bodyLimitOptions !== false) {
17
+ app.use(bodyLimit(bodyLimitOptions ?? {
18
+ maxSize: DEFAULT_BODY_LIMIT_MAX_SIZE
19
+ }));
20
+ }
15
21
  for (const middlewareFn of middlewareFns){
16
- app.use(middlewareFn());
22
+ app.use(middlewareFn({
23
+ app
24
+ }));
17
25
  }
18
- app.use(middlewareRunner(middlewareModules));
26
+ app.use(middlewareRunner(middlewareModules, {
27
+ app
28
+ }));
19
29
  app.use(rscMiddleware({
20
30
  processRequest
21
31
  }));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/adapters/edge.ts"],"sourcesContent":["import type { MiddlewareHandler } from 'hono';\nimport { Hono } from 'hono/tiny';\nimport type { ImportGlobFunction } from 'vite/types/importGlob.d.ts';\nimport { unstable_createServerEntryAdapter as createServerEntryAdapter } from 'waku/adapter-builders';\nimport { unstable_honoMiddleware as honoMiddleware } from 'waku/internals';\n\ndeclare global {\n interface ImportMeta {\n glob: ImportGlobFunction;\n }\n}\n\nconst { contextMiddleware, rscMiddleware, middlewareRunner } = honoMiddleware;\n\nexport default createServerEntryAdapter(\n (\n { processRequest, processBuild, notFoundHtml },\n options?: {\n middlewareFns?: (() => MiddlewareHandler)[];\n middlewareModules?: Record<string, () => Promise<unknown>>;\n },\n ) => {\n const { middlewareFns = [], middlewareModules = {} } = options || {};\n const app = new Hono();\n app.notFound((c) => {\n if (notFoundHtml) {\n return c.html(notFoundHtml, 404);\n }\n return c.text('404 Not Found', 404);\n });\n app.use(contextMiddleware());\n for (const middlewareFn of middlewareFns) {\n app.use(middlewareFn());\n }\n app.use(middlewareRunner(middlewareModules as never));\n app.use(rscMiddleware({ processRequest }));\n return {\n fetch: app.fetch,\n build: processBuild,\n };\n },\n);\n"],"names":["Hono","unstable_createServerEntryAdapter","createServerEntryAdapter","unstable_honoMiddleware","honoMiddleware","contextMiddleware","rscMiddleware","middlewareRunner","processRequest","processBuild","notFoundHtml","options","middlewareFns","middlewareModules","app","notFound","c","html","text","use","middlewareFn","fetch","build"],"mappings":"AACA,SAASA,IAAI,QAAQ,YAAY;AAEjC,SAASC,qCAAqCC,wBAAwB,QAAQ,wBAAwB;AACtG,SAASC,2BAA2BC,cAAc,QAAQ,iBAAiB;AAQ3E,MAAM,EAAEC,iBAAiB,EAAEC,aAAa,EAAEC,gBAAgB,EAAE,GAAGH;AAE/D,eAAeF,yBACb,CACE,EAAEM,cAAc,EAAEC,YAAY,EAAEC,YAAY,EAAE,EAC9CC;IAKA,MAAM,EAAEC,gBAAgB,EAAE,EAAEC,oBAAoB,CAAC,CAAC,EAAE,GAAGF,WAAW,CAAC;IACnE,MAAMG,MAAM,IAAId;IAChBc,IAAIC,QAAQ,CAAC,CAACC;QACZ,IAAIN,cAAc;YAChB,OAAOM,EAAEC,IAAI,CAACP,cAAc;QAC9B;QACA,OAAOM,EAAEE,IAAI,CAAC,iBAAiB;IACjC;IACAJ,IAAIK,GAAG,CAACd;IACR,KAAK,MAAMe,gBAAgBR,cAAe;QACxCE,IAAIK,GAAG,CAACC;IACV;IACAN,IAAIK,GAAG,CAACZ,iBAAiBM;IACzBC,IAAIK,GAAG,CAACb,cAAc;QAAEE;IAAe;IACvC,OAAO;QACLa,OAAOP,IAAIO,KAAK;QAChBC,OAAOb;IACT;AACF,GACA"}
1
+ {"version":3,"sources":["../../src/adapters/edge.ts"],"sourcesContent":["import type { MiddlewareHandler } from 'hono';\nimport { bodyLimit } from 'hono/body-limit';\nimport { Hono } from 'hono/tiny';\nimport type { ImportGlobFunction } from 'vite/types/importGlob.d.ts';\nimport { unstable_createServerEntryAdapter as createServerEntryAdapter } from 'waku/adapter-builders';\nimport { unstable_honoMiddleware as honoMiddleware } from 'waku/internals';\n\ndeclare global {\n interface ImportMeta {\n glob: ImportGlobFunction;\n }\n}\n\nconst { rscMiddleware, middlewareRunner } = honoMiddleware;\n\nconst DEFAULT_BODY_LIMIT_MAX_SIZE = 100 * 1024 * 1024;\n\nexport default createServerEntryAdapter(\n (\n { processRequest, processBuild, notFoundHtml },\n options?: {\n bodyLimit?: Parameters<typeof bodyLimit>[0] | false;\n middlewareFns?: ((opts: { app: Hono }) => MiddlewareHandler)[];\n middlewareModules?: Record<string, () => Promise<unknown>>;\n },\n ) => {\n const {\n bodyLimit: bodyLimitOptions,\n middlewareFns = [],\n middlewareModules = {},\n } = options || {};\n const app = new Hono();\n app.notFound((c) => {\n if (notFoundHtml) {\n return c.html(notFoundHtml, 404);\n }\n return c.text('404 Not Found', 404);\n });\n if (bodyLimitOptions !== false) {\n app.use(\n bodyLimit(bodyLimitOptions ?? { maxSize: DEFAULT_BODY_LIMIT_MAX_SIZE }),\n );\n }\n for (const middlewareFn of middlewareFns) {\n app.use(middlewareFn({ app }));\n }\n app.use(middlewareRunner(middlewareModules as never, { app }));\n app.use(rscMiddleware({ processRequest }));\n return {\n fetch: app.fetch,\n build: processBuild,\n };\n },\n);\n"],"names":["bodyLimit","Hono","unstable_createServerEntryAdapter","createServerEntryAdapter","unstable_honoMiddleware","honoMiddleware","rscMiddleware","middlewareRunner","DEFAULT_BODY_LIMIT_MAX_SIZE","processRequest","processBuild","notFoundHtml","options","bodyLimitOptions","middlewareFns","middlewareModules","app","notFound","c","html","text","use","maxSize","middlewareFn","fetch","build"],"mappings":"AACA,SAASA,SAAS,QAAQ,kBAAkB;AAC5C,SAASC,IAAI,QAAQ,YAAY;AAEjC,SAASC,qCAAqCC,wBAAwB,QAAQ,wBAAwB;AACtG,SAASC,2BAA2BC,cAAc,QAAQ,iBAAiB;AAQ3E,MAAM,EAAEC,aAAa,EAAEC,gBAAgB,EAAE,GAAGF;AAE5C,MAAMG,8BAA8B,MAAM,OAAO;AAEjD,eAAeL,yBACb,CACE,EAAEM,cAAc,EAAEC,YAAY,EAAEC,YAAY,EAAE,EAC9CC;IAMA,MAAM,EACJZ,WAAWa,gBAAgB,EAC3BC,gBAAgB,EAAE,EAClBC,oBAAoB,CAAC,CAAC,EACvB,GAAGH,WAAW,CAAC;IAChB,MAAMI,MAAM,IAAIf;IAChBe,IAAIC,QAAQ,CAAC,CAACC;QACZ,IAAIP,cAAc;YAChB,OAAOO,EAAEC,IAAI,CAACR,cAAc;QAC9B;QACA,OAAOO,EAAEE,IAAI,CAAC,iBAAiB;IACjC;IACA,IAAIP,qBAAqB,OAAO;QAC9BG,IAAIK,GAAG,CACLrB,UAAUa,oBAAoB;YAAES,SAASd;QAA4B;IAEzE;IACA,KAAK,MAAMe,gBAAgBT,cAAe;QACxCE,IAAIK,GAAG,CAACE,aAAa;YAAEP;QAAI;IAC7B;IACAA,IAAIK,GAAG,CAACd,iBAAiBQ,mBAA4B;QAAEC;IAAI;IAC3DA,IAAIK,GAAG,CAACf,cAAc;QAAEG;IAAe;IACvC,OAAO;QACLe,OAAOR,IAAIQ,KAAK;QAChBC,OAAOf;IACT;AACF,GACA"}
@@ -7,14 +7,14 @@ async function postBuild({ distDir, privateDir, rscBase, DIST_PUBLIC, serverless
7
7
  recursive: true
8
8
  });
9
9
  writeFileSync(path.join(functionsDir, 'serve.js'), `\
10
- const { INTERNAL_runFetch } = await import('../${distDir}/server/index.js');
10
+ const { INTERNAL_runFetch } = await import(${JSON.stringify(`../${distDir}/server/index.js`)});
11
11
 
12
12
  export default async (request, context) =>
13
13
  INTERNAL_runFetch(process.env, request, { context });
14
14
 
15
15
  export const config = {
16
16
  preferStatic: true,
17
- path: ['/', '/*', '/${rscBase}/**/*'],
17
+ path: ['/', '/*', ${JSON.stringify(`/${rscBase}/**/*`)}],
18
18
  };
19
19
  `);
20
20
  }
@@ -23,9 +23,9 @@ export const config = {
23
23
  writeFileSync(netlifyTomlFile, `\
24
24
  [build]
25
25
  command = "npm run build"
26
- publish = "${distDir}/${DIST_PUBLIC}"
26
+ publish = ${JSON.stringify(`${distDir}/${DIST_PUBLIC}`)}
27
27
  [functions]
28
- included_files = ["${privateDir}/**"]
28
+ included_files = [${JSON.stringify(`${privateDir}/**`)}]
29
29
  directory = "netlify-functions"
30
30
  `);
31
31
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/adapters/netlify-build-enhancer.ts"],"sourcesContent":["import { existsSync, mkdirSync, writeFileSync } from 'node:fs';\nimport path from 'node:path';\n\nexport type BuildOptions = {\n distDir: string;\n privateDir: string;\n rscBase: string;\n DIST_PUBLIC: string;\n serverless: boolean;\n};\n\nasync function postBuild({\n distDir,\n privateDir,\n rscBase,\n DIST_PUBLIC,\n serverless,\n}: BuildOptions) {\n if (serverless) {\n const functionsDir = path.resolve('netlify-functions');\n mkdirSync(functionsDir, {\n recursive: true,\n });\n writeFileSync(\n path.join(functionsDir, 'serve.js'),\n `\\\nconst { INTERNAL_runFetch } = await import('../${distDir}/server/index.js');\n\nexport default async (request, context) =>\n INTERNAL_runFetch(process.env, request, { context });\n\nexport const config = {\n preferStatic: true,\n path: ['/', '/*', '/${rscBase}/**/*'],\n};\n`,\n );\n }\n const netlifyTomlFile = path.resolve('netlify.toml');\n if (!existsSync(netlifyTomlFile)) {\n writeFileSync(\n netlifyTomlFile,\n `\\\n[build]\n command = \"npm run build\"\n publish = \"${distDir}/${DIST_PUBLIC}\"\n[functions]\n included_files = [\"${privateDir}/**\"]\n directory = \"netlify-functions\"\n`,\n );\n }\n}\n\nexport default async function buildEnhancer(\n build: (utils: unknown, options: BuildOptions) => Promise<void>,\n): Promise<typeof build> {\n return async (utils: unknown, options: BuildOptions) => {\n await build(utils, options);\n await postBuild(options);\n };\n}\n"],"names":["existsSync","mkdirSync","writeFileSync","path","postBuild","distDir","privateDir","rscBase","DIST_PUBLIC","serverless","functionsDir","resolve","recursive","join","netlifyTomlFile","buildEnhancer","build","utils","options"],"mappings":"AAAA,SAASA,UAAU,EAAEC,SAAS,EAAEC,aAAa,QAAQ,UAAU;AAC/D,OAAOC,UAAU,YAAY;AAU7B,eAAeC,UAAU,EACvBC,OAAO,EACPC,UAAU,EACVC,OAAO,EACPC,WAAW,EACXC,UAAU,EACG;IACb,IAAIA,YAAY;QACd,MAAMC,eAAeP,KAAKQ,OAAO,CAAC;QAClCV,UAAUS,cAAc;YACtBE,WAAW;QACb;QACAV,cACEC,KAAKU,IAAI,CAACH,cAAc,aACxB,CAAC;+CACwC,EAAEL,QAAQ;;;;;;;sBAOnC,EAAEE,QAAQ;;AAEhC,CAAC;IAEC;IACA,MAAMO,kBAAkBX,KAAKQ,OAAO,CAAC;IACrC,IAAI,CAACX,WAAWc,kBAAkB;QAChCZ,cACEY,iBACA,CAAC;;;aAGM,EAAET,QAAQ,CAAC,EAAEG,YAAY;;qBAEjB,EAAEF,WAAW;;AAElC,CAAC;IAEC;AACF;AAEA,eAAe,eAAeS,cAC5BC,KAA+D;IAE/D,OAAO,OAAOC,OAAgBC;QAC5B,MAAMF,MAAMC,OAAOC;QACnB,MAAMd,UAAUc;IAClB;AACF"}
1
+ {"version":3,"sources":["../../src/adapters/netlify-build-enhancer.ts"],"sourcesContent":["import { existsSync, mkdirSync, writeFileSync } from 'node:fs';\nimport path from 'node:path';\n\nexport type BuildOptions = {\n distDir: string;\n privateDir: string;\n rscBase: string;\n DIST_PUBLIC: string;\n serverless: boolean;\n};\n\nasync function postBuild({\n distDir,\n privateDir,\n rscBase,\n DIST_PUBLIC,\n serverless,\n}: BuildOptions) {\n if (serverless) {\n const functionsDir = path.resolve('netlify-functions');\n mkdirSync(functionsDir, {\n recursive: true,\n });\n writeFileSync(\n path.join(functionsDir, 'serve.js'),\n `\\\nconst { INTERNAL_runFetch } = await import(${JSON.stringify(`../${distDir}/server/index.js`)});\n\nexport default async (request, context) =>\n INTERNAL_runFetch(process.env, request, { context });\n\nexport const config = {\n preferStatic: true,\n path: ['/', '/*', ${JSON.stringify(`/${rscBase}/**/*`)}],\n};\n`,\n );\n }\n const netlifyTomlFile = path.resolve('netlify.toml');\n if (!existsSync(netlifyTomlFile)) {\n writeFileSync(\n netlifyTomlFile,\n `\\\n[build]\n command = \"npm run build\"\n publish = ${JSON.stringify(`${distDir}/${DIST_PUBLIC}`)}\n[functions]\n included_files = [${JSON.stringify(`${privateDir}/**`)}]\n directory = \"netlify-functions\"\n`,\n );\n }\n}\n\nexport default async function buildEnhancer(\n build: (utils: unknown, options: BuildOptions) => Promise<void>,\n): Promise<typeof build> {\n return async (utils: unknown, options: BuildOptions) => {\n await build(utils, options);\n await postBuild(options);\n };\n}\n"],"names":["existsSync","mkdirSync","writeFileSync","path","postBuild","distDir","privateDir","rscBase","DIST_PUBLIC","serverless","functionsDir","resolve","recursive","join","JSON","stringify","netlifyTomlFile","buildEnhancer","build","utils","options"],"mappings":"AAAA,SAASA,UAAU,EAAEC,SAAS,EAAEC,aAAa,QAAQ,UAAU;AAC/D,OAAOC,UAAU,YAAY;AAU7B,eAAeC,UAAU,EACvBC,OAAO,EACPC,UAAU,EACVC,OAAO,EACPC,WAAW,EACXC,UAAU,EACG;IACb,IAAIA,YAAY;QACd,MAAMC,eAAeP,KAAKQ,OAAO,CAAC;QAClCV,UAAUS,cAAc;YACtBE,WAAW;QACb;QACAV,cACEC,KAAKU,IAAI,CAACH,cAAc,aACxB,CAAC;2CACoC,EAAEI,KAAKC,SAAS,CAAC,CAAC,GAAG,EAAEV,QAAQ,gBAAgB,CAAC,EAAE;;;;;;;oBAOzE,EAAES,KAAKC,SAAS,CAAC,CAAC,CAAC,EAAER,QAAQ,KAAK,CAAC,EAAE;;AAEzD,CAAC;IAEC;IACA,MAAMS,kBAAkBb,KAAKQ,OAAO,CAAC;IACrC,IAAI,CAACX,WAAWgB,kBAAkB;QAChCd,cACEc,iBACA,CAAC;;;YAGK,EAAEF,KAAKC,SAAS,CAAC,GAAGV,QAAQ,CAAC,EAAEG,aAAa,EAAE;;oBAEtC,EAAEM,KAAKC,SAAS,CAAC,GAAGT,WAAW,GAAG,CAAC,EAAE;;AAEzD,CAAC;IAEC;AACF;AAEA,eAAe,eAAeW,cAC5BC,KAA+D;IAE/D,OAAO,OAAOC,OAAgBC;QAC5B,MAAMF,MAAMC,OAAOC;QACnB,MAAMhB,UAAUgB;IAClB;AACF"}
@@ -1,7 +1,12 @@
1
1
  import type { MiddlewareHandler } from 'hono';
2
+ import { bodyLimit } from 'hono/body-limit';
3
+ import { Hono } from 'hono/tiny';
2
4
  declare const _default: (handlers: import("../lib/types.js").Unstable_Handlers, options?: {
3
5
  static?: boolean;
4
- middlewareFns?: (() => MiddlewareHandler)[];
6
+ bodyLimit?: Parameters<typeof bodyLimit>[0] | false;
7
+ middlewareFns?: ((opts: {
8
+ app: Hono;
9
+ }) => MiddlewareHandler)[];
5
10
  middlewareModules?: Record<string, () => Promise<unknown>>;
6
11
  } | undefined) => import("../lib/types.js").Unstable_ServerEntry;
7
12
  export default _default;