@andrewcaires/express 1.0.0 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -16,35 +16,101 @@ The module is now available on npm! `npm i @andrewcaires/express`
16
16
  ```js
17
17
  // index.ts
18
18
 
19
- @Controller("/users")
20
- class UsersController {
19
+ import {
20
+
21
+ Application,
22
+ Argument,
23
+ Body,
24
+ Controller,
25
+ Delete,
26
+ Get,
27
+ Middleware,
28
+ Next,
29
+ Params,
30
+ Post,
31
+ Put,
32
+ Res,
33
+ Responses
34
+
35
+ } from "@andrewcaires/express";
36
+ import { NextFunction, Response } from "express";
37
+
38
+ @Controller("/test")
39
+ class TestController {
40
+
41
+ public middleware(
42
+ @Argument() arg: string,
43
+ @Next() next: NextFunction
44
+ ) {
45
+
46
+ console.log("middleware", arg);
47
+
48
+ return next();
49
+ }
50
+
51
+ @Post()
52
+ @Middleware("middleware", "add")
53
+ public add(
54
+ @Res() res: Response,
55
+ @Body() body: any
56
+ ) {
57
+
58
+ return Responses.data(res, body);
59
+ }
21
60
 
22
61
  @Get()
23
- public all({ req, response }: IExpress) {
62
+ @Middleware("middleware", "all")
63
+ public all(
64
+ @Res() res: Response
65
+ ) {
24
66
 
25
- response.list([]);
67
+ return Responses.list(res, [1, 2, 3, 4, 5, 6, 7, 8, 9]);
68
+ }
69
+
70
+ @Delete("/:id")
71
+ @Middleware("middleware", "del")
72
+ public del(
73
+ @Res() res: Response,
74
+ @Params("id") id: string
75
+ ) {
76
+
77
+ return Responses.success(res, id);
26
78
  }
27
- }
28
79
 
29
- import { Application } from "@andrewcaires/express";
80
+ @Get("/:id")
81
+ @Middleware("middleware", "get")
82
+ public get(
83
+ @Res() res: Response,
84
+ @Params("id") id: string
85
+ ) {
86
+
87
+ return Responses.data(res, { id, name: "test" });
88
+ }
89
+
90
+ @Put("/:id")
91
+ @Middleware("middleware", "set")
92
+ public set(
93
+ @Res() res: Response,
94
+ @Params("id") id: string
95
+ ) {
96
+
97
+ return Responses.success(res, id);
98
+ }
99
+ }
30
100
 
31
101
  const main = async () => {
32
102
 
33
- const app = new Application(
34
- [
103
+ const app = new Application([
35
104
 
36
- new UsersController,
105
+ new TestController,
37
106
 
38
- ],
39
- {
107
+ ], {
40
108
 
41
- port: 3000,
109
+ path: "/api",
42
110
 
43
- }
44
- );
111
+ });
45
112
 
46
113
  await app.listen();
47
-
48
114
  };
49
115
 
50
116
  main().catch(console.log);
package/dist/index.cjs.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /*!
2
- * @andrewcaires/express v1.0.0
2
+ * @andrewcaires/express v1.0.3
3
3
  * Decorators for express
4
4
  * (c) 2023 Andrew Caires
5
5
  * @license: MIT
6
6
  */
7
- "use strict";require("reflect-metadata");var e=require("@andrewcaires/utils.js"),t=require("cors"),s=require("express"),r=require("fs"),o=require("http"),n=require("https"),p=require("net"),i=require("path");function a(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 E,_=a(o),x=a(n);function h(e,t,s,r){return new(s||(s=Promise))((function(o,n){function p(e){try{a(r.next(e))}catch(e){n(e)}}function i(e){try{a(r.throw(e))}catch(e){n(e)}}function a(e){var t;e.done?o(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(p,i)}a((r=r.apply(e,t||[])).next())}))}exports.MetadataKeys=void 0,(E=exports.MetadataKeys||(exports.MetadataKeys={})).MIDDLEWARE="@express_middleware",E.PATH="@express_path",E.ROUTERS="@express_routers",E.PARAMETERS="@express_parameters";const u=(e,t,s)=>Reflect.hasMetadata(e,t)?Reflect.getMetadata(e,t):s,d=200;class c{constructor(e){this.res=e}success(e){return c.success(this.res,e)}static success(e,t){return e.status(d).json({message:t})}data(e){return c.data(this.res,e)}static data(e,t){return e.status(d).json(Object.assign({},t))}error(e){return c.error(this.res,e)}static error(e,t){return e.status(500).json({message:t})}list(e){return c.list(this.res,e)}static list(e,t){return e.status(d).json([...t])}notfound(e){return c.notfound(this.res,e)}static notfound(e,t){return e.status(404).json({message:t})}validation(e){return c.validation(this.res,e)}static validation(e,t){return e.status(400).json({message:t})}unauthorized(e){return c.unauthorized(this.res,e)}static unauthorized(e,t){return e.status(401).json({message:t})}}class T extends e.EventEmitter{get instance(){return this._app}get router(){return this._router}constructor(o,n){var p;super(),this._app=s(),this._options={},this._default={cross:!1,hybrid:!1,path:"/",port:3e3},this._router=s.Router(),this._controlles=s.Router(),this._options=Object.assign(Object.assign({},this._default),n),this._app.use(s.json()),this._app.disable("x-powered-by"),this._app.use(s.urlencoded({extended:!0})),this._options.cross&&this._app.use(t()),this._app.use(this._router);const a=(null===(p=this._options.path)||void 0===p?void 0:p.length)?this._options.path:"/";if(this._app.use(a,this._controlles),this._app.all(a+"/*",((e,t)=>c.notfound(t,"Invalid API"))),this._options.public){const e=i.resolve(this._options.public);r.existsSync(e)&&this._app.use(s.static(e)),this._app.get("*",((t,s)=>{if(!r.existsSync(e))return c.notfound(s,'File "index.html" not found');s.sendFile(e+"/index.html")}))}o.forEach((t=>{const r=t.constructor,o=this._path(r),n=this._routers(r),p=this._middlewares(r),i=this._parameters(r),a=s.Router();n.forEach((s=>{const o=s.name.toString();if(e.isFunction(t[o])){if(!e.isFunction(a[s.method]))return this.error(new Error('Method "'+s.method+'" Not Found.'),"Express");const r=this._handles(t,o,p,i),n=this._indexes(o,i);a[s.method](s.path,...r,((e,s,r)=>t[o](...this._args(e,s,r,n))))}else this.error(new Error('Router "'+r.name+"."+o+'" Not Found.'),"Express")})),this._controlles.use(o,a)}))}error(t,s){e.isUndefined(s)?console.error(t):console.error(s+":",t)}log(t,s){e.isUndefined(s)?console.error(t):console.error(s+":",t)}_args(e,t,s,r,o){const n=[],p={req:e,res:t,next:s,app:this,send:new c(t),argument:o};return r.forEach((e=>{n[e.index]=e.callback(Object.assign(Object.assign({},p),{key:e.key}))})),n}_handles(t,s,r,o){return r.filter((e=>e.name==s)).map((s=>{if(e.isFunction(t[s.method])){const e=this._indexes(s.method,o);return(r,o,n)=>t[s.method](...this._args(r,o,n,e,s.argument))}this.error(new Error('Middleware "'+s.method+'" Not Found.'),"Express")})).filter(e.isFunction)}_indexes(e,t){const s=[];return t.forEach((t=>t.name==e&&s.push(t))),s}_middlewares(e){return[...u(exports.MetadataKeys.MIDDLEWARE,e,[])].reverse()}_parameters(e){return u(exports.MetadataKeys.PARAMETERS,e,[])}_path(e){return u(exports.MetadataKeys.PATH,e,"/")}_routers(e){return u(exports.MetadataKeys.ROUTERS,e,[])}listen(){return h(this,void 0,void 0,(function*(){if(this._options.cert&&this._options.key||(this._server=_.createServer(this._app),this._server.listen(this._options.port,(()=>this.log("Server started on port "+this._options.port+".","Express")))),!this._server){const e=_.createServer(((e,t)=>{const s=80==this._options.port?":80":"";t.writeHead(301,{Location:"https://"+e.headers.host+s+e.url}),t.end()})),t=x.createServer({key:this._options.key,cert:this._options.cert},this._app);if(this._options.hybrid){new p.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("Server started on port "+this._options.port+".","Express"))),this._server=t}this._server||(443==this._options.port&&e.listen(80,(()=>this.log("Server started on port 80","Express"))),t.listen(this._options.port,(()=>this.log("Server started on port "+this._options.port+".","Express"))),this._server=t)}}))}}var R;exports.Methods=void 0,(R=exports.Methods||(exports.Methods={})).GET="get",R.POST="post",R.PUT="put",R.HEAD="head",R.DELETE="delete",R.OPTIONS="options",R.PATCH="patch";const O=e=>t=>(s,r)=>{const o=s.constructor,n=u(exports.MetadataKeys.ROUTERS,o,[]);n.push({path:(null==t?void 0:t.length)?t:"/",method:e,name:r}),Reflect.defineMetadata(exports.MetadataKeys.ROUTERS,n,o)},l=O(exports.Methods.GET),A=O(exports.Methods.POST),N=O(exports.Methods.PUT),I=O(exports.Methods.HEAD),S=O(exports.Methods.DELETE),D=O(exports.Methods.OPTIONS),M=O(exports.Methods.PATCH),f=e=>t=>(s,r,o)=>{const n=s.constructor,p=u(exports.MetadataKeys.PARAMETERS,n,[]);p.push({callback:e,index:o,key:(null==t?void 0:t.length)?t:"",name:r}),Reflect.defineMetadata(exports.MetadataKeys.PARAMETERS,p,n)},P=(t,s)=>e.isUndefined(s)?t:t[s],U=f((({app:e})=>e)),m=f((({argument:e})=>e)),L=f((({req:e,key:t})=>P(e.body,t))),y=f((({req:e,key:t})=>P(e.cookies,t))),C=f((({req:e,key:t})=>P(e.cookies,t))),v=f((({next:e})=>e)),g=f((({req:e,key:t})=>P(e.params,t))),F=f((({req:e,key:t})=>P(e.query,t))),H=f((({req:e})=>e)),b=H,j=f((({res:e})=>e)),q=j,k=f((({send:e})=>e));exports.ACCEPTED=202,exports.ALREADY_REPORTED=208,exports.App=U,exports.Application=T,exports.Argument=m,exports.BAD_GATEWAY=502,exports.BAD_REQUEST=400,exports.Body=L,exports.CLIENT_CLOSED_REQUEST=499,exports.CONFLICT=409,exports.CONNECTION_CLOSED_WITHOUT_RESPONSE=444,exports.CONTINUE=100,exports.CREATED=201,exports.Controller=e=>t=>Reflect.defineMetadata(exports.MetadataKeys.PATH,(null==e?void 0:e.length)?e:"/",t),exports.Cookies=y,exports.Delete=S,exports.EXPECTATION_FAILED=417,exports.FAILED_DEPENDENCY=424,exports.FORBIDDEN=403,exports.FOUND=302,exports.GATEWAY_TIMEOUT=504,exports.GONE=410,exports.Get=l,exports.HTTP_VERSION_NOT_SUPPORTED=505,exports.Head=I,exports.Headers=C,exports.IM_A_TEAPOT=418,exports.IM_USED=226,exports.INSUFFICIENT_STORAGE=507,exports.INTERNAL_SERVER_ERROR=500,exports.LENGTH_REQUIRED=411,exports.LOCKED=423,exports.LOOP_DETECTED=508,exports.METHOD_NOT_ALLOWED=405,exports.MISDIRECTED_REQUEST=421,exports.MOVED_PERMANENTLY=301,exports.MULTIPLE_CHOICES=300,exports.MULTI_STATUS=207,exports.Metadata=u,exports.Middleware=(e,t)=>(s,r)=>{const o=s.constructor,n=u(exports.MetadataKeys.MIDDLEWARE,o,[]);n.push({name:r,method:e,argument:t}),Reflect.defineMetadata(exports.MetadataKeys.MIDDLEWARE,n,o)},exports.NETWORK_AUTHENTICATION_REQUIRED=511,exports.NETWORK_CONNECTION_TIMEOUT_ERROR=599,exports.NON_AUTHORITATIVE_INFORMATION=203,exports.NOT_ACCEPTABLE=406,exports.NOT_EXTENDED=510,exports.NOT_FOUND=404,exports.NOT_IMPLEMENTED=501,exports.NOT_MODIFIED=304,exports.NO_CONTENT=204,exports.Next=v,exports.OK=d,exports.Options=D,exports.PARTIAL_CONTENT=206,exports.PAYLOAD_TOO_LARGE=413,exports.PAYMENT_REQUIRED=402,exports.PERMANENT_REDIRECT=308,exports.PRECONDITION_FAILED=412,exports.PRECONDITION_REQUIRED=428,exports.PROCESSING=102,exports.PROXY_AUTHENTICATION_REQUIRED=407,exports.Params=g,exports.Patch=M,exports.Post=A,exports.Put=N,exports.Query=F,exports.REQUESTED_RANGE_NOT_SATISFIABLE=416,exports.REQUEST_HEADER_FIELDS_TOO_LARGE=431,exports.REQUEST_TIMEOUT=408,exports.REQUEST_URI_TOO_LONG=414,exports.RESET_CONTENT=205,exports.Req=b,exports.Request=H,exports.Res=q,exports.Response=j,exports.Responses=c,exports.SEE_OTHER=303,exports.SERVICE_UNAVAILABLE=503,exports.SWITCHING_PROTOCOLS=101,exports.Send=k,exports.TEMPORARY_REDIRECT=307,exports.TOO_MANY_REQUESTS=429,exports.UNAUTHORIZED=401,exports.UNAVAILABLE_FOR_LEGAL_REASONS=451,exports.UNPROCESSABLE_ENTITY=422,exports.UNSUPPORTED_MEDIA_TYPE=415,exports.UPGRADE_REQUIRED=426,exports.USE_PROXY=305,exports.VARIANT_ALSO_NEGOCIATES=506,exports.methodFactory=O,exports.parameterFactory=f;
7
+ "use strict";require("reflect-metadata");var e=require("@andrewcaires/utils.js"),t=require("cors"),s=require("express"),r=require("fs"),o=require("http"),n=require("https"),a=require("net"),i=require("path");function E(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 p,_=E(o),h=E(n);function T(e,t,s,r){return new(s||(s=Promise))((function(o,n){function a(e){try{E(r.next(e))}catch(e){n(e)}}function i(e){try{E(r.throw(e))}catch(e){n(e)}}function E(e){var t;e.done?o(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(a,i)}E((r=r.apply(e,t||[])).next())}))}exports.MetadataKeys=void 0,(p=exports.MetadataKeys||(exports.MetadataKeys={})).MIDDLEWARE="@express_middleware",p.PATH="@express_path",p.ROUTERS="@express_routers",p.PARAMETERS="@express_parameters";const d=(e,t,s)=>Reflect.hasMetadata(e,t)?Reflect.getMetadata(e,t):s;class u{}u.CONTINUE=100,u.SWITCHING_PROTOCOLS=101,u.PROCESSING=102,u.OK=200,u.CREATED=201,u.ACCEPTED=202,u.NON_AUTHORITATIVE_INFORMATION=203,u.NO_CONTENT=204,u.RESET_CONTENT=205,u.PARTIAL_CONTENT=206,u.MULTI_STATUS=207,u.ALREADY_REPORTED=208,u.IM_USED=226,u.MULTIPLE_CHOICES=300,u.MOVED_PERMANENTLY=301,u.FOUND=302,u.SEE_OTHER=303,u.NOT_MODIFIED=304,u.USE_PROXY=305,u.TEMPORARY_REDIRECT=307,u.PERMANENT_REDIRECT=308,u.BAD_REQUEST=400,u.UNAUTHORIZED=401,u.PAYMENT_REQUIRED=402,u.FORBIDDEN=403,u.NOT_FOUND=404,u.METHOD_NOT_ALLOWED=405,u.NOT_ACCEPTABLE=406,u.PROXY_AUTHENTICATION_REQUIRED=407,u.REQUEST_TIMEOUT=408,u.CONFLICT=409,u.GONE=410,u.LENGTH_REQUIRED=411,u.PRECONDITION_FAILED=412,u.PAYLOAD_TOO_LARGE=413,u.REQUEST_URI_TOO_LONG=414,u.UNSUPPORTED_MEDIA_TYPE=415,u.REQUESTED_RANGE_NOT_SATISFIABLE=416,u.EXPECTATION_FAILED=417,u.IM_A_TEAPOT=418,u.MISDIRECTED_REQUEST=421,u.UNPROCESSABLE_ENTITY=422,u.LOCKED=423,u.FAILED_DEPENDENCY=424,u.UPGRADE_REQUIRED=426,u.PRECONDITION_REQUIRED=428,u.TOO_MANY_REQUESTS=429,u.REQUEST_HEADER_FIELDS_TOO_LARGE=431,u.CONNECTION_CLOSED_WITHOUT_RESPONSE=444,u.UNAVAILABLE_FOR_LEGAL_REASONS=451,u.CLIENT_CLOSED_REQUEST=499,u.INTERNAL_SERVER_ERROR=500,u.NOT_IMPLEMENTED=501,u.BAD_GATEWAY=502,u.SERVICE_UNAVAILABLE=503,u.GATEWAY_TIMEOUT=504,u.HTTP_VERSION_NOT_SUPPORTED=505,u.VARIANT_ALSO_NEGOCIATES=506,u.INSUFFICIENT_STORAGE=507,u.LOOP_DETECTED=508,u.NOT_EXTENDED=510,u.NETWORK_AUTHENTICATION_REQUIRED=511,u.NETWORK_CONNECTION_TIMEOUT_ERROR=599;class c{static success(e,t){return e.status(u.OK).json({message:t})}static data(e,t){return e.status(u.OK).json(Object.assign({},t))}static error(e,t){return e.status(u.INTERNAL_SERVER_ERROR).json({message:t})}static list(e,t){return e.status(u.OK).json([...t])}static notfound(e,t){return e.status(u.NOT_FOUND).json({message:t})}static validation(e,t){return e.status(u.BAD_REQUEST).json({message:t})}static unauthorized(e,t){return e.status(u.UNAUTHORIZED).json({message:t})}}class R extends e.EventEmitter{get instance(){return this._app}get router(){return this._router}get server(){return this._server}constructor(o,n){var a;super(),this._app=s(),this._options={},this._default={cross:!1,hybrid:!1,path:"/",port:3e3},this._router=s.Router(),this._controlles=s.Router(),this._options=Object.assign(Object.assign({},this._default),n),this._app.use(s.json()),this._app.disable("x-powered-by"),this._app.use(s.urlencoded({extended:!0})),this._options.cross&&this._app.use(t()),this._app.use(this._router);const E=(null===(a=this._options.path)||void 0===a?void 0:a.length)?this._options.path:"/";if(this._app.use(E,this._controlles),this._app.all(E+"/*",((e,t)=>c.notfound(t,"Invalid API"))),this._options.public){const e=i.resolve(this._options.public);r.existsSync(e)&&this._app.use(s.static(e)),this._app.get("*",((t,s)=>{if(!r.existsSync(e))return c.notfound(s,'File "index.html" not found');s.sendFile(e+"/index.html")}))}o.forEach((t=>{const r=t.constructor,o=this._path(r),n=this._routers(r),a=this._middlewares(r),i=this._parameters(r),E=s.Router();n.forEach((s=>{const o=s.name.toString();if(e.isFunction(t[o])){if(!e.isFunction(E[s.method]))return this.error(new Error('Method "'+s.method+'" Not Found.'),"Express");const r=this._handles(t,o,a,i),n=this._indexes(o,i);E[s.method](s.path,...r,((e,s,r)=>t[o](...this._args(e,s,r,n))))}else this.error(new Error('Router "'+r.name+"."+o+'" Not Found.'),"Express")})),this._controlles.use(o,E)}))}error(t,s){e.isUndefined(s)?console.error(t):console.error(s+":",t)}log(t,s){e.isUndefined(s)?console.error(t):console.error(s+":",t)}_args(e,t,s,r,o){const n=[],a={req:e,res:t,next:s,key:"",app:this,argument:o};return r.forEach((e=>{n[e.index]=e.callback(Object.assign(Object.assign({},a),{key:e.key}))})),n}_handles(t,s,r,o){return r.filter((e=>e.name==s)).map((s=>{if(e.isFunction(t[s.method])){const e=this._indexes(s.method,o);return(r,o,n)=>t[s.method](...this._args(r,o,n,e,s.argument))}this.error(new Error('Middleware "'+s.method+'" Not Found.'),"Express")})).filter(e.isFunction)}_indexes(e,t){const s=[];return t.forEach((t=>t.name==e&&s.push(t))),s}_middlewares(e){return[...d(exports.MetadataKeys.MIDDLEWARE,e,[])].reverse()}_parameters(e){return d(exports.MetadataKeys.PARAMETERS,e,[])}_path(e){return d(exports.MetadataKeys.PATH,e,"/")}_routers(e){return d(exports.MetadataKeys.ROUTERS,e,[])}listen(){return T(this,void 0,void 0,(function*(){if(this._options.cert&&this._options.key||(this._server=_.createServer(this._app),this._server.listen(this._options.port,(()=>this.log("Server started on port "+this._options.port+".","Express")))),!this._server){const e=_.createServer(((e,t)=>{const s=80==this._options.port?":80":"";t.writeHead(301,{Location:"https://"+e.headers.host+s+e.url}),t.end()})),t=h.createServer({key:this._options.key,cert:this._options.cert},this._app);if(this._options.hybrid){new a.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("Server started on port "+this._options.port+".","Express"))),this._server=t}this._server||(443==this._options.port&&e.listen(80,(()=>this.log("Server started on port 80","Express"))),t.listen(this._options.port,(()=>this.log("Server started on port "+this._options.port+".","Express"))),this._server=t)}}))}}var O;exports.Methods=void 0,(O=exports.Methods||(exports.Methods={})).GET="get",O.POST="post",O.PUT="put",O.HEAD="head",O.DELETE="delete",O.OPTIONS="options",O.PATCH="patch";const l=e=>t=>(s,r)=>{const o=s.constructor,n=d(exports.MetadataKeys.ROUTERS,o,[]);n.push({path:(null==t?void 0:t.length)?t:"/",method:e,name:r}),Reflect.defineMetadata(exports.MetadataKeys.ROUTERS,n,o)},A=l(exports.Methods.GET),N=l(exports.Methods.POST),x=l(exports.Methods.PUT),I=l(exports.Methods.DELETE),D=l(exports.Methods.PATCH),S=l(exports.Methods.HEAD),M=l(exports.Methods.OPTIONS),P=e=>t=>(s,r,o)=>{const n=s.constructor,a=d(exports.MetadataKeys.PARAMETERS,n,[]);a.push({callback:e,index:o,key:(null==t?void 0:t.length)?t:"",name:r}),Reflect.defineMetadata(exports.MetadataKeys.PARAMETERS,a,n)},U=(t,s)=>e.isUndefined(s)?t:t[s],f=P((({app:e})=>e)),m=P((({argument:e})=>e)),L=P((({req:e,key:t})=>U(e.body,t))),y=P((({req:e,key:t})=>U(e.cookies,t))),C=P((({req:e,key:t})=>U(e.headers,t))),v=P((({next:e})=>e)),g=P((({req:e,key:t})=>U(e.params,t))),F=P((({req:e,key:t})=>U(e.query,t))),H=P((({req:e})=>e)),K=H,b=P((({res:e})=>e)),j=b;exports.App=f,exports.Application=R,exports.Argument=m,exports.Body=L,exports.Controller=e=>t=>Reflect.defineMetadata(exports.MetadataKeys.PATH,(null==e?void 0:e.length)?e:"/",t),exports.Cookies=y,exports.Delete=I,exports.Get=A,exports.Head=S,exports.Headers=C,exports.Metadata=d,exports.Middleware=(e,t)=>(s,r)=>{const o=s.constructor,n=d(exports.MetadataKeys.MIDDLEWARE,o,[]);n.push({name:r,method:e,argument:t}),Reflect.defineMetadata(exports.MetadataKeys.MIDDLEWARE,n,o)},exports.Next=v,exports.Options=M,exports.Params=g,exports.Patch=D,exports.Post=N,exports.Put=x,exports.Query=F,exports.Req=K,exports.Request=H,exports.Res=j,exports.Response=b,exports.Responses=c,exports.Status=u,exports.methodFactory=l,exports.parameterFactory=P;
package/dist/index.d.ts CHANGED
@@ -1,32 +1,22 @@
1
1
  /*!
2
- * @andrewcaires/express v1.0.0
2
+ * @andrewcaires/express v1.0.3
3
3
  * Decorators for express
4
4
  * (c) 2023 Andrew Caires
5
5
  * @license: MIT
6
6
  */
7
7
  import { EventEmitter, TypeCallbackFunction } from '@andrewcaires/utils.js';
8
- import { Response as Response$1, Request as Request$1, NextFunction, Express, Router } from 'express';
8
+ import { Request as Request$1, Response as Response$1, NextFunction, Express, Router } from 'express';
9
+ import * as http from 'http';
10
+ import * as https from 'https';
9
11
 
10
- type ResponseJson = Response$1<any, Record<string, any>>;
11
- declare class Responses {
12
- private res;
13
- constructor(res: Response$1);
14
- success(message: string): ResponseJson;
15
- static success(res: Response$1, message: string): ResponseJson;
16
- data(obj: object): ResponseJson;
17
- static data(res: Response$1, obj: object): ResponseJson;
18
- error(message: string): ResponseJson;
19
- static error(res: Response$1, message: string): ResponseJson;
20
- list(arr: Array<any>): ResponseJson;
21
- static list(res: Response$1, arr: Array<any>): ResponseJson;
22
- notfound(message: string): ResponseJson;
23
- static notfound(res: Response$1, message: string): ResponseJson;
24
- validation(message: string): ResponseJson;
25
- static validation(res: Response$1, message: string): ResponseJson;
26
- unauthorized(message: string): ResponseJson;
27
- static unauthorized(res: Response$1, message: string): ResponseJson;
12
+ interface IArgs {
13
+ req: Request$1;
14
+ res: Response$1;
15
+ next: NextFunction;
16
+ key: string;
17
+ app: Application;
18
+ argument: any;
28
19
  }
29
-
30
20
  interface IOptions {
31
21
  cert?: Buffer;
32
22
  cross?: boolean;
@@ -36,15 +26,6 @@ interface IOptions {
36
26
  port?: number;
37
27
  public?: string;
38
28
  }
39
- interface IParameters {
40
- req: Request$1;
41
- res: Response$1;
42
- next: NextFunction;
43
- key: string;
44
- app: Application;
45
- send: Responses;
46
- argument: any;
47
- }
48
29
  declare class Application extends EventEmitter {
49
30
  private readonly _app;
50
31
  private _server?;
@@ -54,6 +35,7 @@ declare class Application extends EventEmitter {
54
35
  private readonly _controlles;
55
36
  get instance(): Express;
56
37
  get router(): Router;
38
+ get server(): http.Server | https.Server | undefined;
57
39
  constructor(controlles: Array<object>, options?: IOptions);
58
40
  error(error: any, source?: string): void;
59
41
  log(message: string, source?: string): void;
@@ -95,10 +77,10 @@ declare const methodFactory: (method: Methods) => (path?: string) => MethodDecor
95
77
  declare const Get: (path?: string) => MethodDecorator;
96
78
  declare const Post: (path?: string) => MethodDecorator;
97
79
  declare const Put: (path?: string) => MethodDecorator;
98
- declare const Head: (path?: string) => MethodDecorator;
99
80
  declare const Delete: (path?: string) => MethodDecorator;
100
- declare const Options: (path?: string) => MethodDecorator;
101
81
  declare const Patch: (path?: string) => MethodDecorator;
82
+ declare const Head: (path?: string) => MethodDecorator;
83
+ declare const Options: (path?: string) => MethodDecorator;
102
84
 
103
85
  interface IMiddlewares {
104
86
  name: string | symbol;
@@ -126,70 +108,82 @@ declare const Request: (key?: string) => ParameterDecorator;
126
108
  declare const Req: (key?: string) => ParameterDecorator;
127
109
  declare const Response: (key?: string) => ParameterDecorator;
128
110
  declare const Res: (key?: string) => ParameterDecorator;
129
- declare const Send: (key?: string) => ParameterDecorator;
130
111
 
131
- declare const CONTINUE = 100;
132
- declare const SWITCHING_PROTOCOLS = 101;
133
- declare const PROCESSING = 102;
134
- declare const OK = 200;
135
- declare const CREATED = 201;
136
- declare const ACCEPTED = 202;
137
- declare const NON_AUTHORITATIVE_INFORMATION = 203;
138
- declare const NO_CONTENT = 204;
139
- declare const RESET_CONTENT = 205;
140
- declare const PARTIAL_CONTENT = 206;
141
- declare const MULTI_STATUS = 207;
142
- declare const ALREADY_REPORTED = 208;
143
- declare const IM_USED = 226;
144
- declare const MULTIPLE_CHOICES = 300;
145
- declare const MOVED_PERMANENTLY = 301;
146
- declare const FOUND = 302;
147
- declare const SEE_OTHER = 303;
148
- declare const NOT_MODIFIED = 304;
149
- declare const USE_PROXY = 305;
150
- declare const TEMPORARY_REDIRECT = 307;
151
- declare const PERMANENT_REDIRECT = 308;
152
- declare const BAD_REQUEST = 400;
153
- declare const UNAUTHORIZED = 401;
154
- declare const PAYMENT_REQUIRED = 402;
155
- declare const FORBIDDEN = 403;
156
- declare const NOT_FOUND = 404;
157
- declare const METHOD_NOT_ALLOWED = 405;
158
- declare const NOT_ACCEPTABLE = 406;
159
- declare const PROXY_AUTHENTICATION_REQUIRED = 407;
160
- declare const REQUEST_TIMEOUT = 408;
161
- declare const CONFLICT = 409;
162
- declare const GONE = 410;
163
- declare const LENGTH_REQUIRED = 411;
164
- declare const PRECONDITION_FAILED = 412;
165
- declare const PAYLOAD_TOO_LARGE = 413;
166
- declare const REQUEST_URI_TOO_LONG = 414;
167
- declare const UNSUPPORTED_MEDIA_TYPE = 415;
168
- declare const REQUESTED_RANGE_NOT_SATISFIABLE = 416;
169
- declare const EXPECTATION_FAILED = 417;
170
- declare const IM_A_TEAPOT = 418;
171
- declare const MISDIRECTED_REQUEST = 421;
172
- declare const UNPROCESSABLE_ENTITY = 422;
173
- declare const LOCKED = 423;
174
- declare const FAILED_DEPENDENCY = 424;
175
- declare const UPGRADE_REQUIRED = 426;
176
- declare const PRECONDITION_REQUIRED = 428;
177
- declare const TOO_MANY_REQUESTS = 429;
178
- declare const REQUEST_HEADER_FIELDS_TOO_LARGE = 431;
179
- declare const CONNECTION_CLOSED_WITHOUT_RESPONSE = 444;
180
- declare const UNAVAILABLE_FOR_LEGAL_REASONS = 451;
181
- declare const CLIENT_CLOSED_REQUEST = 499;
182
- declare const INTERNAL_SERVER_ERROR = 500;
183
- declare const NOT_IMPLEMENTED = 501;
184
- declare const BAD_GATEWAY = 502;
185
- declare const SERVICE_UNAVAILABLE = 503;
186
- declare const GATEWAY_TIMEOUT = 504;
187
- declare const HTTP_VERSION_NOT_SUPPORTED = 505;
188
- declare const VARIANT_ALSO_NEGOCIATES = 506;
189
- declare const INSUFFICIENT_STORAGE = 507;
190
- declare const LOOP_DETECTED = 508;
191
- declare const NOT_EXTENDED = 510;
192
- declare const NETWORK_AUTHENTICATION_REQUIRED = 511;
193
- declare const NETWORK_CONNECTION_TIMEOUT_ERROR = 599;
112
+ type ResponseJson = Response$1<any, Record<string, any>>;
113
+ declare class Responses {
114
+ static success(res: Response$1, message: string): ResponseJson;
115
+ static data(res: Response$1, obj: object): ResponseJson;
116
+ static error(res: Response$1, message: string): ResponseJson;
117
+ static list(res: Response$1, arr: Array<any>): ResponseJson;
118
+ static notfound(res: Response$1, message: string): ResponseJson;
119
+ static validation(res: Response$1, message: string): ResponseJson;
120
+ static unauthorized(res: Response$1, message: string): ResponseJson;
121
+ }
122
+
123
+ declare class Status {
124
+ static readonly CONTINUE = 100;
125
+ static readonly SWITCHING_PROTOCOLS = 101;
126
+ static readonly PROCESSING = 102;
127
+ static readonly OK = 200;
128
+ static readonly CREATED = 201;
129
+ static readonly ACCEPTED = 202;
130
+ static readonly NON_AUTHORITATIVE_INFORMATION = 203;
131
+ static readonly NO_CONTENT = 204;
132
+ static readonly RESET_CONTENT = 205;
133
+ static readonly PARTIAL_CONTENT = 206;
134
+ static readonly MULTI_STATUS = 207;
135
+ static readonly ALREADY_REPORTED = 208;
136
+ static readonly IM_USED = 226;
137
+ static readonly MULTIPLE_CHOICES = 300;
138
+ static readonly MOVED_PERMANENTLY = 301;
139
+ static readonly FOUND = 302;
140
+ static readonly SEE_OTHER = 303;
141
+ static readonly NOT_MODIFIED = 304;
142
+ static readonly USE_PROXY = 305;
143
+ static readonly TEMPORARY_REDIRECT = 307;
144
+ static readonly PERMANENT_REDIRECT = 308;
145
+ static readonly BAD_REQUEST = 400;
146
+ static readonly UNAUTHORIZED = 401;
147
+ static readonly PAYMENT_REQUIRED = 402;
148
+ static readonly FORBIDDEN = 403;
149
+ static readonly NOT_FOUND = 404;
150
+ static readonly METHOD_NOT_ALLOWED = 405;
151
+ static readonly NOT_ACCEPTABLE = 406;
152
+ static readonly PROXY_AUTHENTICATION_REQUIRED = 407;
153
+ static readonly REQUEST_TIMEOUT = 408;
154
+ static readonly CONFLICT = 409;
155
+ static readonly GONE = 410;
156
+ static readonly LENGTH_REQUIRED = 411;
157
+ static readonly PRECONDITION_FAILED = 412;
158
+ static readonly PAYLOAD_TOO_LARGE = 413;
159
+ static readonly REQUEST_URI_TOO_LONG = 414;
160
+ static readonly UNSUPPORTED_MEDIA_TYPE = 415;
161
+ static readonly REQUESTED_RANGE_NOT_SATISFIABLE = 416;
162
+ static readonly EXPECTATION_FAILED = 417;
163
+ static readonly IM_A_TEAPOT = 418;
164
+ static readonly MISDIRECTED_REQUEST = 421;
165
+ static readonly UNPROCESSABLE_ENTITY = 422;
166
+ static readonly LOCKED = 423;
167
+ static readonly FAILED_DEPENDENCY = 424;
168
+ static readonly UPGRADE_REQUIRED = 426;
169
+ static readonly PRECONDITION_REQUIRED = 428;
170
+ static readonly TOO_MANY_REQUESTS = 429;
171
+ static readonly REQUEST_HEADER_FIELDS_TOO_LARGE = 431;
172
+ static readonly CONNECTION_CLOSED_WITHOUT_RESPONSE = 444;
173
+ static readonly UNAVAILABLE_FOR_LEGAL_REASONS = 451;
174
+ static readonly CLIENT_CLOSED_REQUEST = 499;
175
+ static readonly INTERNAL_SERVER_ERROR = 500;
176
+ static readonly NOT_IMPLEMENTED = 501;
177
+ static readonly BAD_GATEWAY = 502;
178
+ static readonly SERVICE_UNAVAILABLE = 503;
179
+ static readonly GATEWAY_TIMEOUT = 504;
180
+ static readonly HTTP_VERSION_NOT_SUPPORTED = 505;
181
+ static readonly VARIANT_ALSO_NEGOCIATES = 506;
182
+ static readonly INSUFFICIENT_STORAGE = 507;
183
+ static readonly LOOP_DETECTED = 508;
184
+ static readonly NOT_EXTENDED = 510;
185
+ static readonly NETWORK_AUTHENTICATION_REQUIRED = 511;
186
+ static readonly NETWORK_CONNECTION_TIMEOUT_ERROR = 599;
187
+ }
194
188
 
195
- export { ACCEPTED, ALREADY_REPORTED, App, Application, Argument, BAD_GATEWAY, BAD_REQUEST, Body, CLIENT_CLOSED_REQUEST, CONFLICT, CONNECTION_CLOSED_WITHOUT_RESPONSE, CONTINUE, CREATED, Controller, Cookies, Delete, EXPECTATION_FAILED, FAILED_DEPENDENCY, FORBIDDEN, FOUND, GATEWAY_TIMEOUT, GONE, Get, HTTP_VERSION_NOT_SUPPORTED, Head, Headers, IM_A_TEAPOT, IM_USED, IMiddlewares, INSUFFICIENT_STORAGE, INTERNAL_SERVER_ERROR, IOptions, IParameter, IParameters, IRouter, LENGTH_REQUIRED, LOCKED, LOOP_DETECTED, METHOD_NOT_ALLOWED, MISDIRECTED_REQUEST, MOVED_PERMANENTLY, MULTIPLE_CHOICES, MULTI_STATUS, Metadata, MetadataKeys, Methods, Middleware, NETWORK_AUTHENTICATION_REQUIRED, NETWORK_CONNECTION_TIMEOUT_ERROR, NON_AUTHORITATIVE_INFORMATION, NOT_ACCEPTABLE, NOT_EXTENDED, NOT_FOUND, NOT_IMPLEMENTED, NOT_MODIFIED, NO_CONTENT, Next, OK, Options, PARTIAL_CONTENT, PAYLOAD_TOO_LARGE, PAYMENT_REQUIRED, PERMANENT_REDIRECT, PRECONDITION_FAILED, PRECONDITION_REQUIRED, PROCESSING, PROXY_AUTHENTICATION_REQUIRED, Params, Patch, Post, Put, Query, REQUESTED_RANGE_NOT_SATISFIABLE, REQUEST_HEADER_FIELDS_TOO_LARGE, REQUEST_TIMEOUT, REQUEST_URI_TOO_LONG, RESET_CONTENT, Req, Request, Res, Response, ResponseJson, Responses, SEE_OTHER, SERVICE_UNAVAILABLE, SWITCHING_PROTOCOLS, Send, TEMPORARY_REDIRECT, TOO_MANY_REQUESTS, UNAUTHORIZED, UNAVAILABLE_FOR_LEGAL_REASONS, UNPROCESSABLE_ENTITY, UNSUPPORTED_MEDIA_TYPE, UPGRADE_REQUIRED, USE_PROXY, VARIANT_ALSO_NEGOCIATES, methodFactory, parameterFactory };
189
+ export { App, Application, Argument, Body, Controller, Cookies, Delete, Get, Head, Headers, IArgs, IMiddlewares, IOptions, IParameter, IRouter, Metadata, MetadataKeys, Methods, Middleware, Next, Options, Params, Patch, Post, Put, Query, Req, Request, Res, Response, ResponseJson, Responses, Status, methodFactory, parameterFactory };
package/dist/index.esm.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /*!
2
- * @andrewcaires/express v1.0.0
2
+ * @andrewcaires/express v1.0.3
3
3
  * Decorators for express
4
4
  * (c) 2023 Andrew Caires
5
5
  * @license: MIT
6
6
  */
7
- import"reflect-metadata";import{EventEmitter as t,isFunction as e,isUndefined as s}from"@andrewcaires/utils.js";import r from"cors";import o,{Router as n,json as i,urlencoded as a}from"express";import{existsSync as h}from"fs";import*as p from"http";import*as u from"https";import{Server as c}from"net";import{resolve as d}from"path";function l(t,e,s,r){return new(s||(s=Promise))((function(o,n){function i(t){try{h(r.next(t))}catch(t){n(t)}}function a(t){try{h(r.throw(t))}catch(t){n(t)}}function h(t){var e;t.done?o(t.value):(e=t.value,e instanceof s?e:new s((function(t){t(e)}))).then(i,a)}h((r=r.apply(t,e||[])).next())}))}var _;!function(t){t.MIDDLEWARE="@express_middleware",t.PATH="@express_path",t.ROUTERS="@express_routers",t.PARAMETERS="@express_parameters"}(_||(_={}));const m=(t,e,s)=>Reflect.hasMetadata(t,e)?Reflect.getMetadata(t,e):s,f=100,E=101,g=102,v=200,x=201,R=202,T=203,A=204,S=205,y=206,P=207,k=208,M=226,w=300,O=301,b=302,j=303,D=304,q=305,H=307,I=308,L=400,U=401,F=402,N=403,W=404,z=405,C=406,G=407,B=408,J=409,K=410,Q=411,V=412,X=413,Y=414,Z=415,$=416,tt=417,et=418,st=421,rt=422,ot=423,nt=424,it=426,at=428,ht=429,pt=431,ut=444,ct=451,dt=499,lt=500,_t=501,mt=502,ft=503,Et=504,gt=505,vt=506,xt=507,Rt=508,Tt=510,At=511,St=599;class yt{constructor(t){this.res=t}success(t){return yt.success(this.res,t)}static success(t,e){return t.status(v).json({message:e})}data(t){return yt.data(this.res,t)}static data(t,e){return t.status(v).json(Object.assign({},e))}error(t){return yt.error(this.res,t)}static error(t,e){return t.status(500).json({message:e})}list(t){return yt.list(this.res,t)}static list(t,e){return t.status(v).json([...e])}notfound(t){return yt.notfound(this.res,t)}static notfound(t,e){return t.status(404).json({message:e})}validation(t){return yt.validation(this.res,t)}static validation(t,e){return t.status(400).json({message:e})}unauthorized(t){return yt.unauthorized(this.res,t)}static unauthorized(t,e){return t.status(401).json({message:e})}}class Pt extends t{get instance(){return this._app}get router(){return this._router}constructor(t,s){var p;super(),this._app=o(),this._options={},this._default={cross:!1,hybrid:!1,path:"/",port:3e3},this._router=n(),this._controlles=n(),this._options=Object.assign(Object.assign({},this._default),s),this._app.use(i()),this._app.disable("x-powered-by"),this._app.use(a({extended:!0})),this._options.cross&&this._app.use(r()),this._app.use(this._router);const u=(null===(p=this._options.path)||void 0===p?void 0:p.length)?this._options.path:"/";if(this._app.use(u,this._controlles),this._app.all(u+"/*",((t,e)=>yt.notfound(e,"Invalid API"))),this._options.public){const t=d(this._options.public);h(t)&&this._app.use(o.static(t)),this._app.get("*",((e,s)=>{if(!h(t))return yt.notfound(s,'File "index.html" not found');s.sendFile(t+"/index.html")}))}t.forEach((t=>{const s=t.constructor,r=this._path(s),o=this._routers(s),i=this._middlewares(s),a=this._parameters(s),h=n();o.forEach((r=>{const o=r.name.toString();if(e(t[o])){if(!e(h[r.method]))return this.error(new Error('Method "'+r.method+'" Not Found.'),"Express");const s=this._handles(t,o,i,a),n=this._indexes(o,a);h[r.method](r.path,...s,((e,s,r)=>t[o](...this._args(e,s,r,n))))}else this.error(new Error('Router "'+s.name+"."+o+'" Not Found.'),"Express")})),this._controlles.use(r,h)}))}error(t,e){s(e)?console.error(t):console.error(e+":",t)}log(t,e){s(e)?console.error(t):console.error(e+":",t)}_args(t,e,s,r,o){const n=[],i={req:t,res:e,next:s,app:this,send:new yt(e),argument:o};return r.forEach((t=>{n[t.index]=t.callback(Object.assign(Object.assign({},i),{key:t.key}))})),n}_handles(t,s,r,o){return r.filter((t=>t.name==s)).map((s=>{if(e(t[s.method])){const e=this._indexes(s.method,o);return(r,o,n)=>t[s.method](...this._args(r,o,n,e,s.argument))}this.error(new Error('Middleware "'+s.method+'" Not Found.'),"Express")})).filter(e)}_indexes(t,e){const s=[];return e.forEach((e=>e.name==t&&s.push(e))),s}_middlewares(t){return[...m(_.MIDDLEWARE,t,[])].reverse()}_parameters(t){return m(_.PARAMETERS,t,[])}_path(t){return m(_.PATH,t,"/")}_routers(t){return m(_.ROUTERS,t,[])}listen(){return l(this,void 0,void 0,(function*(){if(this._options.cert&&this._options.key||(this._server=p.createServer(this._app),this._server.listen(this._options.port,(()=>this.log("Server started on port "+this._options.port+".","Express")))),!this._server){const t=p.createServer(((t,e)=>{const s=80==this._options.port?":80":"";e.writeHead(301,{Location:"https://"+t.headers.host+s+t.url}),e.end()})),e=u.createServer({key:this._options.key,cert:this._options.cert},this._app);if(this._options.hybrid){new c((s=>{s.once("data",(r=>{s.pause(),s.unshift(r),(22===r[0]?e:t).emit("connection",s),process.nextTick((()=>s.resume()))}))})).listen(this._options.port,(()=>this.log("Server started on port "+this._options.port+".","Express"))),this._server=e}this._server||(443==this._options.port&&t.listen(80,(()=>this.log("Server started on port 80","Express"))),e.listen(this._options.port,(()=>this.log("Server started on port "+this._options.port+".","Express"))),this._server=e)}}))}}const kt=t=>e=>Reflect.defineMetadata(_.PATH,(null==t?void 0:t.length)?t:"/",e);var Mt;!function(t){t.GET="get",t.POST="post",t.PUT="put",t.HEAD="head",t.DELETE="delete",t.OPTIONS="options",t.PATCH="patch"}(Mt||(Mt={}));const wt=t=>e=>(s,r)=>{const o=s.constructor,n=m(_.ROUTERS,o,[]);n.push({path:(null==e?void 0:e.length)?e:"/",method:t,name:r}),Reflect.defineMetadata(_.ROUTERS,n,o)},Ot=wt(Mt.GET),bt=wt(Mt.POST),jt=wt(Mt.PUT),Dt=wt(Mt.HEAD),qt=wt(Mt.DELETE),Ht=wt(Mt.OPTIONS),It=wt(Mt.PATCH),Lt=(t,e)=>(s,r)=>{const o=s.constructor,n=m(_.MIDDLEWARE,o,[]);n.push({name:r,method:t,argument:e}),Reflect.defineMetadata(_.MIDDLEWARE,n,o)},Ut=t=>e=>(s,r,o)=>{const n=s.constructor,i=m(_.PARAMETERS,n,[]);i.push({callback:t,index:o,key:(null==e?void 0:e.length)?e:"",name:r}),Reflect.defineMetadata(_.PARAMETERS,i,n)},Ft=(t,e)=>s(e)?t:t[e],Nt=Ut((({app:t})=>t)),Wt=Ut((({argument:t})=>t)),zt=Ut((({req:t,key:e})=>Ft(t.body,e))),Ct=Ut((({req:t,key:e})=>Ft(t.cookies,e))),Gt=Ut((({req:t,key:e})=>Ft(t.cookies,e))),Bt=Ut((({next:t})=>t)),Jt=Ut((({req:t,key:e})=>Ft(t.params,e))),Kt=Ut((({req:t,key:e})=>Ft(t.query,e))),Qt=Ut((({req:t})=>t)),Vt=Qt,Xt=Ut((({res:t})=>t)),Yt=Xt,Zt=Ut((({send:t})=>t));export{R as ACCEPTED,k as ALREADY_REPORTED,Nt as App,Pt as Application,Wt as Argument,mt as BAD_GATEWAY,L as BAD_REQUEST,zt as Body,dt as CLIENT_CLOSED_REQUEST,J as CONFLICT,ut as CONNECTION_CLOSED_WITHOUT_RESPONSE,f as CONTINUE,x as CREATED,kt as Controller,Ct as Cookies,qt as Delete,tt as EXPECTATION_FAILED,nt as FAILED_DEPENDENCY,N as FORBIDDEN,b as FOUND,Et as GATEWAY_TIMEOUT,K as GONE,Ot as Get,gt as HTTP_VERSION_NOT_SUPPORTED,Dt as Head,Gt as Headers,et as IM_A_TEAPOT,M as IM_USED,xt as INSUFFICIENT_STORAGE,lt as INTERNAL_SERVER_ERROR,Q as LENGTH_REQUIRED,ot as LOCKED,Rt as LOOP_DETECTED,z as METHOD_NOT_ALLOWED,st as MISDIRECTED_REQUEST,O as MOVED_PERMANENTLY,w as MULTIPLE_CHOICES,P as MULTI_STATUS,m as Metadata,_ as MetadataKeys,Mt as Methods,Lt as Middleware,At as NETWORK_AUTHENTICATION_REQUIRED,St as NETWORK_CONNECTION_TIMEOUT_ERROR,T as NON_AUTHORITATIVE_INFORMATION,C as NOT_ACCEPTABLE,Tt as NOT_EXTENDED,W as NOT_FOUND,_t as NOT_IMPLEMENTED,D as NOT_MODIFIED,A as NO_CONTENT,Bt as Next,v as OK,Ht as Options,y as PARTIAL_CONTENT,X as PAYLOAD_TOO_LARGE,F as PAYMENT_REQUIRED,I as PERMANENT_REDIRECT,V as PRECONDITION_FAILED,at as PRECONDITION_REQUIRED,g as PROCESSING,G as PROXY_AUTHENTICATION_REQUIRED,Jt as Params,It as Patch,bt as Post,jt as Put,Kt as Query,$ as REQUESTED_RANGE_NOT_SATISFIABLE,pt as REQUEST_HEADER_FIELDS_TOO_LARGE,B as REQUEST_TIMEOUT,Y as REQUEST_URI_TOO_LONG,S as RESET_CONTENT,Vt as Req,Qt as Request,Yt as Res,Xt as Response,yt as Responses,j as SEE_OTHER,ft as SERVICE_UNAVAILABLE,E as SWITCHING_PROTOCOLS,Zt as Send,H as TEMPORARY_REDIRECT,ht as TOO_MANY_REQUESTS,U as UNAUTHORIZED,ct as UNAVAILABLE_FOR_LEGAL_REASONS,rt as UNPROCESSABLE_ENTITY,Z as UNSUPPORTED_MEDIA_TYPE,it as UPGRADE_REQUIRED,q as USE_PROXY,vt as VARIANT_ALSO_NEGOCIATES,wt as methodFactory,Ut as parameterFactory};
7
+ import"reflect-metadata";import{EventEmitter as t,isFunction as e,isUndefined as s}from"@andrewcaires/utils.js";import r from"cors";import o,{Router as E,json as n,urlencoded as i}from"express";import{existsSync as a}from"fs";import*as _ from"http";import*as T from"https";import{Server as h}from"net";import{resolve as p}from"path";function R(t,e,s,r){return new(s||(s=Promise))((function(o,E){function n(t){try{a(r.next(t))}catch(t){E(t)}}function i(t){try{a(r.throw(t))}catch(t){E(t)}}function a(t){var e;t.done?o(t.value):(e=t.value,e instanceof s?e:new s((function(t){t(e)}))).then(n,i)}a((r=r.apply(t,e||[])).next())}))}var O;!function(t){t.MIDDLEWARE="@express_middleware",t.PATH="@express_path",t.ROUTERS="@express_routers",t.PARAMETERS="@express_parameters"}(O||(O={}));const c=(t,e,s)=>Reflect.hasMetadata(t,e)?Reflect.getMetadata(t,e):s;class u{}u.CONTINUE=100,u.SWITCHING_PROTOCOLS=101,u.PROCESSING=102,u.OK=200,u.CREATED=201,u.ACCEPTED=202,u.NON_AUTHORITATIVE_INFORMATION=203,u.NO_CONTENT=204,u.RESET_CONTENT=205,u.PARTIAL_CONTENT=206,u.MULTI_STATUS=207,u.ALREADY_REPORTED=208,u.IM_USED=226,u.MULTIPLE_CHOICES=300,u.MOVED_PERMANENTLY=301,u.FOUND=302,u.SEE_OTHER=303,u.NOT_MODIFIED=304,u.USE_PROXY=305,u.TEMPORARY_REDIRECT=307,u.PERMANENT_REDIRECT=308,u.BAD_REQUEST=400,u.UNAUTHORIZED=401,u.PAYMENT_REQUIRED=402,u.FORBIDDEN=403,u.NOT_FOUND=404,u.METHOD_NOT_ALLOWED=405,u.NOT_ACCEPTABLE=406,u.PROXY_AUTHENTICATION_REQUIRED=407,u.REQUEST_TIMEOUT=408,u.CONFLICT=409,u.GONE=410,u.LENGTH_REQUIRED=411,u.PRECONDITION_FAILED=412,u.PAYLOAD_TOO_LARGE=413,u.REQUEST_URI_TOO_LONG=414,u.UNSUPPORTED_MEDIA_TYPE=415,u.REQUESTED_RANGE_NOT_SATISFIABLE=416,u.EXPECTATION_FAILED=417,u.IM_A_TEAPOT=418,u.MISDIRECTED_REQUEST=421,u.UNPROCESSABLE_ENTITY=422,u.LOCKED=423,u.FAILED_DEPENDENCY=424,u.UPGRADE_REQUIRED=426,u.PRECONDITION_REQUIRED=428,u.TOO_MANY_REQUESTS=429,u.REQUEST_HEADER_FIELDS_TOO_LARGE=431,u.CONNECTION_CLOSED_WITHOUT_RESPONSE=444,u.UNAVAILABLE_FOR_LEGAL_REASONS=451,u.CLIENT_CLOSED_REQUEST=499,u.INTERNAL_SERVER_ERROR=500,u.NOT_IMPLEMENTED=501,u.BAD_GATEWAY=502,u.SERVICE_UNAVAILABLE=503,u.GATEWAY_TIMEOUT=504,u.HTTP_VERSION_NOT_SUPPORTED=505,u.VARIANT_ALSO_NEGOCIATES=506,u.INSUFFICIENT_STORAGE=507,u.LOOP_DETECTED=508,u.NOT_EXTENDED=510,u.NETWORK_AUTHENTICATION_REQUIRED=511,u.NETWORK_CONNECTION_TIMEOUT_ERROR=599;class N{static success(t,e){return t.status(u.OK).json({message:e})}static data(t,e){return t.status(u.OK).json(Object.assign({},e))}static error(t,e){return t.status(u.INTERNAL_SERVER_ERROR).json({message:e})}static list(t,e){return t.status(u.OK).json([...e])}static notfound(t,e){return t.status(u.NOT_FOUND).json({message:e})}static validation(t,e){return t.status(u.BAD_REQUEST).json({message:e})}static unauthorized(t,e){return t.status(u.UNAUTHORIZED).json({message:e})}}class A extends t{get instance(){return this._app}get router(){return this._router}get server(){return this._server}constructor(t,s){var _;super(),this._app=o(),this._options={},this._default={cross:!1,hybrid:!1,path:"/",port:3e3},this._router=E(),this._controlles=E(),this._options=Object.assign(Object.assign({},this._default),s),this._app.use(n()),this._app.disable("x-powered-by"),this._app.use(i({extended:!0})),this._options.cross&&this._app.use(r()),this._app.use(this._router);const T=(null===(_=this._options.path)||void 0===_?void 0:_.length)?this._options.path:"/";if(this._app.use(T,this._controlles),this._app.all(T+"/*",((t,e)=>N.notfound(e,"Invalid API"))),this._options.public){const t=p(this._options.public);a(t)&&this._app.use(o.static(t)),this._app.get("*",((e,s)=>{if(!a(t))return N.notfound(s,'File "index.html" not found');s.sendFile(t+"/index.html")}))}t.forEach((t=>{const s=t.constructor,r=this._path(s),o=this._routers(s),n=this._middlewares(s),i=this._parameters(s),a=E();o.forEach((r=>{const o=r.name.toString();if(e(t[o])){if(!e(a[r.method]))return this.error(new Error('Method "'+r.method+'" Not Found.'),"Express");const s=this._handles(t,o,n,i),E=this._indexes(o,i);a[r.method](r.path,...s,((e,s,r)=>t[o](...this._args(e,s,r,E))))}else this.error(new Error('Router "'+s.name+"."+o+'" Not Found.'),"Express")})),this._controlles.use(r,a)}))}error(t,e){s(e)?console.error(t):console.error(e+":",t)}log(t,e){s(e)?console.error(t):console.error(e+":",t)}_args(t,e,s,r,o){const E=[],n={req:t,res:e,next:s,key:"",app:this,argument:o};return r.forEach((t=>{E[t.index]=t.callback(Object.assign(Object.assign({},n),{key:t.key}))})),E}_handles(t,s,r,o){return r.filter((t=>t.name==s)).map((s=>{if(e(t[s.method])){const e=this._indexes(s.method,o);return(r,o,E)=>t[s.method](...this._args(r,o,E,e,s.argument))}this.error(new Error('Middleware "'+s.method+'" Not Found.'),"Express")})).filter(e)}_indexes(t,e){const s=[];return e.forEach((e=>e.name==t&&s.push(e))),s}_middlewares(t){return[...c(O.MIDDLEWARE,t,[])].reverse()}_parameters(t){return c(O.PARAMETERS,t,[])}_path(t){return c(O.PATH,t,"/")}_routers(t){return c(O.ROUTERS,t,[])}listen(){return R(this,void 0,void 0,(function*(){if(this._options.cert&&this._options.key||(this._server=_.createServer(this._app),this._server.listen(this._options.port,(()=>this.log("Server started on port "+this._options.port+".","Express")))),!this._server){const t=_.createServer(((t,e)=>{const s=80==this._options.port?":80":"";e.writeHead(301,{Location:"https://"+t.headers.host+s+t.url}),e.end()})),e=T.createServer({key:this._options.key,cert:this._options.cert},this._app);if(this._options.hybrid){new h((s=>{s.once("data",(r=>{s.pause(),s.unshift(r),(22===r[0]?e:t).emit("connection",s),process.nextTick((()=>s.resume()))}))})).listen(this._options.port,(()=>this.log("Server started on port "+this._options.port+".","Express"))),this._server=e}this._server||(443==this._options.port&&t.listen(80,(()=>this.log("Server started on port 80","Express"))),e.listen(this._options.port,(()=>this.log("Server started on port "+this._options.port+".","Express"))),this._server=e)}}))}}const d=t=>e=>Reflect.defineMetadata(O.PATH,(null==t?void 0:t.length)?t:"/",e);var l;!function(t){t.GET="get",t.POST="post",t.PUT="put",t.HEAD="head",t.DELETE="delete",t.OPTIONS="options",t.PATCH="patch"}(l||(l={}));const I=t=>e=>(s,r)=>{const o=s.constructor,E=c(O.ROUTERS,o,[]);E.push({path:(null==e?void 0:e.length)?e:"/",method:t,name:r}),Reflect.defineMetadata(O.ROUTERS,E,o)},D=I(l.GET),S=I(l.POST),m=I(l.PUT),f=I(l.DELETE),U=I(l.PATCH),P=I(l.HEAD),L=I(l.OPTIONS),C=(t,e)=>(s,r)=>{const o=s.constructor,E=c(O.MIDDLEWARE,o,[]);E.push({name:r,method:t,argument:e}),Reflect.defineMetadata(O.MIDDLEWARE,E,o)},M=t=>e=>(s,r,o)=>{const E=s.constructor,n=c(O.PARAMETERS,E,[]);n.push({callback:t,index:o,key:(null==e?void 0:e.length)?e:"",name:r}),Reflect.defineMetadata(O.PARAMETERS,n,E)},g=(t,e)=>s(e)?t:t[e],v=M((({app:t})=>t)),x=M((({argument:t})=>t)),H=M((({req:t,key:e})=>g(t.body,e))),y=M((({req:t,key:e})=>g(t.cookies,e))),F=M((({req:t,key:e})=>g(t.headers,e))),k=M((({next:t})=>t)),G=M((({req:t,key:e})=>g(t.params,e))),Q=M((({req:t,key:e})=>g(t.query,e))),b=M((({req:t})=>t)),w=b,j=M((({res:t})=>t)),Y=j;export{v as App,A as Application,x as Argument,H as Body,d as Controller,y as Cookies,f as Delete,D as Get,P as Head,F as Headers,c as Metadata,O as MetadataKeys,l as Methods,C as Middleware,k as Next,L as Options,G as Params,U as Patch,S as Post,m as Put,Q as Query,w as Req,b as Request,Y as Res,j as Response,N as Responses,u as Status,I as methodFactory,M as parameterFactory};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@andrewcaires/express",
3
- "version": "1.0.0",
3
+ "version": "1.0.3",
4
4
  "description": "Decorators for express",
5
5
  "main": "./dist/index.cjs.js",
6
6
  "types": "./dist/index.d.ts",