@mapl/web 0.3.5 → 0.3.8

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.
@@ -1,23 +1,20 @@
1
- import { type BuildOptions, type OutputOptions, type RolldownWatcher, type WatcherOptions } from "rolldown";
2
- export interface MaplBuildOptions {
1
+ import { type BuildOptions, type OutputOptions, type RolldownWatcher, type RolldownPluginOption, type ExternalOption } from "rolldown";
2
+ export interface MaplBuildOptions extends Omit<BuildOptions, "input" | "output"> {
3
+ output?: Omit<OutputOptions, "file" | "dir">;
4
+ }
5
+ export interface MaplOptions {
3
6
  /**
4
7
  * App entry point
5
8
  */
6
- input: string;
7
- /**
8
- * Output options
9
- */
10
- output: Omit<OutputOptions, "file"> & {
11
- dir: string
12
- };
9
+ main: string;
13
10
  /**
14
- * App build options
11
+ * Output directory
15
12
  */
16
- buildOptions?: Omit<BuildOptions, "input" | "output">;
13
+ outputDir: string;
17
14
  /**
18
- * App finalize options
15
+ * Build options
19
16
  */
20
- finalizeOptions?: Omit<BuildOptions, "input" | "output">;
17
+ build?: MaplBuildOptions;
21
18
  /**
22
19
  * Whether to emit asynchronous output
23
20
  */
@@ -26,18 +23,13 @@ export interface MaplBuildOptions {
26
23
  * Build target
27
24
  */
28
25
  target?: "bun";
29
- }
30
- export interface MaplDevOptions extends Omit<MaplBuildOptions, "finalizeOptions"> {
31
26
  /**
32
- * File watcher option
27
+ * Hydrate specific options
33
28
  */
34
- watcherOptions?: WatcherOptions;
35
- }
36
- export interface MaplAllOptions {
37
- common: MaplDevOptions & MaplBuildOptions;
38
- dev?: Partial<MaplDevOptions>;
39
- build?: Partial<MaplBuildOptions>;
29
+ hydrate?: MaplBuildOptions;
40
30
  }
41
- declare const _default: (opts: MaplBuildOptions) => Promise<void>;
31
+ export declare const hydrateImportsPlugin: RolldownPluginOption;
32
+ export declare const loadExternals: (currentExternals: ExternalOption | undefined) => ExternalOption;
33
+ declare const _default: (options: MaplOptions) => Promise<void>;
42
34
  export default _default;
43
- export declare const dev: (opts: MaplDevOptions) => RolldownWatcher;
35
+ export declare const dev: (options: MaplOptions) => RolldownWatcher;
package/build/rolldown.js CHANGED
@@ -1,18 +1,20 @@
1
- import{mkdirSync,writeFileSync}from"node:fs";import{build,watch}from"rolldown";import{compileToExportedDependency as generic}from"../compiler/jit.js";import{compileToExportedDependency as bun}from"../compiler/bun/jit.js";import{evaluateToString}from"runtime-compiler/jit";import{clear}from"runtime-compiler";import{join,resolve}from"node:path";export default async opts=>{let output=opts.output;let inputFile=resolve(opts.input);let outputFile=join(output.dir,`server-exports.js`);let tmpFile=resolve(output.dir,`tmp.js`);let external=opts.buildOptions?.external;await build({...opts.buildOptions,input:inputFile,output:{file:tmpFile},external:external==null?`runtime-compiler/config`:Array.isArray(external)?external.concat(`runtime-compiler/config`):typeof external===`function`?(id,parentId,isResolved)=>id===`runtime-compiler/config`||external(id,parentId,isResolved):[external,`runtime-compiler/config`]});let appMod=await import(tmpFile);let HANDLER=(opts.target===`bun`?bun:generic)(appMod.default);try{mkdirSync(output.dir,{recursive:true})}catch{}writeFileSync(outputFile,`
2
- import 'runtime-compiler/hydrate-loader';
3
-
1
+ import{mkdirSync,writeFileSync}from"node:fs";import{build,watch}from"rolldown";import{compileToExportedDependency as generic}from"../compiler/jit.js";import{compileToExportedDependency as bun}from"../compiler/bun/jit.js";import{evaluateToString}from"runtime-compiler/jit";import{clear}from"runtime-compiler";import{resolve}from"node:path";import{EXTERNALS}from"./utils.js";export let hydrateImportsPlugin={name:`mapl-web-hydrate-config-replacer`,resolveId(source){return this.resolve(source===`runtime-compiler/config`?`runtime-compiler/hydrate-config`:source)}};export let loadExternals=currentExternals=>currentExternals==null?EXTERNALS:typeof currentExternals===`function`?(id,...args)=>EXTERNALS.includes(id)||currentExternals(id,...args):EXTERNALS.concat(currentExternals);export default async options=>{let buildOptions=options.build;let hydrateOptions=options.hydrate;let targetOption=options.target;let asyncOption=options.asynchronous;let outputOptions=buildOptions?.output;let inputFile=resolve(options.main);let outputFile=resolve(options.outputDir,`server-exports.js`);let tmpFile=resolve(options.outputDir,`tmp.js`);await build({...buildOptions,input:inputFile,output:{...outputOptions,file:tmpFile},treeshake:false,external:loadExternals(buildOptions?.external)});let appMod=await import(tmpFile);let HANDLER=(targetOption===`bun`?bun:generic)(appMod.default);writeFileSync(outputFile,`
4
2
  import app from ${JSON.stringify(tmpFile)};
5
- import hydrateRouter from '@mapl/web/compiler/${opts.target===`bun`?`bun/`:``}aot';
3
+ import hydrateRouter from '@mapl/web/compiler/${targetOption===`bun`?`bun/`:``}aot';
6
4
  hydrateRouter(app);
7
5
 
8
6
  import { hydrate } from 'runtime-compiler/hydrate';
9
7
  import { getDependency } from 'runtime-compiler';
10
8
 
11
- ${opts.asynchronous?`await(async`:`(`}${evaluateToString()})(...hydrate());
12
- ${opts.target===`bun`?`export default { routes: getDependency(${HANDLER}) };`:`export default { fetch: getDependency(${HANDLER}) };`}
13
- `);clear();await build({...opts.finalizeOptions??opts.buildOptions,input:outputFile,output:{...output,file:outputFile,dir:void 0}})};export let dev=opts=>{let output=opts.output;let tmpFile=resolve(output.dir,`tmp.js`);let watcher=watch({...opts.buildOptions,input:resolve(opts.input),output:{...output,file:tmpFile,dir:void 0},watch:opts.watcherOptions});let compileResult=opts.asynchronous?`await compileToHandler(app)`:`compileToHandlerSync(app)`;try{mkdirSync(output.dir,{recursive:true})}catch{}writeFileSync(join(output.dir,`server-exports.js`),`
14
- import app from ${JSON.stringify(tmpFile)};
15
- import { compileToHandler${opts.asynchronous?``:`Sync`} } from '@mapl/web/compiler/${opts.target===`bun`?`bun/`:``}jit';
9
+ ${asyncOption?`await(async`:`(`}${evaluateToString()})(...hydrate());
10
+ export default {
11
+ ${targetOption===`bun`?`routes`:`fetch`}: getDependency(${HANDLER})
12
+ };
13
+ `);clear();let currentPlugins=hydrateOptions?.plugins;await build({...hydrateOptions,input:outputFile,output:{...hydrateOptions?.output,file:outputFile},plugins:!currentPlugins?hydrateImportsPlugin:Array.isArray(currentPlugins)?[hydrateImportsPlugin].concat(currentPlugins):[hydrateImportsPlugin,currentPlugins]})};export let dev=options=>{let buildOptions=options.build;let targetOption=options.target;let asyncOption=options.asynchronous;let outputOptions=buildOptions?.output;let inputFile=resolve(options.main);let outputFile=resolve(options.outputDir,`server-exports.js`);let tmpFile=resolve(options.outputDir,`tmp.js`);try{mkdirSync(options.outputDir,{recursive:true})}catch{}writeFileSync(tmpFile,`
14
+ import app from ${JSON.stringify(inputFile)};
15
+ import { ${asyncOption?`compileToHandler`:`compileToHandlerSync`} } from '@mapl/web/compiler/${targetOption===`bun`?`bun/`:``}jit';
16
16
 
17
- ${opts.target===`bun`?`export default { routes: ${compileResult} };`:`export default { fetch: ${compileResult} };`}
18
- `);return watcher};
17
+ export default {
18
+ ${targetOption===`bun`?`routes`:`fetch`}: ${asyncOption?`await compileToHandler`:`compileToHandlerSync`}(app)
19
+ };
20
+ `);return watch({input:tmpFile,output:{...outputOptions,file:outputFile},treeshake:false,external:loadExternals(buildOptions?.external)})};
@@ -0,0 +1 @@
1
+ export declare const EXTERNALS: string[];
package/build/utils.js ADDED
@@ -0,0 +1 @@
1
+ export let EXTERNALS=[`runtime-compiler`,`runtime-compiler/config`,`@mapl/framework`,`@mapl/web`];
package/compiler/aot.js CHANGED
@@ -1 +1 @@
1
- import{hydrateDependency,setCompileErrorHandlerHook,setCompileHandlerHook}from"@mapl/framework";import{injectExternalDependency,markExported}from"runtime-compiler";import"../core/context.js";import{countParams}from"@mapl/router/path";export let hydrateRouter=router=>{setCompileHandlerHook((handler,_,_1,scope)=>{let fn=handler[2];injectExternalDependency(fn);handler[3]?.type?.(``,scope[1]||fn.length>countParams(handler[1]))});setCompileErrorHandlerHook((_,fn,dat,scope)=>{injectExternalDependency(fn);dat?.type?.(``,scope[1]||fn.length>1);return``});hydrateDependency(router,[false,false,,``,false],``)};export default router=>{hydrateRouter(router);markExported()};
1
+ import{hydrateDependency,hooks}from"@mapl/framework";import{injectExternalDependency,markExported}from"runtime-compiler";import"../core/context.js";import{countParams}from"@mapl/router/path";export let hydrateRouter=router=>{hooks.compileHandler=(handler,_,_1,scope)=>{let fn=handler[2];injectExternalDependency(fn);handler[3]?.type?.(``,scope[1]||fn.length>countParams(handler[1]))};hooks.compileErrorHandler=(_,fn,dat,scope)=>{injectExternalDependency(fn);dat?.type?.(``,scope[1]||fn.length>1);return``};hydrateDependency(router,[false,false,,``,false],``)};export default router=>{hydrateRouter(router);markExported()};
@@ -1 +1 @@
1
- import{compileGroup,AsyncFunction,contextInit,setContextInit,setCompileErrorHandlerHook,setCompileHandlerHook}from"@mapl/framework";import{countParams}from"@mapl/router/path";import{exportDependency,getDependency,injectDependency,injectExternalDependency}from"runtime-compiler";import{evaluate,evaluateSync}from"runtime-compiler/jit";import{compileErrorHandler,compileReturn,paramArgs,RES400}from"../jit.js";import{insertRoute,resetRouter,routerToString}from"./router.js";let compileToState=router=>{resetRouter();setCompileHandlerHook((handler,prevContent,path,scope)=>{let fn=handler[2];let call=injectExternalDependency(fn)+`(`;let paramCount=countParams(handler[1]);paramCount>0&&(call+=paramArgs[paramCount]);if(fn.length>paramCount){call+=paramCount===0?`c`:`,c`;if(!scope[1]){insertRoute(handler[0],path,prevContent+contextInit+compileReturn(handler[3],fn instanceof AsyncFunction,scope[0],true,call+`)`)+(scope[0]?`})()`:``));return}}insertRoute(handler[0],path,prevContent+compileReturn(handler[3],fn instanceof AsyncFunction,scope[0],scope[1],call+`)`)+(scope[0]?`})()`:``))});setCompileErrorHandlerHook(compileErrorHandler);setContextInit(`let h=[],c={status:200,req:r,headers:h,server:s};`);compileGroup(router,[false,false,,`return `+RES400,false],``,``)};export let compileToString=router=>{compileToState(router);return routerToString()};export let compileToExportedDependency=router=>exportDependency(injectDependency(compileToString(router)));export let compileToHandler=async router=>{let id=compileToExportedDependency(router);await evaluate();return getDependency(id)};export let compileToHandlerSync=router=>{let id=compileToExportedDependency(router);evaluateSync();return getDependency(id)};
1
+ import{compileGroup,AsyncFunction,contextInit,setContextInit,hooks}from"@mapl/framework";import{countParams}from"@mapl/router/path";import{exportDependency,getDependency,injectDependency,injectExternalDependency}from"runtime-compiler";import{evaluate,evaluateSync}from"runtime-compiler/jit";import{compileErrorHandler,compileReturn,paramArgs,RES400}from"../jit.js";import{insertRoute,resetRouter,routerToString}from"./router.js";let compileToState=router=>{resetRouter();hooks.compileHandler=(handler,prevContent,path,scope)=>{let fn=handler[2];let call=injectExternalDependency(fn)+`(`;let paramCount=countParams(handler[1]);paramCount>0&&(call+=paramArgs[paramCount]);if(fn.length>paramCount){call+=paramCount===0?`c`:`,c`;if(!scope[1]){insertRoute(handler[0],path,prevContent+contextInit+compileReturn(handler[3],fn instanceof AsyncFunction,scope[0],true,call+`)`)+(scope[0]?`})()`:``));return}}insertRoute(handler[0],path,prevContent+compileReturn(handler[3],fn instanceof AsyncFunction,scope[0],scope[1],call+`)`)+(scope[0]?`})()`:``))};hooks.compileErrorHandler=compileErrorHandler;setContextInit(`let h=[],c={status:200,req:r,headers:h,server:s};`);compileGroup(router,[false,false,,`return `+RES400,false],``,``)};export let compileToString=router=>{compileToState(router);return routerToString()};export let compileToExportedDependency=router=>exportDependency(injectDependency(compileToString(router)));export let compileToHandler=async router=>{let id=compileToExportedDependency(router);await evaluate();return getDependency(id)};export let compileToHandlerSync=router=>{let id=compileToExportedDependency(router);evaluateSync();return getDependency(id)};
package/compiler/jit.js CHANGED
@@ -1 +1 @@
1
- import{compileGroup,createArgSet,AsyncFunction,contextInit,setContextInit,setCompileErrorHandlerHook,setCompileHandlerHook}from"@mapl/framework";import compile from"@mapl/router/method/compiler";import{countParams}from"@mapl/router/path";import{insertItem}from"@mapl/router/method";import{exportDependency,getDependency,injectDependency,injectExternalDependency}from"runtime-compiler";import{evaluate,evaluateSync}from"runtime-compiler/jit";let URL_ROUTER;export let RES404=injectDependency(`new Response(null,{status:404})`);export let RES400=injectDependency(`new Response(null,{status:400})`);export let paramArgs=createArgSet(new Array(16).fill(0).map((_1,i)=>`q`+i));export let compileReturn=(dat,fnAsync,scopeAsync,contextCreated,result)=>{let res=dat?.type;if(res==null)return`return `+result;let str=res(fnAsync?`await `+result:result,contextCreated);return fnAsync&&!scopeAsync?`return (async()=>{`+str+`})()`:str};export let compileErrorHandler=(input,fn,dat,scope)=>{let call=injectExternalDependency(fn)+`(`+input;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+`)`)};let compileToState=router=>{URL_ROUTER={};setCompileHandlerHook((handler,prevContent,path,scope)=>{let fn=handler[2];let call=injectExternalDependency(fn)+`(`;let paramCount=countParams(handler[1]);paramCount>0&&(call+=paramArgs[paramCount]);if(fn.length>paramCount){call+=paramCount===0?`c`:`,c`;if(!scope[1]){insertItem(URL_ROUTER,handler[0],path,prevContent+contextInit+compileReturn(handler[3],fn instanceof AsyncFunction,scope[0],true,call+`)`)+(scope[0]?`})()`:``));return}}insertItem(URL_ROUTER,handler[0],path,prevContent+compileReturn(handler[3],fn instanceof AsyncFunction,scope[0],scope[1],call+`)`)+(scope[0]?`})()`:``))});setCompileErrorHandlerHook(compileErrorHandler);setContextInit(`let h=[],c={status:200,req:r,headers:h};`);compileGroup(router,[false,false,,`return `+RES400,false],``,``)};export let compileToString=router=>{compileToState(router);return`(r)=>{`+compile(URL_ROUTER,`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 `+RES404+`}`};export let compileToExportedDependency=router=>exportDependency(injectDependency(compileToString(router)));export let compileToHandler=async router=>{let id=compileToExportedDependency(router);await evaluate();return getDependency(id)};export let compileToHandlerSync=router=>{let id=compileToExportedDependency(router);evaluateSync();return getDependency(id)};
1
+ import{compileGroup,createArgSet,AsyncFunction,contextInit,setContextInit,hooks}from"@mapl/framework";import compile from"@mapl/router/method/compiler";import{countParams}from"@mapl/router/path";import{insertItem}from"@mapl/router/method";import{exportDependency,getDependency,injectDependency,injectExternalDependency}from"runtime-compiler";import{evaluate,evaluateSync}from"runtime-compiler/jit";let URL_ROUTER;export let RES404=injectDependency(`new Response(null,{status:404})`);export let RES400=injectDependency(`new Response(null,{status:400})`);export let paramArgs=createArgSet(new Array(16).fill(0).map((_1,i)=>`q`+i));export let compileReturn=(dat,fnAsync,scopeAsync,contextCreated,result)=>{let res=dat?.type;if(res==null)return`return `+result;let str=res(fnAsync?`await `+result:result,contextCreated);return fnAsync&&!scopeAsync?`return (async()=>{`+str+`})()`:str};export let compileErrorHandler=(input,fn,dat,scope)=>{let call=injectExternalDependency(fn)+`(`+input;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+`)`)};let compileToState=router=>{URL_ROUTER={};hooks.compileHandler=(handler,prevContent,path,scope)=>{let fn=handler[2];let call=injectExternalDependency(fn)+`(`;let paramCount=countParams(handler[1]);paramCount>0&&(call+=paramArgs[paramCount]);if(fn.length>paramCount){call+=paramCount===0?`c`:`,c`;if(!scope[1]){insertItem(URL_ROUTER,handler[0],path,prevContent+contextInit+compileReturn(handler[3],fn instanceof AsyncFunction,scope[0],true,call+`)`)+(scope[0]?`})()`:``));return}}insertItem(URL_ROUTER,handler[0],path,prevContent+compileReturn(handler[3],fn instanceof AsyncFunction,scope[0],scope[1],call+`)`)+(scope[0]?`})()`:``))};hooks.compileErrorHandler=compileErrorHandler;setContextInit(`let h=[],c={status:200,req:r,headers:h};`);compileGroup(router,[false,false,,`return `+RES400,false],``,``)};export let compileToString=router=>{compileToState(router);return`(r)=>{`+compile(URL_ROUTER,`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 `+RES404+`}`};export let compileToExportedDependency=router=>exportDependency(injectDependency(compileToString(router)));export let compileToHandler=async router=>{let id=compileToExportedDependency(router);await evaluate();return getDependency(id)};export let compileToHandlerSync=router=>{let id=compileToExportedDependency(router);evaluateSync();return getDependency(id)};
package/index.d.ts CHANGED
@@ -3,4 +3,3 @@ export * as layer from "./core/middleware.js";
3
3
  export * as handle from "./core/handler.js";
4
4
  export * as cors from "./utils/cors.js";
5
5
  export { default as staticHeaders } from "./utils/static-headers.js";
6
- export { default as secureHeaders } from "./utils/secure-headers.js";
package/index.js CHANGED
@@ -1 +1 @@
1
- export{default as router}from"./core/index.js";export*as layer from"./core/middleware.js";export*as handle from"./core/handler.js";export*as cors from"./utils/cors.js";export{default as staticHeaders}from"./utils/static-headers.js";export{default as secureHeaders}from"./utils/secure-headers.js";
1
+ export{default as router}from"./core/index.js";export*as layer from"./core/middleware.js";export*as handle from"./core/handler.js";export*as cors from"./utils/cors.js";export{default as staticHeaders}from"./utils/static-headers.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mapl/web",
3
- "version": "0.3.5",
3
+ "version": "0.3.8",
4
4
  "description": "A compiled web framework for all runtimes",
5
5
  "keywords": ["fast", "lightweight", "cross-runtime", "framework", "web", "backend"],
6
6
  "repository": {
@@ -12,27 +12,28 @@
12
12
  "main": "./index.js",
13
13
  "types": "./index.d.ts",
14
14
  "dependencies": {
15
- "@mapl/framework": "^0.5.2",
15
+ "@mapl/framework": "^0.5.3",
16
16
  "@mapl/router": "^0.6.2",
17
+ "@rollup/plugin-terser": "^0.4.4",
17
18
  "@safe-std/error": "^1.0.1",
18
- "runtime-compiler": "^1.2.5"
19
+ "runtime-compiler": "^1.2.6"
19
20
  },
20
21
  "exports": {
21
22
  "./constants": "./constants.js",
22
23
  "./core/middleware": "./core/middleware.js",
23
- "./core/handler": "./core/handler.js",
24
24
  ".": "./index.js",
25
25
  "./core": "./core/index.js",
26
- "./core/utils": "./core/utils.js",
27
- "./utils/cors": "./utils/cors.js",
28
- "./utils/secure-headers": "./utils/secure-headers.js",
29
26
  "./core/context": "./core/context.js",
30
- "./compiler/aot": "./compiler/aot.js",
31
- "./compiler/bun/router": "./compiler/bun/router.js",
27
+ "./core/handler": "./core/handler.js",
28
+ "./utils/cors": "./utils/cors.js",
29
+ "./utils/static-headers": "./utils/static-headers.js",
30
+ "./core/utils": "./core/utils.js",
31
+ "./build/utils": "./build/utils.js",
32
+ "./compiler/jit": "./compiler/jit.js",
32
33
  "./compiler/bun/jit": "./compiler/bun/jit.js",
34
+ "./compiler/bun/router": "./compiler/bun/router.js",
33
35
  "./compiler/bun/aot": "./compiler/bun/aot.js",
34
- "./utils/static-headers": "./utils/static-headers.js",
35
- "./build/rolldown": "./build/rolldown.js",
36
- "./compiler/jit": "./compiler/jit.js"
36
+ "./compiler/aot": "./compiler/aot.js",
37
+ "./build/rolldown": "./build/rolldown.js"
37
38
  }
38
39
  }
@@ -1,4 +0,0 @@
1
- import { type Options } from "secure-headers";
2
- import type { MiddlewareTypes } from "../core/middleware.js";
3
- declare const _default: (headers: Options) => MiddlewareTypes<never, {}>;
4
- export default _default;
@@ -1 +0,0 @@
1
- import secureHeaders from"secure-headers";import staticHeaders from"./static-headers.js";export default headers=>staticHeaders(secureHeaders(headers));