zinfer 0.0.1 → 0.1.2

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 (79) hide show
  1. package/README.md +477 -28
  2. package/bin/zinfer +2 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +486 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/core/brand-detector.d.ts +32 -0
  8. package/dist/core/brand-detector.d.ts.map +1 -0
  9. package/dist/core/brand-detector.js +121 -0
  10. package/dist/core/brand-detector.js.map +1 -0
  11. package/dist/core/config-loader.d.ts +87 -0
  12. package/dist/core/config-loader.d.ts.map +1 -0
  13. package/dist/core/config-loader.js +105 -0
  14. package/dist/core/config-loader.js.map +1 -0
  15. package/dist/core/description-extractor.d.ts +54 -0
  16. package/dist/core/description-extractor.d.ts.map +1 -0
  17. package/dist/core/description-extractor.js +180 -0
  18. package/dist/core/description-extractor.js.map +1 -0
  19. package/dist/core/errors.d.ts +35 -0
  20. package/dist/core/errors.d.ts.map +1 -0
  21. package/dist/core/errors.js +96 -0
  22. package/dist/core/errors.js.map +1 -0
  23. package/dist/core/extractor.d.ts +121 -0
  24. package/dist/core/extractor.d.ts.map +1 -0
  25. package/dist/core/extractor.js +504 -0
  26. package/dist/core/extractor.js.map +1 -0
  27. package/dist/core/file-resolver.d.ts +41 -0
  28. package/dist/core/file-resolver.d.ts.map +1 -0
  29. package/dist/core/file-resolver.js +95 -0
  30. package/dist/core/file-resolver.js.map +1 -0
  31. package/dist/core/getter-resolver.d.ts +67 -0
  32. package/dist/core/getter-resolver.d.ts.map +1 -0
  33. package/dist/core/getter-resolver.js +234 -0
  34. package/dist/core/getter-resolver.js.map +1 -0
  35. package/dist/core/import-resolver.d.ts +51 -0
  36. package/dist/core/import-resolver.d.ts.map +1 -0
  37. package/dist/core/import-resolver.js +158 -0
  38. package/dist/core/import-resolver.js.map +1 -0
  39. package/dist/core/index.d.ts +14 -0
  40. package/dist/core/index.d.ts.map +1 -0
  41. package/dist/core/index.js +13 -0
  42. package/dist/core/index.js.map +1 -0
  43. package/dist/core/logger.d.ts +20 -0
  44. package/dist/core/logger.d.ts.map +1 -0
  45. package/dist/core/logger.js +36 -0
  46. package/dist/core/logger.js.map +1 -0
  47. package/dist/core/name-mapper.d.ts +45 -0
  48. package/dist/core/name-mapper.d.ts.map +1 -0
  49. package/dist/core/name-mapper.js +82 -0
  50. package/dist/core/name-mapper.js.map +1 -0
  51. package/dist/core/normalizer.d.ts +24 -0
  52. package/dist/core/normalizer.d.ts.map +1 -0
  53. package/dist/core/normalizer.js +50 -0
  54. package/dist/core/normalizer.js.map +1 -0
  55. package/dist/core/schema-detector.d.ts +49 -0
  56. package/dist/core/schema-detector.d.ts.map +1 -0
  57. package/dist/core/schema-detector.js +272 -0
  58. package/dist/core/schema-detector.js.map +1 -0
  59. package/dist/core/schema-reference-analyzer.d.ts +77 -0
  60. package/dist/core/schema-reference-analyzer.d.ts.map +1 -0
  61. package/dist/core/schema-reference-analyzer.js +269 -0
  62. package/dist/core/schema-reference-analyzer.js.map +1 -0
  63. package/dist/core/test-generator.d.ts +97 -0
  64. package/dist/core/test-generator.d.ts.map +1 -0
  65. package/dist/core/test-generator.js +177 -0
  66. package/dist/core/test-generator.js.map +1 -0
  67. package/dist/core/type-printer.d.ts +46 -0
  68. package/dist/core/type-printer.d.ts.map +1 -0
  69. package/dist/core/type-printer.js +519 -0
  70. package/dist/core/type-printer.js.map +1 -0
  71. package/dist/core/types.d.ts +124 -0
  72. package/dist/core/types.d.ts.map +1 -0
  73. package/dist/core/types.js +5 -0
  74. package/dist/core/types.js.map +1 -0
  75. package/dist/index.d.ts +66 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +79 -0
  78. package/dist/index.js.map +1 -0
  79. package/package.json +63 -7
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brand-detector.js","sourceRoot":"","sources":["../../src/core/brand-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Configuration options that can be specified in config file.
3
+ */
4
+ export interface ZinferConfig {
5
+ /** File paths or glob patterns to process */
6
+ include?: string[];
7
+ /** Glob patterns to exclude */
8
+ exclude?: string[];
9
+ /** Path to tsconfig.json */
10
+ project?: string;
11
+ /** Schema names to extract (if not specified, all are extracted) */
12
+ schemas?: string[];
13
+ /** Output only input types */
14
+ inputOnly?: boolean;
15
+ /** Output only output types */
16
+ outputOnly?: boolean;
17
+ /** Single type if input===output */
18
+ mergeSame?: boolean;
19
+ /** Remove suffix from schema names */
20
+ suffix?: string;
21
+ /** Suffix for input type names */
22
+ inputSuffix?: string;
23
+ /** Suffix for output type names */
24
+ outputSuffix?: string;
25
+ /** Custom name mappings */
26
+ map?: Record<string, string>;
27
+ /** Output directory */
28
+ outDir?: string;
29
+ /** Single output file */
30
+ outFile?: string;
31
+ /** Output file naming pattern */
32
+ outPattern?: string;
33
+ /** Generate .d.ts files */
34
+ declaration?: boolean;
35
+ /** Include Zod .describe() as TSDoc comments */
36
+ withDescriptions?: boolean;
37
+ /** Generate vitest type equality tests alongside type files */
38
+ generateTests?: boolean;
39
+ }
40
+ /**
41
+ * Result of loading config.
42
+ */
43
+ export interface ConfigLoadResult {
44
+ /** The loaded configuration */
45
+ config: ZinferConfig;
46
+ /** Path to the config file (if found) */
47
+ configPath?: string;
48
+ }
49
+ /**
50
+ * Loads zinfer configuration from config file or package.json.
51
+ */
52
+ export declare class ConfigLoader {
53
+ /**
54
+ * Loads configuration from the specified directory.
55
+ *
56
+ * @param cwd - Directory to search for config files
57
+ * @returns Configuration and config file path
58
+ */
59
+ load(cwd: string): Promise<ConfigLoadResult>;
60
+ /**
61
+ * Loads configuration from a TypeScript/JavaScript config file.
62
+ */
63
+ private loadConfigFile;
64
+ /**
65
+ * Loads configuration from package.json's "zinfer" field.
66
+ */
67
+ private loadFromPackageJson;
68
+ }
69
+ /**
70
+ * Defines a zinfer configuration with type checking.
71
+ * Use this in zinfer.config.ts for type safety.
72
+ *
73
+ * @example
74
+ * ```typescript
75
+ * // zinfer.config.ts
76
+ * import { defineConfig } from 'zinfer';
77
+ *
78
+ * export default defineConfig({
79
+ * include: ['src/** /*.schema.ts'],
80
+ * outDir: './types',
81
+ * mergeSame: true,
82
+ * suffix: 'Schema',
83
+ * });
84
+ * ```
85
+ */
86
+ export declare function defineConfig(config: ZinferConfig): ZinferConfig;
87
+ //# sourceMappingURL=config-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/core/config-loader.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+BAA+B;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oCAAoC;IACpC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2BAA2B;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,uBAAuB;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2BAA2B;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gDAAgD;IAChD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,+DAA+D;IAC/D,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+BAA+B;IAC/B,MAAM,EAAE,YAAY,CAAC;IACrB,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAYD;;GAEG;AACH,qBAAa,YAAY;IACvB;;;;;OAKG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAuBlD;;OAEG;YACW,cAAc;IAW5B;;OAEG;YACW,mBAAmB;CAwBlC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAE/D"}
@@ -0,0 +1,105 @@
1
+ import { existsSync } from "fs";
2
+ import { readFile } from "fs/promises";
3
+ import { resolve } from "pathe";
4
+ import { pathToFileURL } from "url";
5
+ /**
6
+ * Config file names to search for, in order of priority.
7
+ */
8
+ const CONFIG_FILES = [
9
+ "zinfer.config.ts",
10
+ "zinfer.config.mts",
11
+ "zinfer.config.js",
12
+ "zinfer.config.mjs",
13
+ ];
14
+ /**
15
+ * Loads zinfer configuration from config file or package.json.
16
+ */
17
+ export class ConfigLoader {
18
+ /**
19
+ * Loads configuration from the specified directory.
20
+ *
21
+ * @param cwd - Directory to search for config files
22
+ * @returns Configuration and config file path
23
+ */
24
+ async load(cwd) {
25
+ // Try config files first
26
+ for (const configFile of CONFIG_FILES) {
27
+ const configPath = resolve(cwd, configFile);
28
+ if (existsSync(configPath)) {
29
+ const config = await this.loadConfigFile(configPath);
30
+ return { config, configPath };
31
+ }
32
+ }
33
+ // Try package.json
34
+ const packageJsonPath = resolve(cwd, "package.json");
35
+ if (existsSync(packageJsonPath)) {
36
+ const config = await this.loadFromPackageJson(packageJsonPath);
37
+ if (config) {
38
+ return { config, configPath: packageJsonPath };
39
+ }
40
+ }
41
+ // No config found, return empty config
42
+ return { config: {} };
43
+ }
44
+ /**
45
+ * Loads configuration from a TypeScript/JavaScript config file.
46
+ */
47
+ async loadConfigFile(configPath) {
48
+ try {
49
+ const fileUrl = pathToFileURL(configPath).href;
50
+ const module = await import(fileUrl);
51
+ return module.default || module;
52
+ }
53
+ catch (error) {
54
+ console.warn(`Warning: Failed to load config from ${configPath}:`, error.message);
55
+ return {};
56
+ }
57
+ }
58
+ /**
59
+ * Loads configuration from package.json's "zinfer" field.
60
+ */
61
+ async loadFromPackageJson(packageJsonPath) {
62
+ let content;
63
+ try {
64
+ content = await readFile(packageJsonPath, "utf-8");
65
+ }
66
+ catch (error) {
67
+ // File read error (permissions, not found, etc.) - silently return null
68
+ // since package.json config is optional
69
+ return null;
70
+ }
71
+ try {
72
+ const packageJson = JSON.parse(content);
73
+ if (packageJson.zinfer && typeof packageJson.zinfer === "object") {
74
+ return packageJson.zinfer;
75
+ }
76
+ return null;
77
+ }
78
+ catch (error) {
79
+ // JSON parse error - warn the user since this is likely a syntax error
80
+ console.warn(`Warning: Failed to parse ${packageJsonPath}: ${error.message}`);
81
+ return null;
82
+ }
83
+ }
84
+ }
85
+ /**
86
+ * Defines a zinfer configuration with type checking.
87
+ * Use this in zinfer.config.ts for type safety.
88
+ *
89
+ * @example
90
+ * ```typescript
91
+ * // zinfer.config.ts
92
+ * import { defineConfig } from 'zinfer';
93
+ *
94
+ * export default defineConfig({
95
+ * include: ['src/** /*.schema.ts'],
96
+ * outDir: './types',
97
+ * mergeSame: true,
98
+ * suffix: 'Schema',
99
+ * });
100
+ * ```
101
+ */
102
+ export function defineConfig(config) {
103
+ return config;
104
+ }
105
+ //# sourceMappingURL=config-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../src/core/config-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAoDpC;;GAEG;AACH,MAAM,YAAY,GAAG;IACnB,kBAAkB;IAClB,mBAAmB;IACnB,kBAAkB;IAClB,mBAAmB;CACpB,CAAC;AAEF;;GAEG;AACH,MAAM,OAAO,YAAY;IACvB;;;;;OAKG;IACH,KAAK,CAAC,IAAI,CAAC,GAAW;QACpB,yBAAyB;QACzB,KAAK,MAAM,UAAU,IAAI,YAAY,EAAE,CAAC;YACtC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YAC5C,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;gBACrD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;YAChC,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QACrD,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC;YAC/D,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC;YACjD,CAAC;QACH,CAAC;QAED,uCAAuC;QACvC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACxB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAAC,UAAkB;QAC7C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;YAC/C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;YACrC,OAAO,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,uCAAuC,UAAU,GAAG,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;YAC7F,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB,CAAC,eAAuB;QACvD,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,wEAAwE;YACxE,wCAAwC;YACxC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAExC,IAAI,WAAW,CAAC,MAAM,IAAI,OAAO,WAAW,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACjE,OAAO,WAAW,CAAC,MAAsB,CAAC;YAC5C,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,uEAAuE;YACvE,OAAO,CAAC,IAAI,CAAC,4BAA4B,eAAe,KAAM,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;YACzF,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;CACF;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,YAAY,CAAC,MAAoB;IAC/C,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,54 @@
1
+ import type { FieldDescription } from "./types.js";
2
+ /**
3
+ * Schema description information.
4
+ */
5
+ export interface SchemaDescription {
6
+ /** Schema name */
7
+ schemaName: string;
8
+ /** Schema-level description if present */
9
+ description?: string;
10
+ /** Field descriptions */
11
+ fields: FieldDescription[];
12
+ }
13
+ /**
14
+ * Extracts descriptions from Zod schemas by dynamically importing the module.
15
+ */
16
+ export declare class DescriptionExtractor {
17
+ /**
18
+ * Extracts descriptions from schemas in a file.
19
+ *
20
+ * @param filePath - Path to the TypeScript/JavaScript file
21
+ * @param schemaNames - Names of schemas to extract descriptions from
22
+ * @returns Map of schema name to description info
23
+ */
24
+ extractDescriptions(filePath: string, schemaNames: string[]): Promise<Map<string, SchemaDescription>>;
25
+ /**
26
+ * Extracts descriptions from a Zod schema.
27
+ */
28
+ private extractFromSchema;
29
+ /**
30
+ * Recursively extracts field descriptions from a Zod schema.
31
+ */
32
+ private extractFieldDescriptions;
33
+ /**
34
+ * Gets the description from a Zod schema.
35
+ * Supports both Zod v3 (_def.description) and Zod v4 (meta().description).
36
+ */
37
+ private getDescription;
38
+ /**
39
+ * Checks if a schema is a ZodObject.
40
+ * Supports both Zod v3 and v4.
41
+ */
42
+ private isZodObject;
43
+ /**
44
+ * Unwraps optional/nullable/default wrappers to get the inner schema.
45
+ * Supports both Zod v3 and v4.
46
+ */
47
+ private unwrapSchema;
48
+ /**
49
+ * Gets the shape from a ZodObject schema.
50
+ * Supports both Zod v3 and v4.
51
+ */
52
+ private getShape;
53
+ }
54
+ //# sourceMappingURL=description-extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"description-extractor.d.ts","sourceRoot":"","sources":["../../src/core/description-extractor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,kBAAkB;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yBAAyB;IACzB,MAAM,EAAE,gBAAgB,EAAE,CAAC;CAC5B;AAED;;GAEG;AACH,qBAAa,oBAAoB;IAC/B;;;;;;OAMG;IACG,mBAAmB,CACvB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EAAE,GACpB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IA+B1C;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgBzB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAgChC;;;OAGG;IACH,OAAO,CAAC,cAAc;IA4BtB;;;OAGG;IACH,OAAO,CAAC,WAAW;IAsBnB;;;OAGG;IACH,OAAO,CAAC,YAAY;IAkCpB;;;OAGG;IACH,OAAO,CAAC,QAAQ;CAoBjB"}
@@ -0,0 +1,180 @@
1
+ import { pathToFileURL } from "url";
2
+ import { resolve } from "pathe";
3
+ import { logDebugError } from "./logger.js";
4
+ /**
5
+ * Extracts descriptions from Zod schemas by dynamically importing the module.
6
+ */
7
+ export class DescriptionExtractor {
8
+ /**
9
+ * Extracts descriptions from schemas in a file.
10
+ *
11
+ * @param filePath - Path to the TypeScript/JavaScript file
12
+ * @param schemaNames - Names of schemas to extract descriptions from
13
+ * @returns Map of schema name to description info
14
+ */
15
+ async extractDescriptions(filePath, schemaNames) {
16
+ const result = new Map();
17
+ try {
18
+ // Convert to absolute path and file URL for dynamic import
19
+ const absolutePath = resolve(filePath);
20
+ const fileUrl = pathToFileURL(absolutePath).href;
21
+ // Dynamically import the module
22
+ const module = await import(fileUrl);
23
+ for (const schemaName of schemaNames) {
24
+ const schema = module[schemaName];
25
+ if (!schema) {
26
+ continue;
27
+ }
28
+ const descriptions = this.extractFromSchema(schema, schemaName);
29
+ result.set(schemaName, descriptions);
30
+ }
31
+ }
32
+ catch (error) {
33
+ // If import fails, return empty descriptions (non-blocking)
34
+ console.warn(`Warning: Could not import ${filePath} for description extraction:`, error.message);
35
+ }
36
+ return result;
37
+ }
38
+ /**
39
+ * Extracts descriptions from a Zod schema.
40
+ */
41
+ extractFromSchema(schema, schemaName) {
42
+ const fields = [];
43
+ // Get schema-level description
44
+ const schemaDesc = this.getDescription(schema);
45
+ // Extract field descriptions recursively
46
+ this.extractFieldDescriptions(schema, "", fields);
47
+ return {
48
+ schemaName,
49
+ description: schemaDesc,
50
+ fields,
51
+ };
52
+ }
53
+ /**
54
+ * Recursively extracts field descriptions from a Zod schema.
55
+ */
56
+ extractFieldDescriptions(schema, prefix, fields) {
57
+ if (!schema || typeof schema !== "object") {
58
+ return;
59
+ }
60
+ // Handle ZodObject - extract from shape
61
+ if (this.isZodObject(schema)) {
62
+ const shape = this.getShape(schema);
63
+ if (shape && typeof shape === "object") {
64
+ for (const [key, fieldSchema] of Object.entries(shape)) {
65
+ const path = prefix ? `${prefix}.${key}` : key;
66
+ // Get description for this field
67
+ const desc = this.getDescription(fieldSchema);
68
+ if (desc) {
69
+ fields.push({ path, description: desc });
70
+ }
71
+ // Recurse into nested schemas
72
+ const innerSchema = this.unwrapSchema(fieldSchema);
73
+ if (this.isZodObject(innerSchema)) {
74
+ this.extractFieldDescriptions(innerSchema, path, fields);
75
+ }
76
+ }
77
+ }
78
+ }
79
+ }
80
+ /**
81
+ * Gets the description from a Zod schema.
82
+ * Supports both Zod v3 (_def.description) and Zod v4 (meta().description).
83
+ */
84
+ getDescription(schema) {
85
+ if (!schema || typeof schema !== "object") {
86
+ return undefined;
87
+ }
88
+ const zodSchema = schema;
89
+ // Zod v4: use meta() method to get description
90
+ if (typeof zodSchema.meta === "function") {
91
+ try {
92
+ const meta = zodSchema.meta();
93
+ if (meta && typeof meta.description === "string") {
94
+ return meta.description;
95
+ }
96
+ }
97
+ catch (error) {
98
+ logDebugError("meta() call failed", error);
99
+ }
100
+ }
101
+ // Zod v3 fallback: description in _def.description
102
+ const def = zodSchema._def;
103
+ if (def && typeof def.description === "string") {
104
+ return def.description;
105
+ }
106
+ return undefined;
107
+ }
108
+ /**
109
+ * Checks if a schema is a ZodObject.
110
+ * Supports both Zod v3 and v4.
111
+ */
112
+ isZodObject(schema) {
113
+ if (!schema || typeof schema !== "object") {
114
+ return false;
115
+ }
116
+ const zodSchema = schema;
117
+ // Zod v4: check type property
118
+ if (zodSchema.type === "object") {
119
+ return true;
120
+ }
121
+ // Zod v3 fallback: check _def.typeName
122
+ const def = zodSchema._def;
123
+ if (def?.typeName === "ZodObject") {
124
+ return true;
125
+ }
126
+ // Also check for shape property existence
127
+ return "shape" in zodSchema;
128
+ }
129
+ /**
130
+ * Unwraps optional/nullable/default wrappers to get the inner schema.
131
+ * Supports both Zod v3 and v4.
132
+ */
133
+ unwrapSchema(schema) {
134
+ if (!schema || typeof schema !== "object") {
135
+ return schema;
136
+ }
137
+ const zodSchema = schema;
138
+ // Zod v4: check type property and use def.innerType
139
+ const type = zodSchema.type;
140
+ const def = zodSchema.def;
141
+ if (type === "optional" || type === "nullable" || type === "default") {
142
+ if (def?.innerType) {
143
+ return this.unwrapSchema(def.innerType);
144
+ }
145
+ }
146
+ // Zod v3 fallback: check _def.typeName
147
+ const _def = zodSchema._def;
148
+ if (_def) {
149
+ if (_def.typeName === "ZodOptional" ||
150
+ _def.typeName === "ZodNullable" ||
151
+ _def.typeName === "ZodDefault") {
152
+ if (_def.innerType) {
153
+ return this.unwrapSchema(_def.innerType);
154
+ }
155
+ }
156
+ }
157
+ return schema;
158
+ }
159
+ /**
160
+ * Gets the shape from a ZodObject schema.
161
+ * Supports both Zod v3 and v4.
162
+ */
163
+ getShape(schema) {
164
+ if (!schema || typeof schema !== "object") {
165
+ return undefined;
166
+ }
167
+ const zodSchema = schema;
168
+ // Zod v4: shape is in _def.shape (getter)
169
+ const _def = zodSchema._def;
170
+ if (_def?.shape && typeof _def.shape === "object") {
171
+ return _def.shape;
172
+ }
173
+ // Direct shape property
174
+ if (zodSchema.shape && typeof zodSchema.shape === "object") {
175
+ return zodSchema.shape;
176
+ }
177
+ return undefined;
178
+ }
179
+ }
180
+ //# sourceMappingURL=description-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"description-extractor.js","sourceRoot":"","sources":["../../src/core/description-extractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Base error class for zinfer errors.
3
+ */
4
+ export declare class ZinferError extends Error {
5
+ readonly code: string;
6
+ readonly hint?: string | undefined;
7
+ constructor(message: string, code: string, hint?: string | undefined);
8
+ /**
9
+ * Formats the error for display.
10
+ */
11
+ format(): string;
12
+ }
13
+ /**
14
+ * Error when no schemas are found in files.
15
+ */
16
+ export declare class NoSchemasFoundError extends ZinferError {
17
+ constructor(filePaths: string[], requestedSchemas?: string[]);
18
+ }
19
+ /**
20
+ * Error when files don't match the pattern.
21
+ */
22
+ export declare class NoFilesMatchedError extends ZinferError {
23
+ constructor(patterns: string[]);
24
+ }
25
+ /**
26
+ * Error when CLI options are invalid.
27
+ */
28
+ export declare class InvalidOptionError extends ZinferError {
29
+ constructor(optionName: string, reason: string, hint?: string);
30
+ }
31
+ /**
32
+ * Formats any error for CLI output.
33
+ */
34
+ export declare function formatError(error: unknown): string;
35
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,WAAY,SAAQ,KAAK;aAGlB,IAAI,EAAE,MAAM;aACZ,IAAI,CAAC,EAAE,MAAM;gBAF7B,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,YAAA;IAM/B;;OAEG;IACH,MAAM,IAAI,MAAM;CAOjB;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,WAAW;gBACtC,SAAS,EAAE,MAAM,EAAE,EAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE;CAkB7D;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,WAAW;gBACtC,QAAQ,EAAE,MAAM,EAAE;CAQ/B;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,WAAW;gBACrC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM;CAI9D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAiBlD"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Base error class for zinfer errors.
3
+ */
4
+ export class ZinferError extends Error {
5
+ code;
6
+ hint;
7
+ constructor(message, code, hint) {
8
+ super(message);
9
+ this.code = code;
10
+ this.hint = hint;
11
+ this.name = "ZinferError";
12
+ }
13
+ /**
14
+ * Formats the error for display.
15
+ */
16
+ format() {
17
+ const lines = [`Error: ${this.message}`];
18
+ if (this.hint) {
19
+ lines.push(`Hint: ${this.hint}`);
20
+ }
21
+ return lines.join("\n");
22
+ }
23
+ }
24
+ /**
25
+ * Error when no schemas are found in files.
26
+ */
27
+ export class NoSchemasFoundError extends ZinferError {
28
+ constructor(filePaths, requestedSchemas) {
29
+ const files = filePaths.length === 1 ? filePaths[0] : `${filePaths.length} files`;
30
+ if (requestedSchemas?.length) {
31
+ super(`Requested schemas not found: ${requestedSchemas.join(", ")}`, "NO_SCHEMAS_FOUND", `These schemas were not found in ${files}. Check schema names are correct.`);
32
+ }
33
+ else {
34
+ super(`No Zod schemas found in ${files}`, "NO_SCHEMAS_FOUND", "Ensure schemas are exported and use Zod syntax (z.object, z.string, etc.)");
35
+ }
36
+ this.name = "NoSchemasFoundError";
37
+ }
38
+ }
39
+ /**
40
+ * Error when files don't match the pattern.
41
+ */
42
+ export class NoFilesMatchedError extends ZinferError {
43
+ constructor(patterns) {
44
+ super(`No files matched the pattern(s): ${patterns.join(", ")}`, "NO_FILES_MATCHED", "Check that the file paths or glob patterns are correct");
45
+ this.name = "NoFilesMatchedError";
46
+ }
47
+ }
48
+ /**
49
+ * Error when CLI options are invalid.
50
+ */
51
+ export class InvalidOptionError extends ZinferError {
52
+ constructor(optionName, reason, hint) {
53
+ super(`Invalid option "${optionName}": ${reason}`, "INVALID_OPTION", hint);
54
+ this.name = "InvalidOptionError";
55
+ }
56
+ }
57
+ /**
58
+ * Formats any error for CLI output.
59
+ */
60
+ export function formatError(error) {
61
+ if (error instanceof ZinferError) {
62
+ return error.format();
63
+ }
64
+ if (error instanceof Error) {
65
+ // Clean up common ts-morph errors
66
+ const message = error.message;
67
+ if (message.includes("Manipulation error")) {
68
+ return formatTsMorphError(message);
69
+ }
70
+ return `Error: ${message}`;
71
+ }
72
+ return `Error: ${String(error)}`;
73
+ }
74
+ /**
75
+ * Formats ts-morph manipulation errors.
76
+ */
77
+ function formatTsMorphError(message) {
78
+ const lines = [];
79
+ // Extract the first line (main error)
80
+ const firstLine = message.split("\n")[0];
81
+ if (firstLine.includes("syntax error")) {
82
+ lines.push("Error: Syntax error in source file");
83
+ }
84
+ else {
85
+ lines.push("Error: Failed to process TypeScript file");
86
+ }
87
+ // Extract TypeScript error codes (TS1005, etc.)
88
+ const tsErrors = message.match(/TS\d+/g);
89
+ if (tsErrors?.length) {
90
+ lines.push("");
91
+ lines.push("TypeScript reported errors in the file.");
92
+ lines.push("Please fix any syntax errors before running zinfer.");
93
+ }
94
+ return lines.join("\n");
95
+ }
96
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"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"}