@mapl/web 0.2.0-alpha.2 → 0.2.0-alpha.3
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 +10 -2
- package/compiler/aot-loader.d.ts +1 -0
- package/compiler/aot-loader.js +1 -0
- package/compiler/aot.js +1 -1
- package/compiler/index.d.ts +10 -3
- package/compiler/index.js +1 -1
- package/compiler/jit.js +1 -1
- package/constants.d.ts +1 -1
- package/constants.js +1 -1
- package/package.json +9 -8
package/README.md
CHANGED
|
@@ -62,8 +62,7 @@ const ENTRY = ...;
|
|
|
62
62
|
writeFileSync(
|
|
63
63
|
ENTRY,
|
|
64
64
|
`
|
|
65
|
-
import
|
|
66
|
-
hydrating();
|
|
65
|
+
import "@mapl/web/compiler/aot-loader";
|
|
67
66
|
|
|
68
67
|
import app from '${import.meta.resolve('./main.js')}';
|
|
69
68
|
import hydrate from '@mapl/web/compiler/aot';
|
|
@@ -239,3 +238,12 @@ import { isHydrating } from '@mapl/web/compiler/config';
|
|
|
239
238
|
// Use this to for minifiedrs to eliminate unused code path in final output
|
|
240
239
|
isHydrating();
|
|
241
240
|
```
|
|
241
|
+
|
|
242
|
+
### Compiling external dependencies
|
|
243
|
+
```ts
|
|
244
|
+
import { injectLocalDependency, localDependency } from '@mapl/web/compiler';
|
|
245
|
+
|
|
246
|
+
const hello = injectLocalDependency<() => void>(`() => console.log('hello')`);
|
|
247
|
+
// After compiler is executed
|
|
248
|
+
localDependency(hello)();
|
|
249
|
+
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{hydrating}from"./config.js";hydrating();
|
package/compiler/aot.js
CHANGED
|
@@ -1 +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)};
|
|
1
|
+
import{hydrateDependency,externalDependencies,setHooks}from"@mapl/framework";import{isErr}from"@safe-std/error";import createContext from"../core/context.js";import{compiledDeps}from"./index.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,compiledDeps].concat(externalDependencies)};
|
package/compiler/index.d.ts
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
|
+
export type LocalDependency<T = unknown> = number & [T];
|
|
1
2
|
declare let;
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Inject a dependency
|
|
5
|
+
*/
|
|
6
|
+
export declare const injectLocalDependency: <T>(val: string) => LocalDependency<T>;
|
|
7
|
+
/**
|
|
8
|
+
* Get local dependency value
|
|
9
|
+
* @param i
|
|
10
|
+
*/
|
|
11
|
+
export declare const localDependency: <T>(i: LocalDependency<T>) => T;
|
package/compiler/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{externalDependencies}from"@mapl/framework";import{isHydrating}from"./config.js";let localDeps=``,localDepsCnt=0;export let injectLocalDependency=isHydrating()
|
|
1
|
+
import{externalDependencies}from"@mapl/framework";import{isHydrating}from"./config.js";export let compiledDeps=[];let localDeps=``,localDepsCnt=0;export let injectLocalDependency=val=>{if(!isHydrating())localDeps+=`mwl.push(`+val+`);`;return localDepsCnt++};export let localDependencies=()=>localDeps;export let localDependency=i=>compiledDeps[i];export let stateToArgs=()=>{let depsString=`me,mwc,mwl`;for(let i=0;i<externalDependencies.length;i++)depsString+=`,f`+(i+1);return depsString};
|
package/compiler/jit.js
CHANGED
|
@@ -1 +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}))
|
|
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{compiledDeps,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,compiledDeps,...externalDependencies)};
|
package/constants.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export * from "@mapl/framework/constants";
|
|
2
2
|
export declare const WEB: string;
|
|
3
|
-
export declare const
|
|
3
|
+
export declare const LOCAL_DEPS: string;
|
|
4
4
|
export declare const CTX_FN: string;
|
|
5
5
|
export declare const CTX_INIT: string;
|
|
6
6
|
export declare const PARSE_PATH: string;
|
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
|
|
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_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}));`;
|
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.3",
|
|
4
4
|
"description": "A compiled web framework for all runtimes",
|
|
5
5
|
"keywords": ["fast", "lightweight", "cross-runtime", "framework", "web", "backend"],
|
|
6
6
|
"repository": {
|
|
@@ -20,19 +20,20 @@
|
|
|
20
20
|
"secure-headers": "^0.0.6"
|
|
21
21
|
},
|
|
22
22
|
"exports": {
|
|
23
|
-
"./constants": "./constants.js",
|
|
24
23
|
".": "./index.js",
|
|
24
|
+
"./constants": "./constants.js",
|
|
25
25
|
"./core/utils": "./core/utils.js",
|
|
26
|
-
"./core/
|
|
26
|
+
"./core/middleware": "./core/middleware.js",
|
|
27
|
+
"./utils/cors": "./utils/cors.js",
|
|
27
28
|
"./core": "./core/index.js",
|
|
29
|
+
"./core/context": "./core/context.js",
|
|
28
30
|
"./core/handler": "./core/handler.js",
|
|
29
|
-
"./utils/cors": "./utils/cors.js",
|
|
30
31
|
"./utils/headers": "./utils/headers.js",
|
|
31
|
-
"./utils/secure-headers": "./utils/secure-headers.js",
|
|
32
32
|
"./compiler/aot": "./compiler/aot.js",
|
|
33
33
|
"./compiler/jit": "./compiler/jit.js",
|
|
34
|
-
"./compiler
|
|
35
|
-
"./
|
|
36
|
-
"./
|
|
34
|
+
"./compiler": "./compiler/index.js",
|
|
35
|
+
"./compiler/aot-loader": "./compiler/aot-loader.js",
|
|
36
|
+
"./utils/secure-headers": "./utils/secure-headers.js",
|
|
37
|
+
"./compiler/config": "./compiler/config.js"
|
|
37
38
|
}
|
|
38
39
|
}
|