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.
- package/README.md +21 -3
- package/dist/adapters/aws-lambda.d.ts +6 -1
- package/dist/adapters/aws-lambda.js +15 -5
- package/dist/adapters/aws-lambda.js.map +1 -1
- package/dist/adapters/bun.d.ts +6 -1
- package/dist/adapters/bun.js +15 -5
- package/dist/adapters/bun.js.map +1 -1
- package/dist/adapters/cloudflare.d.ts +6 -1
- package/dist/adapters/cloudflare.js +26 -10
- package/dist/adapters/cloudflare.js.map +1 -1
- package/dist/adapters/default.d.ts +4 -1
- package/dist/adapters/deno.d.ts +6 -1
- package/dist/adapters/deno.js +15 -5
- package/dist/adapters/deno.js.map +1 -1
- package/dist/adapters/edge.d.ts +6 -1
- package/dist/adapters/edge.js +15 -5
- package/dist/adapters/edge.js.map +1 -1
- package/dist/adapters/netlify-build-enhancer.js +4 -4
- package/dist/adapters/netlify-build-enhancer.js.map +1 -1
- package/dist/adapters/netlify.d.ts +6 -1
- package/dist/adapters/netlify.js +15 -5
- package/dist/adapters/netlify.js.map +1 -1
- package/dist/adapters/node.d.ts +6 -1
- package/dist/adapters/node.js +15 -5
- package/dist/adapters/node.js.map +1 -1
- package/dist/adapters/vercel-build-enhancer.js +3 -2
- package/dist/adapters/vercel-build-enhancer.js.map +1 -1
- package/dist/adapters/vercel.d.ts +6 -1
- package/dist/adapters/vercel.js +15 -5
- package/dist/adapters/vercel.js.map +1 -1
- package/dist/lib/env.d.ts +5 -0
- package/dist/lib/env.js +12 -0
- package/dist/lib/env.js.map +1 -0
- package/dist/lib/hono/middleware.d.ts +7 -3
- package/dist/lib/hono/middleware.js +2 -9
- package/dist/lib/hono/middleware.js.map +1 -1
- package/dist/lib/types.d.ts +0 -1
- package/dist/lib/types.js.map +1 -1
- package/dist/lib/utils/initial-rsc.d.ts +8 -0
- package/dist/lib/utils/initial-rsc.js +36 -0
- package/dist/lib/utils/initial-rsc.js.map +1 -0
- package/dist/lib/utils/log.d.ts +1 -0
- package/dist/lib/utils/log.js +9 -0
- package/dist/lib/utils/log.js.map +1 -0
- package/dist/lib/utils/path.js +4 -3
- package/dist/lib/utils/path.js.map +1 -1
- package/dist/lib/utils/prefetch-cache.d.ts +14 -0
- package/dist/lib/utils/prefetch-cache.js +50 -0
- package/dist/lib/utils/prefetch-cache.js.map +1 -0
- package/dist/lib/utils/react-debug-channel.d.ts +1 -3
- package/dist/lib/utils/react-debug-channel.js +6 -7
- package/dist/lib/utils/react-debug-channel.js.map +1 -1
- package/dist/lib/utils/render.js +2 -1
- package/dist/lib/utils/render.js.map +1 -1
- package/dist/lib/utils/request.js +37 -0
- package/dist/lib/utils/request.js.map +1 -1
- package/dist/lib/utils/ssr.d.ts +0 -1
- package/dist/lib/utils/ssr.js +2 -32
- package/dist/lib/utils/ssr.js.map +1 -1
- package/dist/lib/vite-entries/entry.build.js +5 -8
- package/dist/lib/vite-entries/entry.build.js.map +1 -1
- package/dist/lib/vite-entries/entry.server.js +2 -2
- package/dist/lib/vite-entries/entry.server.js.map +1 -1
- package/dist/lib/vite-plugins/combined-plugins.js +20 -2
- package/dist/lib/vite-plugins/combined-plugins.js.map +1 -1
- package/dist/lib/vite-plugins/static-build.js +2 -1
- package/dist/lib/vite-plugins/static-build.js.map +1 -1
- package/dist/lib/vite-rsc/handler.js +14 -7
- package/dist/lib/vite-rsc/handler.js.map +1 -1
- package/dist/lib/vite-rsc/ssr.js +2 -3
- package/dist/lib/vite-rsc/ssr.js.map +1 -1
- package/dist/minimal/client.js +70 -57
- package/dist/minimal/client.js.map +1 -1
- package/dist/router/client.d.ts +1 -3
- package/dist/router/client.js +39 -46
- package/dist/router/client.js.map +1 -1
- package/dist/router/create-pages.d.ts +3 -1
- package/dist/router/create-pages.js +11 -2
- package/dist/router/create-pages.js.map +1 -1
- package/dist/router/define-router.d.ts +20 -2
- package/dist/router/define-router.js +262 -232
- package/dist/router/define-router.js.map +1 -1
- package/dist/router/fs-router.d.ts +6 -0
- package/dist/router/fs-router.js +10 -5
- package/dist/router/fs-router.js.map +1 -1
- package/dist/router/server.d.ts +3 -2
- package/dist/router/server.js +1 -1
- package/dist/router/server.js.map +1 -1
- package/dist/server.d.ts +1 -7
- package/dist/server.js +1 -15
- package/dist/server.js.map +1 -1
- package/package.json +4 -4
- package/dist/lib/context.d.ts +0 -9
- package/dist/lib/context.js +0 -26
- 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.
|
|
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
|
-
|
|
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 {
|
|
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
|
-
|
|
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 {
|
|
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"}
|
package/dist/adapters/bun.d.ts
CHANGED
|
@@ -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
|
-
|
|
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;
|
package/dist/adapters/bun.js
CHANGED
|
@@ -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 {
|
|
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
|
-
|
|
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
|
}));
|
package/dist/adapters/bun.js.map
CHANGED
|
@@ -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 {
|
|
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
|
-
|
|
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 {
|
|
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
|
|
15
|
+
function isProductionWorker(req) {
|
|
14
16
|
// This header seems to only be set for production cloudflare workers
|
|
15
|
-
return
|
|
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
|
-
|
|
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 &&
|
|
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
|
-
|
|
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;
|
package/dist/adapters/deno.d.ts
CHANGED
|
@@ -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
|
-
|
|
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;
|
package/dist/adapters/deno.js
CHANGED
|
@@ -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 {
|
|
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
|
-
|
|
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 {
|
|
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"}
|
package/dist/adapters/edge.d.ts
CHANGED
|
@@ -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
|
-
|
|
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;
|
package/dist/adapters/edge.js
CHANGED
|
@@ -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 {
|
|
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
|
-
|
|
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 {
|
|
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(
|
|
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: ['/', '/*',
|
|
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 =
|
|
26
|
+
publish = ${JSON.stringify(`${distDir}/${DIST_PUBLIC}`)}
|
|
27
27
|
[functions]
|
|
28
|
-
included_files = [
|
|
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(
|
|
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
|
-
|
|
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;
|