@mapl/web 0.5.4 → 0.6.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 +1 -27
- package/bun/compiler/index.d.ts +27 -0
- package/bun/compiler/index.js +1 -0
- package/bun/compiler/router.d.ts +9 -0
- package/bun/compiler/router.js +1 -0
- package/bun/index.d.ts +4 -3
- package/bun/index.js +1 -1
- package/cloudflare/compiler.d.ts +19 -0
- package/cloudflare/compiler.js +1 -0
- package/cloudflare/index.d.ts +7 -0
- package/cloudflare/index.js +1 -0
- package/compilers/call.d.ts +9 -0
- package/compilers/call.js +1 -0
- package/compilers/globals.d.ts +21 -0
- package/compilers/globals.js +1 -0
- package/compilers/scope.d.ts +14 -0
- package/compilers/scope.js +1 -0
- package/constants.d.ts +4 -2
- package/constants.js +1 -1
- package/deno/compiler.d.ts +11 -0
- package/deno/compiler.js +1 -0
- package/deno/index.d.ts +4 -0
- package/deno/index.js +1 -0
- package/generic/compiler.d.ts +17 -22
- package/generic/compiler.js +1 -1
- package/generic/index.d.ts +3 -3
- package/generic/index.js +1 -1
- package/index.d.ts +3 -6
- package/index.js +1 -1
- package/layer.d.ts +45 -0
- package/layer.js +1 -0
- package/package.json +1 -1
- package/response.d.ts +41 -0
- package/response.js +1 -0
- package/router.d.ts +32 -0
- package/router.js +1 -0
- package/utils.d.ts +1 -0
- package/utils.js +1 -0
- package/compiler/call.d.ts +0 -10
- package/compiler/call.js +0 -1
- package/compiler/globals.d.ts +0 -37
- package/compiler/globals.js +0 -1
- package/compiler/router.d.ts +0 -38
- package/compiler/router.js +0 -1
- package/compiler/state.d.ts +0 -32
- package/compiler/state.js +0 -1
- package/generic/handlers.d.ts +0 -23
- package/generic/handlers.js +0 -1
- package/generic/layers.d.ts +0 -6
- package/generic/layers.js +0 -1
- package/generic/parsers.d.ts +0 -21
- package/generic/parsers.js +0 -1
- package/generic/route.d.ts +0 -12
- package/generic/route.js +0 -1
- package/generic/types.d.ts +0 -7
- package/generic/types.js +0 -1
- package/generic/utils/cors.d.ts +0 -11
- package/generic/utils/cors.js +0 -1
package/README.md
CHANGED
|
@@ -1,30 +1,4 @@
|
|
|
1
1
|
# `@mapl/web`
|
|
2
2
|
A low level, fast and type-safe framework.
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
import { inject, router, send } from '@mapl/web';
|
|
6
|
-
import { compiler, request } from '@mapl/web/generic';
|
|
7
|
-
|
|
8
|
-
const app = router.init(
|
|
9
|
-
[],
|
|
10
|
-
[
|
|
11
|
-
router.get(
|
|
12
|
-
'/',
|
|
13
|
-
send.raw((c) => {
|
|
14
|
-
c.status = 418;
|
|
15
|
-
return 'Hi';
|
|
16
|
-
}),
|
|
17
|
-
),
|
|
18
|
-
router.post(
|
|
19
|
-
'/body',
|
|
20
|
-
send.json(
|
|
21
|
-
inject([request], async (req) => req.json())
|
|
22
|
-
),
|
|
23
|
-
),
|
|
24
|
-
],
|
|
25
|
-
);
|
|
26
|
-
|
|
27
|
-
export default {
|
|
28
|
-
fetch: compiler.buildSync(app)(),
|
|
29
|
-
};
|
|
30
|
-
```
|
|
4
|
+
See example usage in [./examples](./examples);
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type ExportedDependency, type Value } from "runtime-compiler";
|
|
2
|
+
import { type HandlerScope } from "../../compilers/scope.ts";
|
|
3
|
+
import type { Router } from "../../router.ts";
|
|
4
|
+
/**
|
|
5
|
+
* Describe compiler compiled result
|
|
6
|
+
*/
|
|
7
|
+
export type CompiledResult = Bun.Serve.Routes<any, string>;
|
|
8
|
+
/**
|
|
9
|
+
* Load all global state for a router
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* setHandlerArgs(constants.GENERIC_ARGS);
|
|
13
|
+
* _load(router);
|
|
14
|
+
*/
|
|
15
|
+
export declare const _load: (router: Router) => void;
|
|
16
|
+
export declare const loadToString: () => Value<CompiledResult>;
|
|
17
|
+
/**
|
|
18
|
+
* Hydrate router data
|
|
19
|
+
*/
|
|
20
|
+
export declare const _hydrate: (router: Router, scope: HandlerScope) => void;
|
|
21
|
+
/**
|
|
22
|
+
* @example
|
|
23
|
+
* export default {
|
|
24
|
+
* fetch: getDependency(build(app))
|
|
25
|
+
* };
|
|
26
|
+
*/
|
|
27
|
+
export declare const build: (router: Router) => ExportedDependency<CompiledResult>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{exportScope,markExported}from"runtime-compiler";import{isHydrating}from"runtime-compiler/config";import{TMP_SCOPE,initScope,setHandlerArgs}from"../../compilers/globals.js";import{wrapScope}from"../../compilers/scope.js";import{initRouter,insertItem,toRoutes}from"./router.js";let PARAM_MAP;let loadToMethodRouter=(router,scope,prefix,content)=>{for(let i=0,layers=router[0];i<layers.length;i++){let self=layers[i];content+=self[0](self,scope)}for(let i=0,routes=router[1];i<routes.length;i++){let route=routes[i];let routeScope=scope.slice();let path=route[1];let routeContent;if(path.includes(`*`)){routeContent=`let{`;let paramCount=0;{let newPath=``,startIdx=0;if(path.endsWith(`**`)){let len=path.length-3;for(let i=path.indexOf(`*`);i>-1&&i<len;i=path.indexOf(`*`,i+2)){let id=`q`+ paramCount++;routeContent+=id+`,`;newPath+=path.slice(startIdx,i)+`:`+id;startIdx=i+1}startIdx<len&&(newPath+=path.slice(startIdx,len));path=newPath+`/*`;routeContent+=`"*":q`+ paramCount++}else{for(let i=path.indexOf(`*`);i>-1;i=path.indexOf(`*`,i+2)){let id=`q`+ paramCount++;routeContent+=id+`,`;newPath+=path.slice(startIdx,i)+`:`+id;startIdx=i+1}path=startIdx<path.length?newPath+path.slice(startIdx):newPath}routeContent+=`}=mr.params;`+content}for(let j=2,params=PARAM_MAP[paramCount];j<route.length;j++){let self=route[j];routeContent+=self[0](self,routeScope,params,paramCount)}}else{routeContent=content;for(let j=2;j<route.length;j++){let self=route[j];routeContent+=self[0](self,routeScope,``,0)}}insertItem(route[0],prefix+path,wrapScope(routeScope,routeContent))}for(let i=2;i<router.length;i++){let childRouter=router[i];loadToMethodRouter(childRouter[1],scope.slice(),childRouter[0]===`/`?prefix:prefix+childRouter[0],content)}};export let _load=router=>{initScope();initRouter();PARAM_MAP=[``,`q0`];for(let i=1;i<=8;i++)PARAM_MAP.push(`${PARAM_MAP[i]},q${i}`);loadToMethodRouter(router,[0],``,``)};export let loadToString=toRoutes;export let _hydrate=(router,scope)=>{for(let i=0,layers=router[0];i<layers.length;i++){let self=layers[i];self[0](self,scope)}for(let i=0,routes=router[1];i<routes.length;i++){let route=routes[i];let routeScope=scope.slice();let path=route[1];if(path.includes(`*`)){let paramCount=0;if(path.endsWith(`**`)){let len=path.length-3;for(let i=path.indexOf(`*`);i>-1&&i<len;i=path.indexOf(`*`,i+2),paramCount++);paramCount++}else for(let i=path.indexOf(`*`);i>-1;i=path.indexOf(`*`,i+2),paramCount++);for(let j=2,params=PARAM_MAP[paramCount];j<route.length;j++){let self=route[j];self[0](self,routeScope,params,paramCount)}}else for(let j=2;j<route.length;j++){let self=route[j];self[0](self,routeScope,``,0)}}for(let i=2;i<router.length;i++)_hydrate(router[i][1],scope.slice())};export let build=isHydrating?router=>(_hydrate(router,[0]),markExported()):router=>(setHandlerArgs(`(mr,mi)`),_load(router),exportScope(TMP_SCOPE,loadToString()));
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const initRouter: () => void;
|
|
2
|
+
/**
|
|
3
|
+
* Path and content must be processed before inserting
|
|
4
|
+
* @param method
|
|
5
|
+
* @param path
|
|
6
|
+
* @param content
|
|
7
|
+
*/
|
|
8
|
+
export declare const insertItem: (method: string, path: string, content: string) => void;
|
|
9
|
+
export declare const toRoutes: () => string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
let METHOD_ROUTER;let DEOPT_PATHS;export let initRouter=()=>{METHOD_ROUTER={};DEOPT_PATHS=[]};export let insertItem=(method,path,content)=>{let methods=METHOD_ROUTER[path];if(methods!=null)methods[``]??DEOPT_PATHS.push(path);else methods=METHOD_ROUTER[path]={};method!==`GET`&&method!==`POST`&&method!==`PUT`&&method!==`DELETE`&&method!==`PATCH`&&method!==`OPTIONS`&&DEOPT_PATHS.push(path);methods[method]=content};export let toRoutes=()=>{let str=`{`;for(let i=0;i<DEOPT_PATHS.length;i++){let back=`return mnf},`;let path=DEOPT_PATHS[i];str+=`"`+path+`":(mr,mi)=>{`;let methods=METHOD_ROUTER[path];delete METHOD_ROUTER[path];let first=true;for(let method in methods)if(method===``)back=methods[``]+`},`;else{if(first){first=false;str+=`if(`}else str+=`else if(`;str+=`mr.method==="`+method+`"){`+methods[method]+`}`}str+=back}for(const path in METHOD_ROUTER){str+=`"`+path;let methods=METHOD_ROUTER[path];if(methods[``]==null){str+=`":{`;for(const method in methods)str+=method+`:(mr,mi)=>{`+methods[method]+`},`;str+=`},`}else str+=`":(mr,mi)=>{`+methods[``]+`},`}return str+`}`};
|
package/bun/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { BunRequest, Server } from "bun";
|
|
2
|
-
import type {
|
|
3
|
-
export declare const request:
|
|
4
|
-
export declare const server:
|
|
2
|
+
import type { Identifier } from "runtime-compiler";
|
|
3
|
+
export declare const request: Identifier<BunRequest>;
|
|
4
|
+
export declare const server: Identifier<Server<any>>;
|
|
5
|
+
export { build } from "./compiler/index.ts";
|
package/bun/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export let request=`mr`;export let server=`mi`;
|
|
1
|
+
export let request=`mr`;export let server=`mi`;export{build}from"./compiler/index.js";
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type ExportedDependency, type Value } from "runtime-compiler";
|
|
2
|
+
import type { Router } from "../router.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Describe compiler compiled result
|
|
5
|
+
*/
|
|
6
|
+
export type CompiledResult = () => ExportedHandlerFetchHandler<Cloudflare.Env, unknown>;
|
|
7
|
+
export declare const loadToString: () => Value<CompiledResult>;
|
|
8
|
+
/**
|
|
9
|
+
* @example
|
|
10
|
+
* const createFetch = getDependency(build(app));
|
|
11
|
+
*
|
|
12
|
+
* export default {
|
|
13
|
+
* fetch(...args) {
|
|
14
|
+
* // Set up stuff...
|
|
15
|
+
* return (this.fetch = createFetch())(...args);
|
|
16
|
+
* }
|
|
17
|
+
* } satisfies ExportedHandler<Env>;
|
|
18
|
+
*/
|
|
19
|
+
export declare const build: (router: Router) => ExportedDependency<CompiledResult>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{exportExpr,markExported}from"runtime-compiler";import{isHydrating}from"runtime-compiler/config";import{_hydrate,_load,loadToString as genericLoadToString}from"../generic/compiler.js";import{TMP_SCOPE,setHandlerArgs}from"../compilers/globals.js";export let loadToString=()=>`()=>{`+TMP_SCOPE[0]+`return `+genericLoadToString()+`}`;export let build=isHydrating?router=>(_hydrate(router,[0]),markExported()):router=>(setHandlerArgs(`(mr,mi,mec)`),_load(router),exportExpr(loadToString()));
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/// <reference types="@cloudflare/workers-types" />
|
|
2
|
+
import type { Request as WorkerRequest, ExecutionContext } from "@cloudflare/workers-types";
|
|
3
|
+
import type { Identifier } from "runtime-compiler";
|
|
4
|
+
export declare const request: Identifier<WorkerRequest>;
|
|
5
|
+
export declare const env: Identifier<Cloudflare.Env>;
|
|
6
|
+
export declare const ctx: Identifier<ExecutionContext>;
|
|
7
|
+
export { build } from "./compiler.ts";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export let request=`mr`;export let env=`mi`;export let ctx=`mec`;export{build}from"./compiler.js";
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type Identifier } from "runtime-compiler";
|
|
2
|
+
import type { HandlerScope } from "./scope.ts";
|
|
3
|
+
import type { SendLayer } from "../response.ts";
|
|
4
|
+
export interface Call<T extends (...args: any[]) => any> {
|
|
5
|
+
0: T;
|
|
6
|
+
1: Identifier<any>[];
|
|
7
|
+
}
|
|
8
|
+
export declare const buildCall: (scope: HandlerScope, fn: (...args: any[]) => any, args: string, argsCount: number) => string;
|
|
9
|
+
export declare const buildRouteCall: SendLayer<any>[0];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{declareLocal,injectExternal}from"runtime-compiler";import{isHydrating}from"runtime-compiler/config";import{AsyncFunction}from"runtime-compiler/utils";import{TMP_SCOPE}from"./globals.js";export let buildCall=isHydrating?(scope,fn,_,argsCount)=>{injectExternal(fn);fn instanceof AsyncFunction&&(scope[0]|=1);fn.length>argsCount&&(scope[0]|=2);return``}:(scope,fn,args,argsCount)=>{let str=declareLocal(TMP_SCOPE,injectExternal(fn))+`(`+args;if(fn instanceof AsyncFunction){scope[0]|=1;str=`await `+str}if(fn.length>argsCount){scope[0]|=2;str+=`,mc`}return str+`)`};export let buildRouteCall=isHydrating?(self,scope,_,paramsCount)=>{let args=self[2];return args.length>0?paramsCount>0?buildCall(scope,self[1],``,args.length+paramsCount):buildCall(scope,self[1],``,args.length):paramsCount>0?buildCall(scope,self[1],``,paramsCount):buildCall(scope,self[1],``,0)}:(self,scope,params,paramsCount)=>{let args=self[2];return args.length>0?paramsCount>0?buildCall(scope,self[1],args.join()+`,`+params,args.length+paramsCount):buildCall(scope,self[1],args.join(),args.length):paramsCount>0?buildCall(scope,self[1],params,paramsCount):buildCall(scope,self[1],``,0)};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type Identifier, type Scope } from "runtime-compiler";
|
|
2
|
+
import { isErr } from "@safe-std/error";
|
|
3
|
+
/**
|
|
4
|
+
* @example
|
|
5
|
+
* '(req,env,ctx)'
|
|
6
|
+
*/
|
|
7
|
+
export declare let HANDLER_ARGS: string;
|
|
8
|
+
/**
|
|
9
|
+
* @example
|
|
10
|
+
* setHandlerArgs('(req,env,ctx)');
|
|
11
|
+
*/
|
|
12
|
+
export declare const setHandlerArgs: (str: string) => void;
|
|
13
|
+
/**
|
|
14
|
+
* Store local variables
|
|
15
|
+
*/
|
|
16
|
+
export declare let TMP_SCOPE: Scope;
|
|
17
|
+
/**
|
|
18
|
+
* Check whether value is an error
|
|
19
|
+
*/
|
|
20
|
+
export declare let IS_ERR: Identifier<typeof isErr>;
|
|
21
|
+
export declare const initScope: () => void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{declareLocal,injectExternal}from"runtime-compiler";import{isErr}from"@safe-std/error";export let HANDLER_ARGS;export let setHandlerArgs=str=>{HANDLER_ARGS=str};export let TMP_SCOPE;export let IS_ERR;export let initScope=()=>{TMP_SCOPE=[`let mhh=['content-type','text/html'],mho={headers:mhh},mnf=new Response(null,{status:404});`,0];IS_ERR=declareLocal(TMP_SCOPE,injectExternal(isErr))};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handler scope state.
|
|
3
|
+
*/
|
|
4
|
+
export interface HandlerScope {
|
|
5
|
+
/**
|
|
6
|
+
* Scope flags.
|
|
7
|
+
*
|
|
8
|
+
* bit 0: scope requires async or not
|
|
9
|
+
* bit 1: scope requires context or not
|
|
10
|
+
*/
|
|
11
|
+
0: number;
|
|
12
|
+
slice: () => this;
|
|
13
|
+
}
|
|
14
|
+
export declare const wrapScope: (scope: HandlerScope, content: string) => string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{declareLocal}from"runtime-compiler";import{HANDLER_ARGS,TMP_SCOPE}from"./globals.js";export let wrapScope=(scope,content)=>{let flags=scope[0];(flags&2)===2&&(content=`let mh=[],mc={status:200,headers:mh};`+content);return(flags&1)===1?`return `+declareLocal(TMP_SCOPE,`async`+HANDLER_ARGS+`=>{`+content+`}`)+HANDLER_ARGS:content};
|
package/constants.d.ts
CHANGED
|
@@ -8,10 +8,12 @@ export declare const CREATE_CTX: string;
|
|
|
8
8
|
// Mapl locals
|
|
9
9
|
export declare const REQ = "mr";
|
|
10
10
|
export declare const INFO = "mi";
|
|
11
|
+
export declare const EXEC_CTX = "mec";
|
|
11
12
|
export declare const FULL_URL = "mu";
|
|
13
|
+
export declare const GENERIC_ARGS: string;
|
|
14
|
+
export declare const BUN_DENO_ARGS: string;
|
|
15
|
+
export declare const CLOUDFLARE_ARGS: string;
|
|
12
16
|
export declare const RES_404 = "mnf";
|
|
13
|
-
export declare const JSON_HEADER = "mjh";
|
|
14
|
-
export declare const JSON_OPTION = "mjo";
|
|
15
17
|
export declare const HTML_HEADER = "mhh";
|
|
16
18
|
export declare const HTML_OPTION = "mho";
|
|
17
19
|
// Fast path for injecting mapl symbols
|
package/constants.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export*from"@mapl/framework/constants";export*from"@mapl/router/constants";export let CTX=`mc`;export let HEADERS=`mh`;export let PARSED_RESULT=`mt`;export let CREATE_CTX=`let ${HEADERS}=[],${CTX}={status:200,headers:${HEADERS}};`;export let REQ=`mr`;export let INFO=`mi`;export let FULL_URL=`mu`;export let
|
|
1
|
+
export*from"@mapl/framework/constants";export*from"@mapl/router/constants";export let CTX=`mc`;export let HEADERS=`mh`;export let PARSED_RESULT=`mt`;export let CREATE_CTX=`let ${HEADERS}=[],${CTX}={status:200,headers:${HEADERS}};`;export let REQ=`mr`;export let INFO=`mi`;export let EXEC_CTX=`mec`;export let FULL_URL=`mu`;export let GENERIC_ARGS=`(${REQ})`;export let BUN_DENO_ARGS=`(${REQ},${INFO})`;export let CLOUDFLARE_ARGS=`(${REQ},${INFO},${EXEC_CTX})`;export let RES_404=`mnf`;export let HTML_HEADER=`mhh`;export let HTML_OPTION=`mho`;export let DECL_GLOBALS=`let ${HTML_HEADER}=['content-type','text/html'],${HTML_OPTION}={headers:${HTML_HEADER}},${RES_404}=new Response(null,{status:404});`;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type ExportedDependency } from "runtime-compiler";
|
|
2
|
+
import type { Router } from "../router.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Describe compiler compiled result
|
|
5
|
+
*/
|
|
6
|
+
export type CompiledResult = (req: Request) => Response | Promise<Response>;
|
|
7
|
+
/**
|
|
8
|
+
* @example
|
|
9
|
+
* Deno.serve(getDependency(build(app)));
|
|
10
|
+
*/
|
|
11
|
+
export declare const build: (router: Router) => ExportedDependency<CompiledResult>;
|
package/deno/compiler.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{exportExpr,markExported}from"runtime-compiler";import{isHydrating}from"runtime-compiler/config";import{_hydrate,_load,loadToString}from"../generic/compiler.js";import{setHandlerArgs}from"../compilers/globals.js";export let build=isHydrating?router=>(_hydrate(router,[0]),markExported()):router=>(setHandlerArgs(`(mr,mi)`),_load(router),exportExpr(loadToString()));
|
package/deno/index.d.ts
ADDED
package/deno/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{request}from"../generic/index.js";export let info=`mi`;export{build}from"./compiler.js";
|
package/generic/compiler.d.ts
CHANGED
|
@@ -1,32 +1,27 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
import { type
|
|
3
|
-
import {
|
|
4
|
-
export type BuiltFn = () => (req: Request) => any;
|
|
5
|
-
export declare const registerRouteCb: typeof registerRoute;
|
|
1
|
+
import { type ExportedDependency, type Value } from "runtime-compiler";
|
|
2
|
+
import { type HandlerScope } from "../compilers/scope.ts";
|
|
3
|
+
import type { Router } from "../router.ts";
|
|
6
4
|
/**
|
|
7
|
-
*
|
|
8
|
-
* Use in `default` and `build` mode.
|
|
5
|
+
* Describe compiler compiled result
|
|
9
6
|
*/
|
|
10
|
-
export
|
|
7
|
+
export type CompiledResult = (req: Request) => Response | Promise<Response>;
|
|
11
8
|
/**
|
|
12
|
-
*
|
|
13
|
-
* Use in `hydrate` mode.
|
|
14
|
-
*/
|
|
15
|
-
export declare const hydrateToDependency: (router: Router) => void;
|
|
16
|
-
/**
|
|
17
|
-
* Build the router into evaluatable string.
|
|
18
|
-
* Use in `build` mode.
|
|
9
|
+
* Load all global state for a router
|
|
19
10
|
*
|
|
20
11
|
* @example
|
|
21
|
-
*
|
|
12
|
+
* setHandlerArgs(constants.GENERIC_ARGS);
|
|
13
|
+
* _load(router);
|
|
22
14
|
*/
|
|
23
|
-
export declare const
|
|
15
|
+
export declare const _load: (router: Router) => void;
|
|
16
|
+
export declare const loadToString: () => Value<CompiledResult>;
|
|
24
17
|
/**
|
|
25
|
-
*
|
|
26
|
-
* Use in `default` mode.
|
|
18
|
+
* Hydrate router data
|
|
27
19
|
*/
|
|
28
|
-
export declare const
|
|
20
|
+
export declare const _hydrate: (router: Router, scope: HandlerScope) => void;
|
|
29
21
|
/**
|
|
30
|
-
*
|
|
22
|
+
* @example
|
|
23
|
+
* export default {
|
|
24
|
+
* fetch: getDependency(build(app))
|
|
25
|
+
* };
|
|
31
26
|
*/
|
|
32
|
-
export declare const
|
|
27
|
+
export declare const build: (router: Router) => ExportedDependency<CompiledResult>;
|
package/generic/compiler.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createRouter,insertItem}from"@mapl/router/method";import compileMethodRouter from"@mapl/router/method/compiler";import{
|
|
1
|
+
import{createRouter as createMethodRouter,insertItem as insertItemToMethodRouter}from"@mapl/router/method";import compileMethodRouter from"@mapl/router/method/compiler";import{countParams}from"@mapl/router/utils";import{exportScope,markExported}from"runtime-compiler";import{isHydrating}from"runtime-compiler/config";import{TMP_SCOPE,initScope,setHandlerArgs}from"../compilers/globals.js";import{wrapScope}from"../compilers/scope.js";let METHOD_ROUTER;let PARAM_MAP;let loadToMethodRouter=(router,scope,prefix,content)=>{for(let i=0,layers=router[0];i<layers.length;i++){let self=layers[i];content+=self[0](self,scope)}for(let i=0,routes=router[1];i<routes.length;i++){let route=routes[i];let routeScope=scope.slice();let routeContent=content;for(let j=2,paramCount=countParams(route[1]),params=PARAM_MAP[paramCount];j<route.length;j++){let self=route[j];routeContent+=self[0](self,routeScope,params,paramCount)}insertItemToMethodRouter(METHOD_ROUTER,route[0],prefix+route[1],wrapScope(routeScope,routeContent))}for(let i=2;i<router.length;i++){let childRouter=router[i];loadToMethodRouter(childRouter[1],scope.slice(),childRouter[0]===`/`?prefix:prefix+childRouter[0],content)}};export let _load=router=>{initScope();METHOD_ROUTER=createMethodRouter();PARAM_MAP=[``,`q0`];for(let i=1;i<=8;i++)PARAM_MAP.push(`${PARAM_MAP[i]},q${i}`);loadToMethodRouter(router,[0],``,``)};export let loadToString=()=>`(mr)=>{${compileMethodRouter(METHOD_ROUTER,`mr.method`,`let mu=mr.url,s=mu.indexOf('/',10)+1,e=mu.indexOf('?',s),p=e===-1?mu.slice(s):mu.slice(s,e);`,0)}return mnf}`;export let _hydrate=(router,scope)=>{for(let i=0,layers=router[0];i<layers.length;i++){let self=layers[i];self[0](self,scope)}for(let i=0,routes=router[1];i<routes.length;i++)for(let j=2,route=routes[i],routeScope=scope.slice(),paramCount=countParams(route[1]);j<route.length;j++){let self=route[j];self[0](self,routeScope,``,paramCount)}for(let i=2;i<router.length;i++)_hydrate(router[i][1],scope.slice())};export let build=isHydrating?router=>(_hydrate(router,[0]),markExported()):router=>(setHandlerArgs(`(mr)`),_load(router),exportScope(TMP_SCOPE,loadToString()));
|
package/generic/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare const request:
|
|
3
|
-
export
|
|
1
|
+
import type { Identifier } from "runtime-compiler";
|
|
2
|
+
export declare const request: Identifier<Request>;
|
|
3
|
+
export { build } from "./compiler.ts";
|
package/generic/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export let request=`mr`;export
|
|
1
|
+
export let request=`mr`;export{build}from"./compiler.js";
|
package/index.d.ts
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
export * as send from "./
|
|
2
|
-
export * as router from "./
|
|
3
|
-
export * as layer from "./
|
|
4
|
-
export * as parser from "./generic/parsers.ts";
|
|
5
|
-
export { inject } from "runtime-compiler/call";
|
|
6
|
-
export * as cors from "./generic/utils/cors.ts";
|
|
1
|
+
export * as send from "./response.ts";
|
|
2
|
+
export * as router from "./router.ts";
|
|
3
|
+
export * as layer from "./layer.ts";
|
package/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export*as send from"./
|
|
1
|
+
export*as send from"./response.js";export*as router from"./router.js";export*as layer from"./layer.js";
|
package/layer.d.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { Identifier } from "runtime-compiler";
|
|
2
|
+
import type { ResponseState } from "./response.ts";
|
|
3
|
+
import type { HandlerScope } from "./compilers/scope.ts";
|
|
4
|
+
/**
|
|
5
|
+
* @example
|
|
6
|
+
* f[0](f, scope);
|
|
7
|
+
*/
|
|
8
|
+
export interface AnyLayer {
|
|
9
|
+
0: (self: any, scope: HandlerScope) => string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* @example
|
|
13
|
+
* f[0](f, scope);
|
|
14
|
+
*/
|
|
15
|
+
export interface Layer {
|
|
16
|
+
0: (self: this, scope: HandlerScope) => string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* @example
|
|
20
|
+
* f[0](f, scope, 'p0,p1,');
|
|
21
|
+
*/
|
|
22
|
+
export interface AnyRouteLayer<Params extends any[]> {
|
|
23
|
+
0: (self: any, scope: HandlerScope, params: string, paramsCount: number) => string;
|
|
24
|
+
"~"?: Params;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* @example
|
|
28
|
+
* f[0](f, scope, 'p0,p1,');
|
|
29
|
+
*/
|
|
30
|
+
export interface RouteLayer<Params extends any[]> {
|
|
31
|
+
0: (self: this, scope: HandlerScope, params: string, paramsCount: number) => string;
|
|
32
|
+
"~"?: Params;
|
|
33
|
+
}
|
|
34
|
+
///
|
|
35
|
+
/// Impls
|
|
36
|
+
///
|
|
37
|
+
interface TapLayer extends Layer {
|
|
38
|
+
1: (...args: any[]) => any;
|
|
39
|
+
2: Identifier<any>[];
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Tap a function to request lifecycle.
|
|
43
|
+
*/
|
|
44
|
+
export declare const tap: <Args extends Identifier<any>[]>(fn: (...args: [...{ [K in keyof Args] : Args[K]["~type"] }, res: ResponseState]) => void | Promise<void>, ...args: Args) => TapLayer;
|
|
45
|
+
export {};
|
package/layer.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{buildCall}from"./compilers/call.js";let loadTap=(self,scope)=>{let args=self[2];return buildCall(scope,self[1],args.join(),args.length)+`;`};export let tap=(fn,...args)=>[loadTap,fn,args];
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@mapl/web","version":"0.
|
|
1
|
+
{"name":"@mapl/web","version":"0.6.2","description":"A compiled web framework for all runtimes","keywords":["fast","lightweight","cross-runtime","framework","web","backend"],"repository":{"type":"git","url":"git+https://github.com/mapljs/web.git"},"license":"MIT","type":"module","main":"./index.js","types":"./index.d.ts","dependencies":{"@mapl/router":"^0.8.3","@safe-std/error":"^2.0.4","runtime-compiler":"^3.1.0"},"exports":{"./utils":"./utils.js","./layer":"./layer.js","./constants":"./constants.js",".":"./index.js","./router":"./router.js","./response":"./response.js","./cloudflare/compiler":"./cloudflare/compiler.js","./bun":"./bun/index.js","./cloudflare":"./cloudflare/index.js","./bun/compiler/router":"./bun/compiler/router.js","./compilers/scope":"./compilers/scope.js","./compilers/globals":"./compilers/globals.js","./compilers/call":"./compilers/call.js","./deno":"./deno/index.js","./generic/compiler":"./generic/compiler.js","./deno/compiler":"./deno/compiler.js","./bun/compiler":"./bun/compiler/index.js","./generic":"./generic/index.js"}}
|
package/response.d.ts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { Identifier } from "runtime-compiler";
|
|
2
|
+
import type { RouteLayer } from "./layer.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Describe a header pair
|
|
5
|
+
*/
|
|
6
|
+
export type ResponseHeader = [string, string] | readonly [string, string];
|
|
7
|
+
/**
|
|
8
|
+
* Response state
|
|
9
|
+
*/
|
|
10
|
+
export interface ResponseState {
|
|
11
|
+
status: number;
|
|
12
|
+
headers: ResponseHeader[];
|
|
13
|
+
}
|
|
14
|
+
export interface SendLayer<Params extends any[]> extends RouteLayer<Params> {
|
|
15
|
+
1: (...args: any[]) => any;
|
|
16
|
+
2: Identifier<any>[];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* @example
|
|
20
|
+
* router.get('/', send.raw(() => 'Hi'))
|
|
21
|
+
*/
|
|
22
|
+
export declare const raw: <
|
|
23
|
+
const Args extends Identifier<any>[],
|
|
24
|
+
Params extends any[] = []
|
|
25
|
+
>(fn: (...args: [...{ [K in keyof Args] : Args[K]["~type"] }, ...Params, res: ResponseState]) => BodyInit | Promise<BodyInit>, ...args: Args) => SendLayer<Params>;
|
|
26
|
+
/**
|
|
27
|
+
* @example
|
|
28
|
+
* router.post('/', send.json(() => ({ hello: 'world' })))
|
|
29
|
+
*/
|
|
30
|
+
export declare const json: <
|
|
31
|
+
const Args extends Identifier<any>[],
|
|
32
|
+
Params extends any[] = []
|
|
33
|
+
>(fn: (...args: [...{ [K in keyof Args] : Args[K]["~type"] }, ...Params, res: ResponseState]) => any, ...args: Args) => SendLayer<Params>;
|
|
34
|
+
/**
|
|
35
|
+
* @example
|
|
36
|
+
* router.get('/', send.html(() => '<p>Hi</p>'))
|
|
37
|
+
*/
|
|
38
|
+
export declare const html: <
|
|
39
|
+
const Args extends Identifier<any>[],
|
|
40
|
+
Params extends any[] = []
|
|
41
|
+
>(fn: (...args: [...{ [K in keyof Args] : Args[K]["~type"] }, ...Params, res: ResponseState]) => BodyInit | Promise<BodyInit>, ...args: Args) => SendLayer<Params>;
|
package/response.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{buildRouteCall}from"./compilers/call.js";let loadRaw=(self,scope,params,paramsCount)=>`return new Response(`+buildRouteCall(self,scope,params,paramsCount)+((scope[0]&2)===2?`,mc)`:`)`);export let raw=(fn,...args)=>[loadRaw,fn,args];let loadJSON=(self,scope,params,paramsCount)=>`return Response.json(`+buildRouteCall(self,scope,params,paramsCount)+((scope[0]&2)===2?`,mc)`:`)`);export let json=(fn,...args)=>[loadJSON,fn,args];let loadHTML=(self,scope,params,paramsCount)=>{let call=buildRouteCall(self,scope,params,paramsCount);return(scope[0]&2)===2?`mh.push(mhh);return new Response(`+call+`,mc)`:`return new Response(`+call+`,mho)`};export let html=(fn,...args)=>[loadHTML,fn,args];
|
package/router.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { AnyLayer, AnyRouteLayer } from "./layer.ts";
|
|
2
|
+
/**
|
|
3
|
+
* @example
|
|
4
|
+
* ['GET', '/', ...]
|
|
5
|
+
*/
|
|
6
|
+
export type Route = [method: string, path: string, ...layers: AnyRouteLayer<any>[]];
|
|
7
|
+
/**
|
|
8
|
+
* Child router data
|
|
9
|
+
*/
|
|
10
|
+
export type ChildRouter = [subpath: string, Router];
|
|
11
|
+
/**
|
|
12
|
+
* Router data
|
|
13
|
+
*/
|
|
14
|
+
export type Router = [layers: AnyLayer[], routes: Route[], ...ChildRouter[]];
|
|
15
|
+
/**
|
|
16
|
+
* Infer param args from path
|
|
17
|
+
*/
|
|
18
|
+
export type InferParams<Path extends string> = Path extends `${string}*${infer Rest}` ? Rest extends "*" ? [string] : [string, ...InferParams<Rest>] : [];
|
|
19
|
+
// Handle a specific method
|
|
20
|
+
export type HandleMethod = <Path extends string>(path: Path, ...layers: AnyRouteLayer<InferParams<Path>>[]) => Route;
|
|
21
|
+
/**
|
|
22
|
+
* Create a router
|
|
23
|
+
*/
|
|
24
|
+
export declare const init: (...args: Router) => Router;
|
|
25
|
+
export declare const handle: <Path extends string>(method: string, path: Path, ...layers: AnyRouteLayer<InferParams<Path>>[]) => Route;
|
|
26
|
+
export declare const mount: (...args: ChildRouter) => ChildRouter;
|
|
27
|
+
export declare const get: HandleMethod;
|
|
28
|
+
export declare const post: HandleMethod;
|
|
29
|
+
export declare const put: HandleMethod;
|
|
30
|
+
export declare const del: HandleMethod;
|
|
31
|
+
export declare const patch: HandleMethod;
|
|
32
|
+
export declare const options: HandleMethod;
|
package/router.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{argsToArray}from"./utils.js";export let init=argsToArray;export let handle=argsToArray;export let mount=argsToArray;let GET=[`GET`];export let get=(...args)=>GET.concat(args);let POST=[`POST`];export let post=(...args)=>POST.concat(args);let PUT=[`PUT`];export let put=(...args)=>PUT.concat(args);let DELETE=[`DELETE`];export let del=(...args)=>DELETE.concat(args);let PATCH=[`PATCH`];export let patch=(...args)=>PATCH.concat(args);let OPTIONS=[`OPTIONS`];export let options=(...args)=>OPTIONS.concat(args);
|
package/utils.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const argsToArray: <T extends any[]>(...args: T) => T;
|
package/utils.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export let argsToArray=(...args)=>args;
|
package/compiler/call.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { State } from "./state.ts";
|
|
2
|
-
/**
|
|
3
|
-
* Compile a function to call statement.
|
|
4
|
-
* Use in `default` and `build` mode.
|
|
5
|
-
*/
|
|
6
|
-
export declare const buildCall: (state: State, fn: (...args: any[]) => any, paramCount: number, params: string) => string;
|
|
7
|
-
/**
|
|
8
|
-
* Hydrate a call.
|
|
9
|
-
*/
|
|
10
|
-
export declare const hydrateCall: (state: State, fn: (...args: any[]) => any, paramCount: number) => void;
|
package/compiler/call.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{getDeps}from"runtime-compiler/call";import{injectExternalDependency}from"runtime-compiler";import{AsyncFunction}from"runtime-compiler/utils";export let buildCall=(state,fn,paramCount,params)=>{let fnId=injectExternalDependency(fn);if(fn instanceof AsyncFunction){state[0]=true;fnId=`await `+fnId}let deps=getDeps(fn);return deps==null?fn.length>paramCount?(state[1]=true,`${fnId}(${params}mc)`):`${fnId}(${params})`:fn.length>paramCount+deps.length?(state[1]=true,`${fnId}(${deps.join()},${params}mc)`):`${fnId}(${deps.join()},${params})`};export let hydrateCall=(state,fn,paramCount)=>{injectExternalDependency(fn);state[0]||=fn instanceof AsyncFunction;let deps=getDeps(fn);state[1]||=fn.length>(deps==null?paramCount:deps.length+paramCount)};
|
package/compiler/globals.d.ts
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module Global compiler hooks
|
|
3
|
-
*
|
|
4
|
-
* ONLY COMPILER MODULES SHOULD INCLUDE THIS FILE.
|
|
5
|
-
* IF NOT IT BREAKS BUNDLING :(
|
|
6
|
-
*/
|
|
7
|
-
import type { Route } from "./router.ts";
|
|
8
|
-
import type { State } from "./state.ts";
|
|
9
|
-
export declare let registerRoute: (route: Route, state: State, prefix: string, content: string) => any;
|
|
10
|
-
/**
|
|
11
|
-
* Set a callback that register routes to a router.
|
|
12
|
-
* Use in `default` and `build` mode.
|
|
13
|
-
*/
|
|
14
|
-
export declare const setRegisterRoute: (f: typeof registerRoute) => void;
|
|
15
|
-
export declare let routeParamMap: string[];
|
|
16
|
-
/**
|
|
17
|
-
* Set route param map.
|
|
18
|
-
* Use in `default` and `build` mode.
|
|
19
|
-
*
|
|
20
|
-
* @example
|
|
21
|
-
* setRouteParamMap([
|
|
22
|
-
* '', 'err'
|
|
23
|
-
* ]);
|
|
24
|
-
*
|
|
25
|
-
* routeParamMap[paramCount << 1]; // No context
|
|
26
|
-
* routeParamMap[paramCount << 1 | 1]; // With context
|
|
27
|
-
*/
|
|
28
|
-
export declare const setRouteParamMap: (m: string[]) => void;
|
|
29
|
-
export declare let handlerArgs: string;
|
|
30
|
-
/**
|
|
31
|
-
* Set request handler args.
|
|
32
|
-
* Use in `default` and `build` mode.
|
|
33
|
-
*
|
|
34
|
-
* @example
|
|
35
|
-
* setHandlerArgs('(req, env, ctx)');
|
|
36
|
-
*/
|
|
37
|
-
export declare const setHandlerArgs: (a: string) => void;
|
package/compiler/globals.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export let registerRoute;export let setRegisterRoute=f=>{registerRoute=f};export let routeParamMap=[];export let setRouteParamMap=m=>{routeParamMap=m};export let handlerArgs;export let setHandlerArgs=a=>{handlerArgs=a};
|
package/compiler/router.d.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import type { State } from "./state.ts";
|
|
2
|
-
import type { RequestMethod } from "../generic/types.ts";
|
|
3
|
-
/*
|
|
4
|
-
* From what i've tested closures use 5x more
|
|
5
|
-
* memory than [fn, ...data] and runs slower too
|
|
6
|
-
*/
|
|
7
|
-
export type Layer<Data extends any[] = any[]> = [build: (data: any[], state: State) => string, ...Data];
|
|
8
|
-
export type InferPath<Path extends string> = Path extends `${string}*${infer Rest}` ? Rest extends "*" ? [string] : [string, ...InferPath<Rest>] : [];
|
|
9
|
-
export type RouteLayer<Params extends any[]> = [build: (data: any[], state: State, paramCount: number, paramString: string) => string, ...any[]] & {
|
|
10
|
-
_?: Params;
|
|
11
|
-
};
|
|
12
|
-
export type Route = [method: string, path: string, ...layers: RouteLayer<any[]>[]];
|
|
13
|
-
export type RegisterRouteFn = <const Path extends string>(path: Path, ...layers: RouteLayer<InferPath<Path>>[]) => Route;
|
|
14
|
-
export type RegisterRouteWithMethodFn = <const Path extends string>(method: RequestMethod, path: Path, ...layers: RouteLayer<InferPath<Path>>[]) => Route;
|
|
15
|
-
export type Router = [layers: Layer[], routes: Route[]] | [layers: Layer[], routes: Route[], children: Record<string, Router>];
|
|
16
|
-
/**
|
|
17
|
-
* Run a layer
|
|
18
|
-
*/
|
|
19
|
-
export declare const evaluateLayer: (layer: Layer, state: State) => string;
|
|
20
|
-
/**
|
|
21
|
-
* Run a route layer
|
|
22
|
-
*/
|
|
23
|
-
export declare const evaluateRouteLayer: (layer: RouteLayer<any[]>, state: State, paramCount: number, params: string) => string;
|
|
24
|
-
// Build implementations
|
|
25
|
-
/**
|
|
26
|
-
* Use in `default` and `build` mode.
|
|
27
|
-
*
|
|
28
|
-
* @example
|
|
29
|
-
* build(router, [false, false] as any, '', '');
|
|
30
|
-
*/
|
|
31
|
-
export declare const build: (router: Router, state: State, prefix: string, content: string) => void;
|
|
32
|
-
/**
|
|
33
|
-
* Use in `hydrate` mode.
|
|
34
|
-
*
|
|
35
|
-
* @example
|
|
36
|
-
* build(router, [false, false] as any);
|
|
37
|
-
*/
|
|
38
|
-
export declare const hydrate: (router: Router, state: State) => void;
|
package/compiler/router.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{countParams}from"@mapl/router/utils";import{registerRoute,routeParamMap}from"./globals.js";export let evaluateLayer=(layer,state)=>layer[0](layer,state);export let evaluateRouteLayer=(layer,state,paramCount,params)=>layer[0](layer,state,paramCount,params);export let build=(router,state,prefix,content)=>{for(let i=0,layers=router[0];i<layers.length;i++)content+=evaluateLayer(layers[i],state);for(let i=0,routes=router[1];i<routes.length;i++){let route=routes[i];let routeState=state.slice();let routeContent=content;for(let j=2,paramCount=countParams(route[1]),params=routeParamMap[paramCount];j<route.length;j++)routeContent+=evaluateRouteLayer(route[j],routeState,paramCount,params);registerRoute(route,routeState,prefix,routeContent)}if(router.length>2){let children=router[2];for(let key in children)build(children[key],state.slice(),key===`/`?prefix:prefix+key,content)}};export let hydrate=(router,state)=>{for(let i=0,layers=router[0];i<layers.length;i++)evaluateLayer(layers[i],state);for(let i=0,routes=router[1];i<routes.length;i++){let route=routes[i];let routeState=state.slice();for(let j=2,paramCount=countParams(route[1]);j<route.length;j++)evaluateRouteLayer(route[j],routeState,paramCount,``)}if(router.length>2){let children=router[2];for(const key in children)hydrate(children[key],state.slice())}};
|
package/compiler/state.d.ts
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
export interface State extends Array<any> {
|
|
2
|
-
/**
|
|
3
|
-
* Whether scope should be async
|
|
4
|
-
*/
|
|
5
|
-
0: boolean;
|
|
6
|
-
/**
|
|
7
|
-
* Whether the scope needs a context object
|
|
8
|
-
*/
|
|
9
|
-
1: boolean;
|
|
10
|
-
/**
|
|
11
|
-
* Fork the current state
|
|
12
|
-
*/
|
|
13
|
-
slice: () => this;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Create initial state
|
|
17
|
-
*/
|
|
18
|
-
export declare const initState: () => State;
|
|
19
|
-
/**
|
|
20
|
-
* Use in `default` and `build` mode.
|
|
21
|
-
*
|
|
22
|
-
* @example
|
|
23
|
-
* finalizeReturn([true, true], 'return await fn(c);');
|
|
24
|
-
*/
|
|
25
|
-
export declare const finalizeReturn: (state: State, content: string) => string;
|
|
26
|
-
/**
|
|
27
|
-
* Use in `default` and `build` mode.
|
|
28
|
-
*
|
|
29
|
-
* @example
|
|
30
|
-
* finalizeFn([true, true], 'return await fn(c);');
|
|
31
|
-
*/
|
|
32
|
-
export declare const finalizeFn: (state: State, content: string) => string;
|
package/compiler/state.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{injectDependency}from"runtime-compiler";import{handlerArgs}from"./globals.js";export let initState=()=>[false,false];let wrapContent=(state,content)=>state[1]?`let mh=[],mc={status:200,headers:mh};`+content:content;export let finalizeReturn=(state,content)=>state[0]?`return `+injectDependency(`async${handlerArgs}=>{${wrapContent(state,content)}}`)+handlerArgs:wrapContent(state,content);export let finalizeFn=(state,content)=>injectDependency(`${state[0]?`async`+handlerArgs:handlerArgs}=>{${wrapContent(state,content)}}`);
|
package/generic/handlers.d.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import type { Context, MaybePromise } from "./types.ts";
|
|
2
|
-
import type { RouteLayer } from "../compiler/router.ts";
|
|
3
|
-
// Send text and streams
|
|
4
|
-
type SendFn<Params extends any[]> = (...args: [...Params, c: Context]) => MaybePromise<BodyInit | null>;
|
|
5
|
-
export declare const sendFn: RouteLayer<any[]>[0];
|
|
6
|
-
/**
|
|
7
|
-
* Send raw content
|
|
8
|
-
*/
|
|
9
|
-
export declare const raw: <Params extends any[]>(fn: SendFn<Params>) => RouteLayer<Params>;
|
|
10
|
-
// Send JSON
|
|
11
|
-
type SendJSONFn<Params extends any[]> = (...args: [...Params, c: Context]) => any;
|
|
12
|
-
export declare const sendJSONFn: RouteLayer<any[]>[0];
|
|
13
|
-
/**
|
|
14
|
-
* Send JSON
|
|
15
|
-
*/
|
|
16
|
-
export declare const json: <Params extends any[]>(fn: SendJSONFn<Params>) => RouteLayer<Params>;
|
|
17
|
-
// Send HTML
|
|
18
|
-
export declare const sendHTMLFn: RouteLayer<any[]>[0];
|
|
19
|
-
/**
|
|
20
|
-
* Send HTML
|
|
21
|
-
*/
|
|
22
|
-
export declare const html: <Params extends any[]>(fn: SendFn<Params>) => RouteLayer<Params>;
|
|
23
|
-
export {};
|
package/generic/handlers.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{isHydrating}from"runtime-compiler/config";import{buildCall,hydrateCall}from"../compiler/call.js";let onlyHydrateCall=(data,state,paramCount)=>(hydrateCall(state,data[1],paramCount),``);export let sendFn=isHydrating?onlyHydrateCall:(data,state,paramCount,params)=>{let call=buildCall(state,data[1],paramCount,params);return state[1]?`return new Response(${call},mc)`:`return new Response(${call})`};export let raw=fn=>[sendFn,fn];export let sendJSONFn=isHydrating?onlyHydrateCall:(data,state,paramCount,params)=>{let call=buildCall(state,data[1],paramCount,params);return state[1]?`mh.push(mjh);return new Response(${call},mc)`:`return new Response(${call},mjo)`};export let json=fn=>[sendJSONFn,fn];export let sendHTMLFn=isHydrating?onlyHydrateCall:(data,state,paramCount,params)=>{let call=buildCall(state,data[1],paramCount,params);return state[1]?`mh.push(mhh);return new Response(${call},mc)`:`return new Response(${call},mho)`};export let html=fn=>[sendHTMLFn,fn];
|
package/generic/layers.d.ts
DELETED
package/generic/layers.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{isHydrating}from"runtime-compiler/config";import{buildCall,hydrateCall}from"../compiler/call.js";let buildTap=isHydrating?(data,state)=>(hydrateCall(state,data[1],0),``):(data,state)=>buildCall(state,data[1],0,``)+`;`;export let tap=fn=>[buildTap,fn];
|
package/generic/parsers.d.ts
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { type InferErr, type InferResult, isErr } from "@safe-std/error";
|
|
2
|
-
import { type LocalDependency } from "runtime-compiler";
|
|
3
|
-
import type { Context } from "./types.ts";
|
|
4
|
-
import { type Layer, type RouteLayer } from "../compiler/router.ts";
|
|
5
|
-
interface ParseLayerFn {
|
|
6
|
-
<const T>(fn: (c: Context) => T, handleError: RouteLayer<[InferErr<Awaited<T>>]>): Layer<[LocalDependency<InferResult<Awaited<T>>>, typeof fn, typeof handleError]>;
|
|
7
|
-
<const T>(fn: (c: Context) => T): Layer<[LocalDependency<Awaited<T>>, typeof fn]>;
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* Check whether value is an error
|
|
11
|
-
*/
|
|
12
|
-
export declare const IS_ERR: LocalDependency<typeof isErr>;
|
|
13
|
-
/**
|
|
14
|
-
* Parse and assign the value to a local variable on every request
|
|
15
|
-
*/
|
|
16
|
-
export declare const init: ParseLayerFn;
|
|
17
|
-
/**
|
|
18
|
-
* Get the parsed result of a parser
|
|
19
|
-
*/
|
|
20
|
-
export declare const result: <T extends LocalDependency<any>>(parser: Layer<[T, ...any[]]>) => T;
|
|
21
|
-
export {};
|
package/generic/parsers.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{isErr}from"@safe-std/error";import{injectExternalDependency}from"runtime-compiler";import{isHydrating}from"runtime-compiler/config";import{evaluateRouteLayer}from"../compiler/router.js";import{buildCall,hydrateCall}from"../compiler/call.js";export let IS_ERR=injectExternalDependency(isErr);let buildParse=isHydrating?(data,state)=>(hydrateCall(state,data[2],0),data.length>3?evaluateRouteLayer(data[3],state,1,data[1]):``):(data,state)=>{let id=data[1];return`let ${id}=${buildCall(state,data[2],0,``)};`+(data.length>3?`if(${IS_ERR}(${id})){${evaluateRouteLayer(data[3],state,1,id+`,`)}}`:``)};let tmpId=0;export let init=(fn,handleError)=>handleError==null?[buildParse,`mt`+ tmpId++,fn]:[buildParse,`mt`+ tmpId++,fn,handleError];export let result=parser=>parser[1];
|
package/generic/route.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { RegisterRouteFn, RegisterRouteWithMethodFn, Router } from "../compiler/router.ts";
|
|
2
|
-
export declare const get: RegisterRouteFn;
|
|
3
|
-
export declare const post: RegisterRouteFn;
|
|
4
|
-
export declare const put: RegisterRouteFn;
|
|
5
|
-
export declare const del: RegisterRouteFn;
|
|
6
|
-
export declare const patch: RegisterRouteFn;
|
|
7
|
-
export declare const options: RegisterRouteFn;
|
|
8
|
-
export declare const trace: RegisterRouteFn;
|
|
9
|
-
export declare const query: RegisterRouteFn;
|
|
10
|
-
export declare const any: RegisterRouteFn;
|
|
11
|
-
export declare const def: RegisterRouteWithMethodFn;
|
|
12
|
-
export declare const init: (layers: Router[0], routes: Router[1], children?: Router[2]) => Router;
|
package/generic/route.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
let GET=[`GET`];export let get=(...args)=>GET.concat(args);let POST=[`POST`];export let post=(...args)=>POST.concat(args);let PUT=[`PUT`];export let put=(...args)=>PUT.concat(args);let DEL=[`DELETE`];export let del=(...args)=>DEL.concat(args);let PATCH=[`PATCH`];export let patch=(...args)=>PATCH.concat(args);let OPTIONS=[`OPTIONS`];export let options=(...args)=>OPTIONS.concat(args);let TRACE=[`TRACE`];export let trace=(...args)=>TRACE.concat(args);let QUERY=[`QUERY`];export let query=(...args)=>QUERY.concat(args);let ANY=[``];export let any=(...args)=>ANY.concat(args);export let def=(...args)=>args;export let init=(layers,routes,children)=>children==null?[layers,routes]:[layers,routes,children];
|
package/generic/types.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export type Header = [string, string] | readonly [string, string];
|
|
2
|
-
export interface Context {
|
|
3
|
-
status: number;
|
|
4
|
-
headers: Header[];
|
|
5
|
-
}
|
|
6
|
-
export type MaybePromise<T> = T | Promise<T>;
|
|
7
|
-
export type RequestMethod = "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "OPTIONS" | "TRACE" | (string & {});
|
package/generic/types.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export{};
|
package/generic/utils/cors.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { Header, RequestMethod } from "../types.ts";
|
|
2
|
-
import type { Layer } from "../../compiler/router.ts";
|
|
3
|
-
export type PreflightHeader = Header & {
|
|
4
|
-
"~": 0;
|
|
5
|
-
};
|
|
6
|
-
export declare const allowMethods: (methods: [RequestMethod, RequestMethod, ...RequestMethod[]] | RequestMethod | "*") => PreflightHeader;
|
|
7
|
-
export declare const allowHeaders: (headers: string | string[]) => PreflightHeader;
|
|
8
|
-
export declare const maxAge: (seconds: number) => PreflightHeader;
|
|
9
|
-
export declare const allowCredentials: Header;
|
|
10
|
-
export declare const exposeHeaders: (headers: "*" | (string & {}) | [string, string, ...string[]]) => Header;
|
|
11
|
-
export declare const init: (origins: "*" | (string & {}) | [string, string, ...string[]], preflightHeaders?: [PreflightHeader, ...PreflightHeader[]], headers?: [Header, ...Header[]]) => Layer<any[]>;
|
package/generic/utils/cors.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{isHydrating}from"runtime-compiler/config";import{injectDependency}from"runtime-compiler";import{injectArgsList}from"runtime-compiler/utils";export let allowMethods=methods=>[`access-control-allow-methods`,``+methods];export let allowHeaders=headers=>[`access-control-allow-headers`,``+headers];export let maxAge=seconds=>[`access-control-max-age`,``+seconds];export let allowCredentials=[`access-control-allow-credentials`,`true`];export let exposeHeaders=headers=>[`access-control-expose-headers`,``+headers];let hydrateInit=[(_,state)=>(state[1]=true,``),null,null,null];let buildInit=(layer,state)=>{state[1]=true;let origins=layer[1];let preflightHeaders=layer[2];let headers=layer[3]??[];if(origins!==`*`){headers.push([`vary`,`origin`]);if(Array.isArray(origins)){let str=`(r,h)=>{let o=r.headers.get("origin");h.push(["access-control-allow-origin",typeof o==="string"&&o===`+JSON.stringify(origins[1]);for(let i=2;i<origins.length;i++)str+=`||o===`+JSON.stringify(origins[i]);return injectDependency(str+`?o:`+JSON.stringify(origins[0])+`]);`+(headers.length>0?`h.push(`+injectArgsList(headers)+`);`:``)+(preflightHeaders!=null?`r.method==="OPTIONS"&&h.push(`+injectArgsList(preflightHeaders)+`)}`:`}`))+`(mr,mh);`}}headers.push([`access-control-allow-origin`,origins]);let pushHeaders=headers.length>0?`h.push(`+injectArgsList(headers)+`);`:``;return preflightHeaders!=null?injectDependency(`(r,h)=>{`+pushHeaders+`r.method==="OPTIONS"&&h.push(`+injectArgsList(preflightHeaders)+`)}`)+`(mr,mh);`:pushHeaders};export let init=isHydrating?()=>hydrateInit:(origin,preflightHeaders,headers)=>[buildInit,origin,preflightHeaders,headers];
|