@andrewcaires/express 2.0.0 → 2.0.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/dist/index.cjs.js +2 -2
- package/dist/index.d.ts +16 -2
- package/dist/index.esm.js +2 -2
- package/package.json +4 -4
package/dist/index.cjs.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* @andrewcaires/express v2.0.
|
|
2
|
+
* @andrewcaires/express v2.0.2
|
|
3
3
|
* Decorators for express
|
|
4
4
|
* (c) 2026 Andrew Caires
|
|
5
5
|
* @license: MIT
|
|
6
6
|
*/
|
|
7
|
-
"use strict";var e=require("@andrewcaires/decorator"),t=require("@andrewcaires/node"),s=require("@andrewcaires/utils.js"),r=require("compression"),o=require("cookie-parser"),i=require("cors"),n=require("express"),a=require("express-session"),p=require("fs"),u=require("http"),h=require("https"),l=require("net"),d=require("path"),E=require("request-ip"),c=require("multer");function _(e){var t=Object.create(null);return e&&Object.keys(e).forEach(function(s){if("default"!==s){var r=Object.getOwnPropertyDescriptor(e,s);Object.defineProperty(t,s,r.get?r:{enumerable:!0,get:function(){return e[s]}})}}),t.default=e,Object.freeze(t)}var T=_(u),O=_(h);function v(e,t,s,r){return new(s||(s=Promise))(function(o,i){function n(e){try{p(r.next(e))}catch(e){i(e)}}function a(e){try{p(r.throw(e))}catch(e){i(e)}}function p(e){var t;e.done?o(e.value):(t=e.value,t instanceof s?t:new s(function(e){e(t)})).then(n,a)}p((r=r.apply(e,t||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;class R{}R.CONTINUE=100,R.SWITCHING_PROTOCOLS=101,R.PROCESSING=102,R.OK=200,R.CREATED=201,R.ACCEPTED=202,R.NON_AUTHORITATIVE_INFORMATION=203,R.NO_CONTENT=204,R.RESET_CONTENT=205,R.PARTIAL_CONTENT=206,R.MULTI_STATUS=207,R.ALREADY_REPORTED=208,R.IM_USED=226,R.MULTIPLE_CHOICES=300,R.MOVED_PERMANENTLY=301,R.FOUND=302,R.SEE_OTHER=303,R.NOT_MODIFIED=304,R.USE_PROXY=305,R.TEMPORARY_REDIRECT=307,R.PERMANENT_REDIRECT=308,R.BAD_REQUEST=400,R.UNAUTHORIZED=401,R.PAYMENT_REQUIRED=402,R.FORBIDDEN=403,R.NOT_FOUND=404,R.METHOD_NOT_ALLOWED=405,R.NOT_ACCEPTABLE=406,R.PROXY_AUTHENTICATION_REQUIRED=407,R.REQUEST_TIMEOUT=408,R.CONFLICT=409,R.GONE=410,R.LENGTH_REQUIRED=411,R.PRECONDITION_FAILED=412,R.PAYLOAD_TOO_LARGE=413,R.REQUEST_URI_TOO_LONG=414,R.UNSUPPORTED_MEDIA_TYPE=415,R.REQUESTED_RANGE_NOT_SATISFIABLE=416,R.EXPECTATION_FAILED=417,R.IM_A_TEAPOT=418,R.MISDIRECTED_REQUEST=421,R.UNPROCESSABLE_ENTITY=422,R.LOCKED=423,R.FAILED_DEPENDENCY=424,R.UPGRADE_REQUIRED=426,R.PRECONDITION_REQUIRED=428,R.TOO_MANY_REQUESTS=429,R.REQUEST_HEADER_FIELDS_TOO_LARGE=431,R.CONNECTION_CLOSED_WITHOUT_RESPONSE=444,R.UNAVAILABLE_FOR_LEGAL_REASONS=451,R.CLIENT_CLOSED_REQUEST=499,R.INTERNAL_SERVER_ERROR=500,R.NOT_IMPLEMENTED=501,R.BAD_GATEWAY=502,R.SERVICE_UNAVAILABLE=503,R.GATEWAY_TIMEOUT=504,R.HTTP_VERSION_NOT_SUPPORTED=505,R.VARIANT_ALSO_NEGOCIATES=506,R.INSUFFICIENT_STORAGE=507,R.LOOP_DETECTED=508,R.NOT_EXTENDED=510,R.NETWORK_AUTHENTICATION_REQUIRED=511,R.NETWORK_CONNECTION_TIMEOUT_ERROR=599;class x extends Error{constructor(e,t=R.INTERNAL_SERVER_ERROR){super(e),this.status=t}}class N extends x{constructor(e){super(e,R.UNPROCESSABLE_ENTITY)}}class A{constructor(e,t,s,r,o){this.req=e,this.res=t,this.next=s,this.app=r,this.controller=o}cache(e){const t=[];e.private?t.push("private"):e.public&&t.push("public"),e.noStore&&(e.noCache=!0,t.push("no-store")),e.noCache&&(e.maxAge=0,delete e.sMaxAge,t.push("no-cache")),e.noTransform&&t.push("no-transform"),e.proxyRevalidate&&t.push("proxy-revalidate"),e.mustRevalidate?t.push("must-revalidate"):e.noCache||(s.isNumber(e.staleIfError)&&t.push(`stale-if-error=${e.staleIfError}`),s.isNumber(e.staleWhileRevalidate)&&t.push(`stale-while-revalidate=${e.staleWhileRevalidate}`)),s.isNumber(e.maxAge)&&t.push(`max-age=${e.maxAge}`),s.isNumber(e.sMaxAge)&&t.push(`s-maxage=${e.sMaxAge}`),t.length&&(this.res.setHeader("Cache-Control",t.join(",")),e.noCache&&s.forEachKey({"Surrogate-Control":"no-store",Pragma:"no-cache",ETag:"false",Expires:"0"},(e,t)=>this.res.setHeader(t,e)))}close(e){this.res.headersSent||this.res.json(e||this.storage)}cookie(e,t,r){s.isUndefined(t)?this.res.clearCookie(e):this.res.cookie(e,t,null!=r?r:{})}destroy(e){var t;e&&this.error(e),null===(t=this.res.socket)||void 0===t||t.destroy(e)}error(e){var t;let s=null!==(t=e.toString())&&void 0!==t?t:"",r=R.INTERNAL_SERVER_ERROR;e instanceof Error&&(s=e.message,e instanceof x&&(r=e.status)),this.send(r,{error:s})}file(e){this.res.headersSent||(this.status(R.OK),this.res.sendFile(d.resolve(e)))}getIp(){return E.getClientIp(this.req)||"0.0.0.0"}getUrl(){return`${this.req.protocol}://${this.req.get("host")}${this.req.originalUrl}`}json(e){this.send(R.OK,e)}prepare(e,t){this.res.headersSent||(this.status(e),this.storage=t)}send(e,t){this.res.headersSent||(this.status(e),this.res.json(t))}status(e){return e&&this.res.status(e),this.res.statusCode}success(e){this.send(R.OK,{message:e})}}class m{static extends(t){return e.metadata(m.EXTENDS,t,[])}static middleware(t){return e.metadata(m.MIDDLEWARE,t,[])}static parameters(t){return e.metadata(m.PARAMETERS,t,[])}static path(t,s){return e.metadata(m.PATH,t,s)}static routers(t){return e.metadata(m.ROUTERS,t,[])}}m.EXTENDS=Symbol("EXTENDS"),m.MIDDLEWARE=Symbol("MIDDLEWARE"),m.PARAMETERS=Symbol("PARAMETERS"),m.PATH=Symbol("PATH"),m.ROUTERS=Symbol("ROUTERS");class I extends s.EventEmitter{get controllers(){return this._controllers}get instance(){return this._app}get router(){return this._router}get server(){return this._server}constructor(t,u){var h,l;super(),this._app=n(),this._options={},this._base=n.Router(),this._router=n.Router(),this._controllers=[],this._controllers.push(...t.map(t=>s.isConstructor(t)?new t(...e.getInjectionArgs(t)):t)),this._options=s.merge({},{cross:!1,hybrid:!1,path:"/",port:3e3,session:{secret:"yoursecret",resave:!0,saveUninitialized:!1,cookie:{maxAge:864e5}}},null!=u?u:{}),this._app.use(n.json(this._options.json)),this._app.disable("x-powered-by"),this._app.use(n.urlencoded({extended:!0})),this._options.cross&&this._app.use(i(s.isObject(this._options.cross)?this._options.cross:{})),this._app.use(r(this._options.compression)),this._app.use(o(null===(h=this._options.cookie)||void 0===h?void 0:h.secret,this._options.cookie)),this._app.use(a(this._options.session)),this.init(),this._app.use(this._router);const E=(null===(l=this._options.path)||void 0===l?void 0:l.length)?this._options.path:"/";if(this._app.use(E,this._base),this._app.all(E+"/*path",(e,t)=>{this._options.redirect?t.redirect(this._options.redirect):(t.status(R.NOT_FOUND),t.json({message:"INVALID API"}))}),this._options.public){const e=d.resolve(this._options.public);p.existsSync(e)&&this._app.use(n.static(e)),this._app.get("*path",(t,s)=>{p.existsSync(e)?s.sendFile(e+"/index.html"):this._options.notfound?s.redirect(this._options.notfound):(s.status(R.NOT_FOUND),s.json({message:'FILE "index.html" NOT FOUND'}))})}else this._app.all("*path",(e,t)=>{this._options.redirect?t.redirect(this._options.redirect):(t.status(R.NOT_FOUND),t.json({message:"INVALID API"}))});this._controllers.forEach(e=>{const t=n.Router(),r=this._middlewares(e),o=m.parameters(e);this._extends(e).forEach(e=>{r.push(...this._middlewares(e)),o.push(...m.parameters(e))}),m.routers(e).forEach(i=>{const n=i.propertyKey.toString();if(s.isFunction(e[n])){if(!s.isFunction(t[i.method]))return this._notFound(i.method);const a=this._handles(e,n,r,o);return t[i.method](i.path,...a,(t,r,i)=>v(this,void 0,void 0,function*(){const a=new A(t,r,i,this,e),p=this._args(a,this._indexes(n,o)),u=yield e[n](...p);a.close(s.isArray(u)||s.isObject(u)?u:void 0)}))}this._notFound(`${e.name}.${n}`)}),this._extends(e).forEach(i=>{m.routers(i).forEach(i=>{const n=i.propertyKey.toString();if(s.isFunction(e[n])){if(!s.isFunction(t[i.method]))return this._notFound(i.method);const a=this._handles(e,n,r,o);return t[i.method](i.path,...a,(t,r,i)=>v(this,void 0,void 0,function*(){const a=new A(t,r,i,this,e),p=this._args(a,this._indexes(n,o)),u=yield e[n](...p);a.close(s.isArray(u)||s.isObject(u)?u:void 0)}))}this._notFound(`${e.constructor.name}.${n}`)})}),this._base.use(m.path(e,"/"),t)})}init(){}error(e,s){t.Log.error(e)}log(e,s){t.Log.info(e)}_args(e,t,s){const r=[],o={ctx:e,key:"",app:this,argument:s};return t.forEach(e=>{r[e.parameterIndex]=e.callback(Object.assign(Object.assign({},o),{key:e.key}))}),r}_handles(e,t,r,o){return r.filter(e=>e.propertyKey==t).map(t=>{if(t.callback!=s.noop){const r=this._indexes(t.method,o);return(o,i,n)=>v(this,void 0,void 0,function*(){const a=new A(o,i,n,this,e),p=s.isFunction(t.argument)?t.argument(a):t.argument,u=yield t.callback.call(e,...this._args(a,r,p));(s.isArray(u)||s.isObject(u))&&a.close(u)})}this._notFound(t.method)}).filter(s.isFunction)}_extends(e){return m.extends(e).reduce((e,t)=>(e.push(t,...this._extends(t)),e),[]).filter((e,t,s)=>s.indexOf(e)===t)}_indexes(e,t){return t.filter(t=>t.propertyKey==e)}_middlewares(e){return[...m.middleware(e)].reverse()}_notFound(e){this.error(new Error(`Router "${e}" not found`),"express")}_port(e){return`Server listening on port ${e}`}listen(){return v(this,void 0,void 0,function*(){if(this._options.cert&&this._options.key||(this._server=T.createServer(this._app),this._server.listen(this._options.port,()=>this.log(this._port(this._options.port),"express"))),!this._server){const e=T.createServer((e,t)=>{const s=80==this._options.port?":80":"";t.writeHead(R.MOVED_PERMANENTLY,{Location:`https://${e.headers.host}${s}${e.url}`}),t.end()}),t=O.createServer({key:this._options.key,cert:this._options.cert},this._app);if(this._options.hybrid){new l.Server(s=>{s.once("data",r=>{s.pause(),s.unshift(r),(22===r[0]?t:e).emit("connection",s),process.nextTick(()=>s.resume())})}).listen(this._options.port,()=>this.log(this._port(this._options.port),"express")),this._server=t}this._server||(443==this._options.port&&e.listen(80,()=>this.log(this._port(80),"express")),t.listen(this._options.port,()=>this.log(this._port(this._options.port),"express")),this._server=t)}})}}var S;exports.Methods=void 0,(S=exports.Methods||(exports.Methods={})).ALL="all",S.GET="get",S.POST="post",S.PUT="put",S.HEAD="head",S.DELETE="delete",S.OPTIONS="options",S.PATCH="patch";const D=e=>t=>(s,r)=>{m.routers(s).push({method:e,path:(null==t?void 0:t.length)?t:"/",propertyKey:r})},g=D(exports.Methods.ALL),f=D(exports.Methods.DELETE),y=D(exports.Methods.GET),L=D(exports.Methods.HEAD),U=D(exports.Methods.OPTIONS),C=D(exports.Methods.PATCH),P=D(exports.Methods.POST),F=D(exports.Methods.PUT),M=e=>t=>(s,r,o)=>{m.parameters(s).push({callback:e,key:t,propertyKey:r,parameterIndex:o})},b=M(({app:e})=>e),k=M(({argument:e})=>e),q=(e,t)=>s.isUndefined(t)?e:e[t],w=M(({ctx:e,key:t})=>{var s,r;return q(null!==(r=null===(s=e.req)||void 0===s?void 0:s.body)&&void 0!==r?r:{},t)}),j=M(({ctx:e,key:t})=>{var s,r;return q(null!==(r=null===(s=e.req)||void 0===s?void 0:s.cookies)&&void 0!==r?r:{},t)}),H=M(({ctx:e})=>e),$=M(({ctx:e})=>{var t,s;return null!==(s=null===(t=e.req)||void 0===t?void 0:t.files)&&void 0!==s?s:{}}),G=M(({ctx:e,key:t})=>{var s,r;return q(null!==(r=null===(s=e.req)||void 0===s?void 0:s.headers)&&void 0!==r?r:{},t)}),K=M(({ctx:e,key:t})=>{var s,r;return q(null!==(r=null===(s=e.req)||void 0===s?void 0:s.params)&&void 0!==r?r:{},t)}),V=M(({ctx:e,key:t})=>{var s,r,o;return String(null!==(o=q(null!==(r=null===(s=e.req)||void 0===s?void 0:s.query)&&void 0!==r?r:{},t))&&void 0!==o?o:"")}),Y=M(({ctx:e})=>{var t;return null===(t=e.req)||void 0===t?void 0:t.session}),Q=(e,t)=>(r,o)=>{const i=s.uuidv7();H()(r,i,0),m.middleware(r).push({method:i,argument:t,propertyKey:o,callback:e})},W=e=>{var t;return(null===(t=e.split(".").pop())||void 0===t?void 0:t.toLowerCase())||"bin"},B=(e,t)=>{var s;return null!==(s=e[t])&&void 0!==s?s:null},X=(e,t)=>{const r=s.uuidv7()+"."+t;return p.existsSync(d.join(e,r))?X(e,t):r};exports.All=g,exports.App=b,exports.Application=I,exports.Argument=k,exports.Body=w,exports.Cache=e=>(t,s,r)=>{Q(t=>{t.cache(Object.assign({},e)),t.next()})(t,s,r)},exports.Context=A,exports.Controller=e=>t=>{m.path(t,(null==e?void 0:e.length)?e:"/")},exports.Cookies=j,exports.Ctx=H,exports.Delete=f,exports.Extends=e=>t=>{m.extends(t).push(e)},exports.Files=$,exports.Get=y,exports.Head=L,exports.Headers=G,exports.Metadata=m,exports.Middleware=(e,t)=>(r,o)=>{let i=s.noop;if(s.isString(o)){const t=r;s.isFunction(t[e])&&(i=t[e])}m.middleware(r).push({method:e,argument:t,propertyKey:o,callback:i})},exports.NotFoundError=class extends x{constructor(e="Record not found"){super(e,R.NOT_FOUND)}},exports.Options=U,exports.Params=K,exports.Parse=e=>{const t=s.Validation.object(s.isFunction(e)?e(s.Validation):e).parse();return(e,s,r)=>{Q(e=>v(void 0,void 0,void 0,function*(){const{error:s,message:r,value:o}=yield t.validateAsync(e.req.body);if(s)return e.error(new N(null!=r?r:s));e.req.body=o,e.next()}))(e,s,r)}},exports.Patch=C,exports.Post=P,exports.Put=F,exports.Query=V,exports.ResponseError=x,exports.Session=Y,exports.Status=R,exports.UnauthorizedError=class extends x{constructor(e="Unauthorized"){super(e,R.UNAUTHORIZED)}},exports.Upload=e=>{const t=s.merge({},e),r=c.diskStorage({destination(e,s,r){var o;const i=B(t,s.fieldname);r(null,null!==(o=null==i?void 0:i.path)&&void 0!==o?o:"./")},filename(e,s,r){var o;const i=B(t,s.fieldname);r(null,X(null!==(o=null==i?void 0:i.path)&&void 0!==o?o:"./",W(s.originalname)))}}),o=Math.max(...Object.values(t).map(e=>{var t;return null!==(t=e.size)&&void 0!==t?t:0})),i=c({storage:r,fileFilter(e,s,r){var o;const i=B(t,s.fieldname);return i?((e,t)=>!t.length||t.includes(W(e.originalname))||t.includes(e.mimetype.toLowerCase()))(s,null!==(o=null==i?void 0:i.types)&&void 0!==o?o:[])?void r(null,!0):r(new Error(`FILE TYPE NOT ALLOWED FOR "${s.fieldname}"`)):r(new Error(`UPLOAD FIELD "${s.fieldname}" IS NOT CONFIGURED`))},limits:{fileSize:1024*o*1024}}).fields(Object.keys(t).map(e=>{var s,r;return{name:e,maxCount:null!==(r=null===(s=t[e])||void 0===s?void 0:s.count)&&void 0!==r?r:1}}));return(e,t,s)=>{Q(e=>{i(e.req,e.res,t=>{if(t)return"LIMIT_UNEXPECTED_FILE"==t.code&&(t.message=`FIELD "${t.field}" EXCEEDS MAX SIZE`),e.destroy(t);e.next()})})(e,t,s)}},exports.Use=Q,exports.ValidationError=N,exports.methodFactory=D,exports.parameterFactory=M;
|
|
7
|
+
"use strict";var e=require("@andrewcaires/decorator"),t=require("@andrewcaires/node"),r=require("@andrewcaires/utils.js"),s=require("compression"),o=require("cookie-parser"),i=require("cors"),n=require("express"),a=require("express-session"),l=require("fs"),u=require("http"),d=require("https"),p=require("net"),h=require("path"),E=require("request-ip"),c=require("multer");function _(e){var t=Object.create(null);return e&&Object.keys(e).forEach(function(r){if("default"!==r){var s=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,s.get?s:{enumerable:!0,get:function(){return e[r]}})}}),t.default=e,Object.freeze(t)}var v=_(u),T=_(d);function O(e,t,r,s){return new(r||(r=Promise))(function(o,i){function n(e){try{l(s.next(e))}catch(e){i(e)}}function a(e){try{l(s.throw(e))}catch(e){i(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r(function(e){e(t)})).then(n,a)}l((s=s.apply(e,t||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;class R{}R.CONTINUE=100,R.SWITCHING_PROTOCOLS=101,R.PROCESSING=102,R.OK=200,R.CREATED=201,R.ACCEPTED=202,R.NON_AUTHORITATIVE_INFORMATION=203,R.NO_CONTENT=204,R.RESET_CONTENT=205,R.PARTIAL_CONTENT=206,R.MULTI_STATUS=207,R.ALREADY_REPORTED=208,R.IM_USED=226,R.MULTIPLE_CHOICES=300,R.MOVED_PERMANENTLY=301,R.FOUND=302,R.SEE_OTHER=303,R.NOT_MODIFIED=304,R.USE_PROXY=305,R.TEMPORARY_REDIRECT=307,R.PERMANENT_REDIRECT=308,R.BAD_REQUEST=400,R.UNAUTHORIZED=401,R.PAYMENT_REQUIRED=402,R.FORBIDDEN=403,R.NOT_FOUND=404,R.METHOD_NOT_ALLOWED=405,R.NOT_ACCEPTABLE=406,R.PROXY_AUTHENTICATION_REQUIRED=407,R.REQUEST_TIMEOUT=408,R.CONFLICT=409,R.GONE=410,R.LENGTH_REQUIRED=411,R.PRECONDITION_FAILED=412,R.PAYLOAD_TOO_LARGE=413,R.REQUEST_URI_TOO_LONG=414,R.UNSUPPORTED_MEDIA_TYPE=415,R.REQUESTED_RANGE_NOT_SATISFIABLE=416,R.EXPECTATION_FAILED=417,R.IM_A_TEAPOT=418,R.MISDIRECTED_REQUEST=421,R.UNPROCESSABLE_ENTITY=422,R.LOCKED=423,R.FAILED_DEPENDENCY=424,R.UPGRADE_REQUIRED=426,R.PRECONDITION_REQUIRED=428,R.TOO_MANY_REQUESTS=429,R.REQUEST_HEADER_FIELDS_TOO_LARGE=431,R.CONNECTION_CLOSED_WITHOUT_RESPONSE=444,R.UNAVAILABLE_FOR_LEGAL_REASONS=451,R.CLIENT_CLOSED_REQUEST=499,R.INTERNAL_SERVER_ERROR=500,R.NOT_IMPLEMENTED=501,R.BAD_GATEWAY=502,R.SERVICE_UNAVAILABLE=503,R.GATEWAY_TIMEOUT=504,R.HTTP_VERSION_NOT_SUPPORTED=505,R.VARIANT_ALSO_NEGOCIATES=506,R.INSUFFICIENT_STORAGE=507,R.LOOP_DETECTED=508,R.NOT_EXTENDED=510,R.NETWORK_AUTHENTICATION_REQUIRED=511,R.NETWORK_CONNECTION_TIMEOUT_ERROR=599;class x extends Error{constructor(e,t=R.INTERNAL_SERVER_ERROR){super(e),this.status=t}}class N extends x{constructor(e){super(e,R.UNPROCESSABLE_ENTITY)}}class A{constructor(e,t,r,s,o){this.req=e,this.res=t,this.next=r,this.app=s,this.controller=o}cache(e){const t=[];e.private?t.push("private"):e.public&&t.push("public"),e.noStore&&(e.noCache=!0,t.push("no-store")),e.noCache&&(e.maxAge=0,delete e.sMaxAge,t.push("no-cache")),e.noTransform&&t.push("no-transform"),e.proxyRevalidate&&t.push("proxy-revalidate"),e.mustRevalidate?t.push("must-revalidate"):e.noCache||(r.isNumber(e.staleIfError)&&t.push(`stale-if-error=${e.staleIfError}`),r.isNumber(e.staleWhileRevalidate)&&t.push(`stale-while-revalidate=${e.staleWhileRevalidate}`)),r.isNumber(e.maxAge)&&t.push(`max-age=${e.maxAge}`),r.isNumber(e.sMaxAge)&&t.push(`s-maxage=${e.sMaxAge}`),t.length&&(this.res.setHeader("Cache-Control",t.join(",")),e.noCache&&r.forEachKey({"Surrogate-Control":"no-store",Pragma:"no-cache",ETag:"false",Expires:"0"},(e,t)=>this.res.setHeader(t,e)))}close(e){this.res.headersSent||this.res.json(e||this.storage)}cookie(e,t,s){r.isUndefined(t)?this.res.clearCookie(e):this.res.cookie(e,t,null!=s?s:{})}destroy(e){var t;e&&this.error(e),null===(t=this.res.socket)||void 0===t||t.destroy(e)}error(e){var t;let r=null!==(t=e.toString())&&void 0!==t?t:"",s=R.INTERNAL_SERVER_ERROR;e instanceof Error&&(r=e.message,e instanceof x&&(s=e.status)),this.send(s,{error:r})}file(e){this.res.headersSent||(this.status(R.OK),this.res.sendFile(h.resolve(e)))}getBody(){var e,t;return null!==(t=null===(e=this.req)||void 0===e?void 0:e.body)&&void 0!==t?t:{}}getBodyValue(e){var t;return null===(t=this.req.body)||void 0===t?void 0:t[e]}getCookie(e){var t,r,s;return null!==(s=null===(r=null===(t=this.req.cookies)||void 0===t?void 0:t[e])||void 0===r?void 0:r.toString())&&void 0!==s?s:""}getCookies(){var e;return null!==(e=this.req.cookies)&&void 0!==e?e:{}}getHeader(e){var t,r,s;return null!==(s=null===(r=null===(t=this.req)||void 0===t?void 0:t.header(e))||void 0===r?void 0:r.toString())&&void 0!==s?s:""}getHeaders(){var e,t;return null!==(t=null===(e=this.req)||void 0===e?void 0:e.headers)&&void 0!==t?t:{}}getIp(){return E.getClientIp(this.req)||"0.0.0.0"}getQuery(e){var t;return null===(t=this.req.query)||void 0===t?void 0:t[e]}getQueries(){var e,t;return null!==(t=null===(e=this.req)||void 0===e?void 0:e.query)&&void 0!==t?t:{}}getParam(e){var t,r,s;return null!==(s=null===(r=null===(t=this.req.params)||void 0===t?void 0:t[e])||void 0===r?void 0:r.toString())&&void 0!==s?s:""}getParams(){var e,t;return null!==(t=null===(e=this.req)||void 0===e?void 0:e.params)&&void 0!==t?t:{}}getUrl(){return`${this.req.protocol}://${this.req.get("host")}${this.req.originalUrl}`}json(e){this.send(R.OK,e)}prepare(e,t){this.res.headersSent||(this.status(e),this.storage=t)}send(e,t){this.res.headersSent||(this.status(e),this.res.json(t))}status(e){return e&&this.res.status(e),this.res.statusCode}success(e){this.send(R.OK,{message:e})}}class m{static extends(t){return e.metadata(m.EXTENDS,t,[])}static middleware(t){return e.metadata(m.MIDDLEWARE,t,[])}static parameters(t){return e.metadata(m.PARAMETERS,t,[])}static path(t,r){return e.metadata(m.PATH,t,r)}static routers(t){return e.metadata(m.ROUTERS,t,[])}}m.EXTENDS=Symbol("EXTENDS"),m.MIDDLEWARE=Symbol("MIDDLEWARE"),m.PARAMETERS=Symbol("PARAMETERS"),m.PATH=Symbol("PATH"),m.ROUTERS=Symbol("ROUTERS");class I extends r.EventEmitter{get controllers(){return this._controllers}get instance(){return this._app}get router(){return this._router}get server(){return this._server}constructor(t,u){var d,p;super(),this._app=n(),this._options={},this._base=n.Router(),this._router=n.Router(),this._controllers=[],this._controllers.push(...t.map(t=>r.isConstructor(t)?new t(...e.getInjectionArgs(t)):t)),this._options=r.merge({},{cross:!1,hybrid:!1,path:"/",port:3e3,session:{secret:"yoursecret",resave:!0,saveUninitialized:!1,cookie:{maxAge:864e5}}},null!=u?u:{}),this._app.use(n.json(this._options.json)),this._app.disable("x-powered-by"),this._app.use(n.urlencoded({extended:!0})),this._options.cross&&this._app.use(i(r.isObject(this._options.cross)?this._options.cross:{})),this._app.use(s(this._options.compression)),this._app.use(o(null===(d=this._options.cookie)||void 0===d?void 0:d.secret,this._options.cookie)),this._app.use(a(this._options.session)),this.init(),this._app.use(this._router);const E=(null===(p=this._options.path)||void 0===p?void 0:p.length)?this._options.path:"/";if(this._app.use(E,this._base),this._app.all(E+"/*path",(e,t)=>{this._options.redirect?t.redirect(this._options.redirect):(t.status(R.NOT_FOUND),t.json({message:"INVALID API"}))}),this._options.public){const e=h.resolve(this._options.public);l.existsSync(e)&&this._app.use(n.static(e)),this._app.get("*path",(t,r)=>{l.existsSync(e)?r.sendFile(e+"/index.html"):this._options.notfound?r.redirect(this._options.notfound):(r.status(R.NOT_FOUND),r.json({message:'FILE "index.html" NOT FOUND'}))})}else this._app.all("*path",(e,t)=>{this._options.redirect?t.redirect(this._options.redirect):(t.status(R.NOT_FOUND),t.json({message:"INVALID API"}))});this._controllers.forEach(e=>{const t=n.Router(),s=this._middlewares(e),o=m.parameters(e);this._extends(e).forEach(e=>{s.push(...this._middlewares(e)),o.push(...m.parameters(e))}),m.routers(e).forEach(i=>{const n=i.propertyKey.toString();if(r.isFunction(e[n])){if(!r.isFunction(t[i.method]))return this._notFound(i.method);const a=this._handles(e,n,s,o);return t[i.method](i.path,...a,(t,s,i)=>O(this,void 0,void 0,function*(){const a=new A(t,s,i,this,e),l=this._args(a,this._indexes(n,o)),u=yield e[n](...l);a.close(r.isArray(u)||r.isObject(u)?u:void 0)}))}this._notFound(`${e.name}.${n}`)}),this._extends(e).forEach(i=>{m.routers(i).forEach(i=>{const n=i.propertyKey.toString();if(r.isFunction(e[n])){if(!r.isFunction(t[i.method]))return this._notFound(i.method);const a=this._handles(e,n,s,o);return t[i.method](i.path,...a,(t,s,i)=>O(this,void 0,void 0,function*(){const a=new A(t,s,i,this,e),l=this._args(a,this._indexes(n,o)),u=yield e[n](...l);a.close(r.isArray(u)||r.isObject(u)?u:void 0)}))}this._notFound(`${e.constructor.name}.${n}`)})}),this._base.use(m.path(e,"/"),t)})}init(){}error(e,r){t.Log.error(e)}log(e,r){t.Log.info(e)}_args(e,t,r){const s=[],o={ctx:e,key:"",app:this,argument:r};return t.forEach(e=>{s[e.parameterIndex]=e.callback(Object.assign(Object.assign({},o),{key:e.key}))}),s}_handles(e,t,s,o){return s.filter(e=>e.propertyKey==t).map(t=>{if(t.callback!=r.noop){const s=this._indexes(t.method,o);return(o,i,n)=>O(this,void 0,void 0,function*(){const a=new A(o,i,n,this,e),l=r.isFunction(t.argument)?t.argument(a):t.argument,u=yield t.callback.call(e,...this._args(a,s,l));(r.isArray(u)||r.isObject(u))&&a.close(u)})}this._notFound(t.method)}).filter(r.isFunction)}_extends(e){return m.extends(e).reduce((e,t)=>(e.push(t,...this._extends(t)),e),[]).filter((e,t,r)=>r.indexOf(e)===t)}_indexes(e,t){return t.filter(t=>t.propertyKey==e)}_middlewares(e){return[...m.middleware(e)].reverse()}_notFound(e){this.error(new Error(`Router "${e}" not found`),"express")}_port(e){return`Server listening on port ${e}`}listen(){return O(this,void 0,void 0,function*(){if(this._options.cert&&this._options.key||(this._server=v.createServer(this._app),this._server.listen(this._options.port,()=>this.log(this._port(this._options.port),"express"))),!this._server){const e=v.createServer((e,t)=>{const r=80==this._options.port?":80":"";t.writeHead(R.MOVED_PERMANENTLY,{Location:`https://${e.headers.host}${r}${e.url}`}),t.end()}),t=T.createServer({key:this._options.key,cert:this._options.cert},this._app);if(this._options.hybrid){new p.Server(r=>{r.once("data",s=>{r.pause(),r.unshift(s),(22===s[0]?t:e).emit("connection",r),process.nextTick(()=>r.resume())})}).listen(this._options.port,()=>this.log(this._port(this._options.port),"express")),this._server=t}this._server||(443==this._options.port&&e.listen(80,()=>this.log(this._port(80),"express")),t.listen(this._options.port,()=>this.log(this._port(this._options.port),"express")),this._server=t)}})}}var S;exports.Methods=void 0,(S=exports.Methods||(exports.Methods={})).ALL="all",S.GET="get",S.POST="post",S.PUT="put",S.HEAD="head",S.DELETE="delete",S.OPTIONS="options",S.PATCH="patch";const g=e=>t=>(r,s)=>{m.routers(r).push({method:e,path:(null==t?void 0:t.length)?t:"/",propertyKey:s})},D=g(exports.Methods.ALL),y=g(exports.Methods.DELETE),f=g(exports.Methods.GET),L=g(exports.Methods.HEAD),C=g(exports.Methods.OPTIONS),U=g(exports.Methods.PATCH),P=g(exports.Methods.POST),b=g(exports.Methods.PUT),F=e=>t=>(r,s,o)=>{m.parameters(r).push({callback:e,key:t,propertyKey:s,parameterIndex:o})},M=F(({app:e})=>e),q=F(({argument:e})=>e),k=(e,t)=>r.isUndefined(t)?e:e[t],w=F(({ctx:e,key:t})=>{var r,s;return k(null!==(s=null===(r=e.req)||void 0===r?void 0:r.body)&&void 0!==s?s:{},t)}),j=F(({ctx:e,key:t})=>{var r,s;return k(null!==(s=null===(r=e.req)||void 0===r?void 0:r.cookies)&&void 0!==s?s:{},t)}),H=F(({ctx:e})=>e),$=F(({ctx:e})=>{var t,r;return null!==(r=null===(t=e.req)||void 0===t?void 0:t.files)&&void 0!==r?r:{}}),G=F(({ctx:e,key:t})=>{var r,s;return k(null!==(s=null===(r=e.req)||void 0===r?void 0:r.headers)&&void 0!==s?s:{},t)}),V=F(({ctx:e,key:t})=>{var r,s;return k(null!==(s=null===(r=e.req)||void 0===r?void 0:r.params)&&void 0!==s?s:{},t)}),Q=F(({ctx:e,key:t})=>{var r,s,o;return String(null!==(o=k(null!==(s=null===(r=e.req)||void 0===r?void 0:r.query)&&void 0!==s?s:{},t))&&void 0!==o?o:"")}),K=F(({ctx:e})=>{var t;return null===(t=e.req)||void 0===t?void 0:t.session}),Y=(e,t)=>(s,o)=>{const i=r.uuidv7();H()(s,i,0),m.middleware(s).push({method:i,argument:t,propertyKey:o,callback:e})},W=e=>{var t;return(null===(t=e.split(".").pop())||void 0===t?void 0:t.toLowerCase())||"bin"},B=(e,t)=>{var r;return null!==(r=e[t])&&void 0!==r?r:null},X=(e,t)=>{const s=r.uuidv7()+"."+t;return l.existsSync(h.join(e,s))?X(e,t):s};exports.All=D,exports.App=M,exports.Application=I,exports.Argument=q,exports.Body=w,exports.Cache=e=>(t,r,s)=>{Y(t=>{t.cache(Object.assign({},e)),t.next()})(t,r,s)},exports.Context=A,exports.Controller=e=>t=>{m.path(t,(null==e?void 0:e.length)?e:"/")},exports.Cookies=j,exports.Ctx=H,exports.Delete=y,exports.Extends=e=>t=>{m.extends(t).push(e)},exports.Files=$,exports.Get=f,exports.Head=L,exports.Headers=G,exports.InternalServerError=class extends x{constructor(e="Internal server error"){super(e,R.INTERNAL_SERVER_ERROR)}},exports.Metadata=m,exports.Middleware=(e,t)=>(s,o)=>{let i=r.noop;if(r.isString(o)){const t=s;r.isFunction(t[e])&&(i=t[e])}m.middleware(s).push({method:e,argument:t,propertyKey:o,callback:i})},exports.NotFoundError=class extends x{constructor(e="Record not found"){super(e,R.NOT_FOUND)}},exports.Options=C,exports.Params=V,exports.Parse=e=>{const t=r.Validation.object(r.isFunction(e)?e(r.Validation):e).parse();return(e,r,s)=>{Y(e=>O(void 0,void 0,void 0,function*(){var r,s;const{error:o,message:i,value:n}=yield t.validateAsync(null!==(s=null===(r=e.req)||void 0===r?void 0:r.body)&&void 0!==s?s:{});if(o)return e.error(new N(null!=i?i:o));e.req.body=n,e.next()}))(e,r,s)}},exports.Patch=U,exports.Post=P,exports.Put=b,exports.Query=Q,exports.ResponseError=x,exports.Session=K,exports.Status=R,exports.UnauthorizedError=class extends x{constructor(e="Unauthorized"){super(e,R.UNAUTHORIZED)}},exports.Upload=e=>{const t=r.merge({},e),s=c.diskStorage({destination(e,r,s){var o;const i=B(t,r.fieldname);s(null,null!==(o=null==i?void 0:i.path)&&void 0!==o?o:"./")},filename(e,r,s){var o;const i=B(t,r.fieldname);s(null,X(null!==(o=null==i?void 0:i.path)&&void 0!==o?o:"./",W(r.originalname)))}}),o=Math.max(...Object.values(t).map(e=>{var t;return null!==(t=e.size)&&void 0!==t?t:0})),i=c({storage:s,fileFilter(e,r,s){var o;const i=B(t,r.fieldname);return i?((e,t)=>!t.length||t.includes(W(e.originalname))||t.includes(e.mimetype.toLowerCase()))(r,null!==(o=null==i?void 0:i.types)&&void 0!==o?o:[])?void s(null,!0):s(new Error(`FILE TYPE NOT ALLOWED FOR "${r.fieldname}"`)):s(new Error(`UPLOAD FIELD "${r.fieldname}" IS NOT CONFIGURED`))},limits:{fileSize:1024*o*1024}}).fields(Object.keys(t).map(e=>{var r,s;return{name:e,maxCount:null!==(s=null===(r=t[e])||void 0===r?void 0:r.count)&&void 0!==s?s:1}}));return(e,t,r)=>{Y(e=>{i(e.req,e.res,t=>{if(t)return"LIMIT_UNEXPECTED_FILE"==t.code&&(t.message=`FIELD "${t.field}" EXCEEDS MAX SIZE`),e.destroy(t);e.next()})})(e,t,r)}},exports.Use=Y,exports.ValidationError=N,exports.methodFactory=g,exports.parameterFactory=F;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* @andrewcaires/express v2.0.
|
|
2
|
+
* @andrewcaires/express v2.0.2
|
|
3
3
|
* Decorators for express
|
|
4
4
|
* (c) 2026 Andrew Caires
|
|
5
5
|
* @license: MIT
|
|
@@ -28,7 +28,17 @@ declare class Context<T = any, A = Application> {
|
|
|
28
28
|
destroy(error?: Error): void;
|
|
29
29
|
error(error: string | Error): void;
|
|
30
30
|
file(path: string): void;
|
|
31
|
+
getBody<T = TypeAnyObject>(): T;
|
|
32
|
+
getBodyValue<T = any>(key: string): T | undefined;
|
|
33
|
+
getCookie(key: string): string;
|
|
34
|
+
getCookies<T = TypeAnyObject>(): T;
|
|
35
|
+
getHeader(key: string): string;
|
|
36
|
+
getHeaders<T = TypeAnyObject>(): T;
|
|
31
37
|
getIp(): string;
|
|
38
|
+
getQuery<T = string>(key: string): T | undefined;
|
|
39
|
+
getQueries<T = TypeAnyObject>(): T;
|
|
40
|
+
getParam(key: string): string;
|
|
41
|
+
getParams<T = TypeAnyObject>(): T;
|
|
32
42
|
getUrl(): string;
|
|
33
43
|
json(value?: TypeAnyObject | Array<TypeAnyObject>): void;
|
|
34
44
|
prepare(status: number, value: TypeAnyObject | Array<TypeAnyObject>): void;
|
|
@@ -475,6 +485,10 @@ declare class ResponseError extends Error {
|
|
|
475
485
|
constructor(message: string, status?: number);
|
|
476
486
|
}
|
|
477
487
|
|
|
488
|
+
declare class InternalServerError extends ResponseError {
|
|
489
|
+
constructor(message?: string);
|
|
490
|
+
}
|
|
491
|
+
|
|
478
492
|
declare class NotFoundError extends ResponseError {
|
|
479
493
|
constructor(message?: string);
|
|
480
494
|
}
|
|
@@ -566,5 +580,5 @@ declare class Status {
|
|
|
566
580
|
static readonly NETWORK_CONNECTION_TIMEOUT_ERROR = 599;
|
|
567
581
|
}
|
|
568
582
|
|
|
569
|
-
export { All, App, Application, Argument, Body, Cache, Context, Controller, Cookies, Ctx, Delete, Extends, Files, Get, Head, Headers, Metadata, Methods, Middleware, NotFoundError, Options, Params, Parse, Patch, Post, Put, Query, ResponseError, Session, Status, UnauthorizedError, Upload, Use, ValidationError, methodFactory, parameterFactory };
|
|
583
|
+
export { All, App, Application, Argument, Body, Cache, Context, Controller, Cookies, Ctx, Delete, Extends, Files, Get, Head, Headers, InternalServerError, Metadata, Methods, Middleware, NotFoundError, Options, Params, Parse, Patch, Post, Put, Query, ResponseError, Session, Status, UnauthorizedError, Upload, Use, ValidationError, methodFactory, parameterFactory };
|
|
570
584
|
export type { CallbackObject, ComponentsObject, ContactObject, EncodingObject, ExampleObject, ExternalDocumentationObject, HeaderObject, IArgs, ICache, ICookie, IFile, IHandler, IMiddlewares, IOptions, IParameter, IRouter, IStore, IUpload, IUse, InfoObject, LicenseObject, LinkObject, MediaTypeObject, OAuthFlowObject, OAuthFlowsObject, OpenAPIObject, OperationObject, ParameterObject, ParseFunction, PathItemObject, PathsObject, ReferenceObject, RequestBodyObject, ResponseObject, ResponsesObject, SchemaObject, SecurityRequirementObject, SecuritySchemeObject, ServerObject, ServerVariableObject, TagObject };
|
package/dist/index.esm.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* @andrewcaires/express v2.0.
|
|
2
|
+
* @andrewcaires/express v2.0.2
|
|
3
3
|
* Decorators for express
|
|
4
4
|
* (c) 2026 Andrew Caires
|
|
5
5
|
* @license: MIT
|
|
6
6
|
*/
|
|
7
|
-
import{metadata as e,getInjectionArgs as t}from"@andrewcaires/decorator";import{Log as s}from"@andrewcaires/node";import{isNumber as r,forEachKey as o,isUndefined as i,EventEmitter as n,isConstructor as a,merge as h,isObject as l,isFunction as E,noop as p,isArray as u,uuidv7 as d,isString as c,Validation as _}from"@andrewcaires/utils.js";import T from"compression";import O from"cookie-parser";import m from"cors";import R,{Router as v,json as N,urlencoded as A}from"express";import I from"express-session";import{existsSync as S}from"fs";import*as f from"http";import*as D from"https";import{Server as g}from"net";import{resolve as L,join as x}from"path";import{getClientIp as U}from"request-ip";import y,{diskStorage as C}from"multer";function P(e,t,s,r){return new(s||(s=Promise))(function(o,i){function n(e){try{h(r.next(e))}catch(e){i(e)}}function a(e){try{h(r.throw(e))}catch(e){i(e)}}function h(e){var t;e.done?o(e.value):(t=e.value,t instanceof s?t:new s(function(e){e(t)})).then(n,a)}h((r=r.apply(e,t||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;class F{}F.CONTINUE=100,F.SWITCHING_PROTOCOLS=101,F.PROCESSING=102,F.OK=200,F.CREATED=201,F.ACCEPTED=202,F.NON_AUTHORITATIVE_INFORMATION=203,F.NO_CONTENT=204,F.RESET_CONTENT=205,F.PARTIAL_CONTENT=206,F.MULTI_STATUS=207,F.ALREADY_REPORTED=208,F.IM_USED=226,F.MULTIPLE_CHOICES=300,F.MOVED_PERMANENTLY=301,F.FOUND=302,F.SEE_OTHER=303,F.NOT_MODIFIED=304,F.USE_PROXY=305,F.TEMPORARY_REDIRECT=307,F.PERMANENT_REDIRECT=308,F.BAD_REQUEST=400,F.UNAUTHORIZED=401,F.PAYMENT_REQUIRED=402,F.FORBIDDEN=403,F.NOT_FOUND=404,F.METHOD_NOT_ALLOWED=405,F.NOT_ACCEPTABLE=406,F.PROXY_AUTHENTICATION_REQUIRED=407,F.REQUEST_TIMEOUT=408,F.CONFLICT=409,F.GONE=410,F.LENGTH_REQUIRED=411,F.PRECONDITION_FAILED=412,F.PAYLOAD_TOO_LARGE=413,F.REQUEST_URI_TOO_LONG=414,F.UNSUPPORTED_MEDIA_TYPE=415,F.REQUESTED_RANGE_NOT_SATISFIABLE=416,F.EXPECTATION_FAILED=417,F.IM_A_TEAPOT=418,F.MISDIRECTED_REQUEST=421,F.UNPROCESSABLE_ENTITY=422,F.LOCKED=423,F.FAILED_DEPENDENCY=424,F.UPGRADE_REQUIRED=426,F.PRECONDITION_REQUIRED=428,F.TOO_MANY_REQUESTS=429,F.REQUEST_HEADER_FIELDS_TOO_LARGE=431,F.CONNECTION_CLOSED_WITHOUT_RESPONSE=444,F.UNAVAILABLE_FOR_LEGAL_REASONS=451,F.CLIENT_CLOSED_REQUEST=499,F.INTERNAL_SERVER_ERROR=500,F.NOT_IMPLEMENTED=501,F.BAD_GATEWAY=502,F.SERVICE_UNAVAILABLE=503,F.GATEWAY_TIMEOUT=504,F.HTTP_VERSION_NOT_SUPPORTED=505,F.VARIANT_ALSO_NEGOCIATES=506,F.INSUFFICIENT_STORAGE=507,F.LOOP_DETECTED=508,F.NOT_EXTENDED=510,F.NETWORK_AUTHENTICATION_REQUIRED=511,F.NETWORK_CONNECTION_TIMEOUT_ERROR=599;class M extends Error{constructor(e,t=F.INTERNAL_SERVER_ERROR){super(e),this.status=t}}class b extends M{constructor(e="Record not found"){super(e,F.NOT_FOUND)}}class k extends M{constructor(e="Unauthorized"){super(e,F.UNAUTHORIZED)}}class w extends M{constructor(e){super(e,F.UNPROCESSABLE_ENTITY)}}class H{constructor(e,t,s,r,o){this.req=e,this.res=t,this.next=s,this.app=r,this.controller=o}cache(e){const t=[];e.private?t.push("private"):e.public&&t.push("public"),e.noStore&&(e.noCache=!0,t.push("no-store")),e.noCache&&(e.maxAge=0,delete e.sMaxAge,t.push("no-cache")),e.noTransform&&t.push("no-transform"),e.proxyRevalidate&&t.push("proxy-revalidate"),e.mustRevalidate?t.push("must-revalidate"):e.noCache||(r(e.staleIfError)&&t.push(`stale-if-error=${e.staleIfError}`),r(e.staleWhileRevalidate)&&t.push(`stale-while-revalidate=${e.staleWhileRevalidate}`)),r(e.maxAge)&&t.push(`max-age=${e.maxAge}`),r(e.sMaxAge)&&t.push(`s-maxage=${e.sMaxAge}`),t.length&&(this.res.setHeader("Cache-Control",t.join(",")),e.noCache&&o({"Surrogate-Control":"no-store",Pragma:"no-cache",ETag:"false",Expires:"0"},(e,t)=>this.res.setHeader(t,e)))}close(e){this.res.headersSent||this.res.json(e||this.storage)}cookie(e,t,s){i(t)?this.res.clearCookie(e):this.res.cookie(e,t,null!=s?s:{})}destroy(e){var t;e&&this.error(e),null===(t=this.res.socket)||void 0===t||t.destroy(e)}error(e){var t;let s=null!==(t=e.toString())&&void 0!==t?t:"",r=F.INTERNAL_SERVER_ERROR;e instanceof Error&&(s=e.message,e instanceof M&&(r=e.status)),this.send(r,{error:s})}file(e){this.res.headersSent||(this.status(F.OK),this.res.sendFile(L(e)))}getIp(){return U(this.req)||"0.0.0.0"}getUrl(){return`${this.req.protocol}://${this.req.get("host")}${this.req.originalUrl}`}json(e){this.send(F.OK,e)}prepare(e,t){this.res.headersSent||(this.status(e),this.storage=t)}send(e,t){this.res.headersSent||(this.status(e),this.res.json(t))}status(e){return e&&this.res.status(e),this.res.statusCode}success(e){this.send(F.OK,{message:e})}}class ${static extends(t){return e($.EXTENDS,t,[])}static middleware(t){return e($.MIDDLEWARE,t,[])}static parameters(t){return e($.PARAMETERS,t,[])}static path(t,s){return e($.PATH,t,s)}static routers(t){return e($.ROUTERS,t,[])}}$.EXTENDS=Symbol("EXTENDS"),$.MIDDLEWARE=Symbol("MIDDLEWARE"),$.PARAMETERS=Symbol("PARAMETERS"),$.PATH=Symbol("PATH"),$.ROUTERS=Symbol("ROUTERS");class q extends n{get controllers(){return this._controllers}get instance(){return this._app}get router(){return this._router}get server(){return this._server}constructor(e,s){var r,o;super(),this._app=R(),this._options={},this._base=v(),this._router=v(),this._controllers=[],this._controllers.push(...e.map(e=>a(e)?new e(...t(e)):e)),this._options=h({},{cross:!1,hybrid:!1,path:"/",port:3e3,session:{secret:"yoursecret",resave:!0,saveUninitialized:!1,cookie:{maxAge:864e5}}},null!=s?s:{}),this._app.use(N(this._options.json)),this._app.disable("x-powered-by"),this._app.use(A({extended:!0})),this._options.cross&&this._app.use(m(l(this._options.cross)?this._options.cross:{})),this._app.use(T(this._options.compression)),this._app.use(O(null===(r=this._options.cookie)||void 0===r?void 0:r.secret,this._options.cookie)),this._app.use(I(this._options.session)),this.init(),this._app.use(this._router);const i=(null===(o=this._options.path)||void 0===o?void 0:o.length)?this._options.path:"/";if(this._app.use(i,this._base),this._app.all(i+"/*path",(e,t)=>{this._options.redirect?t.redirect(this._options.redirect):(t.status(F.NOT_FOUND),t.json({message:"INVALID API"}))}),this._options.public){const e=L(this._options.public);S(e)&&this._app.use(R.static(e)),this._app.get("*path",(t,s)=>{S(e)?s.sendFile(e+"/index.html"):this._options.notfound?s.redirect(this._options.notfound):(s.status(F.NOT_FOUND),s.json({message:'FILE "index.html" NOT FOUND'}))})}else this._app.all("*path",(e,t)=>{this._options.redirect?t.redirect(this._options.redirect):(t.status(F.NOT_FOUND),t.json({message:"INVALID API"}))});this._controllers.forEach(e=>{const t=v(),s=this._middlewares(e),r=$.parameters(e);this._extends(e).forEach(e=>{s.push(...this._middlewares(e)),r.push(...$.parameters(e))}),$.routers(e).forEach(o=>{const i=o.propertyKey.toString();if(E(e[i])){if(!E(t[o.method]))return this._notFound(o.method);const n=this._handles(e,i,s,r);return t[o.method](o.path,...n,(t,s,o)=>P(this,void 0,void 0,function*(){const n=new H(t,s,o,this,e),a=this._args(n,this._indexes(i,r)),h=yield e[i](...a);n.close(u(h)||l(h)?h:void 0)}))}this._notFound(`${e.name}.${i}`)}),this._extends(e).forEach(o=>{$.routers(o).forEach(o=>{const i=o.propertyKey.toString();if(E(e[i])){if(!E(t[o.method]))return this._notFound(o.method);const n=this._handles(e,i,s,r);return t[o.method](o.path,...n,(t,s,o)=>P(this,void 0,void 0,function*(){const n=new H(t,s,o,this,e),a=this._args(n,this._indexes(i,r)),h=yield e[i](...a);n.close(u(h)||l(h)?h:void 0)}))}this._notFound(`${e.constructor.name}.${i}`)})}),this._base.use($.path(e,"/"),t)})}init(){}error(e,t){s.error(e)}log(e,t){s.info(e)}_args(e,t,s){const r=[],o={ctx:e,key:"",app:this,argument:s};return t.forEach(e=>{r[e.parameterIndex]=e.callback(Object.assign(Object.assign({},o),{key:e.key}))}),r}_handles(e,t,s,r){return s.filter(e=>e.propertyKey==t).map(t=>{if(t.callback!=p){const s=this._indexes(t.method,r);return(r,o,i)=>P(this,void 0,void 0,function*(){const n=new H(r,o,i,this,e),a=E(t.argument)?t.argument(n):t.argument,h=yield t.callback.call(e,...this._args(n,s,a));(u(h)||l(h))&&n.close(h)})}this._notFound(t.method)}).filter(E)}_extends(e){return $.extends(e).reduce((e,t)=>(e.push(t,...this._extends(t)),e),[]).filter((e,t,s)=>s.indexOf(e)===t)}_indexes(e,t){return t.filter(t=>t.propertyKey==e)}_middlewares(e){return[...$.middleware(e)].reverse()}_notFound(e){this.error(new Error(`Router "${e}" not found`),"express")}_port(e){return`Server listening on port ${e}`}listen(){return P(this,void 0,void 0,function*(){if(this._options.cert&&this._options.key||(this._server=f.createServer(this._app),this._server.listen(this._options.port,()=>this.log(this._port(this._options.port),"express"))),!this._server){const e=f.createServer((e,t)=>{const s=80==this._options.port?":80":"";t.writeHead(F.MOVED_PERMANENTLY,{Location:`https://${e.headers.host}${s}${e.url}`}),t.end()}),t=D.createServer({key:this._options.key,cert:this._options.cert},this._app);if(this._options.hybrid){new g(s=>{s.once("data",r=>{s.pause(),s.unshift(r),(22===r[0]?t:e).emit("connection",s),process.nextTick(()=>s.resume())})}).listen(this._options.port,()=>this.log(this._port(this._options.port),"express")),this._server=t}this._server||(443==this._options.port&&e.listen(80,()=>this.log(this._port(80),"express")),t.listen(this._options.port,()=>this.log(this._port(this._options.port),"express")),this._server=t)}})}}const G=e=>t=>{$.path(t,(null==e?void 0:e.length)?e:"/")},Y=e=>t=>{$.extends(t).push(e)};var j;!function(e){e.ALL="all",e.GET="get",e.POST="post",e.PUT="put",e.HEAD="head",e.DELETE="delete",e.OPTIONS="options",e.PATCH="patch"}(j||(j={}));const K=e=>t=>(s,r)=>{$.routers(s).push({method:e,path:(null==t?void 0:t.length)?t:"/",propertyKey:r})},Q=K(j.ALL),V=K(j.DELETE),W=K(j.GET),X=K(j.HEAD),B=K(j.OPTIONS),z=K(j.PATCH),Z=K(j.POST),J=K(j.PUT),ee=e=>t=>(s,r,o)=>{$.parameters(s).push({callback:e,key:t,propertyKey:r,parameterIndex:o})},te=ee(({app:e})=>e),se=ee(({argument:e})=>e),re=(e,t)=>i(t)?e:e[t],oe=ee(({ctx:e,key:t})=>{var s,r;return re(null!==(r=null===(s=e.req)||void 0===s?void 0:s.body)&&void 0!==r?r:{},t)}),ie=ee(({ctx:e,key:t})=>{var s,r;return re(null!==(r=null===(s=e.req)||void 0===s?void 0:s.cookies)&&void 0!==r?r:{},t)}),ne=ee(({ctx:e})=>e),ae=ee(({ctx:e})=>{var t,s;return null!==(s=null===(t=e.req)||void 0===t?void 0:t.files)&&void 0!==s?s:{}}),he=ee(({ctx:e,key:t})=>{var s,r;return re(null!==(r=null===(s=e.req)||void 0===s?void 0:s.headers)&&void 0!==r?r:{},t)}),le=ee(({ctx:e,key:t})=>{var s,r;return re(null!==(r=null===(s=e.req)||void 0===s?void 0:s.params)&&void 0!==r?r:{},t)}),Ee=ee(({ctx:e,key:t})=>{var s,r,o;return String(null!==(o=re(null!==(r=null===(s=e.req)||void 0===s?void 0:s.query)&&void 0!==r?r:{},t))&&void 0!==o?o:"")}),pe=ee(({ctx:e})=>{var t;return null===(t=e.req)||void 0===t?void 0:t.session}),ue=(e,t)=>(s,r)=>{const o=d();ne()(s,o,0),$.middleware(s).push({method:o,argument:t,propertyKey:r,callback:e})},de=e=>{var t;return(null===(t=e.split(".").pop())||void 0===t?void 0:t.toLowerCase())||"bin"},ce=(e,t)=>{var s;return null!==(s=e[t])&&void 0!==s?s:null},_e=(e,t)=>{const s=d()+"."+t;return S(x(e,s))?_e(e,t):s},Te=e=>{const t=h({},e),s=C({destination(e,s,r){var o;const i=ce(t,s.fieldname);r(null,null!==(o=null==i?void 0:i.path)&&void 0!==o?o:"./")},filename(e,s,r){var o;const i=ce(t,s.fieldname);r(null,_e(null!==(o=null==i?void 0:i.path)&&void 0!==o?o:"./",de(s.originalname)))}}),r=Math.max(...Object.values(t).map(e=>{var t;return null!==(t=e.size)&&void 0!==t?t:0})),o=y({storage:s,fileFilter(e,s,r){var o;const i=ce(t,s.fieldname);return i?((e,t)=>!t.length||t.includes(de(e.originalname))||t.includes(e.mimetype.toLowerCase()))(s,null!==(o=null==i?void 0:i.types)&&void 0!==o?o:[])?void r(null,!0):r(new Error(`FILE TYPE NOT ALLOWED FOR "${s.fieldname}"`)):r(new Error(`UPLOAD FIELD "${s.fieldname}" IS NOT CONFIGURED`))},limits:{fileSize:1024*r*1024}}).fields(Object.keys(t).map(e=>{var s,r;return{name:e,maxCount:null!==(r=null===(s=t[e])||void 0===s?void 0:s.count)&&void 0!==r?r:1}}));return(e,t,s)=>{ue(e=>{o(e.req,e.res,t=>{if(t)return"LIMIT_UNEXPECTED_FILE"==t.code&&(t.message=`FIELD "${t.field}" EXCEEDS MAX SIZE`),e.destroy(t);e.next()})})(e,t,s)}},Oe=e=>(t,s,r)=>{ue(t=>{t.cache(Object.assign({},e)),t.next()})(t,s,r)},me=(e,t)=>(s,r)=>{let o=p;if(c(r)){const t=s;E(t[e])&&(o=t[e])}$.middleware(s).push({method:e,argument:t,propertyKey:r,callback:o})},Re=e=>{const t=_.object(E(e)?e(_):e).parse();return(e,s,r)=>{ue(e=>P(void 0,void 0,void 0,function*(){const{error:s,message:r,value:o}=yield t.validateAsync(e.req.body);if(s)return e.error(new w(null!=r?r:s));e.req.body=o,e.next()}))(e,s,r)}};export{Q as All,te as App,q as Application,se as Argument,oe as Body,Oe as Cache,H as Context,G as Controller,ie as Cookies,ne as Ctx,V as Delete,Y as Extends,ae as Files,W as Get,X as Head,he as Headers,$ as Metadata,j as Methods,me as Middleware,b as NotFoundError,B as Options,le as Params,Re as Parse,z as Patch,Z as Post,J as Put,Ee as Query,M as ResponseError,pe as Session,F as Status,k as UnauthorizedError,Te as Upload,ue as Use,w as ValidationError,K as methodFactory,ee as parameterFactory};
|
|
7
|
+
import{metadata as e,getInjectionArgs as t}from"@andrewcaires/decorator";import{Log as r}from"@andrewcaires/node";import{isNumber as s,forEachKey as o,isUndefined as i,EventEmitter as n,isConstructor as a,merge as l,isObject as h,isFunction as u,noop as d,isArray as E,uuidv7 as p,isString as c,Validation as _}from"@andrewcaires/utils.js";import v from"compression";import T from"cookie-parser";import O from"cors";import m,{Router as R,json as N,urlencoded as A}from"express";import I from"express-session";import{existsSync as S}from"fs";import*as f from"http";import*as D from"https";import{Server as g}from"net";import{resolve as y,join as L}from"path";import{getClientIp as x}from"request-ip";import U,{diskStorage as C}from"multer";function P(e,t,r,s){return new(r||(r=Promise))(function(o,i){function n(e){try{l(s.next(e))}catch(e){i(e)}}function a(e){try{l(s.throw(e))}catch(e){i(e)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r(function(e){e(t)})).then(n,a)}l((s=s.apply(e,t||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;class F{}F.CONTINUE=100,F.SWITCHING_PROTOCOLS=101,F.PROCESSING=102,F.OK=200,F.CREATED=201,F.ACCEPTED=202,F.NON_AUTHORITATIVE_INFORMATION=203,F.NO_CONTENT=204,F.RESET_CONTENT=205,F.PARTIAL_CONTENT=206,F.MULTI_STATUS=207,F.ALREADY_REPORTED=208,F.IM_USED=226,F.MULTIPLE_CHOICES=300,F.MOVED_PERMANENTLY=301,F.FOUND=302,F.SEE_OTHER=303,F.NOT_MODIFIED=304,F.USE_PROXY=305,F.TEMPORARY_REDIRECT=307,F.PERMANENT_REDIRECT=308,F.BAD_REQUEST=400,F.UNAUTHORIZED=401,F.PAYMENT_REQUIRED=402,F.FORBIDDEN=403,F.NOT_FOUND=404,F.METHOD_NOT_ALLOWED=405,F.NOT_ACCEPTABLE=406,F.PROXY_AUTHENTICATION_REQUIRED=407,F.REQUEST_TIMEOUT=408,F.CONFLICT=409,F.GONE=410,F.LENGTH_REQUIRED=411,F.PRECONDITION_FAILED=412,F.PAYLOAD_TOO_LARGE=413,F.REQUEST_URI_TOO_LONG=414,F.UNSUPPORTED_MEDIA_TYPE=415,F.REQUESTED_RANGE_NOT_SATISFIABLE=416,F.EXPECTATION_FAILED=417,F.IM_A_TEAPOT=418,F.MISDIRECTED_REQUEST=421,F.UNPROCESSABLE_ENTITY=422,F.LOCKED=423,F.FAILED_DEPENDENCY=424,F.UPGRADE_REQUIRED=426,F.PRECONDITION_REQUIRED=428,F.TOO_MANY_REQUESTS=429,F.REQUEST_HEADER_FIELDS_TOO_LARGE=431,F.CONNECTION_CLOSED_WITHOUT_RESPONSE=444,F.UNAVAILABLE_FOR_LEGAL_REASONS=451,F.CLIENT_CLOSED_REQUEST=499,F.INTERNAL_SERVER_ERROR=500,F.NOT_IMPLEMENTED=501,F.BAD_GATEWAY=502,F.SERVICE_UNAVAILABLE=503,F.GATEWAY_TIMEOUT=504,F.HTTP_VERSION_NOT_SUPPORTED=505,F.VARIANT_ALSO_NEGOCIATES=506,F.INSUFFICIENT_STORAGE=507,F.LOOP_DETECTED=508,F.NOT_EXTENDED=510,F.NETWORK_AUTHENTICATION_REQUIRED=511,F.NETWORK_CONNECTION_TIMEOUT_ERROR=599;class b extends Error{constructor(e,t=F.INTERNAL_SERVER_ERROR){super(e),this.status=t}}class M extends b{constructor(e="Internal server error"){super(e,F.INTERNAL_SERVER_ERROR)}}class k extends b{constructor(e="Record not found"){super(e,F.NOT_FOUND)}}class q extends b{constructor(e="Unauthorized"){super(e,F.UNAUTHORIZED)}}class w extends b{constructor(e){super(e,F.UNPROCESSABLE_ENTITY)}}class H{constructor(e,t,r,s,o){this.req=e,this.res=t,this.next=r,this.app=s,this.controller=o}cache(e){const t=[];e.private?t.push("private"):e.public&&t.push("public"),e.noStore&&(e.noCache=!0,t.push("no-store")),e.noCache&&(e.maxAge=0,delete e.sMaxAge,t.push("no-cache")),e.noTransform&&t.push("no-transform"),e.proxyRevalidate&&t.push("proxy-revalidate"),e.mustRevalidate?t.push("must-revalidate"):e.noCache||(s(e.staleIfError)&&t.push(`stale-if-error=${e.staleIfError}`),s(e.staleWhileRevalidate)&&t.push(`stale-while-revalidate=${e.staleWhileRevalidate}`)),s(e.maxAge)&&t.push(`max-age=${e.maxAge}`),s(e.sMaxAge)&&t.push(`s-maxage=${e.sMaxAge}`),t.length&&(this.res.setHeader("Cache-Control",t.join(",")),e.noCache&&o({"Surrogate-Control":"no-store",Pragma:"no-cache",ETag:"false",Expires:"0"},(e,t)=>this.res.setHeader(t,e)))}close(e){this.res.headersSent||this.res.json(e||this.storage)}cookie(e,t,r){i(t)?this.res.clearCookie(e):this.res.cookie(e,t,null!=r?r:{})}destroy(e){var t;e&&this.error(e),null===(t=this.res.socket)||void 0===t||t.destroy(e)}error(e){var t;let r=null!==(t=e.toString())&&void 0!==t?t:"",s=F.INTERNAL_SERVER_ERROR;e instanceof Error&&(r=e.message,e instanceof b&&(s=e.status)),this.send(s,{error:r})}file(e){this.res.headersSent||(this.status(F.OK),this.res.sendFile(y(e)))}getBody(){var e,t;return null!==(t=null===(e=this.req)||void 0===e?void 0:e.body)&&void 0!==t?t:{}}getBodyValue(e){var t;return null===(t=this.req.body)||void 0===t?void 0:t[e]}getCookie(e){var t,r,s;return null!==(s=null===(r=null===(t=this.req.cookies)||void 0===t?void 0:t[e])||void 0===r?void 0:r.toString())&&void 0!==s?s:""}getCookies(){var e;return null!==(e=this.req.cookies)&&void 0!==e?e:{}}getHeader(e){var t,r,s;return null!==(s=null===(r=null===(t=this.req)||void 0===t?void 0:t.header(e))||void 0===r?void 0:r.toString())&&void 0!==s?s:""}getHeaders(){var e,t;return null!==(t=null===(e=this.req)||void 0===e?void 0:e.headers)&&void 0!==t?t:{}}getIp(){return x(this.req)||"0.0.0.0"}getQuery(e){var t;return null===(t=this.req.query)||void 0===t?void 0:t[e]}getQueries(){var e,t;return null!==(t=null===(e=this.req)||void 0===e?void 0:e.query)&&void 0!==t?t:{}}getParam(e){var t,r,s;return null!==(s=null===(r=null===(t=this.req.params)||void 0===t?void 0:t[e])||void 0===r?void 0:r.toString())&&void 0!==s?s:""}getParams(){var e,t;return null!==(t=null===(e=this.req)||void 0===e?void 0:e.params)&&void 0!==t?t:{}}getUrl(){return`${this.req.protocol}://${this.req.get("host")}${this.req.originalUrl}`}json(e){this.send(F.OK,e)}prepare(e,t){this.res.headersSent||(this.status(e),this.storage=t)}send(e,t){this.res.headersSent||(this.status(e),this.res.json(t))}status(e){return e&&this.res.status(e),this.res.statusCode}success(e){this.send(F.OK,{message:e})}}class ${static extends(t){return e($.EXTENDS,t,[])}static middleware(t){return e($.MIDDLEWARE,t,[])}static parameters(t){return e($.PARAMETERS,t,[])}static path(t,r){return e($.PATH,t,r)}static routers(t){return e($.ROUTERS,t,[])}}$.EXTENDS=Symbol("EXTENDS"),$.MIDDLEWARE=Symbol("MIDDLEWARE"),$.PARAMETERS=Symbol("PARAMETERS"),$.PATH=Symbol("PATH"),$.ROUTERS=Symbol("ROUTERS");class G extends n{get controllers(){return this._controllers}get instance(){return this._app}get router(){return this._router}get server(){return this._server}constructor(e,r){var s,o;super(),this._app=m(),this._options={},this._base=R(),this._router=R(),this._controllers=[],this._controllers.push(...e.map(e=>a(e)?new e(...t(e)):e)),this._options=l({},{cross:!1,hybrid:!1,path:"/",port:3e3,session:{secret:"yoursecret",resave:!0,saveUninitialized:!1,cookie:{maxAge:864e5}}},null!=r?r:{}),this._app.use(N(this._options.json)),this._app.disable("x-powered-by"),this._app.use(A({extended:!0})),this._options.cross&&this._app.use(O(h(this._options.cross)?this._options.cross:{})),this._app.use(v(this._options.compression)),this._app.use(T(null===(s=this._options.cookie)||void 0===s?void 0:s.secret,this._options.cookie)),this._app.use(I(this._options.session)),this.init(),this._app.use(this._router);const i=(null===(o=this._options.path)||void 0===o?void 0:o.length)?this._options.path:"/";if(this._app.use(i,this._base),this._app.all(i+"/*path",(e,t)=>{this._options.redirect?t.redirect(this._options.redirect):(t.status(F.NOT_FOUND),t.json({message:"INVALID API"}))}),this._options.public){const e=y(this._options.public);S(e)&&this._app.use(m.static(e)),this._app.get("*path",(t,r)=>{S(e)?r.sendFile(e+"/index.html"):this._options.notfound?r.redirect(this._options.notfound):(r.status(F.NOT_FOUND),r.json({message:'FILE "index.html" NOT FOUND'}))})}else this._app.all("*path",(e,t)=>{this._options.redirect?t.redirect(this._options.redirect):(t.status(F.NOT_FOUND),t.json({message:"INVALID API"}))});this._controllers.forEach(e=>{const t=R(),r=this._middlewares(e),s=$.parameters(e);this._extends(e).forEach(e=>{r.push(...this._middlewares(e)),s.push(...$.parameters(e))}),$.routers(e).forEach(o=>{const i=o.propertyKey.toString();if(u(e[i])){if(!u(t[o.method]))return this._notFound(o.method);const n=this._handles(e,i,r,s);return t[o.method](o.path,...n,(t,r,o)=>P(this,void 0,void 0,function*(){const n=new H(t,r,o,this,e),a=this._args(n,this._indexes(i,s)),l=yield e[i](...a);n.close(E(l)||h(l)?l:void 0)}))}this._notFound(`${e.name}.${i}`)}),this._extends(e).forEach(o=>{$.routers(o).forEach(o=>{const i=o.propertyKey.toString();if(u(e[i])){if(!u(t[o.method]))return this._notFound(o.method);const n=this._handles(e,i,r,s);return t[o.method](o.path,...n,(t,r,o)=>P(this,void 0,void 0,function*(){const n=new H(t,r,o,this,e),a=this._args(n,this._indexes(i,s)),l=yield e[i](...a);n.close(E(l)||h(l)?l:void 0)}))}this._notFound(`${e.constructor.name}.${i}`)})}),this._base.use($.path(e,"/"),t)})}init(){}error(e,t){r.error(e)}log(e,t){r.info(e)}_args(e,t,r){const s=[],o={ctx:e,key:"",app:this,argument:r};return t.forEach(e=>{s[e.parameterIndex]=e.callback(Object.assign(Object.assign({},o),{key:e.key}))}),s}_handles(e,t,r,s){return r.filter(e=>e.propertyKey==t).map(t=>{if(t.callback!=d){const r=this._indexes(t.method,s);return(s,o,i)=>P(this,void 0,void 0,function*(){const n=new H(s,o,i,this,e),a=u(t.argument)?t.argument(n):t.argument,l=yield t.callback.call(e,...this._args(n,r,a));(E(l)||h(l))&&n.close(l)})}this._notFound(t.method)}).filter(u)}_extends(e){return $.extends(e).reduce((e,t)=>(e.push(t,...this._extends(t)),e),[]).filter((e,t,r)=>r.indexOf(e)===t)}_indexes(e,t){return t.filter(t=>t.propertyKey==e)}_middlewares(e){return[...$.middleware(e)].reverse()}_notFound(e){this.error(new Error(`Router "${e}" not found`),"express")}_port(e){return`Server listening on port ${e}`}listen(){return P(this,void 0,void 0,function*(){if(this._options.cert&&this._options.key||(this._server=f.createServer(this._app),this._server.listen(this._options.port,()=>this.log(this._port(this._options.port),"express"))),!this._server){const e=f.createServer((e,t)=>{const r=80==this._options.port?":80":"";t.writeHead(F.MOVED_PERMANENTLY,{Location:`https://${e.headers.host}${r}${e.url}`}),t.end()}),t=D.createServer({key:this._options.key,cert:this._options.cert},this._app);if(this._options.hybrid){new g(r=>{r.once("data",s=>{r.pause(),r.unshift(s),(22===s[0]?t:e).emit("connection",r),process.nextTick(()=>r.resume())})}).listen(this._options.port,()=>this.log(this._port(this._options.port),"express")),this._server=t}this._server||(443==this._options.port&&e.listen(80,()=>this.log(this._port(80),"express")),t.listen(this._options.port,()=>this.log(this._port(this._options.port),"express")),this._server=t)}})}}const Q=e=>t=>{$.path(t,(null==e?void 0:e.length)?e:"/")},Y=e=>t=>{$.extends(t).push(e)};var j;!function(e){e.ALL="all",e.GET="get",e.POST="post",e.PUT="put",e.HEAD="head",e.DELETE="delete",e.OPTIONS="options",e.PATCH="patch"}(j||(j={}));const K=e=>t=>(r,s)=>{$.routers(r).push({method:e,path:(null==t?void 0:t.length)?t:"/",propertyKey:s})},V=K(j.ALL),W=K(j.DELETE),B=K(j.GET),X=K(j.HEAD),z=K(j.OPTIONS),Z=K(j.PATCH),J=K(j.POST),ee=K(j.PUT),te=e=>t=>(r,s,o)=>{$.parameters(r).push({callback:e,key:t,propertyKey:s,parameterIndex:o})},re=te(({app:e})=>e),se=te(({argument:e})=>e),oe=(e,t)=>i(t)?e:e[t],ie=te(({ctx:e,key:t})=>{var r,s;return oe(null!==(s=null===(r=e.req)||void 0===r?void 0:r.body)&&void 0!==s?s:{},t)}),ne=te(({ctx:e,key:t})=>{var r,s;return oe(null!==(s=null===(r=e.req)||void 0===r?void 0:r.cookies)&&void 0!==s?s:{},t)}),ae=te(({ctx:e})=>e),le=te(({ctx:e})=>{var t,r;return null!==(r=null===(t=e.req)||void 0===t?void 0:t.files)&&void 0!==r?r:{}}),he=te(({ctx:e,key:t})=>{var r,s;return oe(null!==(s=null===(r=e.req)||void 0===r?void 0:r.headers)&&void 0!==s?s:{},t)}),ue=te(({ctx:e,key:t})=>{var r,s;return oe(null!==(s=null===(r=e.req)||void 0===r?void 0:r.params)&&void 0!==s?s:{},t)}),de=te(({ctx:e,key:t})=>{var r,s,o;return String(null!==(o=oe(null!==(s=null===(r=e.req)||void 0===r?void 0:r.query)&&void 0!==s?s:{},t))&&void 0!==o?o:"")}),Ee=te(({ctx:e})=>{var t;return null===(t=e.req)||void 0===t?void 0:t.session}),pe=(e,t)=>(r,s)=>{const o=p();ae()(r,o,0),$.middleware(r).push({method:o,argument:t,propertyKey:s,callback:e})},ce=e=>{var t;return(null===(t=e.split(".").pop())||void 0===t?void 0:t.toLowerCase())||"bin"},_e=(e,t)=>{var r;return null!==(r=e[t])&&void 0!==r?r:null},ve=(e,t)=>{const r=p()+"."+t;return S(L(e,r))?ve(e,t):r},Te=e=>{const t=l({},e),r=C({destination(e,r,s){var o;const i=_e(t,r.fieldname);s(null,null!==(o=null==i?void 0:i.path)&&void 0!==o?o:"./")},filename(e,r,s){var o;const i=_e(t,r.fieldname);s(null,ve(null!==(o=null==i?void 0:i.path)&&void 0!==o?o:"./",ce(r.originalname)))}}),s=Math.max(...Object.values(t).map(e=>{var t;return null!==(t=e.size)&&void 0!==t?t:0})),o=U({storage:r,fileFilter(e,r,s){var o;const i=_e(t,r.fieldname);return i?((e,t)=>!t.length||t.includes(ce(e.originalname))||t.includes(e.mimetype.toLowerCase()))(r,null!==(o=null==i?void 0:i.types)&&void 0!==o?o:[])?void s(null,!0):s(new Error(`FILE TYPE NOT ALLOWED FOR "${r.fieldname}"`)):s(new Error(`UPLOAD FIELD "${r.fieldname}" IS NOT CONFIGURED`))},limits:{fileSize:1024*s*1024}}).fields(Object.keys(t).map(e=>{var r,s;return{name:e,maxCount:null!==(s=null===(r=t[e])||void 0===r?void 0:r.count)&&void 0!==s?s:1}}));return(e,t,r)=>{pe(e=>{o(e.req,e.res,t=>{if(t)return"LIMIT_UNEXPECTED_FILE"==t.code&&(t.message=`FIELD "${t.field}" EXCEEDS MAX SIZE`),e.destroy(t);e.next()})})(e,t,r)}},Oe=e=>(t,r,s)=>{pe(t=>{t.cache(Object.assign({},e)),t.next()})(t,r,s)},me=(e,t)=>(r,s)=>{let o=d;if(c(s)){const t=r;u(t[e])&&(o=t[e])}$.middleware(r).push({method:e,argument:t,propertyKey:s,callback:o})},Re=e=>{const t=_.object(u(e)?e(_):e).parse();return(e,r,s)=>{pe(e=>P(void 0,void 0,void 0,function*(){var r,s;const{error:o,message:i,value:n}=yield t.validateAsync(null!==(s=null===(r=e.req)||void 0===r?void 0:r.body)&&void 0!==s?s:{});if(o)return e.error(new w(null!=i?i:o));e.req.body=n,e.next()}))(e,r,s)}};export{V as All,re as App,G as Application,se as Argument,ie as Body,Oe as Cache,H as Context,Q as Controller,ne as Cookies,ae as Ctx,W as Delete,Y as Extends,le as Files,B as Get,X as Head,he as Headers,M as InternalServerError,$ as Metadata,j as Methods,me as Middleware,k as NotFoundError,z as Options,ue as Params,Re as Parse,Z as Patch,J as Post,ee as Put,de as Query,b as ResponseError,Ee as Session,F as Status,q as UnauthorizedError,Te as Upload,pe as Use,w as ValidationError,K as methodFactory,te as parameterFactory};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@andrewcaires/express",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.2",
|
|
4
4
|
"description": "Decorators for express",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs.js",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"@andrewcaires/decorator": "^1.1.1",
|
|
40
40
|
"@andrewcaires/node": "^1.2.10",
|
|
41
|
-
"@andrewcaires/utils.js": "^0.4.
|
|
41
|
+
"@andrewcaires/utils.js": "^0.4.26",
|
|
42
42
|
"compression": "^1.8.1",
|
|
43
43
|
"cookie-parser": "^1.4.7",
|
|
44
44
|
"cors": "^2.8.5",
|
|
@@ -51,14 +51,14 @@
|
|
|
51
51
|
"@rollup/plugin-commonjs": "^29.0.0",
|
|
52
52
|
"@rollup/plugin-terser": "^0.4.4",
|
|
53
53
|
"@rollup/plugin-typescript": "^12.3.0",
|
|
54
|
-
"@rollup/rollup-darwin-arm64": "^4.55.
|
|
54
|
+
"@rollup/rollup-darwin-arm64": "^4.55.3",
|
|
55
55
|
"@types/compression": "^1.8.1",
|
|
56
56
|
"@types/cookie-parser": "^1.4.10",
|
|
57
57
|
"@types/cors": "^2.8.19",
|
|
58
58
|
"@types/express": "^5.0.6",
|
|
59
59
|
"@types/express-session": "^1.18.2",
|
|
60
60
|
"@types/multer": "^2.0.0",
|
|
61
|
-
"@types/node": "^25.0.
|
|
61
|
+
"@types/node": "^25.0.10",
|
|
62
62
|
"@types/request-ip": "^0.0.41",
|
|
63
63
|
"@types/swagger-ui-express": "^4.1.8",
|
|
64
64
|
"eslint": "^9.39.2",
|