@mapl/web 0.5.3 → 0.6.0
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 -28
- package/bun/index.d.ts +3 -3
- package/cloudflare/compiler.d.ts +20 -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 +18 -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 -7
- package/index.js +1 -1
- package/layer.d.ts +45 -0
- package/layer.js +1 -0
- package/package.json +1 -35
- package/response.d.ts +41 -0
- package/response.js +1 -0
- package/router.d.ts +33 -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 -34
- package/compiler/globals.js +0 -1
- package/compiler/router.d.ts +0 -37
- 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 -11
- package/generic/route.js +0 -1
- package/generic/types.d.ts +0 -6
- package/generic/types.js +0 -1
package/README.md
CHANGED
|
@@ -1,31 +1,4 @@
|
|
|
1
1
|
# `@mapl/web`
|
|
2
2
|
A low level, fast and type-safe framework.
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
import { inject, route, router, send } from '@mapl/web';
|
|
6
|
-
import { compiler, request } from '@mapl/web/generic';
|
|
7
|
-
|
|
8
|
-
const app = router(
|
|
9
|
-
[],
|
|
10
|
-
[
|
|
11
|
-
route.get(
|
|
12
|
-
'/',
|
|
13
|
-
send.raw((c) => {
|
|
14
|
-
c.status = 418;
|
|
15
|
-
return 'Hi';
|
|
16
|
-
}),
|
|
17
|
-
),
|
|
18
|
-
route.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
|
-
|
|
31
|
-
```
|
|
4
|
+
See example usage in [./examples](./examples);
|
package/bun/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
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>>;
|
|
@@ -0,0 +1,20 @@
|
|
|
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
|
+
* // Must be set as 'fetch' property of an object
|
|
14
|
+
* fetch(...args) {
|
|
15
|
+
* // Set up stuff...
|
|
16
|
+
* return (this.fetch = createFetch())(...args);
|
|
17
|
+
* }
|
|
18
|
+
* } satisfies ExportedHandler<Env>;
|
|
19
|
+
*/
|
|
20
|
+
export declare const build: (router: Router) => ExportedDependency<CompiledResult>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{evaluate,exportExpr,markExported}from"runtime-compiler";import{isHydrating,onlyBuild}from"runtime-compiler/config";import{_hydrate,_load,loadToString as genericLoadToString}from"../generic/compiler.js";import{SCOPE,setHandlerArgs}from"../compilers/globals.js";export let loadToString=()=>`()=>{`+SCOPE[0]+`return `+genericLoadToString()+`}`;export let build=isHydrating?router=>(_hydrate(router,[0]),markExported()):onlyBuild?router=>(setHandlerArgs(`(mr,mi,mec)`),_load(router),exportExpr(loadToString())):router=>{setHandlerArgs(`(mr,mi,mec)`);_load(router);let id=exportExpr(loadToString());evaluate();return id};
|
|
@@ -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{SCOPE}from"./globals.js";export let buildCall=isHydrating?(scope,fn,_,argsCount)=>{fn instanceof AsyncFunction&&(scope[0]|=1);fn.length>argsCount&&(scope[0]|=2);return injectExternal(fn)}:(scope,fn,args,argsCount)=>{let str=declareLocal(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 SCOPE: Scope;
|
|
17
|
+
/**
|
|
18
|
+
* Check whether value is an error
|
|
19
|
+
*/
|
|
20
|
+
export declare let IS_ERR: Identifier<typeof isErr>;
|
|
21
|
+
export declare const clearScope: () => 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 SCOPE;export let IS_ERR;export let clearScope=()=>{SCOPE=[`let mhh=['content-type','text/html'],mho={headers:mhh},mnf=new Response(null,{status:404});`,0];IS_ERR=declareLocal(SCOPE,injectExternal(isErr))};clearScope();
|
|
@@ -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,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(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{evaluate,exportExpr,markExported}from"runtime-compiler";import{isHydrating,onlyBuild}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()):onlyBuild?router=>(setHandlerArgs(`(mr,mi)`),_load(router),exportExpr(loadToString())):router=>{setHandlerArgs(`(mr,mi)`);_load(router);let id=exportExpr(loadToString());evaluate();return id};
|
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,28 @@
|
|
|
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
|
+
* // Must be set as a property of an object
|
|
25
|
+
* fetch: getDependency(build(app))
|
|
26
|
+
* };
|
|
31
27
|
*/
|
|
32
|
-
export declare const
|
|
28
|
+
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{evaluate,exportScope,markExported}from"runtime-compiler";import{isHydrating,onlyBuild}from"runtime-compiler/config";import{SCOPE,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=>{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()):onlyBuild?router=>(setHandlerArgs(`(mr)`),_load(router),exportScope(SCOPE,loadToString())):router=>{setHandlerArgs(`(mr)`);_load(router);let id=exportScope(SCOPE,loadToString());evaluate();return id};
|
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,7 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
export * as
|
|
3
|
-
export * as
|
|
4
|
-
export * as layer from "./generic/layers.ts";
|
|
5
|
-
export * as parser from "./generic/parsers.ts";
|
|
6
|
-
export { inject } from "runtime-compiler/call";
|
|
7
|
-
export declare const router: (layers: Router[0], routes: Router[1], children?: Router[2]) => Router;
|
|
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,35 +1 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@mapl/web",
|
|
3
|
-
"version": "0.5.3",
|
|
4
|
-
"description": "A compiled web framework for all runtimes",
|
|
5
|
-
"keywords": ["fast", "lightweight", "cross-runtime", "framework", "web", "backend"],
|
|
6
|
-
"repository": {
|
|
7
|
-
"type": "git",
|
|
8
|
-
"url": "git+https://github.com/mapljs/web.git"
|
|
9
|
-
},
|
|
10
|
-
"license": "MIT",
|
|
11
|
-
"type": "module",
|
|
12
|
-
"main": "./index.js",
|
|
13
|
-
"types": "./index.d.ts",
|
|
14
|
-
"dependencies": {
|
|
15
|
-
"@mapl/router": "^0.8.1",
|
|
16
|
-
"@safe-std/error": "^2.0.4",
|
|
17
|
-
"runtime-compiler": "^2.1.2"
|
|
18
|
-
},
|
|
19
|
-
"exports": {
|
|
20
|
-
"./constants": "./constants.js",
|
|
21
|
-
"./generic": "./generic/index.js",
|
|
22
|
-
".": "./index.js",
|
|
23
|
-
"./generic/route": "./generic/route.js",
|
|
24
|
-
"./generic/layers": "./generic/layers.js",
|
|
25
|
-
"./generic/types": "./generic/types.js",
|
|
26
|
-
"./bun": "./bun/index.js",
|
|
27
|
-
"./generic/handlers": "./generic/handlers.js",
|
|
28
|
-
"./compiler/call": "./compiler/call.js",
|
|
29
|
-
"./compiler/state": "./compiler/state.js",
|
|
30
|
-
"./compiler/globals": "./compiler/globals.js",
|
|
31
|
-
"./compiler/router": "./compiler/router.js",
|
|
32
|
-
"./generic/compiler": "./generic/compiler.js",
|
|
33
|
-
"./generic/parsers": "./generic/parsers.js"
|
|
34
|
-
}
|
|
35
|
-
}
|
|
1
|
+
{"name":"@mapl/web","version":"0.6.0","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.2","@safe-std/error":"^2.0.4","runtime-compiler":"^3.0.9"},"exports":{"./utils":"./utils.js","./layer":"./layer.js","./constants":"./constants.js","./cloudflare":"./cloudflare/index.js","./cloudflare/compiler":"./cloudflare/compiler.js","./deno":"./deno/index.js","./bun":"./bun/index.js","./response":"./response.js",".":"./index.js","./generic":"./generic/index.js","./compilers/call":"./compilers/call.js","./router":"./router.js","./generic/compiler":"./generic/compiler.js","./compilers/globals":"./compilers/globals.js","./deno/compiler":"./deno/compiler.js","./compilers/scope":"./compilers/scope.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,33 @@
|
|
|
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;
|
|
33
|
+
export declare const trace: 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);let TRACE=[`TRACE`];export let trace=(...args)=>TRACE.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,34 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module Global compiler hooks
|
|
3
|
-
*/
|
|
4
|
-
import type { Route } from "./router.ts";
|
|
5
|
-
import type { State } from "./state.ts";
|
|
6
|
-
export declare let registerRoute: (route: Route, state: State, prefix: string, content: string) => any;
|
|
7
|
-
/**
|
|
8
|
-
* Set a callback that register routes to a router.
|
|
9
|
-
* Use in `default` and `build` mode.
|
|
10
|
-
*/
|
|
11
|
-
export declare const setRegisterRoute: (f: typeof registerRoute) => void;
|
|
12
|
-
export declare let routeParamMap: string[];
|
|
13
|
-
/**
|
|
14
|
-
* Set route param map.
|
|
15
|
-
* Use in `default` and `build` mode.
|
|
16
|
-
*
|
|
17
|
-
* @example
|
|
18
|
-
* setRouteParamMap([
|
|
19
|
-
* '', 'err'
|
|
20
|
-
* ]);
|
|
21
|
-
*
|
|
22
|
-
* routeParamMap[paramCount << 1]; // No context
|
|
23
|
-
* routeParamMap[paramCount << 1 | 1]; // With context
|
|
24
|
-
*/
|
|
25
|
-
export declare const setRouteParamMap: (m: string[]) => void;
|
|
26
|
-
export declare let handlerArgs: string;
|
|
27
|
-
/**
|
|
28
|
-
* Set request handler args.
|
|
29
|
-
* Use in `default` and `build` mode.
|
|
30
|
-
*
|
|
31
|
-
* @example
|
|
32
|
-
* setHandlerArgs('(req, env, ctx)');
|
|
33
|
-
*/
|
|
34
|
-
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,37 +0,0 @@
|
|
|
1
|
-
import type { State } from "./state.ts";
|
|
2
|
-
/*
|
|
3
|
-
* From what i've tested closures use 5x more
|
|
4
|
-
* memory than [fn, ...data] and runs slower too
|
|
5
|
-
*/
|
|
6
|
-
export type Layer<Data extends any[] = any[]> = [build: (data: any[], state: State) => string, ...Data];
|
|
7
|
-
export type InferPath<Path extends string> = Path extends `${string}*${infer Rest}` ? Rest extends "*" ? [string] : [string, ...InferPath<Rest>] : [];
|
|
8
|
-
export type RouteLayer<Params extends any[]> = [build: (data: any[], state: State, paramCount: number, paramString: string) => string, ...any[]] & {
|
|
9
|
-
_?: Params;
|
|
10
|
-
};
|
|
11
|
-
export type Route = [method: string, path: string, ...layers: RouteLayer<any[]>[]];
|
|
12
|
-
export type RegisterRouteFn = <const Path extends string>(path: Path, ...layers: RouteLayer<InferPath<Path>>[]) => Route;
|
|
13
|
-
export type RegisterRouteWithMethodFn = <const Path extends string>(method: string, path: Path, ...layers: RouteLayer<InferPath<Path>>[]) => Route;
|
|
14
|
-
export type Router = [layers: Layer[], routes: Route[]] | [layers: Layer[], routes: Route[], children: Record<string, Router>];
|
|
15
|
-
/**
|
|
16
|
-
* Run a layer
|
|
17
|
-
*/
|
|
18
|
-
export declare const evaluateLayer: (layer: Layer, state: State) => string;
|
|
19
|
-
/**
|
|
20
|
-
* Run a route layer
|
|
21
|
-
*/
|
|
22
|
-
export declare const evaluateRouteLayer: (layer: RouteLayer<any[]>, state: State, paramCount: number, params: string) => string;
|
|
23
|
-
// Build implementations
|
|
24
|
-
/**
|
|
25
|
-
* Use in `default` and `build` mode.
|
|
26
|
-
*
|
|
27
|
-
* @example
|
|
28
|
-
* build(router, [false, false] as any, '', '');
|
|
29
|
-
*/
|
|
30
|
-
export declare const build: (router: Router, state: State, prefix: string, content: string) => void;
|
|
31
|
-
/**
|
|
32
|
-
* Use in `hydrate` mode.
|
|
33
|
-
*
|
|
34
|
-
* @example
|
|
35
|
-
* build(router, [false, false] as any);
|
|
36
|
-
*/
|
|
37
|
-
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,11 +0,0 @@
|
|
|
1
|
-
import type { RegisterRouteFn, RegisterRouteWithMethodFn } 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;
|
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;
|
package/generic/types.d.ts
DELETED
package/generic/types.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export{};
|