@expressots/core 2.1.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/CHANGELOG.md CHANGED
@@ -1,18 +1,43 @@
1
1
 
2
2
 
3
- ## [2.1.0](https://github.com/expressots/expressots/compare/2.0.0...2.1.0) (2023-09-16)
3
+ ## [2.2.0](https://github.com/expressots/expressots/compare/2.1.0...2.2.0) (2023-09-21)
4
4
 
5
5
 
6
6
  ### Features
7
7
 
8
- * add cookie-parser middleware ([2fe9377](https://github.com/expressots/expressots/commit/2fe93776423355503211a0d96f2b1952e3bc6320))
9
- * add cookie-parser middleware ([a53a0c2](https://github.com/expressots/expressots/commit/a53a0c2e23dafc188286cd0ff5a6145cf3416ad0))
10
- * add cookie-session middleware ([323c2d3](https://github.com/expressots/expressots/commit/323c2d32c5e4a9c78f19fe47807f323139fb306a))
11
- * add cookie-session middleware ([60ac1fa](https://github.com/expressots/expressots/commit/60ac1fa36b2a8388983be0ab8f2d8a1696089d78))
8
+ * add middleware based routing ([3d7720e](https://github.com/expressots/expressots/commit/3d7720e21807117333d60e7f2b7bb01789b96060))
9
+ * add serve-favicon middleware ([024bdc4](https://github.com/expressots/expressots/commit/024bdc4d8d4f9890175975d052ca09c5b4e245cf))
10
+ * add serve-favicon middleware ([0733697](https://github.com/expressots/expressots/commit/0733697ed66a7133e60ec6fa09bdaeb0bf1985d7))
12
11
 
13
12
 
14
13
  ### Bug Fixes
15
14
 
15
+ * add chore message to pre-commit hook ([45ae428](https://github.com/expressots/expressots/commit/45ae428652bb6e4f49cb2a6334686be0dee3669d))
16
+ * add middleware validation based on path ([7035153](https://github.com/expressots/expressots/commit/7035153dededd3ca7c5159544f4ab79baee2c4d7))
17
+ * re-write cp, mv and rm improving performance ([68d68ad](https://github.com/expressots/expressots/commit/68d68ad11385ca783fa5c51e3092937a6f898ac6))
18
+ * update contribute_howto doc ([4bf6e12](https://github.com/expressots/expressots/commit/4bf6e121091e894a7675ff78959ab4647ec04f6d))
19
+ * update contribute_howto doc ([fbbe47d](https://github.com/expressots/expressots/commit/fbbe47d6df76211fadd736fab864aa41e0313ec9))
20
+ * update templates for v2 scaffold ([74811f3](https://github.com/expressots/expressots/commit/74811f3ac54610be7367de75f37363dc0c107dbc))
21
+
22
+
23
+ ### Build System
24
+
25
+ * **scripts:** add cross platform build scripts ([e6cecbc](https://github.com/expressots/expressots/commit/e6cecbc6b7a309f00aa6cd60f6d8207dc8d4c5cb))
26
+ * **scripts:** add cross platform build scripts ([8b5c133](https://github.com/expressots/expressots/commit/8b5c133e4e28d67b8a7edca5b04bfe04a6d12540))
27
+
28
+ ## [2.1.0](https://github.com/expressots/expressots/compare/2.0.0...2.1.0) (2023-09-16)
29
+
30
+
31
+ ### Features
32
+
33
+ * add cookie-parser middleware ([2fe9377](https://github.com/expressots/expressots/commit/2fe93776423355503211a0d96f2b1952e3bc6320))
34
+ * add cookie-parser middleware ([a53a0c2](https://github.com/expressots/expressots/commit/a53a0c2e23dafc188286cd0ff5a6145cf3416ad0))
35
+ * add cookie-session middleware ([323c2d3](https://github.com/expressots/expressots/commit/323c2d32c5e4a9c78f19fe47807f323139fb306a))
36
+ * add cookie-session middleware ([60ac1fa](https://github.com/expressots/expressots/commit/60ac1fa36b2a8388983be0ab8f2d8a1696089d78))
37
+
38
+
39
+ ### Bug Fixes
40
+
16
41
  * create folder for interface and print pck name instead of curated name ([2a47508](https://github.com/expressots/expressots/commit/2a47508f5170950ddd8b471fffc8d43a8fb57e32))
17
42
 
18
43
  ## [2.0.0](https://github.com/expressots/expressots/compare/1.9.1...2.0.0) (2023-09-14)
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -19,6 +19,7 @@ class MiddlewareResolver {
19
19
  compression: "compression",
20
20
  cookieParser: "cookie-parser",
21
21
  cookieSession: "cookie-session",
22
+ serveFavicon: "serve-favicon",
22
23
  // Add other middlewares
23
24
  };
24
25
  this.logger = new logger_service_1.Logger();
@@ -25,7 +25,7 @@ const middleware_resolver_1 = require("./middleware-resolver");
25
25
  */
26
26
  let Middleware = Middleware_1 = class Middleware {
27
27
  constructor() {
28
- this.middlewares = [];
28
+ this.middlewarePipeline = [];
29
29
  this.logger = new logger_service_1.Logger();
30
30
  }
31
31
  /**
@@ -36,8 +36,12 @@ let Middleware = Middleware_1 = class Middleware {
36
36
  * @returns A boolean value indicating whether the middleware exists or not.
37
37
  */
38
38
  middlewareExists(middlewareName) {
39
- const middlewares = this.getMiddlewares();
40
- const middlewareIndex = middlewares.findIndex((m) => m.name === middlewareName);
39
+ const middlewareIndex = this.middlewarePipeline.findIndex((m) => {
40
+ var _a;
41
+ return typeof m.middleware === "object"
42
+ ? m.middleware.middlewares.some((mw) => (mw === null || mw === void 0 ? void 0 : mw.name) === middlewareName)
43
+ : ((_a = m.middleware) === null || _a === void 0 ? void 0 : _a.name) === middlewareName;
44
+ });
41
45
  return middlewareIndex !== -1;
42
46
  }
43
47
  /**
@@ -51,7 +55,10 @@ let Middleware = Middleware_1 = class Middleware {
51
55
  this.logger.warn(`[jsonParser] already exists. Skipping...`, "configure-service");
52
56
  }
53
57
  else {
54
- this.middlewares.push(express_1.default.json(options));
58
+ this.middlewarePipeline.push({
59
+ timestamp: new Date(),
60
+ middleware: express_1.default.json(options),
61
+ });
55
62
  }
56
63
  }
57
64
  /**
@@ -63,7 +70,10 @@ let Middleware = Middleware_1 = class Middleware {
63
70
  const middleware = (0, middleware_resolver_1.middlewareResolver)("cors", options);
64
71
  const middlewareExist = this.middlewareExists("cors");
65
72
  if (middleware && !middlewareExist) {
66
- this.middlewares.push(middleware);
73
+ this.middlewarePipeline.push({
74
+ timestamp: new Date(),
75
+ middleware,
76
+ });
67
77
  }
68
78
  }
69
79
  /**
@@ -75,7 +85,10 @@ let Middleware = Middleware_1 = class Middleware {
75
85
  const middleware = (0, middleware_resolver_1.middlewareResolver)("compression", options);
76
86
  const middlewareExist = this.middlewareExists("compression");
77
87
  if (middleware && !middlewareExist) {
78
- this.middlewares.push(middleware);
88
+ this.middlewarePipeline.push({
89
+ timestamp: new Date(),
90
+ middleware,
91
+ });
79
92
  }
80
93
  }
81
94
  /**
@@ -88,7 +101,10 @@ let Middleware = Middleware_1 = class Middleware {
88
101
  const middleware = (0, middleware_resolver_1.middlewareResolver)("cookieParser", secret, options);
89
102
  const middlewareExist = this.middlewareExists("cookieParser");
90
103
  if (middleware && !middlewareExist) {
91
- this.middlewares.push(middleware);
104
+ this.middlewarePipeline.push({
105
+ timestamp: new Date(),
106
+ middleware,
107
+ });
92
108
  }
93
109
  }
94
110
  /**
@@ -100,7 +116,27 @@ let Middleware = Middleware_1 = class Middleware {
100
116
  const middleware = (0, middleware_resolver_1.middlewareResolver)("cookieSession", options);
101
117
  const middlewareExist = this.middlewareExists("cookieSession");
102
118
  if (middleware && !middlewareExist) {
103
- this.middlewares.push(middleware);
119
+ this.middlewarePipeline.push({
120
+ timestamp: new Date(),
121
+ middleware,
122
+ });
123
+ }
124
+ }
125
+ /**
126
+ * Adds a middleware to serve the favicon to the middleware collection.
127
+ * The favicon is the icon that is displayed in the browser tab for the application.
128
+ *
129
+ * @param path - The path to the favicon file.
130
+ * @param options - Optional configuration options for serving the favicon. Defines the behavior of the favicon middleware like cache control, custom headers, etc.
131
+ */
132
+ addServeFavicon(path, options) {
133
+ const middleware = (0, middleware_resolver_1.middlewareResolver)("serveFavicon", path, options);
134
+ const middlewareExist = this.middlewareExists("serveFavicon");
135
+ if (middleware && !middlewareExist) {
136
+ this.middlewarePipeline.push({
137
+ timestamp: new Date(),
138
+ middleware,
139
+ });
104
140
  }
105
141
  }
106
142
  /**
@@ -129,7 +165,10 @@ let Middleware = Middleware_1 = class Middleware {
129
165
  this.logger.warn(`[serveStatic] already exists. Skipping...`, "configure-service");
130
166
  }
131
167
  else {
132
- this.middlewares.push(express_1.default.static(root, options));
168
+ this.middlewarePipeline.push({
169
+ timestamp: new Date(),
170
+ middleware: express_1.default.static(root, options),
171
+ });
133
172
  }
134
173
  }
135
174
  /**
@@ -138,22 +177,60 @@ let Middleware = Middleware_1 = class Middleware {
138
177
  * @param middleware - The Express request handler function to be added to the middleware collection.
139
178
  *
140
179
  */
141
- addMiddleware(middleware) {
142
- const middlewareExist = this.middlewareExists(middleware.name);
143
- if (middlewareExist) {
144
- this.logger.warn(`[${middleware.name}] already exists. Skipping...`, "configure-service");
180
+ addMiddleware(...middleware) {
181
+ let config;
182
+ if (typeof middleware[0] === "string") {
183
+ const [path, ...middlewares] = middleware;
184
+ config = {
185
+ path,
186
+ middlewares: middlewares,
187
+ };
188
+ }
189
+ else {
190
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
191
+ config = {
192
+ middlewares: middleware,
193
+ };
194
+ }
195
+ if (config.path) {
196
+ // verify if middleware if path already exists
197
+ const middlewareIndex = this.middlewarePipeline.findIndex((m) => typeof m.middleware === "object" && m.middleware.path === config.path);
198
+ if (middlewareIndex !== -1) {
199
+ this.logger.warn(`[${config.path}] route already exists. Skipping...`, "configure-service");
200
+ }
201
+ else {
202
+ this.middlewarePipeline.push({
203
+ timestamp: new Date(),
204
+ middleware: config,
205
+ });
206
+ }
145
207
  }
146
208
  else {
147
- this.middlewares.push(middleware);
209
+ config.middlewares.forEach((m) => {
210
+ const middlewareName = (m === null || m === void 0 ? void 0 : m.name) || "anonymous";
211
+ const middlewareExist = this.middlewareExists(middlewareName);
212
+ console.log(middlewareExist);
213
+ if (middlewareExist) {
214
+ this.logger.warn(`[${middlewareName}] already exists. Skipping...`, "configure-service");
215
+ }
216
+ else {
217
+ this.middlewarePipeline.push({
218
+ timestamp: new Date(),
219
+ middleware: config,
220
+ });
221
+ }
222
+ });
148
223
  }
149
224
  }
150
225
  /**
151
- * Retrieves all the middlewares that have been added to the collection.
226
+ * Retrieves middleware pipeline in the order they were added.
152
227
  *
153
228
  * @returns An array of Express request handlers representing the middlewares.
154
229
  */
155
- getMiddlewares() {
156
- return this.middlewares;
230
+ getMiddlewarePipeline() {
231
+ return this.middlewarePipeline.sort((a, b) => {
232
+ return a.timestamp.getTime() - b.timestamp.getTime();
233
+ });
157
234
  }
158
235
  /**
159
236
  * Gets the configured error handler middleware.
@@ -5,4 +5,5 @@ export { CompressionOptions } from "./interfaces/compression.interface";
5
5
  export { CookieSessionOptions } from "./interfaces/cookie-session/cookie-session.interface";
6
6
  export { Keygrip } from "./interfaces/cookie-session/keygrip.interface";
7
7
  export { CookieParserOptions } from "./interfaces/cookie-parser.interface";
8
+ export { ServeFaviconOptions } from "./interfaces/serve-favicon.interface";
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/core/src/middleware/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sDAAsD,CAAC;AAC5F,OAAO,EAAE,OAAO,EAAE,MAAM,+CAA+C,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/core/src/middleware/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sDAAsD,CAAC;AAC5F,OAAO,EAAE,OAAO,EAAE,MAAM,+CAA+C,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * ServeFaviconOptions defines the available options for configuring the serve-favicon middleware.
3
+ */
4
+ interface ServeFaviconOptions {
5
+ /**
6
+ * The cache-control max-age directive in ms, defaulting to 1 year.
7
+ * This can also be a string accepted by the `ms` module.
8
+ */
9
+ maxAge?: number | string | undefined;
10
+ }
11
+ export { ServeFaviconOptions };
12
+ //# sourceMappingURL=serve-favicon.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve-favicon.interface.d.ts","sourceRoot":"","sources":["../../../../../packages/core/src/middleware/interfaces/serve-favicon.interface.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,UAAU,mBAAmB;IAC3B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACtC;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"middleware-resolver.d.ts","sourceRoot":"","sources":["../../../../packages/core/src/middleware/middleware-resolver.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,SAAS,CAAC;AAqE9B;;;;;;;GAOG;AACH,iBAAS,kBAAkB,CACzB,UAAU,EAAE,MAAM,EAClB,GAAG,OAAO,EAAE,GAAG,GACd,OAAO,CAAC,cAAc,GAAG,IAAI,CAG/B;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"middleware-resolver.d.ts","sourceRoot":"","sources":["../../../../packages/core/src/middleware/middleware-resolver.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,SAAS,CAAC;AAsE9B;;;;;;;GAOG;AACH,iBAAS,kBAAkB,CACzB,UAAU,EAAE,MAAM,EAClB,GAAG,OAAO,EAAE,GAAG,GACd,OAAO,CAAC,cAAc,GAAG,IAAI,CAG/B;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -1,3 +1,4 @@
1
+ /// <reference types="node" />
1
2
  import express from "express";
2
3
  import { OptionsJson } from "./interfaces/body-parser.interface";
3
4
  import { CompressionOptions } from "./interfaces/compression.interface";
@@ -5,7 +6,47 @@ import { CorsOptions } from "./interfaces/cors.interface";
5
6
  import { CookieParserOptions } from "./interfaces/cookie-parser.interface";
6
7
  import { ServeStaticOptions } from "./interfaces/serve-static.interface";
7
8
  import { CookieSessionOptions } from "./interfaces/cookie-session/cookie-session.interface";
9
+ import { ServeFaviconOptions } from "./interfaces/serve-favicon.interface";
10
+ /**
11
+ * ExpressHandler Type
12
+ *
13
+ * The ExpressHandler type is a union type that represents various types of Express middleware functions.
14
+ * It can be one of the following types:
15
+ * - express.ErrorRequestHandler: Handles errors in the middleware pipeline.
16
+ * - express.RequestParamHandler: Handles parameters in the middleware pipeline.
17
+ * - express.RequestHandler: General request handler.
18
+ * - undefined: Represents the absence of a handler.
19
+ */
8
20
  type ExpressHandler = express.ErrorRequestHandler | express.RequestParamHandler | express.RequestHandler | undefined;
21
+ /**
22
+ * MiddlewareArgs Type
23
+ *
24
+ * The MiddlewareArgs type represents arguments that can be passed to a middleware function.
25
+ * It can either be a string (a route or path) or an instance of ExpressHandler.
26
+ */
27
+ type MiddlewareArgs = string | ExpressHandler;
28
+ /**
29
+ * MiddlewareConfig Interface
30
+ *
31
+ * The MiddlewareConfig interface specifies the structure for middleware configuration objects.
32
+ * - path: Optional. The route path for which the middleware is configured.
33
+ * - middlewares: An array of ExpressHandler types that make up the middleware pipeline for the route specified by 'path'.
34
+ */
35
+ type MiddlewareConfig = {
36
+ path?: string;
37
+ middlewares: Array<ExpressHandler>;
38
+ };
39
+ /**
40
+ * MiddlewarePipeline Interface
41
+ *
42
+ * The MiddlewarePipeline interface represents the metadata and actual middleware to be executed in a middleware pipeline.
43
+ * - timestamp: The date and time at which the middleware was added to the pipeline.
44
+ * - middleware: Can be either an ExpressHandler function or a MiddlewareConfig object defining a more complex middleware setup.
45
+ */
46
+ interface MiddlewarePipeline {
47
+ timestamp: Date;
48
+ middleware: ExpressHandler | MiddlewareConfig;
49
+ }
9
50
  /**
10
51
  * Interface for configuring and managing middlewares in the application.
11
52
  * Provides methods to be added automatically in the application without the need to import packages.
@@ -43,6 +84,14 @@ interface IMiddleware {
43
84
  * @param options - Optional configuration options for Cookie Session. Defines the behavior of cookie sessions like the name of the cookie, keys to sign the cookie, etc.
44
85
  */
45
86
  addCookieSession(options: CookieSessionOptions): void;
87
+ /**
88
+ * Adds a middleware to serve the favicon to the middleware collection.
89
+ * The favicon is the icon that is displayed in the browser tab for the application.
90
+ *
91
+ * @param path - The path to the favicon file.
92
+ * @param options - Optional configuration options for serving the favicon. Defines the behavior of the favicon middleware like cache control, custom headers, etc.
93
+ */
94
+ addServeFavicon(path: string | Buffer, options?: ServeFaviconOptions): void;
46
95
  /**
47
96
  * Configures the error handling middleware for the application.
48
97
  *
@@ -63,13 +112,13 @@ interface IMiddleware {
63
112
  * @param middleware - The Express request handler function to be added to the middleware collection.
64
113
  *
65
114
  */
66
- addMiddleware(middleware: express.RequestHandler): void;
115
+ addMiddleware(...middleware: Array<MiddlewareArgs>): void;
67
116
  /**
68
- * Retrieves all the middlewares that have been added.
117
+ * Retrieves middleware pipeline in the order they were added.
69
118
  *
70
119
  * @returns An array of Express request handlers representing the middlewares.
71
120
  */
72
- getMiddlewares(): Array<express.RequestHandler>;
121
+ getMiddlewarePipeline(): Array<MiddlewarePipeline>;
73
122
  /**
74
123
  * Gets the configured error handler middleware.
75
124
  *
@@ -85,7 +134,7 @@ interface IMiddleware {
85
134
  * @see IConfigure
86
135
  */
87
136
  declare class Middleware implements IMiddleware {
88
- private middlewares;
137
+ private middlewarePipeline;
89
138
  private errorHandler;
90
139
  private logger;
91
140
  /**
@@ -127,6 +176,14 @@ declare class Middleware implements IMiddleware {
127
176
  * @param options - Optional configuration options for Cookie Session. Defines the behavior of cookie sessions like the name of the cookie, keys to sign the cookie, etc.
128
177
  */
129
178
  addCookieSession(options: CookieSessionOptions): void;
179
+ /**
180
+ * Adds a middleware to serve the favicon to the middleware collection.
181
+ * The favicon is the icon that is displayed in the browser tab for the application.
182
+ *
183
+ * @param path - The path to the favicon file.
184
+ * @param options - Optional configuration options for serving the favicon. Defines the behavior of the favicon middleware like cache control, custom headers, etc.
185
+ */
186
+ addServeFavicon(path: string | Buffer, options?: ServeFaviconOptions): void;
130
187
  /**
131
188
  * Configures the error handling middleware for the application.
132
189
  *
@@ -147,13 +204,13 @@ declare class Middleware implements IMiddleware {
147
204
  * @param middleware - The Express request handler function to be added to the middleware collection.
148
205
  *
149
206
  */
150
- addMiddleware(middleware: express.RequestHandler): void;
207
+ addMiddleware(...middleware: Array<MiddlewareArgs>): void;
151
208
  /**
152
- * Retrieves all the middlewares that have been added to the collection.
209
+ * Retrieves middleware pipeline in the order they were added.
153
210
  *
154
211
  * @returns An array of Express request handlers representing the middlewares.
155
212
  */
156
- getMiddlewares(): Array<express.RequestHandler>;
213
+ getMiddlewarePipeline(): Array<MiddlewarePipeline>;
157
214
  /**
158
215
  * Gets the configured error handler middleware.
159
216
  *
@@ -1 +1 @@
1
- {"version":3,"file":"middleware-service.d.ts","sourceRoot":"","sources":["../../../../packages/core/src/middleware/middleware-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"middleware-service.d.ts","sourceRoot":"","sources":["../../../../packages/core/src/middleware/middleware-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -22,6 +22,7 @@ class MiddlewareResolver {
22
22
  compression: "compression",
23
23
  cookieParser: "cookie-parser",
24
24
  cookieSession: "cookie-session",
25
+ serveFavicon: "serve-favicon",
25
26
  // Add other middlewares
26
27
  };
27
28
  /**
@@ -24,7 +24,7 @@ const middleware_resolver_1 = require("./middleware-resolver");
24
24
  * @see IConfigure
25
25
  */
26
26
  let Middleware = Middleware_1 = class Middleware {
27
- middlewares = [];
27
+ middlewarePipeline = [];
28
28
  errorHandler;
29
29
  logger = new logger_service_1.Logger();
30
30
  /**
@@ -35,8 +35,9 @@ let Middleware = Middleware_1 = class Middleware {
35
35
  * @returns A boolean value indicating whether the middleware exists or not.
36
36
  */
37
37
  middlewareExists(middlewareName) {
38
- const middlewares = this.getMiddlewares();
39
- const middlewareIndex = middlewares.findIndex((m) => m.name === middlewareName);
38
+ const middlewareIndex = this.middlewarePipeline.findIndex((m) => typeof m.middleware === "object"
39
+ ? m.middleware.middlewares.some((mw) => mw?.name === middlewareName)
40
+ : m.middleware?.name === middlewareName);
40
41
  return middlewareIndex !== -1;
41
42
  }
42
43
  /**
@@ -50,7 +51,10 @@ let Middleware = Middleware_1 = class Middleware {
50
51
  this.logger.warn(`[jsonParser] already exists. Skipping...`, "configure-service");
51
52
  }
52
53
  else {
53
- this.middlewares.push(express_1.default.json(options));
54
+ this.middlewarePipeline.push({
55
+ timestamp: new Date(),
56
+ middleware: express_1.default.json(options),
57
+ });
54
58
  }
55
59
  }
56
60
  /**
@@ -62,7 +66,10 @@ let Middleware = Middleware_1 = class Middleware {
62
66
  const middleware = (0, middleware_resolver_1.middlewareResolver)("cors", options);
63
67
  const middlewareExist = this.middlewareExists("cors");
64
68
  if (middleware && !middlewareExist) {
65
- this.middlewares.push(middleware);
69
+ this.middlewarePipeline.push({
70
+ timestamp: new Date(),
71
+ middleware,
72
+ });
66
73
  }
67
74
  }
68
75
  /**
@@ -74,7 +81,10 @@ let Middleware = Middleware_1 = class Middleware {
74
81
  const middleware = (0, middleware_resolver_1.middlewareResolver)("compression", options);
75
82
  const middlewareExist = this.middlewareExists("compression");
76
83
  if (middleware && !middlewareExist) {
77
- this.middlewares.push(middleware);
84
+ this.middlewarePipeline.push({
85
+ timestamp: new Date(),
86
+ middleware,
87
+ });
78
88
  }
79
89
  }
80
90
  /**
@@ -87,7 +97,10 @@ let Middleware = Middleware_1 = class Middleware {
87
97
  const middleware = (0, middleware_resolver_1.middlewareResolver)("cookieParser", secret, options);
88
98
  const middlewareExist = this.middlewareExists("cookieParser");
89
99
  if (middleware && !middlewareExist) {
90
- this.middlewares.push(middleware);
100
+ this.middlewarePipeline.push({
101
+ timestamp: new Date(),
102
+ middleware,
103
+ });
91
104
  }
92
105
  }
93
106
  /**
@@ -99,7 +112,27 @@ let Middleware = Middleware_1 = class Middleware {
99
112
  const middleware = (0, middleware_resolver_1.middlewareResolver)("cookieSession", options);
100
113
  const middlewareExist = this.middlewareExists("cookieSession");
101
114
  if (middleware && !middlewareExist) {
102
- this.middlewares.push(middleware);
115
+ this.middlewarePipeline.push({
116
+ timestamp: new Date(),
117
+ middleware,
118
+ });
119
+ }
120
+ }
121
+ /**
122
+ * Adds a middleware to serve the favicon to the middleware collection.
123
+ * The favicon is the icon that is displayed in the browser tab for the application.
124
+ *
125
+ * @param path - The path to the favicon file.
126
+ * @param options - Optional configuration options for serving the favicon. Defines the behavior of the favicon middleware like cache control, custom headers, etc.
127
+ */
128
+ addServeFavicon(path, options) {
129
+ const middleware = (0, middleware_resolver_1.middlewareResolver)("serveFavicon", path, options);
130
+ const middlewareExist = this.middlewareExists("serveFavicon");
131
+ if (middleware && !middlewareExist) {
132
+ this.middlewarePipeline.push({
133
+ timestamp: new Date(),
134
+ middleware,
135
+ });
103
136
  }
104
137
  }
105
138
  /**
@@ -128,7 +161,10 @@ let Middleware = Middleware_1 = class Middleware {
128
161
  this.logger.warn(`[serveStatic] already exists. Skipping...`, "configure-service");
129
162
  }
130
163
  else {
131
- this.middlewares.push(express_1.default.static(root, options));
164
+ this.middlewarePipeline.push({
165
+ timestamp: new Date(),
166
+ middleware: express_1.default.static(root, options),
167
+ });
132
168
  }
133
169
  }
134
170
  /**
@@ -137,22 +173,60 @@ let Middleware = Middleware_1 = class Middleware {
137
173
  * @param middleware - The Express request handler function to be added to the middleware collection.
138
174
  *
139
175
  */
140
- addMiddleware(middleware) {
141
- const middlewareExist = this.middlewareExists(middleware.name);
142
- if (middlewareExist) {
143
- this.logger.warn(`[${middleware.name}] already exists. Skipping...`, "configure-service");
176
+ addMiddleware(...middleware) {
177
+ let config;
178
+ if (typeof middleware[0] === "string") {
179
+ const [path, ...middlewares] = middleware;
180
+ config = {
181
+ path,
182
+ middlewares: middlewares,
183
+ };
184
+ }
185
+ else {
186
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
187
+ config = {
188
+ middlewares: middleware,
189
+ };
190
+ }
191
+ if (config.path) {
192
+ // verify if middleware if path already exists
193
+ const middlewareIndex = this.middlewarePipeline.findIndex((m) => typeof m.middleware === "object" && m.middleware.path === config.path);
194
+ if (middlewareIndex !== -1) {
195
+ this.logger.warn(`[${config.path}] route already exists. Skipping...`, "configure-service");
196
+ }
197
+ else {
198
+ this.middlewarePipeline.push({
199
+ timestamp: new Date(),
200
+ middleware: config,
201
+ });
202
+ }
144
203
  }
145
204
  else {
146
- this.middlewares.push(middleware);
205
+ config.middlewares.forEach((m) => {
206
+ const middlewareName = m?.name || "anonymous";
207
+ const middlewareExist = this.middlewareExists(middlewareName);
208
+ console.log(middlewareExist);
209
+ if (middlewareExist) {
210
+ this.logger.warn(`[${middlewareName}] already exists. Skipping...`, "configure-service");
211
+ }
212
+ else {
213
+ this.middlewarePipeline.push({
214
+ timestamp: new Date(),
215
+ middleware: config,
216
+ });
217
+ }
218
+ });
147
219
  }
148
220
  }
149
221
  /**
150
- * Retrieves all the middlewares that have been added to the collection.
222
+ * Retrieves middleware pipeline in the order they were added.
151
223
  *
152
224
  * @returns An array of Express request handlers representing the middlewares.
153
225
  */
154
- getMiddlewares() {
155
- return this.middlewares;
226
+ getMiddlewarePipeline() {
227
+ return this.middlewarePipeline.sort((a, b) => {
228
+ return a.timestamp.getTime() - b.timestamp.getTime();
229
+ });
156
230
  }
157
231
  /**
158
232
  * Gets the configured error handler middleware.
@@ -5,4 +5,5 @@ export { CompressionOptions } from "./interfaces/compression.interface";
5
5
  export { CookieSessionOptions } from "./interfaces/cookie-session/cookie-session.interface";
6
6
  export { Keygrip } from "./interfaces/cookie-session/keygrip.interface";
7
7
  export { CookieParserOptions } from "./interfaces/cookie-parser.interface";
8
+ export { ServeFaviconOptions } from "./interfaces/serve-favicon.interface";
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/core/src/middleware/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sDAAsD,CAAC;AAC5F,OAAO,EAAE,OAAO,EAAE,MAAM,+CAA+C,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/core/src/middleware/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sDAAsD,CAAC;AAC5F,OAAO,EAAE,OAAO,EAAE,MAAM,+CAA+C,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * ServeFaviconOptions defines the available options for configuring the serve-favicon middleware.
3
+ */
4
+ interface ServeFaviconOptions {
5
+ /**
6
+ * The cache-control max-age directive in ms, defaulting to 1 year.
7
+ * This can also be a string accepted by the `ms` module.
8
+ */
9
+ maxAge?: number | string | undefined;
10
+ }
11
+ export { ServeFaviconOptions };
12
+ //# sourceMappingURL=serve-favicon.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve-favicon.interface.d.ts","sourceRoot":"","sources":["../../../../../packages/core/src/middleware/interfaces/serve-favicon.interface.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,UAAU,mBAAmB;IAC3B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACtC;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"middleware-resolver.d.ts","sourceRoot":"","sources":["../../../../packages/core/src/middleware/middleware-resolver.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,SAAS,CAAC;AAqE9B;;;;;;;GAOG;AACH,iBAAS,kBAAkB,CACzB,UAAU,EAAE,MAAM,EAClB,GAAG,OAAO,EAAE,GAAG,GACd,OAAO,CAAC,cAAc,GAAG,IAAI,CAG/B;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"middleware-resolver.d.ts","sourceRoot":"","sources":["../../../../packages/core/src/middleware/middleware-resolver.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,SAAS,CAAC;AAsE9B;;;;;;;GAOG;AACH,iBAAS,kBAAkB,CACzB,UAAU,EAAE,MAAM,EAClB,GAAG,OAAO,EAAE,GAAG,GACd,OAAO,CAAC,cAAc,GAAG,IAAI,CAG/B;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -1,3 +1,4 @@
1
+ /// <reference types="node" />
1
2
  import express from "express";
2
3
  import { OptionsJson } from "./interfaces/body-parser.interface";
3
4
  import { CompressionOptions } from "./interfaces/compression.interface";
@@ -5,7 +6,47 @@ import { CorsOptions } from "./interfaces/cors.interface";
5
6
  import { CookieParserOptions } from "./interfaces/cookie-parser.interface";
6
7
  import { ServeStaticOptions } from "./interfaces/serve-static.interface";
7
8
  import { CookieSessionOptions } from "./interfaces/cookie-session/cookie-session.interface";
9
+ import { ServeFaviconOptions } from "./interfaces/serve-favicon.interface";
10
+ /**
11
+ * ExpressHandler Type
12
+ *
13
+ * The ExpressHandler type is a union type that represents various types of Express middleware functions.
14
+ * It can be one of the following types:
15
+ * - express.ErrorRequestHandler: Handles errors in the middleware pipeline.
16
+ * - express.RequestParamHandler: Handles parameters in the middleware pipeline.
17
+ * - express.RequestHandler: General request handler.
18
+ * - undefined: Represents the absence of a handler.
19
+ */
8
20
  type ExpressHandler = express.ErrorRequestHandler | express.RequestParamHandler | express.RequestHandler | undefined;
21
+ /**
22
+ * MiddlewareArgs Type
23
+ *
24
+ * The MiddlewareArgs type represents arguments that can be passed to a middleware function.
25
+ * It can either be a string (a route or path) or an instance of ExpressHandler.
26
+ */
27
+ type MiddlewareArgs = string | ExpressHandler;
28
+ /**
29
+ * MiddlewareConfig Interface
30
+ *
31
+ * The MiddlewareConfig interface specifies the structure for middleware configuration objects.
32
+ * - path: Optional. The route path for which the middleware is configured.
33
+ * - middlewares: An array of ExpressHandler types that make up the middleware pipeline for the route specified by 'path'.
34
+ */
35
+ type MiddlewareConfig = {
36
+ path?: string;
37
+ middlewares: Array<ExpressHandler>;
38
+ };
39
+ /**
40
+ * MiddlewarePipeline Interface
41
+ *
42
+ * The MiddlewarePipeline interface represents the metadata and actual middleware to be executed in a middleware pipeline.
43
+ * - timestamp: The date and time at which the middleware was added to the pipeline.
44
+ * - middleware: Can be either an ExpressHandler function or a MiddlewareConfig object defining a more complex middleware setup.
45
+ */
46
+ interface MiddlewarePipeline {
47
+ timestamp: Date;
48
+ middleware: ExpressHandler | MiddlewareConfig;
49
+ }
9
50
  /**
10
51
  * Interface for configuring and managing middlewares in the application.
11
52
  * Provides methods to be added automatically in the application without the need to import packages.
@@ -43,6 +84,14 @@ interface IMiddleware {
43
84
  * @param options - Optional configuration options for Cookie Session. Defines the behavior of cookie sessions like the name of the cookie, keys to sign the cookie, etc.
44
85
  */
45
86
  addCookieSession(options: CookieSessionOptions): void;
87
+ /**
88
+ * Adds a middleware to serve the favicon to the middleware collection.
89
+ * The favicon is the icon that is displayed in the browser tab for the application.
90
+ *
91
+ * @param path - The path to the favicon file.
92
+ * @param options - Optional configuration options for serving the favicon. Defines the behavior of the favicon middleware like cache control, custom headers, etc.
93
+ */
94
+ addServeFavicon(path: string | Buffer, options?: ServeFaviconOptions): void;
46
95
  /**
47
96
  * Configures the error handling middleware for the application.
48
97
  *
@@ -63,13 +112,13 @@ interface IMiddleware {
63
112
  * @param middleware - The Express request handler function to be added to the middleware collection.
64
113
  *
65
114
  */
66
- addMiddleware(middleware: express.RequestHandler): void;
115
+ addMiddleware(...middleware: Array<MiddlewareArgs>): void;
67
116
  /**
68
- * Retrieves all the middlewares that have been added.
117
+ * Retrieves middleware pipeline in the order they were added.
69
118
  *
70
119
  * @returns An array of Express request handlers representing the middlewares.
71
120
  */
72
- getMiddlewares(): Array<express.RequestHandler>;
121
+ getMiddlewarePipeline(): Array<MiddlewarePipeline>;
73
122
  /**
74
123
  * Gets the configured error handler middleware.
75
124
  *
@@ -85,7 +134,7 @@ interface IMiddleware {
85
134
  * @see IConfigure
86
135
  */
87
136
  declare class Middleware implements IMiddleware {
88
- private middlewares;
137
+ private middlewarePipeline;
89
138
  private errorHandler;
90
139
  private logger;
91
140
  /**
@@ -127,6 +176,14 @@ declare class Middleware implements IMiddleware {
127
176
  * @param options - Optional configuration options for Cookie Session. Defines the behavior of cookie sessions like the name of the cookie, keys to sign the cookie, etc.
128
177
  */
129
178
  addCookieSession(options: CookieSessionOptions): void;
179
+ /**
180
+ * Adds a middleware to serve the favicon to the middleware collection.
181
+ * The favicon is the icon that is displayed in the browser tab for the application.
182
+ *
183
+ * @param path - The path to the favicon file.
184
+ * @param options - Optional configuration options for serving the favicon. Defines the behavior of the favicon middleware like cache control, custom headers, etc.
185
+ */
186
+ addServeFavicon(path: string | Buffer, options?: ServeFaviconOptions): void;
130
187
  /**
131
188
  * Configures the error handling middleware for the application.
132
189
  *
@@ -147,13 +204,13 @@ declare class Middleware implements IMiddleware {
147
204
  * @param middleware - The Express request handler function to be added to the middleware collection.
148
205
  *
149
206
  */
150
- addMiddleware(middleware: express.RequestHandler): void;
207
+ addMiddleware(...middleware: Array<MiddlewareArgs>): void;
151
208
  /**
152
- * Retrieves all the middlewares that have been added to the collection.
209
+ * Retrieves middleware pipeline in the order they were added.
153
210
  *
154
211
  * @returns An array of Express request handlers representing the middlewares.
155
212
  */
156
- getMiddlewares(): Array<express.RequestHandler>;
213
+ getMiddlewarePipeline(): Array<MiddlewarePipeline>;
157
214
  /**
158
215
  * Gets the configured error handler middleware.
159
216
  *
@@ -1 +1 @@
1
- {"version":3,"file":"middleware-service.d.ts","sourceRoot":"","sources":["../../../../packages/core/src/middleware/middleware-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"middleware-service.d.ts","sourceRoot":"","sources":["../../../../packages/core/src/middleware/middleware-service.ts"],"names":[],"mappings":";AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAI9B,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAEzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sDAAsD,CAAC;AAC5F,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAE3E;;;;;;;;;GASG;AACH,KAAK,cAAc,GACf,OAAO,CAAC,mBAAmB,GAC3B,OAAO,CAAC,mBAAmB,GAC3B,OAAO,CAAC,cAAc,GACtB,SAAS,CAAC;AAEd;;;;;GAKG;AACH,KAAK,cAAc,GAAG,MAAM,GAAG,cAAc,CAAC;AAE9C;;;;;;GAMG;AACH,KAAK,gBAAgB,GAAG;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;CACpC,CAAC;AAEF;;;;;;GAMG;AACH,UAAU,kBAAkB;IAC1B,SAAS,EAAE,IAAI,CAAC;IAChB,UAAU,EAAE,cAAc,GAAG,gBAAgB,CAAC;CAC/C;AAED;;;GAGG;AACH,UAAU,WAAW;IACnB;;;;;OAKG;IACH,aAAa,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAE3C;;;;OAIG;IACH,OAAO,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAErC;;;;OAIG;IACH,cAAc,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAEnD;;;;;OAKG;IACH,eAAe,CACb,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,SAAS,EAC3C,OAAO,CAAC,EAAE,mBAAmB,GAC5B,IAAI,CAAC;IAER;;;;OAIG;IACH,gBAAgB,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAEtD;;;;;;OAMG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAE5E;;;;OAIG;IACH,eAAe,CAAC,aAAa,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IAEtD;;;;;;OAMG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAE9D;;;;;OAKG;IACH,aAAa,CAAC,GAAG,UAAU,EAAE,KAAK,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;IAE1D;;;;OAIG;IACH,qBAAqB,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAEnD;;;;OAIG;IACH,eAAe,IAAI,cAAc,CAAC;CACnC;AAED;;;;;;GAMG;AACH,cACM,UAAW,YAAW,WAAW;IACrC,OAAO,CAAC,kBAAkB,CAAiC;IAC3D,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,MAAM,CAAwB;IAEtC;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IASxB;;;;OAIG;IACI,aAAa,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI;IAgBjD;;;;OAIG;IACH,OAAO,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI;IAYpC;;;;OAIG;IACH,cAAc,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,IAAI;IAYlD;;;;;OAKG;IACH,eAAe,CACb,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,SAAS,EAC3C,OAAO,CAAC,EAAE,mBAAmB,GAAG,SAAS,GACxC,IAAI;IAYP;;;;OAIG;IACH,gBAAgB,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI;IAarD;;;;;;OAMG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,IAAI;IAa3E;;;;OAIG;IACH,eAAe,CAAC,aAAa,CAAC,EAAE,cAAc,GAAG,IAAI;IAQrD;;;;;;OAMG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,IAAI;IAgB7D;;;;;OAKG;IACH,aAAa,CAAC,GAAG,UAAU,EAAE,KAAK,CAAC,cAAc,CAAC,GAAG,IAAI;IAsDzD;;;;OAIG;IACI,qBAAqB,IAAI,KAAK,CAAC,kBAAkB,CAAC;IAMzD;;;;OAIG;IACI,eAAe,IAAI,cAAc;CAGzC;AAED,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC"}
package/lib/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expressots/core",
3
- "version": "2.1.0",
3
+ "version": "2.2.0",
4
4
  "description": "Expressots - modern, fast, lightweight nodejs web framework (@core)",
5
5
  "author": "Richard Zampieri",
6
6
  "main": "./lib/cjs/index.js",
@@ -51,13 +51,11 @@
51
51
  },
52
52
  "scripts": {
53
53
  "prepare": "husky install",
54
- "win-clean": "if exist lib (del /q lib\\*)",
55
- "linux-clean": "rm -rf lib/*",
56
- "win-cpy": "xcopy package.json lib\\ && xcopy README.md lib\\ && xcopy CHANGELOG.md lib\\ /Y",
57
- "linux-cpy": "cp package.json README.md CHANGELOG.md lib/",
58
- "build:win": "npm run win-clean && npm run build:esm && npm run build:cjs && npm run win-cpy",
59
- "build:linux": "npm run linux-clean && npm run build:esm && npm run build:cjs && npm run linux-cpy",
60
- "build:esm": "tsc -p tsconfig.esm.json && mv lib/esm/index.js lib/esm/index.mjs ",
54
+ "clean": "node scripts/rm.js lib",
55
+ "copy": "node scripts/copy.js package.json README.md CHANGELOG.md lib",
56
+ "rename:esm": "node scripts/mv.js lib/esm/index.js lib/esm/index.mjs",
57
+ "build": "npm run clean && npm run build:esm && npm run build:cjs && npm run copy",
58
+ "build:esm": "tsc -p tsconfig.esm.json && npm run rename:esm",
61
59
  "build:cjs": "tsc -p tsconfig.cjs.json",
62
60
  "release": "release-it",
63
61
  "coverage": "vitest run --coverage",
@@ -145,6 +143,10 @@
145
143
  {
146
144
  "type": "ci",
147
145
  "section": "Continuous Integrations"
146
+ },
147
+ {
148
+ "type": "chore",
149
+ "hidden": true
148
150
  }
149
151
  ]
150
152
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expressots/core",
3
- "version": "2.1.0",
3
+ "version": "2.2.0",
4
4
  "description": "Expressots - modern, fast, lightweight nodejs web framework (@core)",
5
5
  "author": "Richard Zampieri",
6
6
  "main": "./lib/cjs/index.js",
@@ -51,13 +51,11 @@
51
51
  },
52
52
  "scripts": {
53
53
  "prepare": "husky install",
54
- "win-clean": "if exist lib (del /q lib\\*)",
55
- "linux-clean": "rm -rf lib/*",
56
- "win-cpy": "xcopy package.json lib\\ && xcopy README.md lib\\ && xcopy CHANGELOG.md lib\\ /Y",
57
- "linux-cpy": "cp package.json README.md CHANGELOG.md lib/",
58
- "build:win": "npm run win-clean && npm run build:esm && npm run build:cjs && npm run win-cpy",
59
- "build:linux": "npm run linux-clean && npm run build:esm && npm run build:cjs && npm run linux-cpy",
60
- "build:esm": "tsc -p tsconfig.esm.json && mv lib/esm/index.js lib/esm/index.mjs ",
54
+ "clean": "node scripts/rm.js lib",
55
+ "copy": "node scripts/copy.js package.json README.md CHANGELOG.md lib",
56
+ "rename:esm": "node scripts/mv.js lib/esm/index.js lib/esm/index.mjs",
57
+ "build": "npm run clean && npm run build:esm && npm run build:cjs && npm run copy",
58
+ "build:esm": "tsc -p tsconfig.esm.json && npm run rename:esm",
61
59
  "build:cjs": "tsc -p tsconfig.cjs.json",
62
60
  "release": "release-it",
63
61
  "coverage": "vitest run --coverage",
@@ -145,6 +143,10 @@
145
143
  {
146
144
  "type": "ci",
147
145
  "section": "Continuous Integrations"
146
+ },
147
+ {
148
+ "type": "chore",
149
+ "hidden": true
148
150
  }
149
151
  ]
150
152
  }