@noony-serverless/core 0.4.2 → 0.4.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.
@@ -46,7 +46,7 @@ export declare class Handler<T = unknown, U = unknown> {
46
46
  private middlewaresPrecomputed;
47
47
  static use<T = unknown, U = unknown>(middleware: BaseMiddleware<T, U>): Handler<T, U>;
48
48
  use<NewT = T, NewU = U>(middleware: BaseMiddleware<NewT, NewU>): Handler<NewT, NewU>;
49
- handle(handler: (context: Context<T, U>) => Promise<void>): Handler<T, U>;
49
+ handle(handler: (context: Context<T, U>) => Promise<void | unknown>): Handler<T, U>;
50
50
  /**
51
51
  * Performance optimization: Pre-compute middleware arrays to avoid runtime array operations
52
52
  */
@@ -74,7 +74,12 @@ class Handler {
74
74
  try {
75
75
  // Execute before middlewares with performance optimizations
76
76
  await this.executeBeforeMiddlewares(context);
77
- await this.handler(context);
77
+ // Capture return value from handler
78
+ const returnValue = await this.handler(context);
79
+ // If handler returns a value and responseData hasn't been set, use the return value
80
+ if (returnValue !== undefined && !context.responseData) {
81
+ context.responseData = returnValue;
82
+ }
78
83
  // Execute after middlewares in reverse order using pre-computed array
79
84
  await this.executeAfterMiddlewares(context);
80
85
  }
@@ -129,7 +134,12 @@ class Handler {
129
134
  try {
130
135
  // Execute before middlewares with performance optimizations
131
136
  await this.executeBeforeMiddlewares(context);
132
- await this.handler(context);
137
+ // Capture return value from handler
138
+ const returnValue = await this.handler(context);
139
+ // If handler returns a value and responseData hasn't been set, use the return value
140
+ if (returnValue !== undefined && !context.responseData) {
141
+ context.responseData = returnValue;
142
+ }
133
143
  // Execute after middlewares in reverse order using pre-computed array
134
144
  await this.executeAfterMiddlewares(context);
135
145
  }
@@ -63,6 +63,8 @@ import { Context } from '../core/core';
63
63
  * ```
64
64
  */
65
65
  export declare class ResponseWrapperMiddleware<T = unknown, TBody = unknown, TUser = unknown> implements BaseMiddleware<TBody, TUser> {
66
+ private defaultStatusCode?;
67
+ constructor(defaultStatusCode?: number | undefined);
66
68
  after(context: Context<TBody, TUser>): Promise<void>;
67
69
  }
68
70
  /**
@@ -122,7 +124,7 @@ export declare class ResponseWrapperMiddleware<T = unknown, TBody = unknown, TUs
122
124
  * });
123
125
  * ```
124
126
  */
125
- export declare const responseWrapperMiddleware: <T = unknown, TBody = unknown, TUser = unknown>() => BaseMiddleware<TBody, TUser>;
127
+ export declare const responseWrapperMiddleware: <T = unknown, TBody = unknown, TUser = unknown>(defaultStatusCode?: number) => BaseMiddleware<TBody, TUser>;
126
128
  /**
127
129
  * Helper function to set response data in context for later wrapping.
128
130
  * This function should be used in handlers when using ResponseWrapperMiddleware.
@@ -2,9 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.responseWrapperMiddleware = exports.ResponseWrapperMiddleware = void 0;
4
4
  exports.setResponseData = setResponseData;
5
- const wrapResponse = (context) => {
5
+ const wrapResponse = (context, defaultStatusCode) => {
6
6
  if (!context.res.headersSent) {
7
- const statusCode = context.res.statusCode || 200;
7
+ // Use defaultStatusCode if provided, otherwise use context.res.statusCode, finally default to 200
8
+ const statusCode = defaultStatusCode || context.res.statusCode || 200;
8
9
  const body = context.responseData;
9
10
  context.res.status(statusCode).json({
10
11
  success: true,
@@ -76,8 +77,12 @@ const wrapResponse = (context) => {
76
77
  * ```
77
78
  */
78
79
  class ResponseWrapperMiddleware {
80
+ defaultStatusCode;
81
+ constructor(defaultStatusCode) {
82
+ this.defaultStatusCode = defaultStatusCode;
83
+ }
79
84
  async after(context) {
80
- wrapResponse(context);
85
+ wrapResponse(context, this.defaultStatusCode);
81
86
  }
82
87
  }
83
88
  exports.ResponseWrapperMiddleware = ResponseWrapperMiddleware;
@@ -138,9 +143,9 @@ exports.ResponseWrapperMiddleware = ResponseWrapperMiddleware;
138
143
  * });
139
144
  * ```
140
145
  */
141
- const responseWrapperMiddleware = () => ({
146
+ const responseWrapperMiddleware = (defaultStatusCode) => ({
142
147
  after: async (context) => {
143
- wrapResponse(context);
148
+ wrapResponse(context, defaultStatusCode);
144
149
  },
145
150
  });
146
151
  exports.responseWrapperMiddleware = responseWrapperMiddleware;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@noony-serverless/core",
3
- "version": "0.4.2",
3
+ "version": "0.4.3",
4
4
  "description": "A Middy base framework compatible with Firebase and GCP Cloud Functions with TypeScript",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",