@noony-serverless/core 0.2.0 → 0.2.1
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
|
@@ -9,7 +9,7 @@ A powerful and flexible serverless middleware framework for Google Cloud Functio
|
|
|
9
9
|
The `Handler` class manages the middleware execution pipeline with `before`, `after`, and `onError` lifecycle hooks:
|
|
10
10
|
|
|
11
11
|
```typescript
|
|
12
|
-
const handler = new Handler<RequestType
|
|
12
|
+
const handler = new Handler<RequestType>()
|
|
13
13
|
.use(errorHandler())
|
|
14
14
|
.use(bodyParser())
|
|
15
15
|
.use(bodyValidator(schema))
|
|
@@ -23,7 +23,7 @@ const handler = new Handler<RequestType, UserType>()
|
|
|
23
23
|
The context system provides full TypeScript support with generic typing:
|
|
24
24
|
|
|
25
25
|
```typescript
|
|
26
|
-
interface Context<T = unknown
|
|
26
|
+
interface Context<T = unknown> {
|
|
27
27
|
req: CustomRequest<T>; // Request with parsedBody and validatedBody
|
|
28
28
|
res: CustomResponse; // Response object
|
|
29
29
|
container?: Container; // TypeDI dependency injection
|
|
@@ -72,7 +72,7 @@ const userSchema = z.object({
|
|
|
72
72
|
type UserRequest = z.infer<typeof userSchema>;
|
|
73
73
|
|
|
74
74
|
// Create handler with full type safety
|
|
75
|
-
const createUserHandler = new Handler<UserRequest
|
|
75
|
+
const createUserHandler = new Handler<UserRequest>()
|
|
76
76
|
.use(new ErrorHandlerMiddleware())
|
|
77
77
|
.use(new BodyValidationMiddleware(userSchema))
|
|
78
78
|
.use(new ResponseWrapperMiddleware())
|
|
@@ -117,7 +117,7 @@ const messageSchema = z.object({
|
|
|
117
117
|
type PubSubMessage = z.infer<typeof messageSchema>;
|
|
118
118
|
|
|
119
119
|
// Create Pub/Sub handler
|
|
120
|
-
const pubsubHandler = new Handler<PubSubMessage
|
|
120
|
+
const pubsubHandler = new Handler<PubSubMessage>()
|
|
121
121
|
.use(new ErrorHandlerMiddleware())
|
|
122
122
|
.use(new BodyParserMiddleware()) // Decodes base64 Pub/Sub messages
|
|
123
123
|
.use(new BodyValidationMiddleware(messageSchema))
|
|
@@ -296,7 +296,7 @@ app.post('/users', async (req, res) => {
|
|
|
296
296
|
### 1. Middleware Order
|
|
297
297
|
|
|
298
298
|
```typescript
|
|
299
|
-
const handler = new Handler<RequestType
|
|
299
|
+
const handler = new Handler<RequestType>()
|
|
300
300
|
.use(new ErrorHandlerMiddleware()) // Always first
|
|
301
301
|
.use(new HeaderVariablesMiddleware(...)) // Required headers
|
|
302
302
|
.use(new AuthenticationMiddleware(...)) // Authentication
|
|
@@ -324,7 +324,7 @@ interface UserContext {
|
|
|
324
324
|
}
|
|
325
325
|
|
|
326
326
|
// Use throughout the handler
|
|
327
|
-
const handler = new Handler<UserRequest
|
|
327
|
+
const handler = new Handler<UserRequest>();
|
|
328
328
|
```
|
|
329
329
|
|
|
330
330
|
### 3. Error Handling
|
|
@@ -361,7 +361,7 @@ import {
|
|
|
361
361
|
} from '@noony/serverless';
|
|
362
362
|
|
|
363
363
|
// No type casting needed with proper generics
|
|
364
|
-
const handler = new Handler<UserRequest
|
|
364
|
+
const handler = new Handler<UserRequest>()
|
|
365
365
|
.handle(async (context) => {
|
|
366
366
|
// TypeScript knows validatedBody is UserRequest
|
|
367
367
|
const { name, email } = context.req.validatedBody!;
|
package/build/core/core.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { ContainerInstance } from 'typedi';
|
|
2
2
|
/**
|
|
3
3
|
* Framework-agnostic HTTP method enum
|
|
4
4
|
*/
|
|
@@ -71,7 +71,7 @@ export interface HandlerOptions {
|
|
|
71
71
|
export interface Context<T = unknown> {
|
|
72
72
|
readonly req: NoonyRequest<T>;
|
|
73
73
|
readonly res: NoonyResponse;
|
|
74
|
-
container?:
|
|
74
|
+
container?: ContainerInstance;
|
|
75
75
|
error?: Error | null;
|
|
76
76
|
readonly businessData: Map<string, unknown>;
|
|
77
77
|
user?: unknown;
|
package/build/core/core.js
CHANGED
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.HttpMethod = void 0;
|
|
7
4
|
exports.generateRequestId = generateRequestId;
|
|
8
5
|
exports.createContext = createContext;
|
|
9
|
-
const typedi_1 =
|
|
6
|
+
const typedi_1 = require("typedi");
|
|
10
7
|
/**
|
|
11
8
|
* Framework-agnostic HTTP method enum
|
|
12
9
|
*/
|
|
@@ -25,7 +22,7 @@ var HttpMethod;
|
|
|
25
22
|
* Utility function to generate unique request IDs
|
|
26
23
|
*/
|
|
27
24
|
function generateRequestId() {
|
|
28
|
-
return `req_${Date.now()}_${Math.random().toString(36).
|
|
25
|
+
return `req_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;
|
|
29
26
|
}
|
|
30
27
|
// Complex adapter functions removed - using smart universal adapter in Handler instead
|
|
31
28
|
/**
|
|
@@ -35,7 +32,7 @@ function createContext(req, res, options = {}) {
|
|
|
35
32
|
return {
|
|
36
33
|
req,
|
|
37
34
|
res,
|
|
38
|
-
container: options.container || typedi_1.
|
|
35
|
+
container: options.container || typedi_1.Container.of(),
|
|
39
36
|
error: options.error || null,
|
|
40
37
|
businessData: options.businessData || new Map(),
|
|
41
38
|
user: options.user,
|
|
@@ -158,7 +158,7 @@ class DependencyInjectionMiddleware {
|
|
|
158
158
|
this.services.forEach((service) => {
|
|
159
159
|
typedi_1.Container.set(service.id, service.value);
|
|
160
160
|
});
|
|
161
|
-
context.container = typedi_1.Container;
|
|
161
|
+
context.container = typedi_1.Container.of();
|
|
162
162
|
}
|
|
163
163
|
}
|
|
164
164
|
exports.DependencyInjectionMiddleware = DependencyInjectionMiddleware;
|
package/package.json
CHANGED