@mapl/web 0.2.0-alpha.4 → 0.2.0-alpha.6

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 CHANGED
@@ -4,11 +4,11 @@ A compiled web framework for all runtimes.
4
4
  import { router, handle, layer } from '@mapl/web';
5
5
  import { compileToHandler } from '@mapl/web/compiler/jit';
6
6
 
7
- const api = router.init([], [
7
+ const api = router([], [
8
8
  handle.get('/', () => 'Hi')
9
9
  ]);
10
10
 
11
- const app = router.init(
11
+ const app = router(
12
12
  // Middlewares
13
13
  [ layer.attach('id', () => performance.now()) ],
14
14
 
@@ -20,7 +20,7 @@ const app = router.init(
20
20
  );
21
21
 
22
22
  export default {
23
- fetch: compileToHandler(app)
23
+ fetch: await compileToHandler(app)
24
24
  };
25
25
  ```
26
26
 
@@ -50,7 +50,7 @@ export default router(
50
50
 
51
51
  // build.ts
52
52
  import app from './main.ts';
53
- import { injectCompiledHandler } from '@mapl/web/compiler/jit';
53
+ import { compileToDependency } from '@mapl/web/compiler/jit';
54
54
  import { evaluateToString } from "runtime-compiler/jit";
55
55
 
56
56
  import { rolldown } from "rolldown";
@@ -60,20 +60,20 @@ import { writeFileSync } from "node:fs";
60
60
 
61
61
  // Output file
62
62
  const OUTPUT = "./index.js";
63
- const HANDLER = injectCompiledHandler(app);
63
+ const HANDLER = compileToDependency(app);
64
64
 
65
65
  writeFileSync(
66
66
  OUTPUT,
67
67
  `import 'runtime-compiler/hydrate-loader';
68
68
 
69
69
  import app from './main.js';
70
- import hydrateRouter from '../../lib/compiler/aot.js';
70
+ import hydrateRouter from '@mapl/web/compiler/aot';
71
71
  hydrateRouter(app);
72
72
 
73
- import { getDependency } from 'runtime-compiler';
74
73
  import { hydrate } from 'runtime-compiler/hydrate';
75
74
  (${evaluateToString()})(...hydrate());
76
75
 
76
+ import { getDependency } from 'runtime-compiler';
77
77
  export default {
78
78
  fetch: getDependency(${HANDLER})
79
79
  };`,
@@ -91,149 +91,12 @@ const input = await rolldown({
91
91
  }),
92
92
  ],
93
93
  });
94
- const output = await input.write({
94
+ await input.write({
95
95
  file: ENTRY,
96
96
  inlineDynamicImports: true,
97
97
  });
98
98
  ```
99
-
100
- Example output:
101
- ```js
102
- let isHydrating = !1;
103
- isHydrating = !0;
104
- var core_default = (middlewares, handlers, children) => [
105
- middlewares,
106
- handlers,
107
- ,
108
- children,
109
- ];
110
- let attach = (prop, f) => [1, f, prop],
111
- noType = { type: null },
112
- mergeData = (...dat) =>
113
- 0 === dat.length ? noType : Object.assign({ type: null }, ...dat),
114
- compiledDependencies = [],
115
- externalDependencies = [],
116
- getDependency = (c) => compiledDependencies[c],
117
- injectExternalDependency = (e) => '_' + externalDependencies.push(e);
118
- var f,
119
- handler,
120
- main_default = core_default(
121
- [
122
- ((f = (c) => {
123
- console.log(c.req), getDependency(logID)(), getDependency(logID2)();
124
- }),
125
- [0, f]),
126
- attach('id', () => performance.now()),
127
- ],
128
- [((handler = (c) => c.id), ['', '/path', handler, mergeData()])],
129
- {
130
- '/api': core_default(
131
- [attach('body', async (c) => c.req.text())],
132
- [['POST', '/body', (c) => c.body, mergeData()]],
133
- ),
134
- },
135
- );
136
- let hooks,
137
- _ = Symbol.for('@safe-std/error'),
138
- AsyncFunction =
139
- (injectExternalDependency((u) => Array.isArray(u) && u[0] === _),
140
- (async () => {}).constructor),
141
- compileErrorHandler = (scope) =>
142
- (scope[3] ??= hooks.compileErrorHandler(scope[2][0], scope[2][1], scope)),
143
- clearErrorHandler = (scope) => {
144
- null != scope[2] && (scope[3] = null);
145
- },
146
- createContext = (scope) => (
147
- scope[1] || ((scope[1] = !0), clearErrorHandler(scope)), ''
148
- ),
149
- createAsyncScope = (scope) => (
150
- scope[0] || ((scope[0] = !0), clearErrorHandler(scope)), ''
151
- ),
152
- setTmp = (scope) => ((scope[4] = !0), ''),
153
- hydrateDependency = (group, scope, prefix) => {
154
- null != group[2] && ((scope[2] = group[2]), (scope[3] = null));
155
- for (let i = 0, middlewares = group[0]; i < middlewares.length; i++) {
156
- let middleware = middlewares[i],
157
- fn = middleware[1],
158
- id = middleware[0];
159
- -1 === id
160
- ? fn(scope)
161
- : (injectExternalDependency(fn),
162
- fn.length > 0 && createContext(scope),
163
- fn instanceof AsyncFunction && createAsyncScope(scope),
164
- 1 === id
165
- ? createContext(scope)
166
- : 2 === id
167
- ? (setTmp(scope), compileErrorHandler(scope))
168
- : 3 === id &&
169
- (setTmp(scope),
170
- compileErrorHandler(scope),
171
- createContext(scope)));
172
- }
173
- for (let i = 0, handlers = group[1]; i < handlers.length; i++) {
174
- let handler = handlers[i];
175
- hooks.compileHandler(
176
- handler[2],
177
- handler[3],
178
- prefix + ('/' === handler[1] || '' !== prefix ? '' : handler[1]),
179
- scope,
180
- );
181
- }
182
- let childGroups = group[3];
183
- if (null != childGroups)
184
- for (let childPrefix in childGroups)
185
- hydrateDependency(
186
- childGroups[childPrefix],
187
- scope.slice(),
188
- '/' === childPrefix ? prefix : prefix + childPrefix,
189
- );
190
- };
191
- (() => {
192
- let hook = (fn) => (injectExternalDependency(fn), '');
193
- (hooks = { compileHandler: hook, compileErrorHandler: hook }),
194
- hydrateDependency(main_default, [!1, !1, , '', !1], '');
195
- })(),
196
- ((_$1, _1, _2, _3, _4, _5, _6) => {
197
- _$1.push(
198
- (() => {
199
- var t = ['text/html', 'application/json'].map((c) => [
200
- 'Content-Type',
201
- c,
202
- ]),
203
- [mwh, mwj] = t,
204
- [mwoh, mwoj] = t.map((c) => ({ headers: [c] })),
205
- [mwn, mwb] = [404, 400].map((s) => new Response(null, { status: s })),
206
- mwc = (r) => ({ status: 200, req: r, headers: [] });
207
- return (r) => {
208
- let u = r.url,
209
- s = u.indexOf('/', 12) + 1,
210
- e = u.indexOf('?', s),
211
- p = -1 === e ? u.slice(s) : u.slice(s, e);
212
- if ('POST' === r.method && 'api' === p) {
213
- let c = mwc(r);
214
- return (
215
- _2(c),
216
- (c.id = _3()),
217
- (async () => ((c.body = await _5(c)), new Response(_6(c), c)))()
218
- );
219
- }
220
- if ('path' === p) {
221
- let c = mwc(r);
222
- return _2(c), (c.id = _3()), new Response(_4(c), c);
223
- }
224
- return mwn;
225
- };
226
- })(),
227
- );
228
- })(
229
- ...(() => {
230
- let n = [compiledDependencies].concat(externalDependencies);
231
- return (externalDependencies.length = 0), n;
232
- })(),
233
- );
234
- var _1_default = { fetch: getDependency(0) };
235
- export { _1_default as default };
236
- ```
99
+ As of rn only `terser` can DCE `@mapl/web` well.
237
100
 
238
101
  ### Hydration
239
102
  ```ts
package/compiler/aot.js CHANGED
@@ -1 +1 @@
1
- import{hydrateDependency,setHooks}from"@mapl/framework";import{injectExternalDependency}from"runtime-compiler";import"../core/context.js";export default router=>{let hook=fn=>{injectExternalDependency(fn);return``};setHooks({compileHandler:hook,compileErrorHandler:hook});hydrateDependency(router,[false,false,,``,false],``)};
1
+ import{hydrateDependency,setHooks}from"@mapl/framework";import{injectExternalDependency,markExported}from"runtime-compiler";import"../core/context.js";export default router=>{let hook=fn=>{injectExternalDependency(fn);return``};setHooks({compileHandler:hook,compileErrorHandler:hook});hydrateDependency(router,[false,false,,``,false],``);markExported()};
package/compiler/jit.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import type { RouterTag } from "../core/index.js";
2
2
  import { type CompiledDependency } from "runtime-compiler";
3
- export declare const injectCompiledHandler: (router: RouterTag) => CompiledDependency<(req: Request) => any>;
3
+ export declare const compileToString: (router: RouterTag) => string;
4
+ export declare const compileToDependency: (router: RouterTag) => CompiledDependency<(req: Request) => any>;
4
5
  export declare const compileToHandler: (router: RouterTag) => Promise<(req: Request) => any>;
5
6
  export declare const compileToHandlerSync: (router: RouterTag) => ((req: Request) => any);
package/compiler/jit.js CHANGED
@@ -1 +1 @@
1
- import{compileGroup,createArgSet,AsyncFunction,setHooks,contextInit,setContextInit}from"@mapl/framework";import compile from"@mapl/router/method/compiler";import{countParams}from"@mapl/router/path";import{insertItem}from"@mapl/router/method";import{getDependency,injectDependency,injectExternalDependency}from"runtime-compiler";import{evaluate,evaluateSync}from"runtime-compiler/jit";let urlRouter;let paramArgs=createArgSet(new Array(16).fill(0).map((_1,i)=>`q`+i));let compileReturn=(dat,fnAsync,scopeAsync,contextCreated,result)=>{let typ=dat.type;if(typ===`raw`)return`return `+result;fnAsync&&(result=`await `+result);let str=typ==null?`return new Response(`+result+(contextCreated?`,c)`:`)`):contextCreated?`c.headers.push(`+(typ===`json`?`mwj`:`mwh`)+`);return new Response(`+(typ===`json`?`JSON.stringify(`+result+`)`:result)+`,c)`:`return new Response(`+(typ===`json`?`JSON.stringify(`+result+`),mwoj`:result+`,mwoh`)+`)`;return fnAsync&&!scopeAsync?`return (async()=>{`+str+`})()`:str};let compileToState=router=>{urlRouter={};setHooks({compileHandler:(fn,dat,path,scope)=>{let call=injectExternalDependency(fn)+`(`;let paramCount=countParams(path);paramCount>0&&(call+=paramArgs[paramCount]);if(fn.length>paramCount){call+=paramCount===0?`c`:`,c`;if(!scope[1])return contextInit+compileReturn(dat,fn instanceof AsyncFunction,scope[0],true,call+`)`)}return compileReturn(dat,fn instanceof AsyncFunction,scope[0],scope[1],call+`)`)},compileErrorHandler:(fn,dat,scope)=>{let call=injectExternalDependency(fn)+`(t`;if(fn.length>1){call+=`,c`;if(!scope[1])return contextInit+compileReturn(dat,fn instanceof AsyncFunction,scope[0],true,call+`)`)}return compileReturn(dat,fn instanceof AsyncFunction,scope[0],scope[1],call+`)`)},registerCompiled:(method,path,content)=>insertItem(urlRouter,method,path,content)});setContextInit(`let c=mwc(r);`);compileGroup(router,[false,false,,`return mwb`,false],``,``)};export let injectCompiledHandler=router=>{compileToState(router);return injectDependency(`(()=>{var t=["text/html","application/json"].map(c=>["Content-Type",c]),[mwh,mwj]=t,[mwoh,mwoj]=t.map(c=>({headers:[c]})),[mwn,mwb]=[404,400].map(s=>new Response(null,{status:s})),mwc=(r)=>({status:200,req:r,headers:[]});return(r)=>{`+compile(urlRouter,`r.method`,`let u=r.url,s=u.indexOf("/",12)+1,e=u.indexOf("?",s),p=e===-1?u.slice(s):u.slice(s,e);`,1)+`return mwn}})()`)};export let compileToHandler=async router=>{let id=injectCompiledHandler(router);await evaluate();return getDependency(id)};export let compileToHandlerSync=router=>{let id=injectCompiledHandler(router);evaluateSync();return getDependency(id)};
1
+ import{compileGroup,createArgSet,AsyncFunction,setHooks,contextInit,setContextInit}from"@mapl/framework";import compile from"@mapl/router/method/compiler";import{countParams}from"@mapl/router/path";import{insertItem}from"@mapl/router/method";import{exportDependency,getDependency,injectDependency,injectExternalDependency}from"runtime-compiler";import{evaluate,evaluateSync}from"runtime-compiler/jit";let urlRouter;let paramArgs=createArgSet(new Array(16).fill(0).map((_1,i)=>`q`+i));let compileReturn=(dat,fnAsync,scopeAsync,contextCreated,result)=>{let typ=dat.type;if(typ===`raw`)return`return `+result;fnAsync&&(result=`await `+result);let str=typ==null?`return new Response(`+result+(contextCreated?`,c)`:`)`):contextCreated?`hd.push(`+(typ===`json`?`j`:`h`)+`);return new Response(`+(typ===`json`?`JSON.stringify(`+result+`)`:result)+`,c)`:`return new Response(`+(typ===`json`?`JSON.stringify(`+result+`),oj`:result+`,oh`)+`)`;return fnAsync&&!scopeAsync?`return (async()=>{`+str+`})()`:str};let compileToState=router=>{urlRouter={};setHooks({compileHandler:(fn,dat,path,scope)=>{let call=injectExternalDependency(fn)+`(`;let paramCount=countParams(path);paramCount>0&&(call+=paramArgs[paramCount]);if(fn.length>paramCount){call+=paramCount===0?`c`:`,c`;if(!scope[1])return contextInit+compileReturn(dat,fn instanceof AsyncFunction,scope[0],true,call+`)`)}return compileReturn(dat,fn instanceof AsyncFunction,scope[0],scope[1],call+`)`)},compileErrorHandler:(fn,dat,scope)=>{let call=injectExternalDependency(fn)+`(t`;if(fn.length>1){call+=`,c`;if(!scope[1])return contextInit+compileReturn(dat,fn instanceof AsyncFunction,scope[0],true,call+`)`)}return compileReturn(dat,fn instanceof AsyncFunction,scope[0],scope[1],call+`)`)},registerCompiled:(method,path,content)=>insertItem(urlRouter,method,path,content)});setContextInit(`let hd=[],c={status:200,req:r,headers:hd};`);compileGroup(router,[false,false,,`return b`,false],``,``)};export let compileToString=router=>{compileToState(router);return`()=>{var t=["text/html","application/json"].map(c=>["Content-Type",c]),[h,j]=t,[oh,oj]=t.map(c=>({headers:[c]})),[n,b]=[404,400].map(s=>new Response(null,{status:s}));return(r)=>{`+compile(urlRouter,`r.method`,`let u=r.url,s=u.indexOf("/",12)+1,e=u.indexOf("?",s),p=e===-1?u.slice(s):u.slice(s,e);`,1)+`return n}}`};export let compileToDependency=router=>exportDependency(injectDependency(`(`+compileToString(router)+`)()`));export let compileToHandler=async router=>{let id=compileToDependency(router);await evaluate();return getDependency(id)};export let compileToHandlerSync=router=>{let id=compileToDependency(router);evaluateSync();return getDependency(id)};
package/constants.d.ts CHANGED
@@ -1,7 +1,5 @@
1
1
  export * from "@mapl/framework/constants";
2
- export declare const WEB: string;
3
- export declare const LOCAL_DEPS: string;
4
- export declare const CTX_FN: string;
2
+ export declare const HEADERS: string;
5
3
  export declare const CTX_INIT: string;
6
4
  export declare const PARSE_PATH: string;
7
5
  export declare const CHTML: string;
package/constants.js CHANGED
@@ -1 +1 @@
1
- import{CTX,PATH,REQ,URL,PATH_START,PATH_END,TMP}from"@mapl/framework/constants";export*from"@mapl/framework/constants";export let WEB=`mw`;export let LOCAL_DEPS=WEB+`l`;export let CTX_FN=WEB+`c`;export let CTX_INIT=`let `+CTX+`=`+CTX_FN+`(`+REQ+`);`;export let PARSE_PATH=`let `+URL+`=`+REQ+`.url,`+PATH_START+`=`+URL+`.indexOf("/",12)+1,`+PATH_END+`=`+URL+`.indexOf("?",`+PATH_START+`),`+PATH+`=`+PATH_END+`===-1?`+URL+`.slice(`+PATH_START+`):`+URL+`.slice(`+PATH_START+`,`+PATH_END+`);`;export let CHTML=WEB+`h`;export let CJSON=WEB+`j`;export let OHTML=WEB+`oh`;export let OJSON=WEB+`oj`;export let R404=WEB+`n`;export let R400=WEB+`b`;export let GLOBALS=`var `+TMP+`=["text/html","application/json"].map(c=>["Content-Type",c]),[`+CHTML+`,`+CJSON+`]=`+TMP+`,[`+OHTML+`,`+OJSON+`]=`+TMP+`.map(c=>({headers:[c]})),[`+R404+`,`+R400+`]=[404,400].map(s=>new Response(null,{status:s})),`+CTX_FN+`=(r)=>({status:200,req:r,headers:[]});`;
1
+ import{CTX,PATH,REQ,URL,PATH_START,PATH_END,TMP}from"@mapl/framework/constants";export*from"@mapl/framework/constants";export let HEADERS=`hd`;export let CTX_INIT=`let `+HEADERS+`=[],`+CTX+`={status:200,req:`+REQ+`,headers:`+HEADERS+`};`;export let PARSE_PATH=`let `+URL+`=`+REQ+`.url,`+PATH_START+`=`+URL+`.indexOf("/",12)+1,`+PATH_END+`=`+URL+`.indexOf("?",`+PATH_START+`),`+PATH+`=`+PATH_END+`===-1?`+URL+`.slice(`+PATH_START+`):`+URL+`.slice(`+PATH_START+`,`+PATH_END+`);`;export let CHTML=`h`;export let CJSON=`j`;export let OHTML=`oh`;export let OJSON=`oj`;export let R404=`n`;export let R400=`b`;export let GLOBALS=`var `+TMP+`=["text/html","application/json"].map(c=>["Content-Type",c]),[`+CHTML+`,`+CJSON+`]=`+TMP+`,[`+OHTML+`,`+OJSON+`]=`+TMP+`.map(c=>({headers:[c]})),[`+R404+`,`+R400+`]=[404,400].map(s=>new Response(null,{status:s}));`;
@@ -1,3 +1,4 @@
1
+ import type { ScopeState } from "@mapl/framework";
1
2
  import type { InferErr, InferResult } from "@safe-std/error";
2
3
  import type { AwaitedReturn } from "./utils.js";
3
4
  import type { Context } from "./context.js";
@@ -7,6 +8,11 @@ export type MiddlewareTypes<
7
8
  S
8
9
  > = [err: E, state: S];
9
10
  export type AnyMiddlewareTypes = MiddlewareTypes<any, any>;
11
+ export declare const macro: <
12
+ E = never,
13
+ S = {}
14
+ >(f: (scope: ScopeState) => string) => MiddlewareTypes<E, S>;
15
+ export declare const noOpMacro: MiddlewareTypes<never, {}>;
10
16
  export declare const tap: (f: MiddlewareHandler) => MiddlewareTypes<never, {}>;
11
17
  export declare const attach: <
12
18
  Prop extends string,
@@ -1 +1 @@
1
- export let tap=f=>[0,f];export let attach=(prop,f)=>[1,f,prop];export let validate=f=>[2,f];export let parse=(prop,f)=>[3,f,prop];
1
+ export let macro=f=>[-1,f];export let noOpMacro=macro(()=>``);export let tap=f=>[0,f];export let attach=(prop,f)=>[1,f,prop];export let validate=f=>[2,f];export let parse=(prop,f)=>[3,f,prop];
package/index.d.ts CHANGED
@@ -2,5 +2,5 @@ export { default as router } from "./core/index.js";
2
2
  export * as layer from "./core/middleware.js";
3
3
  export * as handle from "./core/handler.js";
4
4
  export * as cors from "./utils/cors.js";
5
- export { default as headers } from "./utils/headers.js";
5
+ export { default as staticHeaders } from "./utils/static-headers.js";
6
6
  export { default as secureHeaders } from "./utils/secure-headers.js";
package/index.js CHANGED
@@ -1 +1 @@
1
- export{default as router}from"./core/index.js";export*as layer from"./core/middleware.js";export*as handle from"./core/handler.js";export*as cors from"./utils/cors.js";export{default as headers}from"./utils/headers.js";export{default as secureHeaders}from"./utils/secure-headers.js";
1
+ export{default as router}from"./core/index.js";export*as layer from"./core/middleware.js";export*as handle from"./core/handler.js";export*as cors from"./utils/cors.js";export{default as staticHeaders}from"./utils/static-headers.js";export{default as secureHeaders}from"./utils/secure-headers.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mapl/web",
3
- "version": "0.2.0-alpha.4",
3
+ "version": "0.2.0-alpha.6",
4
4
  "description": "A compiled web framework for all runtimes",
5
5
  "keywords": ["fast", "lightweight", "cross-runtime", "framework", "web", "backend"],
6
6
  "repository": {
@@ -15,23 +15,23 @@
15
15
  "@mapl/framework": "^0.4.3",
16
16
  "@mapl/router": "^0.6.2",
17
17
  "@safe-std/error": "^1.0.1",
18
- "runtime-compiler": "^1.0.6"
18
+ "runtime-compiler": "^1.0.8"
19
19
  },
20
20
  "optionalDependencies": {
21
21
  "secure-headers": "^0.0.6"
22
22
  },
23
23
  "exports": {
24
24
  "./constants": "./constants.js",
25
- "./core/handler": "./core/handler.js",
26
- ".": "./index.js",
27
- "./core/context": "./core/context.js",
28
25
  "./core": "./core/index.js",
29
26
  "./core/middleware": "./core/middleware.js",
30
- "./utils/cors": "./utils/cors.js",
31
- "./utils/headers": "./utils/headers.js",
27
+ "./core/handler": "./core/handler.js",
28
+ "./core/context": "./core/context.js",
32
29
  "./utils/secure-headers": "./utils/secure-headers.js",
30
+ "./utils/cors": "./utils/cors.js",
31
+ "./core/utils": "./core/utils.js",
33
32
  "./compiler/jit": "./compiler/jit.js",
34
- "./compiler/aot": "./compiler/aot.js",
35
- "./core/utils": "./core/utils.js"
33
+ "./utils/static-headers": "./utils/static-headers.js",
34
+ ".": "./index.js",
35
+ "./compiler/aot": "./compiler/aot.js"
36
36
  }
37
37
  }
package/utils/cors.js CHANGED
@@ -1 +1 @@
1
- import{tap}from"../core/middleware.js";export let allowMethods=v=>[`Access-Control-Allow-Methods`,v];export let allowHeaders=v=>[`Access-Control-Allow-Headers`,``+v];export let maxAge=v=>[`Access-Control-Max-Age`,``+v];export let allowCredentials=[`Access-Control-Allow-Credentials`,`true`];export let exposeHeaders=v=>[`Access-Control-Expose-Headers`,``+v];export let init=(origins,preflightHeaders=[],headers=[])=>{if(origins!==`*`){headers.push([`Vary`,`Origin`]);if(Array.isArray(origins))return tap(c=>{let origin=c.req.headers.get(`Origin`);c.headers.push([`Access-Control-Allow-Origin`,typeof origin===`string`&&origins.includes(origin)?origin:origins[0]],...headers);c.req.method===`OPTIONS`&&c.headers.push(...preflightHeaders)})}headers.push([`Access-Control-Allow-Origin`,origins]);return tap(c=>{c.headers.push(...headers);c.req.method===`OPTIONS`&&c.headers.push(...preflightHeaders)})};
1
+ import{injectDependency}from"runtime-compiler";import{macro}from"../core/middleware.js";import{pushHeaders}from"./static-headers.js";import{isHydrating}from"runtime-compiler/config";import{createContext}from"@mapl/framework";export let allowMethods=v=>[`access-control-allow-methods`,v];export let allowHeaders=v=>[`access-control-allow-headers`,``+v];export let maxAge=v=>[`access-control-max-age`,``+v];export let allowCredentials=[`access-control-allow-credentials`,`true`];export let exposeHeaders=v=>[`access-control-expose-headers`,``+v];let createContextMacro=macro(createContext);export let init=isHydrating?()=>createContextMacro:(origins,preflightHeaders=[],headers=[])=>{if(origins!==`*`){headers.push([`vary`,`origin`]);if(Array.isArray(origins))return macro(scope=>{let pushPreflights=pushHeaders(preflightHeaders);let originList=injectDependency(JSON.stringify(origins));return createContext(scope)+(injectDependency(`(r,hd)=>{let o=r.headers.get("origin");h.push(["access-control-allow-origin",typeof o==="string"&&`+originList+`.includes(o)?o:`+originList+`[0]]);`+pushHeaders(headers)+(pushPreflights===``?`r.method==="OPTIONS"&&`+pushPreflights+`}`:`}`))+`(r,hd);`)})}headers.push([`access-control-allow-origin`,origins]);return macro(scope=>{let pushPreflights=pushHeaders(preflightHeaders);return createContext(scope)+(pushPreflights===``?pushHeaders(headers):injectDependency(`(r,hd)=>{`+pushHeaders(headers)+`r.method==="OPTIONS"&&`+pushPreflights+`}`)+`(r,hd);`)})};
@@ -1,4 +1,4 @@
1
1
  import { type Options } from "secure-headers";
2
- import { type MiddlewareTypes } from "../core/middleware.js";
2
+ import type { MiddlewareTypes } from "../core/middleware.js";
3
3
  declare const _default: (headers: Options) => MiddlewareTypes<never, {}>;
4
4
  export default _default;
@@ -1 +1 @@
1
- import secureHeaders from"secure-headers";import{tap}from"../core/middleware.js";export default headers=>(headers=Object.entries(secureHeaders(headers)),tap(c=>{c.headers.push(...headers)}));
1
+ import secureHeaders from"secure-headers";import staticHeaders from"./static-headers.js";export default headers=>staticHeaders(secureHeaders(headers));
@@ -1,4 +1,5 @@
1
1
  import type { Header } from "../core/context.js";
2
2
  import { type MiddlewareTypes } from "../core/middleware.js";
3
+ export declare const pushHeaders: (list: any[]) => string;
3
4
  declare const _default: (headers: Headers | Header[] | Record<string, any>) => MiddlewareTypes<never, {}>;
4
5
  export default _default;
@@ -0,0 +1 @@
1
+ import{isHydrating}from"runtime-compiler/config";import{macro,noOpMacro}from"../core/middleware.js";import{injectDependency}from"runtime-compiler";export let pushHeaders=list=>list.length===0?``:`hd.push(`+(list.length>1?`...`+injectDependency(JSON.stringify(list)):injectDependency(JSON.stringify(list[0])))+`);`;export default isHydrating?()=>noOpMacro:headers=>macro(()=>pushHeaders(Array.isArray(headers)?headers:headers instanceof Headers?headers.entries().toArray():Object.entries(headers)));
package/utils/headers.js DELETED
@@ -1 +0,0 @@
1
- import{tap}from"../core/middleware.js";export default headers=>(headers=Array.isArray(headers)?headers:headers instanceof Headers?headers.entries().toArray():Object.entries(headers),tap(c=>{c.headers.push(...headers)}));