@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 +9 -146
- package/compiler/aot.js +1 -1
- package/compiler/jit.d.ts +2 -1
- package/compiler/jit.js +1 -1
- package/constants.d.ts +1 -3
- package/constants.js +1 -1
- package/core/middleware.d.ts +6 -0
- package/core/middleware.js +1 -1
- package/index.d.ts +1 -1
- package/index.js +1 -1
- package/package.json +9 -9
- package/utils/cors.js +1 -1
- package/utils/secure-headers.d.ts +1 -1
- package/utils/secure-headers.js +1 -1
- package/utils/{headers.d.ts → static-headers.d.ts} +1 -0
- package/utils/static-headers.js +1 -0
- package/utils/headers.js +0 -1
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
|
|
7
|
+
const api = router([], [
|
|
8
8
|
handle.get('/', () => 'Hi')
|
|
9
9
|
]);
|
|
10
10
|
|
|
11
|
-
const app = router
|
|
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 {
|
|
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 =
|
|
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 '
|
|
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
|
-
|
|
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
|
|
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?`
|
|
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
|
|
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
|
|
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}));`;
|
package/core/middleware.d.ts
CHANGED
|
@@ -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,
|
package/core/middleware.js
CHANGED
|
@@ -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
|
|
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
|
|
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.
|
|
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.
|
|
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
|
-
"./
|
|
31
|
-
"./
|
|
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
|
-
"./
|
|
35
|
-
"
|
|
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{
|
|
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 {
|
|
2
|
+
import type { MiddlewareTypes } from "../core/middleware.js";
|
|
3
3
|
declare const _default: (headers: Options) => MiddlewareTypes<never, {}>;
|
|
4
4
|
export default _default;
|
package/utils/secure-headers.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import secureHeaders from"secure-headers";import
|
|
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)}));
|