Comparing version 0.5.0-exp-230422.2257 to 0.5.0-exp-230424.1141
@@ -1,2 +0,2 @@ | ||
import{parse as e}from"fast-querystring";import{mapEarlyResponse as r,mapResponse as t}from"./handler";import{createValidationError as a,mapPathnameAndQueryRegEx as s}from"./utils";import{mapErrorCode as n}from"./error";let o="AsyncFunction",c=e=>e.constructor.name===o,l=Bun?.Transpiler?new Bun.Transpiler({minifyWhitespace:!0,inline:!0,platform:"bun",allowBunRuntime:!0}):null;export const composeHandler=({method:s,hooks:i,validator:u,handler:d,handleError:f})=>{let p="try {\n",h="GET"!==s||d.constructor.name===o||i.parse.length||i.afterHandle.find(c)||i.beforeHandle.find(c)||i.transform.find(c);if(h){if(p+=` | ||
let e;import{parse as r}from"fast-querystring";import{mapEarlyResponse as t,mapResponse as a}from"./handler";import{createValidationError as s,removeHostnameRegex as n,removeFragmentRegex as o,removePathRegex as c,removeQueryRegex as l}from"./utils";import{mapErrorCode as u}from"./error";let i="AsyncFunction",p=e=>e.constructor.name===i,d=Bun?.Transpiler?new Bun.Transpiler({minifyWhitespace:!0,inline:!0,platform:"bun",allowBunRuntime:!0}):null;export const composeHandler=({method:e,hooks:n,validator:o,handler:c,handleError:l})=>{let f="try {\n",h="GET"!==e||c.constructor.name===i||n.parse.length||n.afterHandle.find(p)||n.beforeHandle.find(p)||n.transform.find(p);if(h){if(f+=` | ||
let contentType = c.request.headers.get('content-type'); | ||
@@ -9,8 +9,8 @@ | ||
} | ||
`,i.parse.length){p+=`used = false | ||
`;for(let e=0;e<i.parse.length;e++){let r=`bo${e}`;p+=`if(!c.request.bodyUsed) { | ||
`,n.parse.length){f+=`used = false | ||
`;for(let e=0;e<n.parse.length;e++){let r=`bo${e}`;f+=`if(!c.request.bodyUsed) { | ||
let ${r} = parse[${e}](c, contentType); | ||
if(${r} instanceof Promise) ${r} = await ${r} | ||
if(${r} !== undefined) { c.body = ${r}; used = true } | ||
}`}p+="if (!used)"}p+=`switch (contentType) { | ||
}`}f+="if (!used)"}f+=`switch (contentType) { | ||
case 'application/json': | ||
@@ -45,36 +45,36 @@ c.body = await c.request.json() | ||
}} | ||
`}if(i?.transform)for(let e=0;e<i.transform.length;e++)p+=i.transform[e].constructor.name===o?`await transform[${e}](c);`:`transform[${e}](c);`;if(u&&(u.headers&&(p+=` | ||
const _header = {} | ||
`}if(n?.transform)for(let e=0;e<n.transform.length;e++)f+=n.transform[e].constructor.name===i?`await transform[${e}](c);`:`transform[${e}](c);`;if(o&&(o.headers&&(f+=` | ||
const h = {} | ||
for (const key of c.request.headers.keys()) | ||
_header[key] = c.request.headers.get(key) | ||
h[key] = c.request.headers.get(key) | ||
if (headers.Check(_header) === false) { | ||
if (headers.Check(h) === false) { | ||
throw createValidationError( | ||
'header', | ||
headers, | ||
_header | ||
h | ||
) | ||
} | ||
`),u.params&&(p+="if(params.Check(c.params) === false) { throw createValidationError('params', params, c.params) }"),u.query&&(p+="if(query.Check(c.query) === false) { throw createValidationError('params', query, c.query) }"),u.body&&(p+="if(body.Check(c.body) === false) { throw createValidationError('body', body, c.body) }")),i?.beforeHandle)for(let e=0;e<i.beforeHandle.length;e++){let r=`be${e}`;if(p+=(i.beforeHandle[e].constructor.name===o?`let ${r} = await beforeHandle[${e}](c); | ||
`),o.params&&(f+="if(params.Check(c.params) === false) { throw createValidationError('params', params, c.params) }"),o.query&&(f+="if(query.Check(c.query) === false) { throw createValidationError('params', query, c.query) }"),o.body&&(f+="if(body.Check(c.body) === false) { throw createValidationError('body', body, c.body) }")),n?.beforeHandle)for(let e=0;e<n.beforeHandle.length;e++){let r=`be${e}`;if(f+=(n.beforeHandle[e].constructor.name===i?`let ${r} = await beforeHandle[${e}](c); | ||
`:`let ${r} = beforeHandle[${e}](c); | ||
`)+`if(${r} !== undefined) { | ||
`,i?.afterHandle)for(let e=0;e<i.afterHandle.length;e++){let t=`af${e}`;p+=(i.afterHandle[e].constructor.name===o?`const ${t} = await afterHandle[${e}](c, ${r}); | ||
`,n?.afterHandle)for(let e=0;e<n.afterHandle.length;e++){let t=`af${e}`;f+=(n.afterHandle[e].constructor.name===i?`const ${t} = await afterHandle[${e}](c, ${r}); | ||
`:`const ${t} = afterHandle[${e}](c, ${r}); | ||
`)+`if(${t} !== undefined) { ${r} = ${t} } | ||
`}u.response&&(p+=`if(response[c.set.status]?.Check(${r}) === false) { throw createValidationError('response', response[c.set.status], ${r}) } | ||
`),p+=`return mapEarlyResponse(${r}, c.set)} | ||
`}if(i?.afterHandle.length){p+=d.constructor.name===o?`let r = await handler(c); | ||
`}o.response&&(f+=`if(response[c.set.status]?.Check(${r}) === false) { throw createValidationError('response', response[c.set.status], ${r}) } | ||
`),f+=`return mapEarlyResponse(${r}, c.set)} | ||
`}if(n?.afterHandle.length){f+=c.constructor.name===i?`let r = await handler(c); | ||
`:`let r = handler(c); | ||
`;for(let e=0;e<i.afterHandle.length;e++){let r=`af${e}`;p+=i.afterHandle[e].constructor.name===o?`let ${r} = await afterHandle[${e}](c, r) | ||
`;for(let e=0;e<n.afterHandle.length;e++){let r=`af${e}`;f+=n.afterHandle[e].constructor.name===i?`let ${r} = await afterHandle[${e}](c, r) | ||
`:`let ${r} = afterHandle[${e}](c, r) | ||
`,u.response?p+=`if(response[c.set.status]?.Check(${r}) === false) { throw createValidationError('response', response[c.set.status], ${r}) } | ||
`,o.response?f+=`if(response[c.set.status]?.Check(${r}) === false) { throw createValidationError('response', response[c.set.status], ${r}) } | ||
${r} = mapEarlyResponse(${r}, c.set) | ||
if(${r}) return ${r}; | ||
`:p+=`if(${r}) return ${r}; | ||
`}u.response&&(p+=`if(response[c.set.status]?.Check(r) === false) { throw createValidationError('response', response[c.set.status], r) } | ||
`),p+=`return mapResponse(r, c.set); | ||
`}else u.response?p+=(d.constructor.name===o?`const r = await handler(c); | ||
`:f+=`if(${r}) return ${r}; | ||
`}o.response&&(f+=`if(response[c.set.status]?.Check(r) === false) { throw createValidationError('response', response[c.set.status], r) } | ||
`),f+=`return mapResponse(r, c.set); | ||
`}else o.response?f+=(c.constructor.name===i?`const r = await handler(c); | ||
`:`const r = handler(c); | ||
`)+`if(response[c.set.status]?.Check(r) === false) { throw createValidationError('response', response[c.set.status], r) } | ||
`+"return mapResponse(r, c.set);":p+=d.constructor.name===o?"return mapResponse(await handler(c), c.set);":"return mapResponse(handler(c), c.set);";p+=` | ||
`+"return mapResponse(r, c.set);":f+=c.constructor.name===i?"return mapResponse(await handler(c), c.set);":"return mapResponse(handler(c), c.set);";f+=` | ||
} catch(error) { | ||
@@ -105,3 +105,3 @@ ${h?"":"return (async () => {"} | ||
${h?"":"})()"} | ||
}`,p=`const { | ||
}`,f=`const { | ||
handler, | ||
@@ -132,7 +132,10 @@ handleError, | ||
return ${h?"async":""} function(c) {${p}}`,l&&(p=l.transformSync(p));let m=Function("hooks",p);return m({handler:d,hooks:i,validator:u,handleError:f,utils:{createValidationError:a,mapResponse:t,mapEarlyResponse:r,mapErrorCode:n,parseQuery:e}})};export const composeGeneralHandler=t=>{let a=Object.keys(t.decorators).length,n=a>0,o=`const { | ||
return ${h?"async":""} function(c) {${f}}`,d&&(f=d.transformSync(f));let m=Function("hooks",f);return m({handler:c,hooks:n,validator:o,handleError:l,utils:{createValidationError:s,mapResponse:a,mapEarlyResponse:t,mapErrorCode:u,parseQuery:r}})};export const composeGeneralHandler=a=>{let s=Object.keys(a.decorators).length,u=s>0;if(e?.[0]===s&&e[1]===a.event.request.length)return Function("data",e?.[2])({app:a,parseQuery:r,mapEarlyResponse:t,removeHostnameRegex:n,removeQueryRegex:l,removePathRegex:c,removeFragmentRegex:o});let i=`const { | ||
app, | ||
parseQuery, | ||
mapPathnameAndQueryRegEx: map, | ||
mapEarlyResponse | ||
${a.event.request.length?"mapEarlyResponse,":""} | ||
removeHostnameRegex: rHost, | ||
removeQueryRegex: rQuery, | ||
removePathRegex: rPath, | ||
removeFragmentRegex: rFrag | ||
} = data | ||
@@ -157,3 +160,3 @@ | ||
return function(request) { | ||
${n?` | ||
${u?` | ||
ctx.set = { | ||
@@ -177,3 +180,3 @@ headers: {}, | ||
${t.event.request.length?` | ||
${a.event.request.length?` | ||
try { | ||
@@ -191,13 +194,16 @@ for (let i = 0; i < app.event.request.length; i++) { | ||
const fracture = map.exec(request.url) | ||
if (fracture[2]) ctx.query = parseQuery(fracture[2]) | ||
${n?"else ctx.query = {}":""} | ||
const p = request.url.replace(rHost, '') | ||
const path = p.replace(rQuery, '').replace(rFrag, '') | ||
const query = p.replace(rPath, '').replace(rFrag, '') | ||
if (query) ctx.query = parseQuery(query) | ||
${u?"else ctx.query = {}":""} | ||
const handle = _static.get(request.method + fracture[1]) | ||
const handle = _static.get(request.method + path) | ||
if (handle) { | ||
${n?"ctx.params = {}":""} | ||
${u?"ctx.params = {}":""} | ||
return handle(ctx) | ||
} else { | ||
const route = router._m(request.method, fracture[1]) ?? router._m('ALL', fracture[1]) | ||
const route = router._m(request.method, path) ?? router._m('ALL', path) | ||
@@ -215,2 +221,2 @@ if (!route) | ||
} | ||
}`;return l&&(o=l.transformSync(o)),Function("data",o)({app:t,parseQuery:e,mapPathnameAndQueryRegEx:s,mapEarlyResponse:r})}; | ||
}`;return d&&(i=d.transformSync(i)),e=[s,a.event.request.length,i],Function("data",i)({app:a,parseQuery:r,mapEarlyResponse:t,removeHostnameRegex:n,removeQueryRegex:l,removePathRegex:c,removeFragmentRegex:o})}; |
@@ -12,2 +12,6 @@ import { TSchema } from '@sinclair/typebox'; | ||
export declare const mapPathnameAndQueryRegEx: RegExp; | ||
export declare const removeHostnameRegex: RegExp; | ||
export declare const removeQueryRegex: RegExp; | ||
export declare const removePathRegex: RegExp; | ||
export declare const removeFragmentRegex: RegExp; | ||
export declare const mergeDeep: <A extends Object = Object, B extends Object = Object>(target: A, source: B) => DeepMergeTwoTypes<A, B>; | ||
@@ -14,0 +18,0 @@ export declare const createValidationError: (type: string, validator: TypeCheck<any>, value: any) => ValidationError; |
@@ -1,1 +0,1 @@ | ||
import{Kind as e}from"@sinclair/typebox";import{TypeCompiler as r}from"@sinclair/typebox/compiler";import{ValidationError as t}from"./validation";export const SCHEMA=Symbol("schema");export const DEFS=Symbol("definitions");export const EXPOSED=Symbol("exposed");export const mergeObjectArray=(e,r)=>[...Array.isArray(e)?e:[e],...Array.isArray(r)?r:[r]];export const mergeHook=(e,r)=>{let t="schema"in e?e.schema:null,o=r&&"schema"in r?r.schema:null;return{schema:t||o?{body:o?.body??t?.body,header:o?.headers??t?.headers,params:o?.params??t?.params,query:o?.query??t?.query,response:o?.response??t?.response,detail:mergeDeep(o?.detail??{},t?.detail??{})}:void 0,transform:mergeObjectArray(e.transform??[],r?.transform??[]),beforeHandle:mergeObjectArray(e.beforeHandle??[],r?.beforeHandle??[]),parse:mergeObjectArray(e.parse??[],r?.parse??[]),afterHandle:mergeObjectArray(e.afterHandle??[],r?.afterHandle??[]),error:mergeObjectArray(e.error??[],r?.error??[])}};export const clone=e=>e;export const mapPathnameAndQueryRegEx=/:\/\/[^/]+([^#?]+)(?:\?([^#]+))?/;let o=e=>e&&"object"==typeof e&&!Array.isArray(e);export const mergeDeep=(e,r)=>{let t=Object.assign({},e);return o(e)&&o(r)&&Object.keys(r).forEach(a=>{o(r[a])&&a in e?t[a]=mergeDeep(e[a],r[a]):Object.assign(t,{[a]:r[a]})}),t};export const createValidationError=(e,r,o)=>{let a=r.Errors(o).First(),n=`Invalid ${e}: '${a?.path?.slice(1)||"root"}'. ${a?.message}`;return new t({cause:n,type:e,validator:r,value:o})};export const getSchemaValidator=(e,t,o=!1)=>{if(!e||"string"==typeof e&&!(e in t))return;let a="string"==typeof e?t[e]:e;return"object"===a.type&&"additionalProperties"in a==!1&&(a.additionalProperties=o),r.Compile(a)};export const getResponseSchemaValidator=(t,o,a=!1)=>{if(!t||"string"==typeof t&&!(t in o))return;let n="string"==typeof t?o[t]:t;if(e in n)return{200:r.Compile(n)};let i={};return Object.keys(n).forEach(t=>{let s=n[t];if("string"==typeof s){if(s in o){let a=o[s];a.type,i[+t]=e in a?r.Compile(a):a}return}"object"===s.type&&"additionalProperties"in s==!1&&(s.additionalProperties=a),i[+t]=e in s?r.Compile(s):s}),i}; | ||
import{Kind as e}from"@sinclair/typebox";import{TypeCompiler as r}from"@sinclair/typebox/compiler";import{ValidationError as t}from"./validation";export const SCHEMA=Symbol("schema");export const DEFS=Symbol("definitions");export const EXPOSED=Symbol("exposed");export const mergeObjectArray=(e,r)=>[...Array.isArray(e)?e:[e],...Array.isArray(r)?r:[r]];export const mergeHook=(e,r)=>{let t="schema"in e?e.schema:null,o=r&&"schema"in r?r.schema:null;return{schema:t||o?{body:o?.body??t?.body,header:o?.headers??t?.headers,params:o?.params??t?.params,query:o?.query??t?.query,response:o?.response??t?.response,detail:mergeDeep(o?.detail??{},t?.detail??{})}:void 0,transform:mergeObjectArray(e.transform??[],r?.transform??[]),beforeHandle:mergeObjectArray(e.beforeHandle??[],r?.beforeHandle??[]),parse:mergeObjectArray(e.parse??[],r?.parse??[]),afterHandle:mergeObjectArray(e.afterHandle??[],r?.afterHandle??[]),error:mergeObjectArray(e.error??[],r?.error??[])}};export const clone=e=>e;export const mapPathnameAndQueryRegEx=/:\/\/[^/]+([^#?]+)(?:\?([^#]+))?/;export const removeHostnameRegex=/^[a-z]+?:\/\/[^/]+/;export const removeQueryRegex=/\?.*?([\w=&%]+)/;export const removePathRegex=/^[^?]*(\?|$)/;export const removeFragmentRegex=/#(\S+)/;let o=e=>e&&"object"==typeof e&&!Array.isArray(e);export const mergeDeep=(e,r)=>{let t=Object.assign({},e);return o(e)&&o(r)&&Object.keys(r).forEach(a=>{o(r[a])&&a in e?t[a]=mergeDeep(e[a],r[a]):Object.assign(t,{[a]:r[a]})}),t};export const createValidationError=(e,r,o)=>{let a=r.Errors(o).First(),n=`Invalid ${e}: '${a?.path?.slice(1)||"root"}'. ${a?.message}`;return new t({cause:n,type:e,validator:r,value:o})};export const getSchemaValidator=(e,t,o=!1)=>{if(!e||"string"==typeof e&&!(e in t))return;let a="string"==typeof e?t[e]:e;return"object"===a.type&&"additionalProperties"in a==!1&&(a.additionalProperties=o),r.Compile(a)};export const getResponseSchemaValidator=(t,o,a=!1)=>{if(!t||"string"==typeof t&&!(t in o))return;let n="string"==typeof t?o[t]:t;if(e in n)return{200:r.Compile(n)};let s={};return Object.keys(n).forEach(t=>{let i=n[t];if("string"==typeof i){if(i in o){let a=o[i];a.type,s[+t]=e in a?r.Compile(a):a}return}"object"===i.type&&"additionalProperties"in i==!1&&(i.additionalProperties=a),s[+t]=e in i?r.Compile(i):i}),s}; |
{ | ||
"name": "elysia", | ||
"description": "Fast, and friendly Bun web framework", | ||
"version": "0.5.0-exp-230422.2257", | ||
"version": "0.5.0-exp-230424.1141", | ||
"author": { | ||
@@ -6,0 +6,0 @@ "name": "saltyAom", |
@@ -6,3 +6,9 @@ import { Elysia } from '.' | ||
import { mapEarlyResponse, mapResponse } from './handler' | ||
import { createValidationError, mapPathnameAndQueryRegEx } from './utils' | ||
import { | ||
createValidationError, | ||
removeHostnameRegex, | ||
removeFragmentRegex, | ||
removePathRegex, | ||
removeQueryRegex | ||
} from './utils' | ||
import { mapErrorCode } from './error' | ||
@@ -124,11 +130,11 @@ | ||
fnLiteral += ` | ||
const _header = {} | ||
const h = {} | ||
for (const key of c.request.headers.keys()) | ||
_header[key] = c.request.headers.get(key) | ||
h[key] = c.request.headers.get(key) | ||
if (headers.Check(_header) === false) { | ||
if (headers.Check(h) === false) { | ||
throw createValidationError( | ||
'header', | ||
headers, | ||
_header | ||
h | ||
) | ||
@@ -296,2 +302,6 @@ } | ||
// This is a cached for composeGeneralHandler generated function literal | ||
// to prevent minimize transpiler work | ||
let generalCached: [number, number, string] | undefined | ||
export const composeGeneralHandler = (app: Elysia<any>) => { | ||
@@ -302,7 +312,27 @@ // @ts-ignore | ||
if ( | ||
generalCached?.[0] === totalDecorators && | ||
generalCached[1] === app.event.request.length | ||
) | ||
return Function( | ||
'data', | ||
generalCached?.[2] | ||
)({ | ||
app, | ||
parseQuery, | ||
mapEarlyResponse, | ||
removeHostnameRegex, | ||
removeQueryRegex, | ||
removePathRegex, | ||
removeFragmentRegex | ||
}) | ||
let fnLiteral = `const { | ||
app, | ||
parseQuery, | ||
mapPathnameAndQueryRegEx: map, | ||
mapEarlyResponse | ||
${app.event.request.length ? 'mapEarlyResponse,' : ''} | ||
removeHostnameRegex: rHost, | ||
removeQueryRegex: rQuery, | ||
removePathRegex: rPath, | ||
removeFragmentRegex: rFrag | ||
} = data | ||
@@ -367,7 +397,10 @@ | ||
const fracture = map.exec(request.url) | ||
if (fracture[2]) ctx.query = parseQuery(fracture[2]) | ||
const p = request.url.replace(rHost, '') | ||
const path = p.replace(rQuery, '').replace(rFrag, '') | ||
const query = p.replace(rPath, '').replace(rFrag, '') | ||
if (query) ctx.query = parseQuery(query) | ||
${hasDecorators ? `else ctx.query = {}` : ''} | ||
const handle = _static.get(request.method + fracture[1]) | ||
const handle = _static.get(request.method + path) | ||
if (handle) { | ||
@@ -378,3 +411,3 @@ ${hasDecorators ? `ctx.params = {}` : ''} | ||
} else { | ||
const route = router._m(request.method, fracture[1]) ?? router._m('ALL', fracture[1]) | ||
const route = router._m(request.method, path) ?? router._m('ALL', path) | ||
@@ -396,2 +429,4 @@ if (!route) | ||
generalCached = [totalDecorators, app.event.request.length, fnLiteral] | ||
return Function( | ||
@@ -403,5 +438,8 @@ 'data', | ||
parseQuery, | ||
mapPathnameAndQueryRegEx, | ||
mapEarlyResponse | ||
mapEarlyResponse, | ||
removeHostnameRegex, | ||
removeQueryRegex, | ||
removePathRegex, | ||
removeFragmentRegex | ||
}) | ||
} |
@@ -67,4 +67,14 @@ import { Kind, TSchema } from '@sinclair/typebox' | ||
/** | ||
* @deprecated | ||
* | ||
* should be removed in 0.6 | ||
*/ | ||
export const mapPathnameAndQueryRegEx = /:\/\/[^/]+([^#?]+)(?:\?([^#]+))?/ | ||
export const removeHostnameRegex = /^[a-z]+?:\/\/[^/]+/ | ||
export const removeQueryRegex = /\?.*?([\w=&%]+)/ | ||
export const removePathRegex = /^[^?]*(\?|$)/ | ||
export const removeFragmentRegex = /#(\S+)/; | ||
const isObject = (item: any): item is Object => | ||
@@ -71,0 +81,0 @@ item && typeof item === 'object' && !Array.isArray(item) |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Uses eval
Supply chain riskPackage uses dynamic code execution (e.g., eval()), which is a dangerous practice. This can prevent the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Uses eval
Supply chain riskPackage uses dynamic code execution (e.g., eval()), which is a dangerous practice. This can prevent the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 1 instance in 1 package
206140
5389
3