glasswork 0.2.2 → 0.2.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.
|
@@ -37,15 +37,15 @@ export type ValibotSchema = BaseSchema<unknown, unknown, BaseIssue<unknown>> | B
|
|
|
37
37
|
*/
|
|
38
38
|
type InferSchemaType<T> = T extends ValibotSchema ? InferOutput<T> : never;
|
|
39
39
|
/**
|
|
40
|
-
* Helper type to extract and create a union of all 2xx response types
|
|
40
|
+
* Helper type to extract and create a union of all 2xx and 3xx response types
|
|
41
41
|
*/
|
|
42
42
|
type InferResponseUnion<TResponses> = {
|
|
43
|
-
[K in keyof TResponses]: K extends 200 | 201 ? TResponses[K] extends ValibotSchema ? InferOutput<TResponses[K]> : never : never;
|
|
43
|
+
[K in keyof TResponses]: K extends 200 | 201 | 202 | 204 | 301 | 302 | 307 | 308 ? TResponses[K] extends ValibotSchema ? InferOutput<TResponses[K]> : never : never;
|
|
44
44
|
}[keyof TResponses];
|
|
45
45
|
/**
|
|
46
|
-
* Helper type to infer the response type from all 2xx status code schemas
|
|
47
|
-
* Returns a union type of all defined
|
|
48
|
-
* Falls back to unknown if no
|
|
46
|
+
* Helper type to infer the response type from all 2xx and 3xx status code schemas
|
|
47
|
+
* Returns a union type of all defined success/redirect responses (200, 201, 202, 204, 301, 302, 307, 308)
|
|
48
|
+
* Falls back to unknown if no success/redirect responses are defined
|
|
49
49
|
*/
|
|
50
50
|
type InferResponseType<TResponses> = InferResponseUnion<TResponses> extends never ? unknown : InferResponseUnion<TResponses>;
|
|
51
51
|
/**
|
|
@@ -54,7 +54,12 @@ type InferResponseType<TResponses> = InferResponseUnion<TResponses> extends neve
|
|
|
54
54
|
declare const STATUS_DESCRIPTIONS: {
|
|
55
55
|
readonly 200: "Success";
|
|
56
56
|
readonly 201: "Created";
|
|
57
|
+
readonly 202: "Accepted";
|
|
57
58
|
readonly 204: "No Content";
|
|
59
|
+
readonly 301: "Moved Permanently";
|
|
60
|
+
readonly 302: "Found";
|
|
61
|
+
readonly 307: "Temporary Redirect";
|
|
62
|
+
readonly 308: "Permanent Redirect";
|
|
58
63
|
readonly 400: "Bad Request";
|
|
59
64
|
readonly 401: "Unauthorized";
|
|
60
65
|
readonly 403: "Forbidden";
|
|
@@ -166,13 +171,14 @@ export interface RouteContext<TBody = never, TSessionRequired extends boolean =
|
|
|
166
171
|
* - Body type is inferred from the `body` schema
|
|
167
172
|
* - Return type is inferred as a union of all 2xx response schemas (200, 201, etc.)
|
|
168
173
|
* - Response data is automatically validated and extra keys are stripped
|
|
174
|
+
* - HTTP status code is automatically set based on which schema matches
|
|
169
175
|
*
|
|
170
|
-
* Response Validation:
|
|
176
|
+
* Response Validation & Status Code:
|
|
171
177
|
* - Responses are parsed through their corresponding 2xx schema
|
|
172
178
|
* - Extra keys not defined in the schema are automatically stripped
|
|
173
|
-
* -
|
|
179
|
+
* - The HTTP status code is automatically set based on which schema validates
|
|
174
180
|
* - If multiple 2xx schemas are defined, each is tried in order (200, 201)
|
|
175
|
-
* - The first schema that successfully validates
|
|
181
|
+
* - The first schema that successfully validates determines the status code
|
|
176
182
|
*
|
|
177
183
|
* @example
|
|
178
184
|
* ```typescript
|
|
@@ -186,17 +192,18 @@ export interface RouteContext<TBody = never, TSessionRequired extends boolean =
|
|
|
186
192
|
* }
|
|
187
193
|
* })
|
|
188
194
|
*
|
|
189
|
-
* // Union response type (multiple 2xx responses)
|
|
195
|
+
* // Union response type (multiple 2xx responses with automatic status)
|
|
190
196
|
* route({
|
|
191
197
|
* body: LoginDto,
|
|
192
198
|
* responses: {
|
|
193
|
-
* 200: MfaRequiredDto,
|
|
194
|
-
* 201: SessionDto
|
|
199
|
+
* 200: MfaRequiredDto, // Returns 200 if data matches this
|
|
200
|
+
* 201: SessionDto // Returns 201 if data matches this
|
|
195
201
|
* },
|
|
196
202
|
* handler: async ({ body }) => {
|
|
197
203
|
* // Return type is: MfaRequiredDto | SessionDto
|
|
198
|
-
*
|
|
199
|
-
* return {
|
|
204
|
+
* // Status code is set automatically based on which schema matches!
|
|
205
|
+
* if (needsMfa) return { mfaRequired: true, methods: ['totp'] }; // 200
|
|
206
|
+
* return { sessionId: '123', token: 'abc' }; // 201
|
|
200
207
|
* }
|
|
201
208
|
* })
|
|
202
209
|
*
|
|
@@ -207,7 +214,7 @@ export interface RouteContext<TBody = never, TSessionRequired extends boolean =
|
|
|
207
214
|
* const user = await prisma.user.findUnique({ ... });
|
|
208
215
|
* // user might have { id, email, password, createdAt, ... }
|
|
209
216
|
* // But only fields in UserDto will be returned
|
|
210
|
-
* return user; // Extra keys
|
|
217
|
+
* return user; // Extra keys stripped, returns 200
|
|
211
218
|
* }
|
|
212
219
|
* })
|
|
213
220
|
* ```
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-helpers.d.ts","sourceRoot":"","sources":["../../src/http/route-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"route-helpers.d.ts","sourceRoot":"","sources":["../../src/http/route-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -58,7 +58,12 @@ export function getGlobalSecuritySchemes() {
|
|
|
58
58
|
const STATUS_DESCRIPTIONS = {
|
|
59
59
|
200: 'Success',
|
|
60
60
|
201: 'Created',
|
|
61
|
+
202: 'Accepted',
|
|
61
62
|
204: 'No Content',
|
|
63
|
+
301: 'Moved Permanently',
|
|
64
|
+
302: 'Found',
|
|
65
|
+
307: 'Temporary Redirect',
|
|
66
|
+
308: 'Permanent Redirect',
|
|
62
67
|
400: 'Bad Request',
|
|
63
68
|
401: 'Unauthorized',
|
|
64
69
|
403: 'Forbidden',
|
|
@@ -97,13 +102,14 @@ export function createRoutes(factory) {
|
|
|
97
102
|
* - Body type is inferred from the `body` schema
|
|
98
103
|
* - Return type is inferred as a union of all 2xx response schemas (200, 201, etc.)
|
|
99
104
|
* - Response data is automatically validated and extra keys are stripped
|
|
105
|
+
* - HTTP status code is automatically set based on which schema matches
|
|
100
106
|
*
|
|
101
|
-
* Response Validation:
|
|
107
|
+
* Response Validation & Status Code:
|
|
102
108
|
* - Responses are parsed through their corresponding 2xx schema
|
|
103
109
|
* - Extra keys not defined in the schema are automatically stripped
|
|
104
|
-
* -
|
|
110
|
+
* - The HTTP status code is automatically set based on which schema validates
|
|
105
111
|
* - If multiple 2xx schemas are defined, each is tried in order (200, 201)
|
|
106
|
-
* - The first schema that successfully validates
|
|
112
|
+
* - The first schema that successfully validates determines the status code
|
|
107
113
|
*
|
|
108
114
|
* @example
|
|
109
115
|
* ```typescript
|
|
@@ -117,17 +123,18 @@ export function createRoutes(factory) {
|
|
|
117
123
|
* }
|
|
118
124
|
* })
|
|
119
125
|
*
|
|
120
|
-
* // Union response type (multiple 2xx responses)
|
|
126
|
+
* // Union response type (multiple 2xx responses with automatic status)
|
|
121
127
|
* route({
|
|
122
128
|
* body: LoginDto,
|
|
123
129
|
* responses: {
|
|
124
|
-
* 200: MfaRequiredDto,
|
|
125
|
-
* 201: SessionDto
|
|
130
|
+
* 200: MfaRequiredDto, // Returns 200 if data matches this
|
|
131
|
+
* 201: SessionDto // Returns 201 if data matches this
|
|
126
132
|
* },
|
|
127
133
|
* handler: async ({ body }) => {
|
|
128
134
|
* // Return type is: MfaRequiredDto | SessionDto
|
|
129
|
-
*
|
|
130
|
-
* return {
|
|
135
|
+
* // Status code is set automatically based on which schema matches!
|
|
136
|
+
* if (needsMfa) return { mfaRequired: true, methods: ['totp'] }; // 200
|
|
137
|
+
* return { sessionId: '123', token: 'abc' }; // 201
|
|
131
138
|
* }
|
|
132
139
|
* })
|
|
133
140
|
*
|
|
@@ -138,7 +145,7 @@ export function createRoutes(factory) {
|
|
|
138
145
|
* const user = await prisma.user.findUnique({ ... });
|
|
139
146
|
* // user might have { id, email, password, createdAt, ... }
|
|
140
147
|
* // But only fields in UserDto will be returned
|
|
141
|
-
* return user; // Extra keys
|
|
148
|
+
* return user; // Extra keys stripped, returns 200
|
|
142
149
|
* }
|
|
143
150
|
* })
|
|
144
151
|
* ```
|
|
@@ -188,28 +195,35 @@ export function route(config) {
|
|
|
188
195
|
c.status(204);
|
|
189
196
|
return c.body(null);
|
|
190
197
|
}
|
|
191
|
-
// Parse and validate response through schema (strips extra keys)
|
|
192
|
-
const parsedResult = await parseResponse(result, config.responses);
|
|
198
|
+
// Parse and validate response through schema (strips extra keys and determines status code)
|
|
199
|
+
const { data: parsedResult, statusCode } = await parseResponse(result, config.responses);
|
|
200
|
+
// Automatically set the status code based on which schema matched
|
|
201
|
+
if (statusCode) {
|
|
202
|
+
c.status(statusCode);
|
|
203
|
+
}
|
|
193
204
|
return c.json(parsedResult);
|
|
194
205
|
});
|
|
195
206
|
return middlewares;
|
|
196
207
|
}
|
|
197
208
|
/**
|
|
198
|
-
* Parse and validate response data through the appropriate
|
|
199
|
-
* Tries each 2xx schema in order
|
|
200
|
-
* This automatically strips extra keys not defined in the schema
|
|
209
|
+
* Parse and validate response data through the appropriate success/redirect schema.
|
|
210
|
+
* Tries each 2xx and 3xx schema in order until one successfully validates.
|
|
211
|
+
* This automatically strips extra keys not defined in the schema and determines
|
|
212
|
+
* the appropriate HTTP status code.
|
|
201
213
|
*
|
|
202
214
|
* @param data - The raw response data from the handler
|
|
203
215
|
* @param responses - The response schemas configuration
|
|
204
|
-
* @returns
|
|
216
|
+
* @returns Object with parsed data and the matching status code
|
|
205
217
|
*/
|
|
206
218
|
async function parseResponse(data, responses) {
|
|
207
219
|
// If no response schemas defined, return data as-is
|
|
208
220
|
if (!responses) {
|
|
209
|
-
return data;
|
|
221
|
+
return { data };
|
|
210
222
|
}
|
|
211
|
-
// Try each
|
|
212
|
-
const successCodes = [
|
|
223
|
+
// Try each success/redirect schema in order (2xx and 3xx codes)
|
|
224
|
+
const successCodes = [
|
|
225
|
+
200, 201, 202, 204, 301, 302, 307, 308,
|
|
226
|
+
];
|
|
213
227
|
for (const statusCode of successCodes) {
|
|
214
228
|
const schema = responses[statusCode];
|
|
215
229
|
if (!schema)
|
|
@@ -218,17 +232,17 @@ async function parseResponse(data, responses) {
|
|
|
218
232
|
// Use async parse to support both sync and async schemas
|
|
219
233
|
const result = await safeParseAsync(schema, data);
|
|
220
234
|
if (result.success) {
|
|
221
|
-
// Successfully parsed - return the validated data
|
|
222
|
-
return result.output;
|
|
235
|
+
// Successfully parsed - return the validated data and matching status code
|
|
236
|
+
return { data: result.output, statusCode };
|
|
223
237
|
}
|
|
224
238
|
}
|
|
225
|
-
// No schema matched - return original data
|
|
239
|
+
// No schema matched - return original data without status code
|
|
226
240
|
// In development, we might want to warn about this
|
|
227
241
|
if (process.env.NODE_ENV === 'development') {
|
|
228
|
-
logger.warn('Response data does not match any defined
|
|
242
|
+
logger.warn('Response data does not match any defined success/redirect schema. ' +
|
|
229
243
|
'Data will be returned as-is without validation or key stripping.');
|
|
230
244
|
}
|
|
231
|
-
return data;
|
|
245
|
+
return { data };
|
|
232
246
|
}
|
|
233
247
|
function buildOpenAPIMiddleware(config) {
|
|
234
248
|
const responses = buildOpenAPIResponses(config);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-helpers.js","sourceRoot":"","sources":["../../src/http/route-helpers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"route-helpers.js","sourceRoot":"","sources":["../../src/http/route-helpers.ts"],"names":[],"mappings":"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"}
|