hono-takibi 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.
Files changed (97) hide show
  1. package/dist/core/schema/references/resolve-schemas-dependencies.js +8 -43
  2. package/dist/core/schema/references/traverse-schema-dependencies.d.ts +2 -0
  3. package/dist/core/schema/references/traverse-schema-dependencies.js +30 -0
  4. package/dist/core/text/escape-str.d.ts +7 -0
  5. package/dist/core/text/escape-str.js +24 -0
  6. package/dist/core/validator/is-array-with-schema-reference.d.ts +8 -0
  7. package/dist/core/validator/is-array-with-schema-reference.js +12 -0
  8. package/dist/core/validator/is-schema-reference.d.ts +9 -0
  9. package/dist/core/validator/is-schema-reference.js +13 -0
  10. package/dist/generators/zod/generate-zod-object.js +3 -3
  11. package/dist/generators/zod/generate-zod-property-schema.d.ts +9 -2
  12. package/dist/generators/zod/generate-zod-property-schema.js +19 -23
  13. package/dist/generators/zod/reference/generate-array-reference-schema.d.ts +10 -0
  14. package/dist/generators/zod/reference/generate-array-reference-schema.js +24 -0
  15. package/dist/generators/zod/reference/generate-reference-schema.d.ts +10 -0
  16. package/dist/generators/zod/reference/generate-reference-schema.js +22 -0
  17. package/dist/generators/zod/schema/generate-zod-schema.js +3 -3
  18. package/dist/generators/{app → zod-openapi-hono/app}/docs/generate-docs.d.ts +1 -1
  19. package/dist/generators/{hono → zod-openapi-hono}/app/generators/generate-apply-openapi-routes.js +1 -1
  20. package/dist/generators/{hono → zod-openapi-hono}/app/helper/get-route-maps.js +1 -1
  21. package/dist/generators/{hono → zod-openapi-hono}/app/index.js +2 -2
  22. package/dist/generators/{app → zod-openapi-hono/app}/register-component/generate-register-component.d.ts +1 -1
  23. package/dist/generators/{handler → zod-openapi-hono/handler}/generate-handler-name.js +1 -1
  24. package/dist/generators/{hono → zod-openapi-hono}/handler/generate-zod-openapi-hono-handler.js +2 -2
  25. package/dist/generators/zod-openapi-hono/handler/helper/group-handlers-by-file-name-helper.js +21 -0
  26. package/dist/generators/{hono → zod-openapi-hono}/openapi/route/generate-route-code.js +1 -3
  27. package/dist/generators/{hono → zod-openapi-hono}/openapi/route/generate-route.js +4 -6
  28. package/dist/generators/{hono → zod-openapi-hono}/openapi/route/params/generate-params-object.js +1 -3
  29. package/dist/generators/{hono → zod-openapi-hono}/openapi/route/response/generate-response-schema.js +4 -6
  30. package/dist/index.js +3 -3
  31. package/dist/vite-plugin/vite-mode.js +1 -1
  32. package/package.json +1 -1
  33. package/dist/core/schema/references/resolve-schema-order.d.ts +0 -30
  34. package/dist/core/schema/references/resolve-schema-order.js +0 -48
  35. package/dist/core/schema/references/resolve-schema-references.d.ts +0 -49
  36. package/dist/core/schema/references/resolve-schema-references.js +0 -61
  37. package/dist/core/text/escape-quote.d.ts +0 -8
  38. package/dist/core/text/escape-quote.js +0 -13
  39. package/dist/core/text/sanitize.d.ts +0 -1
  40. package/dist/core/text/sanitize.js +0 -6
  41. package/dist/generators/hono/handler/helper/group-handlers-by-file-name-helper.js +0 -24
  42. /package/dist/generators/{app → zod-openapi-hono/app}/docs/generate-docs.js +0 -0
  43. /package/dist/generators/{app → zod-openapi-hono/app}/generate-app-route-handler.d.ts +0 -0
  44. /package/dist/generators/{app → zod-openapi-hono/app}/generate-app-route-handler.js +0 -0
  45. /package/dist/generators/{hono → zod-openapi-hono}/app/generators/generate-apply-openapi-routes.d.ts +0 -0
  46. /package/dist/generators/{hono → zod-openapi-hono}/app/generators/generate-import-routes.d.ts +0 -0
  47. /package/dist/generators/{hono → zod-openapi-hono}/app/generators/generate-import-routes.js +0 -0
  48. /package/dist/generators/{hono → zod-openapi-hono}/app/helper/get-route-maps.d.ts +0 -0
  49. /package/dist/generators/{hono → zod-openapi-hono}/app/helper/process-import-map.d.ts +0 -0
  50. /package/dist/generators/{hono → zod-openapi-hono}/app/helper/process-import-map.js +0 -0
  51. /package/dist/generators/{hono → zod-openapi-hono}/app/index.d.ts +0 -0
  52. /package/dist/generators/{app → zod-openapi-hono/app}/register-component/generate-register-component.js +0 -0
  53. /package/dist/generators/{handler → zod-openapi-hono/handler}/generate-handler-name.d.ts +0 -0
  54. /package/dist/generators/{handler → zod-openapi-hono/handler}/generate-handler.d.ts +0 -0
  55. /package/dist/generators/{handler → zod-openapi-hono/handler}/generate-handler.js +0 -0
  56. /package/dist/generators/{hono → zod-openapi-hono}/handler/generate-zod-openapi-hono-handler.d.ts +0 -0
  57. /package/dist/generators/{hono → zod-openapi-hono}/handler/helper/group-handlers-by-file-name-helper.d.ts +0 -0
  58. /package/dist/generators/{hono → zod-openapi-hono}/handler/import/generate-import-handlers.d.ts +0 -0
  59. /package/dist/generators/{hono → zod-openapi-hono}/handler/import/generate-import-handlers.js +0 -0
  60. /package/dist/generators/{hono → zod-openapi-hono}/handler/import/get-handler-imports.d.ts +0 -0
  61. /package/dist/generators/{hono → zod-openapi-hono}/handler/import/get-handler-imports.js +0 -0
  62. /package/dist/generators/{hono → zod-openapi-hono}/openapi/component/allof/generate-allof-code.d.ts +0 -0
  63. /package/dist/generators/{hono → zod-openapi-hono}/openapi/component/allof/generate-allof-code.js +0 -0
  64. /package/dist/generators/{hono → zod-openapi-hono}/openapi/component/allof/process/process-alllof.d.ts +0 -0
  65. /package/dist/generators/{hono → zod-openapi-hono}/openapi/component/allof/process/process-alllof.js +0 -0
  66. /package/dist/generators/{hono → zod-openapi-hono}/openapi/component/anyof/generate-anyof-code.d.ts +0 -0
  67. /package/dist/generators/{hono → zod-openapi-hono}/openapi/component/anyof/generate-anyof-code.js +0 -0
  68. /package/dist/generators/{hono → zod-openapi-hono}/openapi/component/generate-components-code.d.ts +0 -0
  69. /package/dist/generators/{hono → zod-openapi-hono}/openapi/component/generate-components-code.js +0 -0
  70. /package/dist/generators/{hono → zod-openapi-hono}/openapi/component/oneof/generate-oneof-code.d.ts +0 -0
  71. /package/dist/generators/{hono → zod-openapi-hono}/openapi/component/oneof/generate-oneof-code.js +0 -0
  72. /package/dist/generators/{hono → zod-openapi-hono}/openapi/component/schema/generate-schemas-export.d.ts +0 -0
  73. /package/dist/generators/{hono → zod-openapi-hono}/openapi/component/schema/generate-schemas-export.js +0 -0
  74. /package/dist/generators/{hono → zod-openapi-hono}/openapi/generate-zod-openapi-hono.d.ts +0 -0
  75. /package/dist/generators/{hono → zod-openapi-hono}/openapi/generate-zod-openapi-hono.js +0 -0
  76. /package/dist/generators/{hono → zod-openapi-hono}/openapi/route/generate-create-route.d.ts +0 -0
  77. /package/dist/generators/{hono → zod-openapi-hono}/openapi/route/generate-create-route.js +0 -0
  78. /package/dist/generators/{hono → zod-openapi-hono}/openapi/route/generate-route-code.d.ts +0 -0
  79. /package/dist/generators/{hono → zod-openapi-hono}/openapi/route/generate-route-name.d.ts +0 -0
  80. /package/dist/generators/{hono → zod-openapi-hono}/openapi/route/generate-route-name.js +0 -0
  81. /package/dist/generators/{hono → zod-openapi-hono}/openapi/route/generate-route.d.ts +0 -0
  82. /package/dist/generators/{hono → zod-openapi-hono}/openapi/route/params/generate-params-object.d.ts +0 -0
  83. /package/dist/generators/{hono → zod-openapi-hono}/openapi/route/params/generate-request-parameter.d.ts +0 -0
  84. /package/dist/generators/{hono → zod-openapi-hono}/openapi/route/params/generate-request-parameter.js +0 -0
  85. /package/dist/generators/{hono → zod-openapi-hono}/openapi/route/params/generate-request-params-array.d.ts +0 -0
  86. /package/dist/generators/{hono → zod-openapi-hono}/openapi/route/params/generate-request-params-array.js +0 -0
  87. /package/dist/generators/{hono → zod-openapi-hono}/openapi/route/params/generate-request-params.d.ts +0 -0
  88. /package/dist/generators/{hono → zod-openapi-hono}/openapi/route/params/generate-request-params.js +0 -0
  89. /package/dist/generators/{hono → zod-openapi-hono}/openapi/route/request/body/generate-insert-request-body.d.ts +0 -0
  90. /package/dist/generators/{hono → zod-openapi-hono}/openapi/route/request/body/generate-insert-request-body.js +0 -0
  91. /package/dist/generators/{hono → zod-openapi-hono}/openapi/route/request/body/generate-request-body.d.ts +0 -0
  92. /package/dist/generators/{hono → zod-openapi-hono}/openapi/route/request/body/generate-request-body.js +0 -0
  93. /package/dist/generators/{hono → zod-openapi-hono}/openapi/route/request/object/generate-format-request-object.d.ts +0 -0
  94. /package/dist/generators/{hono → zod-openapi-hono}/openapi/route/request/object/generate-format-request-object.js +0 -0
  95. /package/dist/generators/{hono → zod-openapi-hono}/openapi/route/response/generate-response-schema.d.ts +0 -0
  96. /package/dist/generators/{hono → zod-openapi-hono}/openapi/type/generate-types-code.d.ts +0 -0
  97. /package/dist/generators/{hono → zod-openapi-hono}/openapi/type/generate-types-code.js +0 -0
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.resolveSchemasDependencies = resolveSchemasDependencies;
4
- const extract_refs_1 = require("./extract-refs");
4
+ const traverse_schema_dependencies_1 = require("./traverse-schema-dependencies");
5
5
  /**
6
6
  * Resolves dependencies between schemas and returns them in topological order for safe processing
7
7
  *
@@ -49,50 +49,15 @@ const extract_refs_1 = require("./extract-refs");
49
49
  * - Uses depth-first search for dependency resolution
50
50
  * - Automatically handles circular dependencies by preventing infinite recursion
51
51
  */
52
- // export function resolveSchemasDependencies(schemas: Record<string, Schema>): string[] {
53
- // // 1. get schema reference relations as a map
54
- // const dependencies = resolveSchemaReferences(schemas)
55
- // // 2. initialize ordered list and visited set
56
- // const ordered: string[] = []
57
- // const visited = new Set<string>()
58
- // // 3. resolve schema order
59
- // for (const name of Object.keys(schemas)) {
60
- // resolveSchemaOrder(name, dependencies, visited, ordered)
61
- // }
62
- // // 4. return ordered list
63
- // return ordered
64
- // }
65
52
  function resolveSchemasDependencies(schemas) {
66
- const visited = {};
67
- const temp = {};
68
- const result = [];
69
- const visit = (schemaName) => {
70
- if (temp[schemaName]) {
71
- throw new Error(`bad schema: ${schemaName}`);
72
- }
73
- if (!visited[schemaName]) {
74
- temp[schemaName] = true;
75
- const schema = schemas[schemaName];
76
- if (schema) {
77
- const refs = (0, extract_refs_1.extractRefs)(schema);
78
- for (const ref of refs) {
79
- if (schemas[ref]) {
80
- visit(ref);
81
- }
82
- else {
83
- console.warn(`not found schema: ${ref}`);
84
- }
85
- }
86
- }
87
- visited[schemaName] = true;
88
- temp[schemaName] = false;
89
- result.push(schemaName);
90
- }
91
- };
53
+ const visited = new Set();
54
+ const recursionStack = new Set();
55
+ const orderedSchemas = [];
56
+ // Conduct visits for each schema
92
57
  for (const schemaName of Object.keys(schemas)) {
93
- if (!visited[schemaName]) {
94
- visit(schemaName);
58
+ if (!visited.has(schemaName)) {
59
+ (0, traverse_schema_dependencies_1.traverseSchemaDependencies)(schemaName, schemas, visited, recursionStack, orderedSchemas);
95
60
  }
96
61
  }
97
- return result;
62
+ return orderedSchemas;
98
63
  }
@@ -0,0 +1,2 @@
1
+ import type { Schema } from '../../../types';
2
+ export declare function traverseSchemaDependencies(schemaName: string, schemas: Record<string, Schema>, visited: Set<string>, recursionStack: Set<string>, orderedSchemas: string[]): void;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.traverseSchemaDependencies = traverseSchemaDependencies;
4
+ const extract_refs_1 = require("./extract-refs");
5
+ function traverseSchemaDependencies(schemaName, schemas, visited, recursionStack, orderedSchemas) {
6
+ // Circular dependencies occur if they already exist on the recursing stack
7
+ if (recursionStack.has(schemaName)) {
8
+ throw new Error(`Circular dependency detected in schema: ${schemaName}`);
9
+ }
10
+ // Processed only if not visited
11
+ if (!visited.has(schemaName)) {
12
+ recursionStack.add(schemaName);
13
+ const schema = schemas[schemaName];
14
+ if (schema) {
15
+ // Get other schemas referenced by the current schema
16
+ const references = (0, extract_refs_1.extractRefs)(schema);
17
+ for (const ref of references) {
18
+ if (ref in schemas) {
19
+ traverseSchemaDependencies(ref, schemas, visited, recursionStack, orderedSchemas);
20
+ }
21
+ else {
22
+ console.warn(`Schema reference not found: ${ref}`);
23
+ }
24
+ }
25
+ }
26
+ recursionStack.delete(schemaName);
27
+ visited.add(schemaName);
28
+ orderedSchemas.push(schemaName);
29
+ }
30
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Escapes text for use in TypeScript code
3
+ *
4
+ * @param text - The text to escape
5
+ * @returns The escaped text
6
+ */
7
+ export declare function escapeStr(text: string): string;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.escapeStr = escapeStr;
4
+ /**
5
+ * Escapes text for use in TypeScript code
6
+ *
7
+ * @param text - The text to escape
8
+ * @returns The escaped text
9
+ */
10
+ function escapeStr(text) {
11
+ return (text
12
+ // Basic text cleaning
13
+ .replace(/\n/g, ' ') // Replace line breaks with spaces
14
+ .replace(/\s+/g, ' ') // Replace consecutive spaces with a single space
15
+ .replace(/\t/g, ' ') // Replace tabs with spaces
16
+ // Escaping special characters
17
+ .replace(/\\/g, '\\\\') // Escaping backslash
18
+ .replace(/'/g, "\\'") // Escaping single quote
19
+ // Convert full-width spaces to half-width
20
+ .replace(/ /g, ' ')
21
+ // Removing zero-width characters
22
+ .replace(/\u200B|\u200C|\u200D|\uFEFF/g, '')
23
+ .trim());
24
+ }
@@ -0,0 +1,8 @@
1
+ import type { Schema } from '../../types';
2
+ /**
3
+ * array has $ref
4
+ *
5
+ * @param schema - schema
6
+ * @returns boolean
7
+ */
8
+ export declare function isArrayWithSchemaReference(schema: Schema): boolean;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isArrayWithSchemaReference = isArrayWithSchemaReference;
4
+ /**
5
+ * array has $ref
6
+ *
7
+ * @param schema - schema
8
+ * @returns boolean
9
+ */
10
+ function isArrayWithSchemaReference(schema) {
11
+ return schema.type === 'array' && Boolean(schema.items?.$ref);
12
+ }
@@ -0,0 +1,9 @@
1
+ import type { Schema } from '../../types';
2
+ /**
3
+ * isSchemaReference
4
+ * is schema reference
5
+ *
6
+ * @param schema
7
+ * @returns boolean
8
+ */
9
+ export declare function isSchemaReference(schema: Schema): boolean;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isSchemaReference = isSchemaReference;
4
+ /**
5
+ * isSchemaReference
6
+ * is schema reference
7
+ *
8
+ * @param schema
9
+ * @returns boolean
10
+ */
11
+ function isSchemaReference(schema) {
12
+ return Boolean(schema.$ref);
13
+ }
@@ -2,9 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateZodObject = generateZodObject;
4
4
  const generate_zod_record_schema_1 = require("./generate-zod-record-schema");
5
- const generate_allof_code_1 = require("../hono/openapi/component/allof/generate-allof-code");
6
- const generate_oneof_code_1 = require("../hono/openapi/component/oneof/generate-oneof-code");
7
- const generate_anyof_code_1 = require("../hono/openapi/component/anyof/generate-anyof-code");
5
+ const generate_allof_code_1 = require("../zod-openapi-hono/openapi/component/allof/generate-allof-code");
6
+ const generate_oneof_code_1 = require("../zod-openapi-hono/openapi/component/oneof/generate-oneof-code");
7
+ const generate_anyof_code_1 = require("../zod-openapi-hono/openapi/component/anyof/generate-anyof-code");
8
8
  const generate_zod_properties_schema_1 = require("./generate-zod-properties-schema");
9
9
  function generateZodObject(schema, config) {
10
10
  if (schema.additionalProperties)
@@ -1,5 +1,3 @@
1
- import type { Schema } from '../../types';
2
- import type { Config } from '../../config';
3
1
  /**
4
2
  * Generates a Zod schema string for a given OpenAPI schema definition
5
3
  *
@@ -23,4 +21,13 @@ import type { Config } from '../../config';
23
21
  * generatePropertySchema({ type: 'string' })
24
22
  * // Returns: 'z.string()'
25
23
  */
24
+ import type { Schema } from '../../types';
25
+ import type { Config } from '../../config';
26
+ /**
27
+ * generatePropertySchema
28
+ * generate property schema
29
+ *
30
+ * @param schema
31
+ * @param config
32
+ */
26
33
  export declare function generatePropertySchema(schema: Schema, config: Config): string;
@@ -1,11 +1,4 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generatePropertySchema = generatePropertySchema;
4
- const get_ref_name_1 = require("../../core/schema/references/get-ref-name");
5
- const generate_zod_array_1 = require("./generate-zod-array");
6
- const generate_zod_schema_1 = require("./schema/generate-zod-schema");
7
- const get_variable_schema_name_helper_1 = require("../../core/helper/get-variable-schema-name-helper");
8
- // import { generateZodOpenAPIExample } from './generate-zod-openapi-example'
9
2
  /**
10
3
  * Generates a Zod schema string for a given OpenAPI schema definition
11
4
  *
@@ -29,23 +22,26 @@ const get_variable_schema_name_helper_1 = require("../../core/helper/get-variabl
29
22
  * generatePropertySchema({ type: 'string' })
30
23
  * // Returns: 'z.string()'
31
24
  */
32
- function generatePropertySchema(schema,
33
- // namingCase: 'camelCase' | 'PascalCase' = 'camelCase',
34
- config) {
35
- if (schema.$ref) {
36
- const refName = (0, get_ref_name_1.getRefName)(schema.$ref);
37
- if (refName) {
38
- const variableName = (0, get_variable_schema_name_helper_1.getVariableSchemaNameHelper)(refName, config);
39
- // return getRefName(variableName) || 'z.any()'
40
- return variableName || 'z.any()';
41
- }
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.generatePropertySchema = generatePropertySchema;
27
+ const generate_zod_schema_1 = require("./schema/generate-zod-schema");
28
+ const is_schema_reference_1 = require("../../core/validator/is-schema-reference");
29
+ const is_array_with_schema_reference_1 = require("../../core/validator/is-array-with-schema-reference");
30
+ const generate_reference_schema_1 = require("./reference/generate-reference-schema");
31
+ const generate_array_reference_schema_1 = require("./reference/generate-array-reference-schema");
32
+ /**
33
+ * generatePropertySchema
34
+ * generate property schema
35
+ *
36
+ * @param schema
37
+ * @param config
38
+ */
39
+ function generatePropertySchema(schema, config) {
40
+ if ((0, is_schema_reference_1.isSchemaReference)(schema)) {
41
+ return (0, generate_reference_schema_1.generateReferenceSchema)(schema, config);
42
42
  }
43
- if (schema.type === 'array' && schema.items?.$ref) {
44
- const refName = (0, get_ref_name_1.getRefName)(schema.items.$ref);
45
- if (refName) {
46
- const variableName = (0, get_variable_schema_name_helper_1.getVariableSchemaNameHelper)(refName, config);
47
- return (0, generate_zod_array_1.generateZodArray)(variableName);
48
- }
43
+ if ((0, is_array_with_schema_reference_1.isArrayWithSchemaReference)(schema)) {
44
+ return (0, generate_array_reference_schema_1.generateArrayReferenceSchema)(schema, config);
49
45
  }
50
46
  return (0, generate_zod_schema_1.generateZodSchema)(config, schema, undefined, undefined);
51
47
  }
@@ -0,0 +1,10 @@
1
+ import type { Config } from '../../../config';
2
+ import type { Schema } from '../../../types';
3
+ /**
4
+ * generateArrayReferenceSchema
5
+ * generate array reference schema
6
+ *
7
+ * @param schema
8
+ * @param config
9
+ */
10
+ export declare function generateArrayReferenceSchema(schema: Schema, config: Config): string;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateArrayReferenceSchema = generateArrayReferenceSchema;
4
+ const get_variable_schema_name_helper_1 = require("../../../core/helper/get-variable-schema-name-helper");
5
+ const get_ref_name_1 = require("../../../core/schema/references/get-ref-name");
6
+ const generate_zod_array_1 = require("../generate-zod-array");
7
+ /**
8
+ * generateArrayReferenceSchema
9
+ * generate array reference schema
10
+ *
11
+ * @param schema
12
+ * @param config
13
+ */
14
+ function generateArrayReferenceSchema(schema, config) {
15
+ if (!schema.items?.$ref) {
16
+ return 'z.array(z.any())';
17
+ }
18
+ const refName = (0, get_ref_name_1.getRefName)(schema.items?.$ref);
19
+ if (!refName) {
20
+ return 'z.array(z.any())';
21
+ }
22
+ const variableName = (0, get_variable_schema_name_helper_1.getVariableSchemaNameHelper)(refName, config);
23
+ return (0, generate_zod_array_1.generateZodArray)(variableName);
24
+ }
@@ -0,0 +1,10 @@
1
+ import type { Config } from '../../../config';
2
+ import type { Schema } from '../../../types';
3
+ /**
4
+ * generateReferenceSchema
5
+ * generate reference schema
6
+ *
7
+ * @param schema
8
+ * @param config
9
+ */
10
+ export declare function generateReferenceSchema(schema: Schema, config: Config): string;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateReferenceSchema = generateReferenceSchema;
4
+ const get_variable_schema_name_helper_1 = require("../../../core/helper/get-variable-schema-name-helper");
5
+ const get_ref_name_1 = require("../../../core/schema/references/get-ref-name");
6
+ /**
7
+ * generateReferenceSchema
8
+ * generate reference schema
9
+ *
10
+ * @param schema
11
+ * @param config
12
+ */
13
+ function generateReferenceSchema(schema, config) {
14
+ if (!schema.$ref) {
15
+ return 'z.any()';
16
+ }
17
+ const refName = (0, get_ref_name_1.getRefName)(schema.$ref);
18
+ if (!refName) {
19
+ return 'z.any()';
20
+ }
21
+ return (0, get_variable_schema_name_helper_1.getVariableSchemaNameHelper)(refName, config) || 'z.any()';
22
+ }
@@ -6,9 +6,9 @@ const generate_zod_string_schema_1 = require("../generate-zod-string-schema");
6
6
  const is_format_string_1 = require("../../../core/validator/is-format-string");
7
7
  const generate_zod_number_schema_1 = require("../generate-zod-number-schema");
8
8
  const generate_zod_integer_schema_1 = require("../generate-zod-integer-schema");
9
- const generate_allof_code_1 = require("../../hono/openapi/component/allof/generate-allof-code");
10
- const generate_anyof_code_1 = require("../../hono/openapi/component/anyof/generate-anyof-code");
11
- const generate_oneof_code_1 = require("../../hono/openapi/component/oneof/generate-oneof-code");
9
+ const generate_allof_code_1 = require("../../zod-openapi-hono/openapi/component/allof/generate-allof-code");
10
+ const generate_anyof_code_1 = require("../../zod-openapi-hono/openapi/component/anyof/generate-anyof-code");
11
+ const generate_oneof_code_1 = require("../../zod-openapi-hono/openapi/component/oneof/generate-oneof-code");
12
12
  const get_variable_schema_name_helper_1 = require("../../../core/helper/get-variable-schema-name-helper");
13
13
  const generate_zod_object_1 = require("../generate-zod-object");
14
14
  const generate_zod_enum_1 = require("../generate-zod-enum");
@@ -1,4 +1,4 @@
1
- import type { OpenAPISpec } from '../../../types';
1
+ import type { OpenAPISpec } from '../../../../types';
2
2
  export declare function generateDocs(openAPISpec: OpenAPISpec): {
3
3
  openapi: string | undefined;
4
4
  info: OpenAPISpec['info'];
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateApplyOpenapiRoutes = generateApplyOpenapiRoutes;
4
- const generate_app_route_handler_1 = require("../../../app/generate-app-route-handler");
4
+ const generate_app_route_handler_1 = require("../generate-app-route-handler");
5
5
  function generateApplyOpenapiRoutes(routeMappings) {
6
6
  return routeMappings
7
7
  .map(({ routeName, handlerName }) => {
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getRouteMaps = getRouteMaps;
4
- const generate_handler_name_1 = require("../../../handler/generate-handler-name");
4
+ const generate_handler_name_1 = require("../../handler/generate-handler-name");
5
5
  const generate_route_name_1 = require("../../openapi/route/generate-route-name");
6
6
  function getRouteMaps(openAPISpec) {
7
7
  const paths = openAPISpec.paths;
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateApp = generateApp;
4
- const generate_docs_1 = require("../../app/docs/generate-docs");
4
+ const generate_docs_1 = require("./docs/generate-docs");
5
5
  const get_handler_imports_1 = require("../handler/import/get-handler-imports");
6
6
  const get_route_maps_1 = require("./helper/get-route-maps");
7
7
  const generate_import_handlers_1 = require("../handler/import/generate-import-handlers");
8
- const generate_register_component_1 = require("../../app/register-component/generate-register-component");
8
+ const generate_register_component_1 = require("./register-component/generate-register-component");
9
9
  const generate_import_routes_1 = require("./generators/generate-import-routes");
10
10
  const generate_apply_openapi_routes_1 = require("./generators/generate-apply-openapi-routes");
11
11
  const process_import_map_1 = require("./helper/process-import-map");
@@ -1,2 +1,2 @@
1
- import type { SecuritySchemes } from '../../../types';
1
+ import type { SecuritySchemes } from '../../../../types';
2
2
  export declare function generateRegisterComponent(securitySchemes: SecuritySchemes): string;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateHandlerName = generateHandlerName;
4
- const generate_route_name_1 = require("../hono/openapi/route/generate-route-name");
4
+ const generate_route_name_1 = require("../openapi/route/generate-route-name");
5
5
  function generateHandlerName(method, path) {
6
6
  return `${(0, generate_route_name_1.generateRouteName)(method, path)}Handler`;
7
7
  }
@@ -5,11 +5,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.generateZodOpenapiHonoHandler = generateZodOpenapiHonoHandler;
7
7
  const node_fs_1 = __importDefault(require("node:fs"));
8
- const generate_handler_1 = require("../../handler/generate-handler");
8
+ const generate_handler_1 = require("./generate-handler");
9
9
  const generate_route_name_1 = require("../openapi/route/generate-route-name");
10
10
  const group_handlers_by_file_name_helper_1 = require("./helper/group-handlers-by-file-name-helper");
11
11
  const format_1 = require("../../../format");
12
- const generate_handler_name_1 = require("../../handler/generate-handler-name");
12
+ const generate_handler_name_1 = require("../handler/generate-handler-name");
13
13
  const ROUTE_HANDLER = `import type { RouteHandler } from '@hono/zod-openapi'`;
14
14
  async function generateZodOpenapiHonoHandler(openapi, config) {
15
15
  const paths = openapi.paths;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.groupHandlersByFileNameHelper = groupHandlersByFileNameHelper;
4
+ function groupHandlersByFileNameHelper(handlers) {
5
+ return Array.from(handlers
6
+ .reduce((acc, handler) => {
7
+ const existing = acc.get(handler.fileName);
8
+ const mergedHandler = {
9
+ fileName: handler.fileName,
10
+ testFileName: handler.testFileName,
11
+ routeHandlerContents: existing
12
+ ? [...existing.routeHandlerContents, ...handler.routeHandlerContents]
13
+ : [...handler.routeHandlerContents],
14
+ routeNames: existing
15
+ ? [...existing.routeNames, ...handler.routeNames]
16
+ : [...handler.routeNames],
17
+ };
18
+ return acc.set(handler.fileName, mergedHandler);
19
+ }, new Map())
20
+ .values());
21
+ }
@@ -23,9 +23,7 @@ const is_operation_1 = require("../../../../core/validator/is-operation");
23
23
  * - Generates type-safe route handlers using zod validation
24
24
  * - Combines all routes with proper spacing
25
25
  */
26
- function generateRouteCode(openAPIPaths,
27
- // namingCase: 'camelCase' | 'PascalCase' = 'camelCase',
28
- config) {
26
+ function generateRouteCode(openAPIPaths, config) {
29
27
  const routes = [];
30
28
  // 1. flattening and processing OpenAPI paths
31
29
  for (const [path, pathItem] of Object.entries(openAPIPaths)) {
@@ -5,7 +5,7 @@ const generate_create_route_1 = require("./generate-create-route");
5
5
  const generate_request_parameter_1 = require("./params/generate-request-parameter");
6
6
  const generate_response_schema_1 = require("./response/generate-response-schema");
7
7
  const generate_route_name_1 = require("./generate-route-name");
8
- const sanitize_1 = require("../../../../core/text/sanitize");
8
+ const escape_str_1 = require("../../../../core/text/escape-str");
9
9
  /**
10
10
  * Generates TypeScript code for a Hono route based on OpenAPI operation details
11
11
  *
@@ -28,9 +28,7 @@ const sanitize_1 = require("../../../../core/text/sanitize");
28
28
  * - Handles optional parameters appropriately
29
29
  * - Integrates with Hono's createRoute function
30
30
  */
31
- function generateRoute(path, method, operation,
32
- // namingCase: 'camelCase' | 'PascalCase',
33
- config) {
31
+ function generateRoute(path, method, operation, config) {
34
32
  const { tags, summary, description, security, parameters, requestBody, responses } = operation;
35
33
  const routeName = (0, generate_route_name_1.generateRouteName)(method, path);
36
34
  const tagList = tags ? JSON.stringify(tags) : '[]';
@@ -40,8 +38,8 @@ config) {
40
38
  tagsCode: `tags:${tagList},`,
41
39
  methodCode: `method:'${method}',`,
42
40
  pathCode: `path:'${path}',`,
43
- summaryCode: summary ? `summary:'${(0, sanitize_1.sanitize)(summary)}',` : '',
44
- descriptionCode: description ? `description:'${(0, sanitize_1.sanitize)(description)}',` : '',
41
+ summaryCode: summary ? `summary:'${(0, escape_str_1.escapeStr)(summary)}',` : '',
42
+ descriptionCode: description ? `description:'${(0, escape_str_1.escapeStr)(description)}',` : '',
45
43
  securityCode: security ? `security:${JSON.stringify(security)},` : '',
46
44
  requestParams: requestParams ? `${requestParams}` : '',
47
45
  responsesCode: responses ? `responses:{${(0, generate_response_schema_1.generateResponseSchema)(responses, config)}}` : '',
@@ -16,9 +16,7 @@ const generate_zod_schema_1 = require("../../../../zod/schema/generate-zod-schem
16
16
  * - Organizes parameters into appropriate objects based on their location
17
17
  * - Maintains empty objects for unused parameter locations
18
18
  */
19
- function generateParamsObject(parameters,
20
- // namingCase: 'camelCase' | 'PascalCase' = 'camelCase',
21
- config) {
19
+ function generateParamsObject(parameters, config) {
22
20
  return parameters.reduce((acc, param) => {
23
21
  const optionalSuffix = param.required ? '' : '.optional()';
24
22
  // path params are generated with the param name
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateResponseSchema = generateResponseSchema;
4
- const escape_quote_1 = require("../../../../../core/text/escape-quote");
4
+ const escape_str_1 = require("../../../../../core/text/escape-str");
5
5
  const is_unique_content_schema_1 = require("../../../../../core/validator/is-unique-content-schema");
6
6
  const generate_zod_property_schema_1 = require("../../../../zod/generate-zod-property-schema");
7
7
  /**
@@ -24,9 +24,7 @@ const generate_zod_property_schema_1 = require("../../../../zod/generate-zod-pro
24
24
  * - Handles nested schema structures
25
25
  * - Automatically resolves schema references
26
26
  */
27
- function generateResponseSchema(responses,
28
- // namingCase: 'camelCase' | 'PascalCase' = 'camelCase',
29
- config) {
27
+ function generateResponseSchema(responses, config) {
30
28
  // 1. get response codes (200, 404, etc.)
31
29
  const responseCodes = Object.keys(responses);
32
30
  // 2. processing for each response code
@@ -34,7 +32,7 @@ config) {
34
32
  const response = responses[code];
35
33
  // 2.1 no content (description only response)
36
34
  if (!response.content)
37
- return `${code}:{description:'${(0, escape_quote_1.escapeQuote)(response.description ?? '')}',},`;
35
+ return `${code}:{description:'${(0, escape_str_1.escapeStr)(response.description ?? '')}',},`;
38
36
  // check duplication
39
37
  const contentTypes = Object.keys(response.content);
40
38
  const isUniqueSchema = (0, is_unique_content_schema_1.isUniqueContentSchema)(contentTypes, response.content);
@@ -46,7 +44,7 @@ config) {
46
44
  const zodSchema = (0, generate_zod_property_schema_1.generatePropertySchema)(content.schema, config);
47
45
  contentParts.push(`'${contentType}':{schema:${zodSchema}}`);
48
46
  }
49
- return `${code}:{description:'${(0, escape_quote_1.escapeQuote)(response.description ?? '')}',content:{${contentParts.join(',')}},},`;
47
+ return `${code}:{description:'${(0, escape_str_1.escapeStr)(response.description ?? '')}',content:{${contentParts.join(',')}},},`;
50
48
  }
51
49
  });
52
50
  // 3.combine all response definitions
package/dist/index.js CHANGED
@@ -8,11 +8,11 @@ exports.main = main;
8
8
  const swagger_parser_1 = __importDefault(require("@apidevtools/swagger-parser"));
9
9
  const node_fs_1 = __importDefault(require("node:fs"));
10
10
  const node_path_1 = __importDefault(require("node:path"));
11
- const generate_zod_openapi_hono_1 = require("./generators/hono/openapi/generate-zod-openapi-hono");
12
- const generate_zod_openapi_hono_handler_1 = require("./generators/hono/handler/generate-zod-openapi-hono-handler");
11
+ const generate_zod_openapi_hono_1 = require("./generators/zod-openapi-hono/openapi/generate-zod-openapi-hono");
12
+ const generate_zod_openapi_hono_handler_1 = require("./generators/zod-openapi-hono/handler/generate-zod-openapi-hono-handler");
13
13
  const config_1 = require("./config");
14
14
  const format_1 = require("./format");
15
- const app_1 = require("./generators/hono/app");
15
+ const app_1 = require("./generators/zod-openapi-hono/app");
16
16
  /**
17
17
  * CLI entry point for hono-takibi
18
18
  *
@@ -7,7 +7,7 @@ exports.viteMode = viteMode;
7
7
  const swagger_parser_1 = __importDefault(require("@apidevtools/swagger-parser"));
8
8
  const node_fs_1 = __importDefault(require("node:fs"));
9
9
  const node_path_1 = __importDefault(require("node:path"));
10
- const generate_zod_openapi_hono_1 = require("../generators/hono/openapi/generate-zod-openapi-hono");
10
+ const generate_zod_openapi_hono_1 = require("../generators/zod-openapi-hono/openapi/generate-zod-openapi-hono");
11
11
  const config_1 = require("../config");
12
12
  const format_1 = require("../format");
13
13
  async function viteMode(config = (0, config_1.getConfig)()) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "hono-takibi",
3
3
  "description": "Hono Takibi is a CLI tool that generates Hono routes from OpenAPI specifications.",
4
- "version": "0.4.2",
4
+ "version": "0.4.3",
5
5
  "license": "MIT",
6
6
  "keywords": [
7
7
  "hono",
@@ -1,30 +0,0 @@
1
- /**
2
- * Resolves the order of schema processing based on their dependencies using depth-first search
3
- *
4
- * @function resolveSchemaOrder
5
- * @param name - The name of the current schema to process
6
- * @param dependencies - Map of schema names to their dependent schema names
7
- * @param visited - Set of schema names that have been processed
8
- * @param ordered - Array to store the resolved order of schema names
9
- * @returns void
10
- *
11
- * @example
12
- * const dependencies = new Map([
13
- * ['User', new Set(['Address'])],
14
- * ['Address', new Set(['Country'])],
15
- * ['Country', new Set()]
16
- * ])
17
- *
18
- * const visited = new Set<string>()
19
- * const ordered: string[] = []
20
- *
21
- * resolveSchemaOrder('User', dependencies, visited, ordered)
22
- * // ordered will be: ['Country', 'Address', 'User']
23
- *
24
- * @note
25
- * - Uses depth-first search to resolve dependencies
26
- * - Prevents circular references by tracking visited schemas
27
- * - Ensures dependent schemas appear before schemas that depend on them
28
- * - Modifies the ordered array in-place to build the final sequence
29
- */
30
- export declare function resolveSchemaOrder(name: string, dependencies: Map<string, Set<string>>, visited: Set<string>, ordered: string[]): void;
@@ -1,48 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resolveSchemaOrder = resolveSchemaOrder;
4
- /**
5
- * Resolves the order of schema processing based on their dependencies using depth-first search
6
- *
7
- * @function resolveSchemaOrder
8
- * @param name - The name of the current schema to process
9
- * @param dependencies - Map of schema names to their dependent schema names
10
- * @param visited - Set of schema names that have been processed
11
- * @param ordered - Array to store the resolved order of schema names
12
- * @returns void
13
- *
14
- * @example
15
- * const dependencies = new Map([
16
- * ['User', new Set(['Address'])],
17
- * ['Address', new Set(['Country'])],
18
- * ['Country', new Set()]
19
- * ])
20
- *
21
- * const visited = new Set<string>()
22
- * const ordered: string[] = []
23
- *
24
- * resolveSchemaOrder('User', dependencies, visited, ordered)
25
- * // ordered will be: ['Country', 'Address', 'User']
26
- *
27
- * @note
28
- * - Uses depth-first search to resolve dependencies
29
- * - Prevents circular references by tracking visited schemas
30
- * - Ensures dependent schemas appear before schemas that depend on them
31
- * - Modifies the ordered array in-place to build the final sequence
32
- */
33
- function resolveSchemaOrder(name, dependencies, visited, ordered) {
34
- // 1. circulation reference prevention check
35
- if (visited.has(name))
36
- return;
37
- // 2. mark current schema as visited
38
- visited.add(name);
39
- // 3. get dependencies of current schema
40
- const deps = dependencies.get(name);
41
- if (deps) {
42
- for (const dep of deps) {
43
- resolveSchemaOrder(dep, dependencies, visited, ordered);
44
- }
45
- }
46
- // 4. add current schema to ordered list
47
- ordered.push(name);
48
- }
@@ -1,49 +0,0 @@
1
- import type { Schema } from '../../../types';
2
- /**
3
- * Creates a dependency map for all schemas and their references in an OpenAPI specification
4
- *
5
- * @function resolveSchemaReferences
6
- * @param schemas - Record mapping schema names to their Schema objects
7
- * @returns A Map where keys are schema names and values are Sets of referenced schema names
8
- *
9
- * @example
10
- * const schemas = {
11
- * User: {
12
- * type: 'object',
13
- * properties: {
14
- * profile: { $ref: '#/components/schemas/Profile' },
15
- * addresses: {
16
- * type: 'array',
17
- * items: { $ref: '#/components/schemas/Address' }
18
- * }
19
- * }
20
- * },
21
- * Profile: {
22
- * type: 'object',
23
- * properties: {
24
- * name: { type: 'string' }
25
- * }
26
- * },
27
- * Address: {
28
- * type: 'object',
29
- * properties: {
30
- * street: { type: 'string' }
31
- * }
32
- * }
33
- * }
34
- *
35
- * const dependencies = resolveSchemaReferences(schemas)
36
- * // dependencies contains:
37
- * // Map {
38
- * // 'User' => Set { 'Profile', 'Address' },
39
- * // 'Profile' => Set {},
40
- * // 'Address' => Set {}
41
- * // }
42
- *
43
- * @note
44
- * - Creates a complete dependency graph for all schemas
45
- * - Handles nested references in arrays and objects
46
- * - Empty Sets indicate schemas with no dependencies
47
- * - Used for determining the correct order of schema generation
48
- */
49
- export declare function resolveSchemaReferences(schemas: Record<string, Schema>): Map<string, Set<string>>;
@@ -1,61 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resolveSchemaReferences = resolveSchemaReferences;
4
- const find_references_1 = require("./find-references");
5
- /**
6
- * Creates a dependency map for all schemas and their references in an OpenAPI specification
7
- *
8
- * @function resolveSchemaReferences
9
- * @param schemas - Record mapping schema names to their Schema objects
10
- * @returns A Map where keys are schema names and values are Sets of referenced schema names
11
- *
12
- * @example
13
- * const schemas = {
14
- * User: {
15
- * type: 'object',
16
- * properties: {
17
- * profile: { $ref: '#/components/schemas/Profile' },
18
- * addresses: {
19
- * type: 'array',
20
- * items: { $ref: '#/components/schemas/Address' }
21
- * }
22
- * }
23
- * },
24
- * Profile: {
25
- * type: 'object',
26
- * properties: {
27
- * name: { type: 'string' }
28
- * }
29
- * },
30
- * Address: {
31
- * type: 'object',
32
- * properties: {
33
- * street: { type: 'string' }
34
- * }
35
- * }
36
- * }
37
- *
38
- * const dependencies = resolveSchemaReferences(schemas)
39
- * // dependencies contains:
40
- * // Map {
41
- * // 'User' => Set { 'Profile', 'Address' },
42
- * // 'Profile' => Set {},
43
- * // 'Address' => Set {}
44
- * // }
45
- *
46
- * @note
47
- * - Creates a complete dependency graph for all schemas
48
- * - Handles nested references in arrays and objects
49
- * - Empty Sets indicate schemas with no dependencies
50
- * - Used for determining the correct order of schema generation
51
- */
52
- function resolveSchemaReferences(schemas) {
53
- // 1. initialize dependencies map
54
- const dependencies = new Map();
55
- // 2. resolve each schema reference
56
- for (const [name, schema] of Object.entries(schemas)) {
57
- dependencies.set(name, (0, find_references_1.findReferences)(schema));
58
- }
59
- // 3. return dependencies map
60
- return dependencies;
61
- }
@@ -1,8 +0,0 @@
1
- /**
2
- * Escapes single quote in a string
3
- *
4
- * @function escapeQuote
5
- * @param str - The string to escape
6
- * @returns The escaped string
7
- */
8
- export declare function escapeQuote(str: string): string;
@@ -1,13 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.escapeQuote = escapeQuote;
4
- /**
5
- * Escapes single quote in a string
6
- *
7
- * @function escapeQuote
8
- * @param str - The string to escape
9
- * @returns The escaped string
10
- */
11
- function escapeQuote(str) {
12
- return str?.replace(/'/g, "\\'");
13
- }
@@ -1 +0,0 @@
1
- export declare function sanitize(text: string): string;
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.sanitize = sanitize;
4
- function sanitize(text) {
5
- return text.replace(/\n/g, ' ').replace(/\s+/g, ' ').trim();
6
- }
@@ -1,24 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.groupHandlersByFileNameHelper = groupHandlersByFileNameHelper;
4
- function groupHandlersByFileNameHelper(handlers) {
5
- const mergedMap = new Map();
6
- for (const handler of handlers) {
7
- if (mergedMap.has(handler.fileName)) {
8
- const existing = mergedMap.get(handler.fileName);
9
- if (existing) {
10
- existing.routeHandlerContents.push(...handler.routeHandlerContents);
11
- existing.routeNames.push(...handler.routeNames);
12
- }
13
- }
14
- else {
15
- mergedMap.set(handler.fileName, {
16
- fileName: handler.fileName,
17
- testFileName: handler.testFileName,
18
- routeHandlerContents: [...handler.routeHandlerContents],
19
- routeNames: [...handler.routeNames],
20
- });
21
- }
22
- }
23
- return Array.from(mergedMap.values());
24
- }