hono-takibi 0.0.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 +471 -0
- package/dist/core/schema/references/find-references.d.ts +35 -0
- package/dist/core/schema/references/find-references.js +42 -0
- package/dist/core/schema/references/get-camel-case-schema-name.d.ts +7 -0
- package/dist/core/schema/references/get-camel-case-schema-name.js +14 -0
- package/dist/core/schema/references/get-ref-name.d.ts +38 -0
- package/dist/core/schema/references/get-ref-name.js +47 -0
- package/dist/core/schema/references/resolve-schema-order.d.ts +30 -0
- package/dist/core/schema/references/resolve-schema-order.js +48 -0
- package/dist/core/schema/references/resolve-schema-references.d.ts +49 -0
- package/dist/core/schema/references/resolve-schema-references.js +61 -0
- package/dist/core/schema/references/resolve-schemas-dependencies.d.ts +49 -0
- package/dist/core/schema/references/resolve-schemas-dependencies.js +65 -0
- package/dist/core/schema/references/traverse_schema.d.ts +48 -0
- package/dist/core/schema/references/traverse_schema.js +70 -0
- package/dist/core/text/capitalize.d.ts +18 -0
- package/dist/core/text/capitalize.js +23 -0
- package/dist/core/text/decapitalize.d.ts +17 -0
- package/dist/core/text/decapitalize.js +22 -0
- package/dist/core/text/remove-zod-prefix.d.ts +8 -0
- package/dist/core/text/remove-zod-prefix.js +13 -0
- package/dist/core/validator/is-format-number.d.ts +2 -0
- package/dist/core/validator/is-format-number.js +6 -0
- package/dist/core/validator/is-format-string.d.ts +2 -0
- package/dist/core/validator/is-format-string.js +24 -0
- package/dist/core/validator/is-http-method.d.ts +9 -0
- package/dist/core/validator/is-http-method.js +19 -0
- package/dist/core/validator/is-operation.d.ts +15 -0
- package/dist/core/validator/is-operation.js +19 -0
- package/dist/core/zod/get-zod-string-format.d.ts +30 -0
- package/dist/core/zod/get-zod-string-format.js +66 -0
- package/dist/generators/hono/generate-hono.d.ts +9 -0
- package/dist/generators/hono/generate-hono.js +29 -0
- package/dist/generators/openapi/components/generate-components-code.d.ts +46 -0
- package/dist/generators/openapi/components/generate-components-code.js +79 -0
- package/dist/generators/openapi/paths/generate-create-route.d.ts +58 -0
- package/dist/generators/openapi/paths/generate-create-route.js +61 -0
- package/dist/generators/openapi/paths/generate-route-code.d.ts +53 -0
- package/dist/generators/openapi/paths/generate-route-code.js +85 -0
- package/dist/generators/openapi/paths/generate-route-name.d.ts +30 -0
- package/dist/generators/openapi/paths/generate-route-name.js +48 -0
- package/dist/generators/openapi/paths/generate-route.d.ts +51 -0
- package/dist/generators/openapi/paths/generate-route.js +73 -0
- package/dist/generators/openapi/paths/generate-schemas-export.d.ts +11 -0
- package/dist/generators/openapi/paths/generate-schemas-export.js +18 -0
- package/dist/generators/request/body/generate-insert-request-body.d.ts +32 -0
- package/dist/generators/request/body/generate-insert-request-body.js +37 -0
- package/dist/generators/request/body/generate-request-body.d.ts +18 -0
- package/dist/generators/request/body/generate-request-body.js +23 -0
- package/dist/generators/request/object/generate-format-request-object.d.ts +29 -0
- package/dist/generators/request/object/generate-format-request-object.js +34 -0
- package/dist/generators/request/params/generate-params-object.d.ts +62 -0
- package/dist/generators/request/params/generate-params-object.js +93 -0
- package/dist/generators/request/params/generate-request-parameter.d.ts +49 -0
- package/dist/generators/request/params/generate-request-parameter.js +79 -0
- package/dist/generators/request/params/generate-request-params-array.d.ts +37 -0
- package/dist/generators/request/params/generate-request-params-array.js +56 -0
- package/dist/generators/request/params/generate-request-params.d.ts +34 -0
- package/dist/generators/request/params/generate-request-params.js +39 -0
- package/dist/generators/response/schemas/generate-response-schema.d.ts +59 -0
- package/dist/generators/response/schemas/generate-response-schema.js +83 -0
- package/dist/generators/zod/generate-zod-array.d.ts +31 -0
- package/dist/generators/zod/generate-zod-array.js +36 -0
- package/dist/generators/zod/generate-zod-coerce.d.ts +10 -0
- package/dist/generators/zod/generate-zod-coerce.js +17 -0
- package/dist/generators/zod/generate-zod-integer-schema.d.ts +15 -0
- package/dist/generators/zod/generate-zod-integer-schema.js +24 -0
- package/dist/generators/zod/generate-zod-number-schema.d.ts +16 -0
- package/dist/generators/zod/generate-zod-number-schema.js +26 -0
- package/dist/generators/zod/generate-zod-object-schema.d.ts +36 -0
- package/dist/generators/zod/generate-zod-object-schema.js +43 -0
- package/dist/generators/zod/generate-zod-properties-schema.d.ts +50 -0
- package/dist/generators/zod/generate-zod-properties-schema.js +60 -0
- package/dist/generators/zod/generate-zod-property-schema.d.ts +25 -0
- package/dist/generators/zod/generate-zod-property-schema.js +47 -0
- package/dist/generators/zod/generate-zod-record-schema.d.ts +34 -0
- package/dist/generators/zod/generate-zod-record-schema.js +37 -0
- package/dist/generators/zod/generate-zod-schema-definition.d.ts +22 -0
- package/dist/generators/zod/generate-zod-schema-definition.js +27 -0
- package/dist/generators/zod/generate-zod-schema.d.ts +59 -0
- package/dist/generators/zod/generate-zod-schema.js +136 -0
- package/dist/generators/zod/generate-zod-string-schema.d.ts +46 -0
- package/dist/generators/zod/generate-zod-string-schema.js +54 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.js +85 -0
- package/dist/types/index.d.ts +170 -0
- package/dist/types/index.js +2 -0
- package/package.json +47 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateRoute = generateRoute;
|
|
4
|
+
const generate_create_route_1 = require("./generate-create-route");
|
|
5
|
+
const generate_request_parameter_1 = require("../../request/params/generate-request-parameter");
|
|
6
|
+
const generate_response_schema_1 = require("../../response/schemas/generate-response-schema");
|
|
7
|
+
const generate_route_name_1 = require("./generate-route-name");
|
|
8
|
+
/**
|
|
9
|
+
* Generates TypeScript code for a Hono route based on OpenAPI operation details
|
|
10
|
+
*
|
|
11
|
+
* @function generateRoute
|
|
12
|
+
* @param path - The URL path pattern for the route
|
|
13
|
+
* @param method - The HTTP method (GET, POST, etc.)
|
|
14
|
+
* @param operation - The OpenAPI Operation object containing route details
|
|
15
|
+
* @returns Generated TypeScript code string for the route
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* const operation = {
|
|
19
|
+
* tags: ['users'],
|
|
20
|
+
* description: 'Create a new user',
|
|
21
|
+
* security: [{ bearerAuth: [] }],
|
|
22
|
+
* requestBody: {
|
|
23
|
+
* content: {
|
|
24
|
+
* 'application/json': {
|
|
25
|
+
* schema: { $ref: '#/components/schemas/CreateUserInput' }
|
|
26
|
+
* }
|
|
27
|
+
* }
|
|
28
|
+
* },
|
|
29
|
+
* responses: {
|
|
30
|
+
* '201': {
|
|
31
|
+
* description: 'User created successfully',
|
|
32
|
+
* content: {
|
|
33
|
+
* 'application/json': {
|
|
34
|
+
* schema: { $ref: '#/components/schemas/User' }
|
|
35
|
+
* }
|
|
36
|
+
* }
|
|
37
|
+
* }
|
|
38
|
+
* }
|
|
39
|
+
* }
|
|
40
|
+
*
|
|
41
|
+
* const route = generateRoute('/users', 'post', operation)
|
|
42
|
+
* // Returns: TypeScript code for a type-safe POST /users route
|
|
43
|
+
*
|
|
44
|
+
* @note
|
|
45
|
+
* - Generates a complete route definition including:
|
|
46
|
+
* - Route name based on method and path
|
|
47
|
+
* - OpenAPI tags for documentation
|
|
48
|
+
* - HTTP method and path
|
|
49
|
+
* - Route description
|
|
50
|
+
* - Security requirements
|
|
51
|
+
* - Request parameters and body validation
|
|
52
|
+
* - Response schemas for different status codes
|
|
53
|
+
* - All components are properly escaped and formatted
|
|
54
|
+
* - Handles optional parameters appropriately
|
|
55
|
+
* - Integrates with Hono's createRoute function
|
|
56
|
+
*/
|
|
57
|
+
function generateRoute(path, method, operation) {
|
|
58
|
+
const { tags, description, security, parameters, requestBody, responses } = operation;
|
|
59
|
+
const routeName = (0, generate_route_name_1.generateRouteName)(method, path);
|
|
60
|
+
const tagList = tags ? JSON.stringify(tags) : '[]';
|
|
61
|
+
const requestParams = (0, generate_request_parameter_1.generateRequestParameter)(parameters, requestBody);
|
|
62
|
+
const create_args = {
|
|
63
|
+
routeName,
|
|
64
|
+
tagsCode: `tags:${tagList},`,
|
|
65
|
+
methodCode: `method:'${method}',`,
|
|
66
|
+
pathCode: `path:'${path}',`,
|
|
67
|
+
descriptionCode: description ? `description:'${description}',` : '',
|
|
68
|
+
securityCode: security ? `security:${JSON.stringify(security)},` : '',
|
|
69
|
+
requestParams: requestParams ? `${requestParams}` : '',
|
|
70
|
+
responsesCode: responses ? `responses:{${(0, generate_response_schema_1.generateResponseSchema)(responses)}}` : '',
|
|
71
|
+
};
|
|
72
|
+
return (0, generate_create_route_1.generateCreateRoute)(create_args);
|
|
73
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generates a TypeScript export for a list of schema names
|
|
3
|
+
*
|
|
4
|
+
* @function generateSchemasExport
|
|
5
|
+
* @param orderedSchemas - Array of schema names
|
|
6
|
+
* @returns TypeScript code for exporting schemas
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* // Returns: 'export const schemas = { userSchema, postSchema }'
|
|
10
|
+
*/
|
|
11
|
+
export declare function generateSchemasExport(orderedSchemas: string[]): string;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateSchemasExport = generateSchemasExport;
|
|
4
|
+
const get_camel_case_schema_name_1 = require("../../../core/schema/references/get-camel-case-schema-name");
|
|
5
|
+
/**
|
|
6
|
+
* Generates a TypeScript export for a list of schema names
|
|
7
|
+
*
|
|
8
|
+
* @function generateSchemasExport
|
|
9
|
+
* @param orderedSchemas - Array of schema names
|
|
10
|
+
* @returns TypeScript code for exporting schemas
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* // Returns: 'export const schemas = { userSchema, postSchema }'
|
|
14
|
+
*/
|
|
15
|
+
function generateSchemasExport(orderedSchemas) {
|
|
16
|
+
const camelCaseSchemas = orderedSchemas.map((schemaName) => (0, get_camel_case_schema_name_1.getCamelCaseSchemaName)(schemaName));
|
|
17
|
+
return `export const schemas = {\n${camelCaseSchemas.join(',\n')}\n}`;
|
|
18
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generates a request validation string by inserting request body validation code into existing request parameters
|
|
3
|
+
*
|
|
4
|
+
* @function generateInsertRequestBody
|
|
5
|
+
* @param requestParams - Existing request parameters string
|
|
6
|
+
* @param requestBodyCode - Request body validation code to insert
|
|
7
|
+
* @returns Combined request validation string
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* // Adding body validation to query parameters
|
|
11
|
+
* const params = 'request:{query:z.object({id:z.string()})}'
|
|
12
|
+
* const body = 'body:{content:{"application/json":{schema:z.object({name:z.string()})}}}'
|
|
13
|
+
*
|
|
14
|
+
* generateInsertRequestBody(params, body)
|
|
15
|
+
* // Returns:
|
|
16
|
+
* // 'request:{
|
|
17
|
+
* // body:{
|
|
18
|
+
* // content:{
|
|
19
|
+
* // "application/json":{
|
|
20
|
+
* // schema:z.object({name:z.string()})
|
|
21
|
+
* // }
|
|
22
|
+
* // }
|
|
23
|
+
* // },
|
|
24
|
+
* // query:z.object({id:z.string()})
|
|
25
|
+
* // }'
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* // Adding body to empty request
|
|
29
|
+
* generateInsertRequestBody('request:{}', 'body:{...}')
|
|
30
|
+
* // Returns: 'request:{body:{...}}'
|
|
31
|
+
*/
|
|
32
|
+
export declare function generateInsertRequestBody(requestParams: string, requestBodyCode: string): string;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateInsertRequestBody = generateInsertRequestBody;
|
|
4
|
+
/**
|
|
5
|
+
* Generates a request validation string by inserting request body validation code into existing request parameters
|
|
6
|
+
*
|
|
7
|
+
* @function generateInsertRequestBody
|
|
8
|
+
* @param requestParams - Existing request parameters string
|
|
9
|
+
* @param requestBodyCode - Request body validation code to insert
|
|
10
|
+
* @returns Combined request validation string
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* // Adding body validation to query parameters
|
|
14
|
+
* const params = 'request:{query:z.object({id:z.string()})}'
|
|
15
|
+
* const body = 'body:{content:{"application/json":{schema:z.object({name:z.string()})}}}'
|
|
16
|
+
*
|
|
17
|
+
* generateInsertRequestBody(params, body)
|
|
18
|
+
* // Returns:
|
|
19
|
+
* // 'request:{
|
|
20
|
+
* // body:{
|
|
21
|
+
* // content:{
|
|
22
|
+
* // "application/json":{
|
|
23
|
+
* // schema:z.object({name:z.string()})
|
|
24
|
+
* // }
|
|
25
|
+
* // }
|
|
26
|
+
* // },
|
|
27
|
+
* // query:z.object({id:z.string()})
|
|
28
|
+
* // }'
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* // Adding body to empty request
|
|
32
|
+
* generateInsertRequestBody('request:{}', 'body:{...}')
|
|
33
|
+
* // Returns: 'request:{body:{...}}'
|
|
34
|
+
*/
|
|
35
|
+
function generateInsertRequestBody(requestParams, requestBodyCode) {
|
|
36
|
+
return requestParams.replace('request:{', `request:{${requestBodyCode}`);
|
|
37
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generates a request body configuration for OpenAPI schema
|
|
3
|
+
*
|
|
4
|
+
* @function generateRequestBody
|
|
5
|
+
* @param required - Whether the request body is required
|
|
6
|
+
* @param zodSchema - Zod schema string for request body validation
|
|
7
|
+
* @returns Generated request body configuration string
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* // Required request body
|
|
11
|
+
* generateRequestBody(true, 'z.object({ name: z.string() })')
|
|
12
|
+
* // Returns: 'body:{required:true,content:{'application/json':{schema:z.object({ name: z.string() }),},},},'
|
|
13
|
+
*
|
|
14
|
+
* // Optional request body
|
|
15
|
+
* generateRequestBody(false, 'z.object({ age: z.number() })')
|
|
16
|
+
* // Returns: 'body:{required:false,content:{'application/json':{schema:z.object({ age: z.number() }),},},},'
|
|
17
|
+
*/
|
|
18
|
+
export declare function generateRequestBody(required: boolean, zodSchema: string): string;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateRequestBody = generateRequestBody;
|
|
4
|
+
/**
|
|
5
|
+
* Generates a request body configuration for OpenAPI schema
|
|
6
|
+
*
|
|
7
|
+
* @function generateRequestBody
|
|
8
|
+
* @param required - Whether the request body is required
|
|
9
|
+
* @param zodSchema - Zod schema string for request body validation
|
|
10
|
+
* @returns Generated request body configuration string
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* // Required request body
|
|
14
|
+
* generateRequestBody(true, 'z.object({ name: z.string() })')
|
|
15
|
+
* // Returns: 'body:{required:true,content:{'application/json':{schema:z.object({ name: z.string() }),},},},'
|
|
16
|
+
*
|
|
17
|
+
* // Optional request body
|
|
18
|
+
* generateRequestBody(false, 'z.object({ age: z.number() })')
|
|
19
|
+
* // Returns: 'body:{required:false,content:{'application/json':{schema:z.object({ age: z.number() }),},},},'
|
|
20
|
+
*/
|
|
21
|
+
function generateRequestBody(required, zodSchema) {
|
|
22
|
+
return `body:{required:${required},content:{'application/json':{schema:${zodSchema},},},},`;
|
|
23
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generates a formatted request object string for request validation
|
|
3
|
+
*
|
|
4
|
+
* @function generateFormatRequestObject
|
|
5
|
+
* @param requestParamsArray - Array of Zod schema strings for request validation
|
|
6
|
+
* @returns Formatted request validator object string
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* // Single parameter
|
|
10
|
+
* generateFormatRequestObject(['query:z.object({page:z.string()})'])
|
|
11
|
+
* // Returns: 'request:{query:z.object({page:z.string()})}'
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* // Multiple parameters
|
|
15
|
+
* generateFormatRequestObject([
|
|
16
|
+
* 'query:z.object({page:z.string(),rows:z.string()})',
|
|
17
|
+
* 'params:z.object({id:z.string()})'
|
|
18
|
+
* ])
|
|
19
|
+
* // Returns: 'request:{
|
|
20
|
+
* // query:z.object({page:z.string(),rows:z.string()}),
|
|
21
|
+
* // params:z.object({id:z.string()})
|
|
22
|
+
* // }'
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* // Empty array
|
|
26
|
+
* generateFormatRequestObject([])
|
|
27
|
+
* // Returns: 'request:{}'
|
|
28
|
+
*/
|
|
29
|
+
export declare function generateFormatRequestObject(requestParamsArray: string[]): string;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateFormatRequestObject = generateFormatRequestObject;
|
|
4
|
+
/**
|
|
5
|
+
* Generates a formatted request object string for request validation
|
|
6
|
+
*
|
|
7
|
+
* @function generateFormatRequestObject
|
|
8
|
+
* @param requestParamsArray - Array of Zod schema strings for request validation
|
|
9
|
+
* @returns Formatted request validator object string
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* // Single parameter
|
|
13
|
+
* generateFormatRequestObject(['query:z.object({page:z.string()})'])
|
|
14
|
+
* // Returns: 'request:{query:z.object({page:z.string()})}'
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* // Multiple parameters
|
|
18
|
+
* generateFormatRequestObject([
|
|
19
|
+
* 'query:z.object({page:z.string(),rows:z.string()})',
|
|
20
|
+
* 'params:z.object({id:z.string()})'
|
|
21
|
+
* ])
|
|
22
|
+
* // Returns: 'request:{
|
|
23
|
+
* // query:z.object({page:z.string(),rows:z.string()}),
|
|
24
|
+
* // params:z.object({id:z.string()})
|
|
25
|
+
* // }'
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* // Empty array
|
|
29
|
+
* generateFormatRequestObject([])
|
|
30
|
+
* // Returns: 'request:{}'
|
|
31
|
+
*/
|
|
32
|
+
function generateFormatRequestObject(requestParamsArray) {
|
|
33
|
+
return `request:{${requestParamsArray.join(',')}},`;
|
|
34
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { ParamsObject, Parameters } from '../../../types';
|
|
2
|
+
/**
|
|
3
|
+
* Generates a params object containing Zod schemas for different parameter locations
|
|
4
|
+
*
|
|
5
|
+
* @function generateParamsObject
|
|
6
|
+
* @param parameters - Array of OpenAPI path parameters
|
|
7
|
+
* @returns ParamsObject with Zod schemas organized by parameter location
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* // Query and path parameters
|
|
11
|
+
* generateParamsObject([
|
|
12
|
+
* {
|
|
13
|
+
* name: 'userId',
|
|
14
|
+
* in: 'path',
|
|
15
|
+
* required: true,
|
|
16
|
+
* schema: { type: 'string' }
|
|
17
|
+
* },
|
|
18
|
+
* {
|
|
19
|
+
* name: 'filter',
|
|
20
|
+
* in: 'query',
|
|
21
|
+
* required: false,
|
|
22
|
+
* schema: { type: 'string' }
|
|
23
|
+
* }
|
|
24
|
+
* ])
|
|
25
|
+
* // Returns:
|
|
26
|
+
* // {
|
|
27
|
+
* // query: { filter: 'z.string().optional()' },
|
|
28
|
+
* // params: { userId: 'z.string()' },
|
|
29
|
+
* // headers: {},
|
|
30
|
+
* // body: {}
|
|
31
|
+
* // }
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* // Body parameter
|
|
35
|
+
* generateParamsObject([
|
|
36
|
+
* {
|
|
37
|
+
* name: 'user',
|
|
38
|
+
* in: 'body',
|
|
39
|
+
* required: true,
|
|
40
|
+
* schema: {
|
|
41
|
+
* type: 'object',
|
|
42
|
+
* properties: {
|
|
43
|
+
* name: { type: 'string' }
|
|
44
|
+
* }
|
|
45
|
+
* }
|
|
46
|
+
* }
|
|
47
|
+
* ])
|
|
48
|
+
* // Returns:
|
|
49
|
+
* // {
|
|
50
|
+
* // query: {},
|
|
51
|
+
* // params: {},
|
|
52
|
+
* // headers: {},
|
|
53
|
+
* // body: { user: 'z.object({name: z.string().optional()})' }
|
|
54
|
+
* // }
|
|
55
|
+
*
|
|
56
|
+
* @remarks
|
|
57
|
+
* - Creates Zod schemas for each parameter based on its schema definition
|
|
58
|
+
* - Handles optional parameters by adding .optional() suffix
|
|
59
|
+
* - Organizes parameters into appropriate objects based on their location
|
|
60
|
+
* - Maintains empty objects for unused parameter locations
|
|
61
|
+
*/
|
|
62
|
+
export declare function generateParamsObject(parameters: Parameters[]): ParamsObject;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateParamsObject = generateParamsObject;
|
|
4
|
+
const generate_zod_coerce_1 = require("../../zod/generate-zod-coerce");
|
|
5
|
+
const generate_zod_schema_1 = require("../../zod/generate-zod-schema");
|
|
6
|
+
/**
|
|
7
|
+
* Mapping of parameter locations to their corresponding object keys
|
|
8
|
+
*/
|
|
9
|
+
const PARAM_LOCATION_TO_KEY = {
|
|
10
|
+
query: 'query',
|
|
11
|
+
path: 'params',
|
|
12
|
+
header: 'headers',
|
|
13
|
+
body: 'body',
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Generates a params object containing Zod schemas for different parameter locations
|
|
17
|
+
*
|
|
18
|
+
* @function generateParamsObject
|
|
19
|
+
* @param parameters - Array of OpenAPI path parameters
|
|
20
|
+
* @returns ParamsObject with Zod schemas organized by parameter location
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* // Query and path parameters
|
|
24
|
+
* generateParamsObject([
|
|
25
|
+
* {
|
|
26
|
+
* name: 'userId',
|
|
27
|
+
* in: 'path',
|
|
28
|
+
* required: true,
|
|
29
|
+
* schema: { type: 'string' }
|
|
30
|
+
* },
|
|
31
|
+
* {
|
|
32
|
+
* name: 'filter',
|
|
33
|
+
* in: 'query',
|
|
34
|
+
* required: false,
|
|
35
|
+
* schema: { type: 'string' }
|
|
36
|
+
* }
|
|
37
|
+
* ])
|
|
38
|
+
* // Returns:
|
|
39
|
+
* // {
|
|
40
|
+
* // query: { filter: 'z.string().optional()' },
|
|
41
|
+
* // params: { userId: 'z.string()' },
|
|
42
|
+
* // headers: {},
|
|
43
|
+
* // body: {}
|
|
44
|
+
* // }
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* // Body parameter
|
|
48
|
+
* generateParamsObject([
|
|
49
|
+
* {
|
|
50
|
+
* name: 'user',
|
|
51
|
+
* in: 'body',
|
|
52
|
+
* required: true,
|
|
53
|
+
* schema: {
|
|
54
|
+
* type: 'object',
|
|
55
|
+
* properties: {
|
|
56
|
+
* name: { type: 'string' }
|
|
57
|
+
* }
|
|
58
|
+
* }
|
|
59
|
+
* }
|
|
60
|
+
* ])
|
|
61
|
+
* // Returns:
|
|
62
|
+
* // {
|
|
63
|
+
* // query: {},
|
|
64
|
+
* // params: {},
|
|
65
|
+
* // headers: {},
|
|
66
|
+
* // body: { user: 'z.object({name: z.string().optional()})' }
|
|
67
|
+
* // }
|
|
68
|
+
*
|
|
69
|
+
* @remarks
|
|
70
|
+
* - Creates Zod schemas for each parameter based on its schema definition
|
|
71
|
+
* - Handles optional parameters by adding .optional() suffix
|
|
72
|
+
* - Organizes parameters into appropriate objects based on their location
|
|
73
|
+
* - Maintains empty objects for unused parameter locations
|
|
74
|
+
*/
|
|
75
|
+
function generateParamsObject(parameters) {
|
|
76
|
+
const initialParamsObj = {
|
|
77
|
+
query: {},
|
|
78
|
+
params: {},
|
|
79
|
+
headers: {},
|
|
80
|
+
body: {},
|
|
81
|
+
};
|
|
82
|
+
return parameters.reduce((acc, param) => {
|
|
83
|
+
const optionalSuffix = param.required ? '' : '.optional()';
|
|
84
|
+
const paramLocation = PARAM_LOCATION_TO_KEY[param.in];
|
|
85
|
+
// query && integer
|
|
86
|
+
const zodSchema = (paramLocation === 'query' && param.schema.type === 'number') ||
|
|
87
|
+
param.schema.type === 'integer'
|
|
88
|
+
? (0, generate_zod_coerce_1.generateZodCoerce)('z.string()', (0, generate_zod_schema_1.generateZodSchema)(param.schema))
|
|
89
|
+
: (0, generate_zod_schema_1.generateZodSchema)(param.schema);
|
|
90
|
+
acc[paramLocation][param.name] = `${zodSchema}${optionalSuffix}`;
|
|
91
|
+
return acc;
|
|
92
|
+
}, initialParamsObj);
|
|
93
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { Parameters, RequestBody } from '../../../types';
|
|
2
|
+
/**
|
|
3
|
+
* Generates TypeScript code for request validation based on OpenAPI specification
|
|
4
|
+
*
|
|
5
|
+
* @function generateRequestParameter
|
|
6
|
+
*
|
|
7
|
+
* @param parameters - Array of path parameters from OpenAPI specification
|
|
8
|
+
* @param requestBody - Request body definition from OpenAPI specification
|
|
9
|
+
* @returns Generated TypeScript code string for request validation
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* // Path parameters only
|
|
13
|
+
* const params = [{
|
|
14
|
+
* name: 'userId',
|
|
15
|
+
* in: 'path',
|
|
16
|
+
* required: true,
|
|
17
|
+
* schema: { type: 'string' }
|
|
18
|
+
* }]
|
|
19
|
+
* generateRequestParameter(params, undefined)
|
|
20
|
+
* // Returns: 'request: { params: z.object({ userId: z.string() }) }'
|
|
21
|
+
*
|
|
22
|
+
* // Request body only
|
|
23
|
+
* const body = {
|
|
24
|
+
* content: {
|
|
25
|
+
* 'application/json': {
|
|
26
|
+
* schema: { $ref: '#/components/schemas/CreateUser' }
|
|
27
|
+
* }
|
|
28
|
+
* },
|
|
29
|
+
* required: true
|
|
30
|
+
* }
|
|
31
|
+
* generateRequestParameter(undefined, body)
|
|
32
|
+
* // Returns: 'request: { json: CreateUser }'
|
|
33
|
+
*
|
|
34
|
+
* // Both parameters and body
|
|
35
|
+
* generateRequestParameter(params, body)
|
|
36
|
+
* // Returns: 'request: { params: z.object({ userId: z.string() }), json: CreateUser }'
|
|
37
|
+
*
|
|
38
|
+
* @note
|
|
39
|
+
* - Handles both path parameters and request body validation
|
|
40
|
+
* - Supports:
|
|
41
|
+
* - Path parameters with Zod validation
|
|
42
|
+
* - JSON request bodies with schema references
|
|
43
|
+
* - Array type request bodies
|
|
44
|
+
* - Required/optional request bodies
|
|
45
|
+
* - Returns empty string if no parameters or body are defined
|
|
46
|
+
* - Properly combines parameters and body when both are present
|
|
47
|
+
* - Handles schema references and inline schemas
|
|
48
|
+
*/
|
|
49
|
+
export declare function generateRequestParameter(parameters: Parameters[] | undefined, requestBody: RequestBody | undefined): string;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateRequestParameter = generateRequestParameter;
|
|
4
|
+
const generate_format_request_object_1 = require("../object/generate-format-request-object");
|
|
5
|
+
const generate_params_object_1 = require("./generate-params-object");
|
|
6
|
+
const generate_request_body_1 = require("../body/generate-request-body");
|
|
7
|
+
const generate_request_params_array_1 = require("./generate-request-params-array");
|
|
8
|
+
const generate_insert_request_body_1 = require("../body/generate-insert-request-body");
|
|
9
|
+
const generate_request_params_1 = require("./generate-request-params");
|
|
10
|
+
const generate_zod_property_schema_1 = require("../../zod/generate-zod-property-schema");
|
|
11
|
+
/**
|
|
12
|
+
* Generates TypeScript code for request validation based on OpenAPI specification
|
|
13
|
+
*
|
|
14
|
+
* @function generateRequestParameter
|
|
15
|
+
*
|
|
16
|
+
* @param parameters - Array of path parameters from OpenAPI specification
|
|
17
|
+
* @param requestBody - Request body definition from OpenAPI specification
|
|
18
|
+
* @returns Generated TypeScript code string for request validation
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* // Path parameters only
|
|
22
|
+
* const params = [{
|
|
23
|
+
* name: 'userId',
|
|
24
|
+
* in: 'path',
|
|
25
|
+
* required: true,
|
|
26
|
+
* schema: { type: 'string' }
|
|
27
|
+
* }]
|
|
28
|
+
* generateRequestParameter(params, undefined)
|
|
29
|
+
* // Returns: 'request: { params: z.object({ userId: z.string() }) }'
|
|
30
|
+
*
|
|
31
|
+
* // Request body only
|
|
32
|
+
* const body = {
|
|
33
|
+
* content: {
|
|
34
|
+
* 'application/json': {
|
|
35
|
+
* schema: { $ref: '#/components/schemas/CreateUser' }
|
|
36
|
+
* }
|
|
37
|
+
* },
|
|
38
|
+
* required: true
|
|
39
|
+
* }
|
|
40
|
+
* generateRequestParameter(undefined, body)
|
|
41
|
+
* // Returns: 'request: { json: CreateUser }'
|
|
42
|
+
*
|
|
43
|
+
* // Both parameters and body
|
|
44
|
+
* generateRequestParameter(params, body)
|
|
45
|
+
* // Returns: 'request: { params: z.object({ userId: z.string() }), json: CreateUser }'
|
|
46
|
+
*
|
|
47
|
+
* @note
|
|
48
|
+
* - Handles both path parameters and request body validation
|
|
49
|
+
* - Supports:
|
|
50
|
+
* - Path parameters with Zod validation
|
|
51
|
+
* - JSON request bodies with schema references
|
|
52
|
+
* - Array type request bodies
|
|
53
|
+
* - Required/optional request bodies
|
|
54
|
+
* - Returns empty string if no parameters or body are defined
|
|
55
|
+
* - Properly combines parameters and body when both are present
|
|
56
|
+
* - Handles schema references and inline schemas
|
|
57
|
+
*/
|
|
58
|
+
function generateRequestParameter(parameters, requestBody) {
|
|
59
|
+
if (!(parameters || requestBody?.content?.['application/json'])) {
|
|
60
|
+
return '';
|
|
61
|
+
}
|
|
62
|
+
const params = parameters
|
|
63
|
+
? (() => {
|
|
64
|
+
const paramsObj = (0, generate_params_object_1.generateParamsObject)(parameters);
|
|
65
|
+
const requestParamsArr = (0, generate_request_params_array_1.generateRequestParamsArray)(paramsObj);
|
|
66
|
+
return requestParamsArr.length ? (0, generate_format_request_object_1.generateFormatRequestObject)(requestParamsArr) : '';
|
|
67
|
+
})()
|
|
68
|
+
: '';
|
|
69
|
+
if (requestBody?.content?.['application/json']) {
|
|
70
|
+
const schema = requestBody.content['application/json'].schema;
|
|
71
|
+
const zodSchema = (0, generate_zod_property_schema_1.generatePropertySchema)(schema);
|
|
72
|
+
const request_body_required = requestBody.required ?? false;
|
|
73
|
+
const requestBodyCode = (0, generate_request_body_1.generateRequestBody)(request_body_required, zodSchema);
|
|
74
|
+
return params
|
|
75
|
+
? (0, generate_insert_request_body_1.generateInsertRequestBody)(params, requestBodyCode)
|
|
76
|
+
: (0, generate_request_params_1.generateRequestParams)(requestBodyCode);
|
|
77
|
+
}
|
|
78
|
+
return params;
|
|
79
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { ParamsObject } from '../../../types';
|
|
2
|
+
/**
|
|
3
|
+
* Generates an array of Zod schema strings for non-empty parameter sections
|
|
4
|
+
*
|
|
5
|
+
* @function generateRequestParamsArray
|
|
6
|
+
* @param paramsObj - Object containing query, path, and header parameter schemas
|
|
7
|
+
* @returns Array of Zod schema strings for non-empty parameter sections
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* // Input object with query and path parameters
|
|
11
|
+
* const params = {
|
|
12
|
+
* query: { page: 'z.string()', limit: 'z.number()' },
|
|
13
|
+
* params: { id: 'z.string()' },
|
|
14
|
+
* headers: {}
|
|
15
|
+
* }
|
|
16
|
+
*
|
|
17
|
+
* generateRequestParamsArray(params)
|
|
18
|
+
* // Returns:
|
|
19
|
+
* // [
|
|
20
|
+
* // 'query:z.object({ page: z.string(), limit: z.number() })',
|
|
21
|
+
* // 'params:z.object({ id: z.string() })'
|
|
22
|
+
* // ]
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* // Input object with only headers
|
|
26
|
+
* const params = {
|
|
27
|
+
* query: {},
|
|
28
|
+
* params: {},
|
|
29
|
+
* headers: { 'x-api-key': 'z.string()' }
|
|
30
|
+
* body: {}
|
|
31
|
+
* }
|
|
32
|
+
*
|
|
33
|
+
* generateRequestParamsArray(params)
|
|
34
|
+
* // Returns:
|
|
35
|
+
* // ['headers:z.object({ "x-api-key": z.string() })']
|
|
36
|
+
*/
|
|
37
|
+
export declare function generateRequestParamsArray(paramsObj: ParamsObject): string[];
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateRequestParamsArray = generateRequestParamsArray;
|
|
4
|
+
const generate_zod_object_schema_1 = require("../../zod/generate-zod-object-schema");
|
|
5
|
+
/**
|
|
6
|
+
* Generates an array of Zod schema strings for non-empty parameter sections
|
|
7
|
+
*
|
|
8
|
+
* @function generateRequestParamsArray
|
|
9
|
+
* @param paramsObj - Object containing query, path, and header parameter schemas
|
|
10
|
+
* @returns Array of Zod schema strings for non-empty parameter sections
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* // Input object with query and path parameters
|
|
14
|
+
* const params = {
|
|
15
|
+
* query: { page: 'z.string()', limit: 'z.number()' },
|
|
16
|
+
* params: { id: 'z.string()' },
|
|
17
|
+
* headers: {}
|
|
18
|
+
* }
|
|
19
|
+
*
|
|
20
|
+
* generateRequestParamsArray(params)
|
|
21
|
+
* // Returns:
|
|
22
|
+
* // [
|
|
23
|
+
* // 'query:z.object({ page: z.string(), limit: z.number() })',
|
|
24
|
+
* // 'params:z.object({ id: z.string() })'
|
|
25
|
+
* // ]
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* // Input object with only headers
|
|
29
|
+
* const params = {
|
|
30
|
+
* query: {},
|
|
31
|
+
* params: {},
|
|
32
|
+
* headers: { 'x-api-key': 'z.string()' }
|
|
33
|
+
* body: {}
|
|
34
|
+
* }
|
|
35
|
+
*
|
|
36
|
+
* generateRequestParamsArray(params)
|
|
37
|
+
* // Returns:
|
|
38
|
+
* // ['headers:z.object({ "x-api-key": z.string() })']
|
|
39
|
+
*/
|
|
40
|
+
function generateRequestParamsArray(paramsObj) {
|
|
41
|
+
// 1. define sections to be processed
|
|
42
|
+
const sections = ['query', 'params', 'headers'];
|
|
43
|
+
// 2. processing of each section
|
|
44
|
+
return (sections
|
|
45
|
+
.map((section) => {
|
|
46
|
+
const obj = paramsObj[section];
|
|
47
|
+
// 2.1 process only if object is not empty
|
|
48
|
+
if (Object.keys(obj).length) {
|
|
49
|
+
const schema = (0, generate_zod_object_schema_1.generateZodObjectSchema)(obj);
|
|
50
|
+
return `${section}:${schema}`;
|
|
51
|
+
}
|
|
52
|
+
return null;
|
|
53
|
+
})
|
|
54
|
+
// 3. exclude null and return only an array of strings
|
|
55
|
+
.filter((item) => item !== null));
|
|
56
|
+
}
|