@mapl/web 0.1.17 → 0.2.0-alpha.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 +219 -2
- package/compiler/aot.d.ts +3 -0
- package/compiler/aot.js +1 -0
- package/compiler/config.d.ts +5 -0
- package/compiler/config.js +1 -0
- package/compiler/index.d.ts +4 -0
- package/compiler/index.js +1 -0
- package/compiler/jit.d.ts +4 -0
- package/compiler/jit.js +1 -0
- package/constants.d.ts +1 -0
- package/constants.js +1 -1
- package/core/handler.js +1 -1
- package/index.d.ts +0 -1
- package/index.js +1 -1
- package/package.json +9 -6
- package/core/compile.d.ts +0 -6
- package/core/compile.js +0 -1
package/README.md
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
A compiled web framework for all runtimes.
|
|
2
2
|
|
|
3
3
|
```ts
|
|
4
|
-
import { router, handle, layer
|
|
4
|
+
import { router, handle, layer } from '@mapl/web';
|
|
5
|
+
import { compileToHandler } from '@mapl/web/compiler/jit';
|
|
5
6
|
|
|
6
7
|
const api = router.init([], [
|
|
7
8
|
handle.get('/', () => 'Hi')
|
|
@@ -19,6 +20,222 @@ const app = router.init(
|
|
|
19
20
|
);
|
|
20
21
|
|
|
21
22
|
export default {
|
|
22
|
-
fetch:
|
|
23
|
+
fetch: compileToHandler(app)
|
|
23
24
|
};
|
|
24
25
|
```
|
|
26
|
+
|
|
27
|
+
## AOT compilation (experimental)
|
|
28
|
+
Build `@mapl/web` to improve startup time.
|
|
29
|
+
|
|
30
|
+
Setup:
|
|
31
|
+
```ts
|
|
32
|
+
// main.ts
|
|
33
|
+
import { handle, layer, router } from '@mapl/web';
|
|
34
|
+
|
|
35
|
+
export default router(
|
|
36
|
+
[
|
|
37
|
+
layer.tap((c) => {
|
|
38
|
+
console.log(c.req);
|
|
39
|
+
}),
|
|
40
|
+
layer.attach('id', () => performance.now()),
|
|
41
|
+
],
|
|
42
|
+
[handle.any('/path', (c) => c.id)],
|
|
43
|
+
{
|
|
44
|
+
'/api': router(
|
|
45
|
+
[layer.parse('body', async (c) => c.req.text())],
|
|
46
|
+
[handle.post('/body', (c) => c.body)],
|
|
47
|
+
),
|
|
48
|
+
},
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
// build.ts
|
|
52
|
+
import app from './main.ts';
|
|
53
|
+
import { compileToString } from '@mapl/web/compiler/jit';
|
|
54
|
+
|
|
55
|
+
import { rolldown } from 'rolldown';
|
|
56
|
+
import { minifySync } from '@swc/core';
|
|
57
|
+
import { writeFileSync } from 'node:fs';
|
|
58
|
+
|
|
59
|
+
// Output file
|
|
60
|
+
const ENTRY = ...;
|
|
61
|
+
|
|
62
|
+
writeFileSync(
|
|
63
|
+
ENTRY,
|
|
64
|
+
`
|
|
65
|
+
import { hydrating } from "@mapl/web/compiler/config";
|
|
66
|
+
hydrating();
|
|
67
|
+
|
|
68
|
+
import app from '${import.meta.resolve('./main.js')}';
|
|
69
|
+
import hydrate from '@mapl/web/compiler/aot';
|
|
70
|
+
|
|
71
|
+
export default {
|
|
72
|
+
fetch: (${compileToString(app)})(...hydrate(app))
|
|
73
|
+
};
|
|
74
|
+
`,
|
|
75
|
+
);
|
|
76
|
+
const input = await rolldown({
|
|
77
|
+
input: ENTRY,
|
|
78
|
+
treeshake: {
|
|
79
|
+
propertyReadSideEffects: false,
|
|
80
|
+
moduleSideEffects: false,
|
|
81
|
+
},
|
|
82
|
+
transform: {
|
|
83
|
+
typescript: {
|
|
84
|
+
rewriteImportExtensions: true,
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
const output = await input.generate();
|
|
89
|
+
const code = minifySync(output.output[0].code, {
|
|
90
|
+
module: true,
|
|
91
|
+
mangle: false,
|
|
92
|
+
}).code;
|
|
93
|
+
|
|
94
|
+
writeFileSync(ENTRY, code);
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Example output:
|
|
98
|
+
```js
|
|
99
|
+
var core_default = (middlewares, handlers, children) => [
|
|
100
|
+
middlewares,
|
|
101
|
+
handlers,
|
|
102
|
+
,
|
|
103
|
+
children,
|
|
104
|
+
];
|
|
105
|
+
let attach = (prop, f) => [1, f, prop],
|
|
106
|
+
noType = { type: null },
|
|
107
|
+
mergeData = (...dat) =>
|
|
108
|
+
0 === dat.length ? noType : Object.assign({ type: null }, ...dat);
|
|
109
|
+
var main_default = core_default(
|
|
110
|
+
[
|
|
111
|
+
[
|
|
112
|
+
0,
|
|
113
|
+
(c) => {
|
|
114
|
+
console.log(c.req);
|
|
115
|
+
},
|
|
116
|
+
],
|
|
117
|
+
attach('id', () => performance.now()),
|
|
118
|
+
],
|
|
119
|
+
[
|
|
120
|
+
((path, handler, ...dat) => ['', path, handler, mergeData(...dat)])(
|
|
121
|
+
'/path',
|
|
122
|
+
(c) => c.id,
|
|
123
|
+
),
|
|
124
|
+
],
|
|
125
|
+
{
|
|
126
|
+
'/api': core_default(
|
|
127
|
+
[attach('body', async (c) => c.req.text())],
|
|
128
|
+
[
|
|
129
|
+
((path, handler, ...dat) => ['POST', path, handler, mergeData(...dat)])(
|
|
130
|
+
'/body',
|
|
131
|
+
(c) => c.body,
|
|
132
|
+
),
|
|
133
|
+
],
|
|
134
|
+
),
|
|
135
|
+
},
|
|
136
|
+
);
|
|
137
|
+
let AsyncFunction = (async () => {}).constructor,
|
|
138
|
+
compilerState = [, , , , ,],
|
|
139
|
+
compileErrorHandler$1 = (scope) =>
|
|
140
|
+
(scope[3] ??= compilerState[4](scope[2][0], scope[2][1], scope)),
|
|
141
|
+
clearErrorHandler = (scope) => {
|
|
142
|
+
null != scope[2] && (scope[3] = null);
|
|
143
|
+
},
|
|
144
|
+
createContext = (scope) =>
|
|
145
|
+
scope[1]
|
|
146
|
+
? ''
|
|
147
|
+
: ((scope[1] = !0), clearErrorHandler(scope), compilerState[2]),
|
|
148
|
+
createAsyncScope = (scope) =>
|
|
149
|
+
scope[0]
|
|
150
|
+
? ''
|
|
151
|
+
: ((scope[0] = !0), clearErrorHandler(scope), 'return (async()=>{'),
|
|
152
|
+
setTmp = (scope) => (scope[4] ? 't' : ((scope[4] = !0), 'let t')),
|
|
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
|
+
: (compilerState[1].push(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$1(scope))
|
|
168
|
+
: 3 === id &&
|
|
169
|
+
(setTmp(scope),
|
|
170
|
+
compileErrorHandler$1(scope),
|
|
171
|
+
createContext(scope)));
|
|
172
|
+
}
|
|
173
|
+
for (let i = 0, handlers = group[1]; i < handlers.length; i++) {
|
|
174
|
+
let handler = handlers[i];
|
|
175
|
+
compilerState[3](
|
|
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
|
+
_ = Symbol.for('@safe-std/error');
|
|
192
|
+
var aot_default = {
|
|
193
|
+
fetch: ((me, mwc, f1, f2, f3, f4, f5) => {
|
|
194
|
+
var t = ['text/html', 'application/json'].map((c) => ['Content-Type', c]),
|
|
195
|
+
[mwh, mwj] = t,
|
|
196
|
+
[mwoh, mwoj] = t.map((c) => ({ headers: [c] })),
|
|
197
|
+
[mwn, mwb] = [404, 400].map((s) => new Response(null, { status: s }));
|
|
198
|
+
return (r) => {
|
|
199
|
+
let u = r.url,
|
|
200
|
+
s = u.indexOf('/', 12) + 1,
|
|
201
|
+
e = u.indexOf('?', s),
|
|
202
|
+
p = -1 === e ? u.slice(s) : u.slice(s, e);
|
|
203
|
+
if ('POST' === r.method && 'api' === p) {
|
|
204
|
+
let c = mwc(r);
|
|
205
|
+
return (
|
|
206
|
+
f1(c),
|
|
207
|
+
(c.id = f2()),
|
|
208
|
+
(async () => ((c.body = await f4(c)), new Response(f5(c), c)))()
|
|
209
|
+
);
|
|
210
|
+
}
|
|
211
|
+
if ('path' === p) {
|
|
212
|
+
let c = mwc(r);
|
|
213
|
+
return f1(c), (c.id = f2()), new Response(f3(c), c);
|
|
214
|
+
}
|
|
215
|
+
return mwn;
|
|
216
|
+
};
|
|
217
|
+
})(
|
|
218
|
+
...((compilerState[0] = {}),
|
|
219
|
+
(compilerState[1] = []),
|
|
220
|
+
(compilerState[2] = ''),
|
|
221
|
+
(compilerState[3] = (fn) => (compilerState[1].push(fn), '')),
|
|
222
|
+
(compilerState[4] = (fn) => (compilerState[1].push(fn), '')),
|
|
223
|
+
hydrateDependency(main_default, [!1, !1, , '', !1], ''),
|
|
224
|
+
[
|
|
225
|
+
(u) => Array.isArray(u) && u[0] === _,
|
|
226
|
+
(r) => ({ status: 200, req: r, headers: [] }),
|
|
227
|
+
].concat(compilerState[1])),
|
|
228
|
+
),
|
|
229
|
+
};
|
|
230
|
+
export { aot_default as default };
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### Hydration
|
|
234
|
+
```ts
|
|
235
|
+
import { isHydrating } from '@mapl/web/compiler/config';
|
|
236
|
+
|
|
237
|
+
// false while building the output string
|
|
238
|
+
// true while only building dependencies
|
|
239
|
+
// Use this to for minifiedrs to eliminate unused code path in final output
|
|
240
|
+
isHydrating();
|
|
241
|
+
```
|
package/compiler/aot.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{hydrateDependency,externalDependencies,setHooks}from"@mapl/framework";import{isErr}from"@safe-std/error";import createContext from"../core/context.js";export default router=>{externalDependencies.length=0;let hook=fn=>{externalDependencies.push(fn);return``};setHooks({compileHandler:hook,compileErrorHandler:hook});hydrateDependency(router,[false,false,,``,false],``);return[isErr,createContext].concat(externalDependencies)};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
let hydrateDependency=false;export let isHydrating=()=>hydrateDependency;export let hydrating=()=>{hydrateDependency=true};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{externalDependencies}from"@mapl/framework";import{isHydrating}from"./config.js";let localDeps=``,localDepsCnt=0;export let injectLocalDependency=isHydrating()?()=>++localDepsCnt:val=>{localDepsCnt++;localDeps+=`,l`+localDepsCnt+`=`+val;return localDepsCnt};export let localDependencies=()=>localDeps;export let stateToArgs=()=>{let depsString=`me,mwc`;for(let i=0;i<externalDependencies.length;i++)depsString+=`,f`+(i+1);return depsString};
|
package/compiler/jit.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{compileGroup,createArgSet,AsyncFunction,setHooks,externalDependencies,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{isErr}from"@safe-std/error";import createContext from"../core/context.js";import{localDependencies,stateToArgs}from"./index.js";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={};externalDependencies.length=0;setHooks({compileHandler:(fn,dat,path,scope)=>{let call=`f`+externalDependencies.push(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=`f`+externalDependencies.push(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 stateToString=()=>`"use strict";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}))`+localDependencies()+`;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 compileToString=router=>{compileToState(router);return`(`+stateToArgs()+`)=>{`+stateToString()+`}`};export let compileToHandler=router=>{compileToState(router);return Function(stateToArgs(),stateToString())(isErr,createContext,...externalDependencies)};
|
package/constants.d.ts
CHANGED
package/constants.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{MAPL,CTX,PATH,REQ,URL,PATH_START,PATH_END,TMP}from"@mapl/framework/constants";export*from"@mapl/framework/constants";export let WEB=MAPL+`w`;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}))`;
|
|
1
|
+
import{MAPL,CTX,PATH,REQ,URL,PATH_START,PATH_END,TMP}from"@mapl/framework/constants";export*from"@mapl/framework/constants";export let WEB=MAPL+`w`;export let LOCAL_DEP=`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}))`;
|
package/core/handler.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export let json={type:`json`};export let html={type:`html`};export let raw={type:`raw`};let noType={type:null};export let error=(r,f,...dat)=>{r[2]=[f,dat.length===0?noType:Object.assign({type:null},...dat)];return r};
|
|
1
|
+
export let json={type:`json`};export let html={type:`html`};export let raw={type:`raw`};let noType={type:null};export let error=(r,f,...dat)=>{r[2]=[f,dat.length===0?noType:Object.assign({type:null},...dat)];return r};let mergeData=(...dat)=>dat.length===0?noType:Object.assign({type:null},...dat);export let route=(method,path,handler,...dat)=>[method,path,handler,mergeData(...dat)];export let any=(path,handler,...dat)=>[``,path,handler,mergeData(...dat)];export let get=(path,handler,...dat)=>[`GET`,path,handler,mergeData(...dat)];export let post=(path,handler,...dat)=>[`POST`,path,handler,mergeData(...dat)];export let put=(path,handler,...dat)=>[`PUT`,path,handler,mergeData(...dat)];export let del=(path,handler,...dat)=>[`DELETE`,path,handler,mergeData(...dat)];export let patch=(path,handler,...dat)=>[`PATCH`,path,handler,mergeData(...dat)];export let options=(path,handler,...dat)=>[`OPTIONS`,path,handler,mergeData(...dat)];export let trace=(path,handler,...dat)=>[`TRACE`,path,handler,mergeData(...dat)];
|
package/index.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
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
|
-
export { default as compile } from "./core/compile.js";
|
|
5
4
|
export * as cors from "./utils/cors.js";
|
|
6
5
|
export { default as headers } from "./utils/headers.js";
|
|
7
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
|
|
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";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mapl/web",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0-alpha.2",
|
|
4
4
|
"description": "A compiled web framework for all runtimes",
|
|
5
5
|
"keywords": ["fast", "lightweight", "cross-runtime", "framework", "web", "backend"],
|
|
6
6
|
"repository": {
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"main": "./index.js",
|
|
13
13
|
"types": "./index.d.ts",
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@mapl/framework": "^0.
|
|
15
|
+
"@mapl/framework": "^0.3.7",
|
|
16
16
|
"@mapl/router": "^0.6.2",
|
|
17
17
|
"@safe-std/error": "^1.0.1"
|
|
18
18
|
},
|
|
@@ -22,14 +22,17 @@
|
|
|
22
22
|
"exports": {
|
|
23
23
|
"./constants": "./constants.js",
|
|
24
24
|
".": "./index.js",
|
|
25
|
-
"./core/
|
|
26
|
-
"./core/middleware": "./core/middleware.js",
|
|
25
|
+
"./core/utils": "./core/utils.js",
|
|
27
26
|
"./core/context": "./core/context.js",
|
|
28
27
|
"./core": "./core/index.js",
|
|
29
28
|
"./core/handler": "./core/handler.js",
|
|
30
29
|
"./utils/cors": "./utils/cors.js",
|
|
31
|
-
"./core/utils": "./core/utils.js",
|
|
32
30
|
"./utils/headers": "./utils/headers.js",
|
|
33
|
-
"./utils/secure-headers": "./utils/secure-headers.js"
|
|
31
|
+
"./utils/secure-headers": "./utils/secure-headers.js",
|
|
32
|
+
"./compiler/aot": "./compiler/aot.js",
|
|
33
|
+
"./compiler/jit": "./compiler/jit.js",
|
|
34
|
+
"./compiler/config": "./compiler/config.js",
|
|
35
|
+
"./core/middleware": "./core/middleware.js",
|
|
36
|
+
"./compiler": "./compiler/index.js"
|
|
34
37
|
}
|
|
35
38
|
}
|
package/core/compile.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { RouterTag } from "./index.js";
|
|
2
|
-
export declare const compileToState: (router: RouterTag) => void;
|
|
3
|
-
export declare const stateToString: () => string;
|
|
4
|
-
export declare const stateToArgs: () => string;
|
|
5
|
-
declare const _default: (router: RouterTag) => ((req: Request) => any);
|
|
6
|
-
export default _default;
|
package/core/compile.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{compileGroup,createArgSet,AsyncFunction,compilerState as state}from"@mapl/framework";import compile from"@mapl/router/method/compiler";import{countParams}from"@mapl/router/path";import{isErr}from"@safe-std/error";import createContext from"./context.js";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 compileHandler=(fn,dat,path,scope)=>{let call=`f`+state[1].push(fn)+`(`;let paramCount=countParams(path);paramCount>0&&(call+=paramArgs[paramCount]);if(fn.length>paramCount){call+=paramCount===0?`c`:`,c`;if(!scope[1])return state[2]+compileReturn(dat,fn instanceof AsyncFunction,scope[0],true,call+`)`)}return compileReturn(dat,fn instanceof AsyncFunction,scope[0],scope[1],call+`)`)};let compileErrorHandler=(fn,dat,scope)=>{let call=`f`+state[1].push(fn)+`(t`;if(fn.length>1){call+=`,c`;if(!scope[1])return state[2]+compileReturn(dat,fn instanceof AsyncFunction,scope[0],true,call+`)`)}return compileReturn(dat,fn instanceof AsyncFunction,scope[0],scope[1],call+`)`)};export let compileToState=router=>{state[0]={};state[1]=[];state[2]=`let c=mwc(r);`;state[3]=compileHandler;state[4]=compileErrorHandler;compileGroup(router,[false,false,,`return mwb`,false],``,``)};export let stateToString=()=>`"use strict";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}));return(r)=>{`+compile(state[0],`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 stateToArgs=()=>{let depsString=`me,mwc`;let deps=state[1];for(let i=0;i<deps.length;i++)depsString+=`,f`+(i+1);return depsString};export default router=>{compileToState(router);return Function(stateToArgs(),stateToString())(isErr,createContext,...state[1])};
|