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.
Files changed (88) hide show
  1. package/README.md +471 -0
  2. package/dist/core/schema/references/find-references.d.ts +35 -0
  3. package/dist/core/schema/references/find-references.js +42 -0
  4. package/dist/core/schema/references/get-camel-case-schema-name.d.ts +7 -0
  5. package/dist/core/schema/references/get-camel-case-schema-name.js +14 -0
  6. package/dist/core/schema/references/get-ref-name.d.ts +38 -0
  7. package/dist/core/schema/references/get-ref-name.js +47 -0
  8. package/dist/core/schema/references/resolve-schema-order.d.ts +30 -0
  9. package/dist/core/schema/references/resolve-schema-order.js +48 -0
  10. package/dist/core/schema/references/resolve-schema-references.d.ts +49 -0
  11. package/dist/core/schema/references/resolve-schema-references.js +61 -0
  12. package/dist/core/schema/references/resolve-schemas-dependencies.d.ts +49 -0
  13. package/dist/core/schema/references/resolve-schemas-dependencies.js +65 -0
  14. package/dist/core/schema/references/traverse_schema.d.ts +48 -0
  15. package/dist/core/schema/references/traverse_schema.js +70 -0
  16. package/dist/core/text/capitalize.d.ts +18 -0
  17. package/dist/core/text/capitalize.js +23 -0
  18. package/dist/core/text/decapitalize.d.ts +17 -0
  19. package/dist/core/text/decapitalize.js +22 -0
  20. package/dist/core/text/remove-zod-prefix.d.ts +8 -0
  21. package/dist/core/text/remove-zod-prefix.js +13 -0
  22. package/dist/core/validator/is-format-number.d.ts +2 -0
  23. package/dist/core/validator/is-format-number.js +6 -0
  24. package/dist/core/validator/is-format-string.d.ts +2 -0
  25. package/dist/core/validator/is-format-string.js +24 -0
  26. package/dist/core/validator/is-http-method.d.ts +9 -0
  27. package/dist/core/validator/is-http-method.js +19 -0
  28. package/dist/core/validator/is-operation.d.ts +15 -0
  29. package/dist/core/validator/is-operation.js +19 -0
  30. package/dist/core/zod/get-zod-string-format.d.ts +30 -0
  31. package/dist/core/zod/get-zod-string-format.js +66 -0
  32. package/dist/generators/hono/generate-hono.d.ts +9 -0
  33. package/dist/generators/hono/generate-hono.js +29 -0
  34. package/dist/generators/openapi/components/generate-components-code.d.ts +46 -0
  35. package/dist/generators/openapi/components/generate-components-code.js +79 -0
  36. package/dist/generators/openapi/paths/generate-create-route.d.ts +58 -0
  37. package/dist/generators/openapi/paths/generate-create-route.js +61 -0
  38. package/dist/generators/openapi/paths/generate-route-code.d.ts +53 -0
  39. package/dist/generators/openapi/paths/generate-route-code.js +85 -0
  40. package/dist/generators/openapi/paths/generate-route-name.d.ts +30 -0
  41. package/dist/generators/openapi/paths/generate-route-name.js +48 -0
  42. package/dist/generators/openapi/paths/generate-route.d.ts +51 -0
  43. package/dist/generators/openapi/paths/generate-route.js +73 -0
  44. package/dist/generators/openapi/paths/generate-schemas-export.d.ts +11 -0
  45. package/dist/generators/openapi/paths/generate-schemas-export.js +18 -0
  46. package/dist/generators/request/body/generate-insert-request-body.d.ts +32 -0
  47. package/dist/generators/request/body/generate-insert-request-body.js +37 -0
  48. package/dist/generators/request/body/generate-request-body.d.ts +18 -0
  49. package/dist/generators/request/body/generate-request-body.js +23 -0
  50. package/dist/generators/request/object/generate-format-request-object.d.ts +29 -0
  51. package/dist/generators/request/object/generate-format-request-object.js +34 -0
  52. package/dist/generators/request/params/generate-params-object.d.ts +62 -0
  53. package/dist/generators/request/params/generate-params-object.js +93 -0
  54. package/dist/generators/request/params/generate-request-parameter.d.ts +49 -0
  55. package/dist/generators/request/params/generate-request-parameter.js +79 -0
  56. package/dist/generators/request/params/generate-request-params-array.d.ts +37 -0
  57. package/dist/generators/request/params/generate-request-params-array.js +56 -0
  58. package/dist/generators/request/params/generate-request-params.d.ts +34 -0
  59. package/dist/generators/request/params/generate-request-params.js +39 -0
  60. package/dist/generators/response/schemas/generate-response-schema.d.ts +59 -0
  61. package/dist/generators/response/schemas/generate-response-schema.js +83 -0
  62. package/dist/generators/zod/generate-zod-array.d.ts +31 -0
  63. package/dist/generators/zod/generate-zod-array.js +36 -0
  64. package/dist/generators/zod/generate-zod-coerce.d.ts +10 -0
  65. package/dist/generators/zod/generate-zod-coerce.js +17 -0
  66. package/dist/generators/zod/generate-zod-integer-schema.d.ts +15 -0
  67. package/dist/generators/zod/generate-zod-integer-schema.js +24 -0
  68. package/dist/generators/zod/generate-zod-number-schema.d.ts +16 -0
  69. package/dist/generators/zod/generate-zod-number-schema.js +26 -0
  70. package/dist/generators/zod/generate-zod-object-schema.d.ts +36 -0
  71. package/dist/generators/zod/generate-zod-object-schema.js +43 -0
  72. package/dist/generators/zod/generate-zod-properties-schema.d.ts +50 -0
  73. package/dist/generators/zod/generate-zod-properties-schema.js +60 -0
  74. package/dist/generators/zod/generate-zod-property-schema.d.ts +25 -0
  75. package/dist/generators/zod/generate-zod-property-schema.js +47 -0
  76. package/dist/generators/zod/generate-zod-record-schema.d.ts +34 -0
  77. package/dist/generators/zod/generate-zod-record-schema.js +37 -0
  78. package/dist/generators/zod/generate-zod-schema-definition.d.ts +22 -0
  79. package/dist/generators/zod/generate-zod-schema-definition.js +27 -0
  80. package/dist/generators/zod/generate-zod-schema.d.ts +59 -0
  81. package/dist/generators/zod/generate-zod-schema.js +136 -0
  82. package/dist/generators/zod/generate-zod-string-schema.d.ts +46 -0
  83. package/dist/generators/zod/generate-zod-string-schema.js +54 -0
  84. package/dist/index.d.ts +20 -0
  85. package/dist/index.js +85 -0
  86. package/dist/types/index.d.ts +170 -0
  87. package/dist/types/index.js +2 -0
  88. 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
+ }