@ontrails/config 1.0.0-beta.15 → 1.0.0-beta.16

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 (139) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/README.md +1 -1
  3. package/package.json +10 -2
  4. package/src/define-config.ts +6 -3
  5. package/src/extensions.ts +1 -1
  6. package/src/index.ts +0 -1
  7. package/src/registry.ts +1 -1
  8. package/src/resolve.ts +4 -2
  9. package/.turbo/turbo-build.log +0 -1
  10. package/.turbo/turbo-lint.log +0 -3
  11. package/.turbo/turbo-typecheck.log +0 -1
  12. package/dist/app-config.d.ts +0 -65
  13. package/dist/app-config.d.ts.map +0 -1
  14. package/dist/app-config.js +0 -177
  15. package/dist/app-config.js.map +0 -1
  16. package/dist/collect.d.ts +0 -11
  17. package/dist/collect.d.ts.map +0 -1
  18. package/dist/collect.js +0 -81
  19. package/dist/collect.js.map +0 -1
  20. package/dist/compose.d.ts +0 -26
  21. package/dist/compose.d.ts.map +0 -1
  22. package/dist/compose.js +0 -19
  23. package/dist/compose.js.map +0 -1
  24. package/dist/config-layer.d.ts +0 -11
  25. package/dist/config-layer.d.ts.map +0 -1
  26. package/dist/config-layer.js +0 -6
  27. package/dist/config-layer.js.map +0 -1
  28. package/dist/config-resource.d.ts +0 -3
  29. package/dist/config-resource.d.ts.map +0 -1
  30. package/dist/config-resource.js +0 -26
  31. package/dist/config-resource.js.map +0 -1
  32. package/dist/define-config.d.ts +0 -61
  33. package/dist/define-config.d.ts.map +0 -1
  34. package/dist/define-config.js +0 -87
  35. package/dist/define-config.js.map +0 -1
  36. package/dist/derive/env.d.ts +0 -15
  37. package/dist/derive/env.d.ts.map +0 -1
  38. package/dist/derive/env.js +0 -65
  39. package/dist/derive/env.js.map +0 -1
  40. package/dist/derive/example.d.ts +0 -16
  41. package/dist/derive/example.d.ts.map +0 -1
  42. package/dist/derive/example.js +0 -138
  43. package/dist/derive/example.js.map +0 -1
  44. package/dist/derive/helpers.d.ts +0 -35
  45. package/dist/derive/helpers.d.ts.map +0 -1
  46. package/dist/derive/helpers.js +0 -116
  47. package/dist/derive/helpers.js.map +0 -1
  48. package/dist/derive/index.d.ts +0 -4
  49. package/dist/derive/index.d.ts.map +0 -1
  50. package/dist/derive/index.js +0 -4
  51. package/dist/derive/index.js.map +0 -1
  52. package/dist/derive/json-schema.d.ts +0 -18
  53. package/dist/derive/json-schema.d.ts.map +0 -1
  54. package/dist/derive/json-schema.js +0 -97
  55. package/dist/derive/json-schema.js.map +0 -1
  56. package/dist/derive-fields.d.ts +0 -25
  57. package/dist/derive-fields.d.ts.map +0 -1
  58. package/dist/derive-fields.js +0 -147
  59. package/dist/derive-fields.js.map +0 -1
  60. package/dist/derive-provenance.d.ts +0 -30
  61. package/dist/derive-provenance.d.ts.map +0 -1
  62. package/dist/derive-provenance.js +0 -101
  63. package/dist/derive-provenance.js.map +0 -1
  64. package/dist/doctor.d.ts +0 -27
  65. package/dist/doctor.d.ts.map +0 -1
  66. package/dist/doctor.js +0 -131
  67. package/dist/doctor.js.map +0 -1
  68. package/dist/extensions.d.ts +0 -38
  69. package/dist/extensions.d.ts.map +0 -1
  70. package/dist/extensions.js +0 -35
  71. package/dist/extensions.js.map +0 -1
  72. package/dist/index.d.ts +0 -20
  73. package/dist/index.d.ts.map +0 -1
  74. package/dist/index.js +0 -20
  75. package/dist/index.js.map +0 -1
  76. package/dist/merge.d.ts +0 -16
  77. package/dist/merge.d.ts.map +0 -1
  78. package/dist/merge.js +0 -34
  79. package/dist/merge.js.map +0 -1
  80. package/dist/ref.d.ts +0 -29
  81. package/dist/ref.d.ts.map +0 -1
  82. package/dist/ref.js +0 -30
  83. package/dist/ref.js.map +0 -1
  84. package/dist/registry.d.ts +0 -24
  85. package/dist/registry.d.ts.map +0 -1
  86. package/dist/registry.js +0 -12
  87. package/dist/registry.js.map +0 -1
  88. package/dist/resolve.d.ts +0 -21
  89. package/dist/resolve.d.ts.map +0 -1
  90. package/dist/resolve.js +0 -177
  91. package/dist/resolve.js.map +0 -1
  92. package/dist/secret-heuristics.d.ts +0 -10
  93. package/dist/secret-heuristics.d.ts.map +0 -1
  94. package/dist/secret-heuristics.js +0 -11
  95. package/dist/secret-heuristics.js.map +0 -1
  96. package/dist/trails/config-check.d.ts +0 -11
  97. package/dist/trails/config-check.d.ts.map +0 -1
  98. package/dist/trails/config-check.js +0 -53
  99. package/dist/trails/config-check.js.map +0 -1
  100. package/dist/trails/config-describe.d.ts +0 -12
  101. package/dist/trails/config-describe.d.ts.map +0 -1
  102. package/dist/trails/config-describe.js +0 -41
  103. package/dist/trails/config-describe.js.map +0 -1
  104. package/dist/trails/config-explain.d.ts +0 -8
  105. package/dist/trails/config-explain.d.ts.map +0 -1
  106. package/dist/trails/config-explain.js +0 -74
  107. package/dist/trails/config-explain.js.map +0 -1
  108. package/dist/trails/config-init.d.ts +0 -9
  109. package/dist/trails/config-init.d.ts.map +0 -1
  110. package/dist/trails/config-init.js +0 -78
  111. package/dist/trails/config-init.js.map +0 -1
  112. package/dist/workspace.d.ts +0 -9
  113. package/dist/workspace.d.ts.map +0 -1
  114. package/dist/workspace.js +0 -49
  115. package/dist/workspace.js.map +0 -1
  116. package/dist/zod-utils.d.ts +0 -14
  117. package/dist/zod-utils.d.ts.map +0 -1
  118. package/dist/zod-utils.js +0 -41
  119. package/dist/zod-utils.js.map +0 -1
  120. package/src/__tests__/app-config.test.ts +0 -342
  121. package/src/__tests__/compose.test.ts +0 -59
  122. package/src/__tests__/config-check.test.ts +0 -171
  123. package/src/__tests__/config-describe.test.ts +0 -154
  124. package/src/__tests__/config-explain.test.ts +0 -167
  125. package/src/__tests__/config-init.test.ts +0 -210
  126. package/src/__tests__/config-resource.test.ts +0 -87
  127. package/src/__tests__/define-config.test.ts +0 -269
  128. package/src/__tests__/derive-fields.test.ts +0 -158
  129. package/src/__tests__/derive-provenance.test.ts +0 -139
  130. package/src/__tests__/derive.test.ts +0 -269
  131. package/src/__tests__/doctor.test.ts +0 -172
  132. package/src/__tests__/extensions.test.ts +0 -134
  133. package/src/__tests__/ref.test.ts +0 -35
  134. package/src/__tests__/resolve.test.ts +0 -246
  135. package/src/__tests__/workspace.test.ts +0 -64
  136. package/src/workspace.ts +0 -56
  137. package/tsconfig.json +0 -9
  138. package/tsconfig.tests.json +0 -10
  139. package/tsconfig.tsbuildinfo +0 -1
@@ -1,61 +0,0 @@
1
- /**
2
- * Trails-specific config wrapper — `appConfig('trails', ...)` with
3
- * framework conventions for profile selection and local overrides.
4
- */
5
- import type { z } from 'zod';
6
- /** Options for defining a Trails app config. */
7
- export interface DefineConfigOptions<T extends z.ZodType> {
8
- readonly schema: T;
9
- readonly base?: Partial<z.infer<T>>;
10
- readonly profiles?: Record<string, Partial<z.infer<T>>>;
11
- /** When true, fall back to `NODE_ENV` when `TRAILS_ENV` is unset. */
12
- readonly envFromNodeEnv?: boolean;
13
- }
14
- /** Options passed to `resolve()` on a defined config. */
15
- interface DefineConfigResolveOptions {
16
- readonly profile?: string;
17
- readonly env?: Record<string, string | undefined>;
18
- /** Working directory for local overrides discovery. Defaults to `process.cwd()`. */
19
- readonly cwd?: string;
20
- }
21
- /**
22
- * Define Trails app config.
23
- *
24
- * This is `appConfig('trails', ...)` with the framework's own conventions:
25
- * `TRAILS_ENV` selects the profile. When `envFromNodeEnv` is true,
26
- * `NODE_ENV` is used as a fallback when `TRAILS_ENV` is unset.
27
- *
28
- * @example
29
- * ```ts
30
- * const config = defineConfig({
31
- * schema: z.object({
32
- * port: z.number().default(3000),
33
- * debug: z.boolean().default(false),
34
- * }),
35
- * base: { port: 8080 },
36
- * profiles: {
37
- * production: { debug: false },
38
- * test: { debug: true, port: 0 },
39
- * },
40
- * });
41
- *
42
- * const result = config.resolve();
43
- * ```
44
- */
45
- export declare const defineConfig: <T extends z.ZodType>(options: DefineConfigOptions<T>) => {
46
- base: Partial<z.core.output<T>> | undefined;
47
- profiles: Record<string, Partial<z.core.output<T>>> | undefined;
48
- resolve: (resolveOpts?: DefineConfigResolveOptions) => Promise<import("packages/core/src/result.js").Result<z.core.output<T>, Error>>;
49
- schema: T;
50
- name: string;
51
- formats: readonly import("./app-config.js").ConfigFormat[];
52
- dotfile: boolean;
53
- describe(): readonly import("./derive-fields.js").FieldDescription[];
54
- check(values: Record<string, unknown>, options?: {
55
- readonly env?: Record<string, string | undefined>;
56
- }): import("./doctor.js").CheckResult;
57
- explain(options: import("./app-config.js").AppConfigDeriveProvenanceOptions): readonly import("./derive-provenance.js").ProvenanceEntry[];
58
- ref(fieldPath: string): import("./ref.js").ConfigRef;
59
- };
60
- export {};
61
- //# sourceMappingURL=define-config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"define-config.d.ts","sourceRoot":"","sources":["../src/define-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAS7B,gDAAgD;AAChD,MAAM,WAAW,mBAAmB,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO;IACtD,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACnB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,qEAAqE;IACrE,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,yDAAyD;AACzD,UAAU,0BAA0B;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAClD,oFAAoF;IACpF,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAoCD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAC9C,SAAS,mBAAmB,CAAC,CAAC,CAAC;;;4BAQC,0BAA0B;;;;;;;oBAnCvC,CAAC;;;;CAgErB,CAAC"}
@@ -1,87 +0,0 @@
1
- /**
2
- * Trails-specific config wrapper — `appConfig('trails', ...)` with
3
- * framework conventions for profile selection and local overrides.
4
- */
5
- import { existsSync } from 'node:fs';
6
- import { join } from 'node:path';
7
- import { appConfig } from './app-config.js';
8
- import { deriveConfig } from './resolve.js';
9
- // ---------------------------------------------------------------------------
10
- // Local overrides discovery
11
- // ---------------------------------------------------------------------------
12
- const LOCAL_OVERRIDE_CANDIDATES = ['local.ts', 'local.js'];
13
- /**
14
- * Discover and synchronously import a `.trails/config/local.{ts,js}` file.
15
- *
16
- * Skipped when `TRAILS_ENV=test` for hermetic test environments.
17
- */
18
- const discoverLocalOverrides = async (cwd, envRecord) => {
19
- if (envRecord['TRAILS_ENV'] === 'test') {
20
- return undefined;
21
- }
22
- for (const filename of LOCAL_OVERRIDE_CANDIDATES) {
23
- const candidate = join(cwd, '.trails', 'config', filename);
24
- if (existsSync(candidate)) {
25
- const mod = await import(candidate);
26
- return (mod['default'] ?? mod);
27
- }
28
- }
29
- return undefined;
30
- };
31
- // ---------------------------------------------------------------------------
32
- // Public API
33
- // ---------------------------------------------------------------------------
34
- /**
35
- * Define Trails app config.
36
- *
37
- * This is `appConfig('trails', ...)` with the framework's own conventions:
38
- * `TRAILS_ENV` selects the profile. When `envFromNodeEnv` is true,
39
- * `NODE_ENV` is used as a fallback when `TRAILS_ENV` is unset.
40
- *
41
- * @example
42
- * ```ts
43
- * const config = defineConfig({
44
- * schema: z.object({
45
- * port: z.number().default(3000),
46
- * debug: z.boolean().default(false),
47
- * }),
48
- * base: { port: 8080 },
49
- * profiles: {
50
- * production: { debug: false },
51
- * test: { debug: true, port: 0 },
52
- * },
53
- * });
54
- *
55
- * const result = config.resolve();
56
- * ```
57
- */
58
- export const defineConfig = (options) => {
59
- const config = appConfig('trails', { schema: options.schema });
60
- return {
61
- ...config,
62
- base: options.base,
63
- profiles: options.profiles,
64
- resolve: async (resolveOpts) => {
65
- const envRecord = {
66
- ...(resolveOpts?.env ?? process.env),
67
- };
68
- if (options.envFromNodeEnv &&
69
- envRecord['TRAILS_ENV'] === undefined &&
70
- envRecord['NODE_ENV'] !== undefined) {
71
- envRecord['TRAILS_ENV'] = envRecord['NODE_ENV'];
72
- }
73
- const cwd = resolveOpts?.cwd ?? process.cwd();
74
- const localOverrides = await discoverLocalOverrides(cwd, envRecord);
75
- return deriveConfig({
76
- base: options.base,
77
- env: envRecord,
78
- localOverrides,
79
- profile: resolveOpts?.profile ?? envRecord['TRAILS_ENV'],
80
- profiles: options.profiles,
81
- schema: options.schema,
82
- });
83
- },
84
- schema: options.schema,
85
- };
86
- };
87
- //# sourceMappingURL=define-config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"define-config.js","sourceRoot":"","sources":["../src/define-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAuB5C,8EAA8E;AAC9E,4BAA4B;AAC5B,8EAA8E;AAE9E,MAAM,yBAAyB,GAAG,CAAC,UAAU,EAAE,UAAU,CAAU,CAAC;AAEpE;;;;GAIG;AACH,MAAM,sBAAsB,GAAG,KAAK,EAClC,GAAW,EACX,SAA6C,EACC,EAAE;IAChD,IAAI,SAAS,CAAC,YAAY,CAAC,KAAK,MAAM,EAAE,CAAC;QACvC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,yBAAyB,EAAE,CAAC;QACjD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC3D,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,MAAM,GAAG,GAA4B,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,CAA4B,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,OAA+B,EAC/B,EAAE;IACF,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE/D,OAAO;QACL,GAAG,MAAM;QACT,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,OAAO,EAAE,KAAK,EAAE,WAAwC,EAAE,EAAE;YAC1D,MAAM,SAAS,GAAG;gBAChB,GAAG,CAAC,WAAW,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;aACC,CAAC;YAExC,IACE,OAAO,CAAC,cAAc;gBACtB,SAAS,CAAC,YAAY,CAAC,KAAK,SAAS;gBACrC,SAAS,CAAC,UAAU,CAAC,KAAK,SAAS,EACnC,CAAC;gBACD,SAAS,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;YAClD,CAAC;YAED,MAAM,GAAG,GAAG,WAAW,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAC9C,MAAM,cAAc,GAAG,MAAM,sBAAsB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YAEpE,OAAO,YAAY,CAAC;gBAClB,IAAI,EAAE,OAAO,CAAC,IAA2C;gBACzD,GAAG,EAAE,SAAS;gBACd,cAAc;gBACd,OAAO,EAAE,WAAW,EAAE,OAAO,IAAI,SAAS,CAAC,YAAY,CAAC;gBACxD,QAAQ,EAAE,OAAO,CAAC,QAEL;gBACb,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC,CAAC;QACL,CAAC;QACD,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC;AACJ,CAAC,CAAC"}
@@ -1,15 +0,0 @@
1
- /**
2
- * `.env.example` file generation from Zod schema `env()` bindings.
3
- *
4
- * Lists each env var with its type, default, and whether it is a secret.
5
- * Returns an empty string when no env bindings are present.
6
- */
7
- import type { z } from 'zod';
8
- /**
9
- * Generate a `.env.example` file from `env()` bindings in the schema.
10
- *
11
- * Lists each env var with its type, default, and whether it is a secret.
12
- * Returns an empty string when no env bindings are present.
13
- */
14
- export declare const deriveConfigEnvExample: (schema: z.ZodObject<Record<string, z.ZodType>>) => string;
15
- //# sourceMappingURL=env.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/derive/env.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAsF7B;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GACjC,QAAQ,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,KAC7C,MAGF,CAAC"}
@@ -1,65 +0,0 @@
1
- import { collectConfigMeta } from '../collect.js';
2
- import { isLikelySecret } from '../secret-heuristics.js';
3
- import { formatValue, getDefault, getDescription, deriveFieldByPath, unwrap, zodTypeName, zodTypeToJsonSchema, } from './helpers.js';
4
- // ---------------------------------------------------------------------------
5
- // Helpers
6
- // ---------------------------------------------------------------------------
7
- /** Map Zod type names to human-readable type labels. */
8
- const typeLabel = (schema) => {
9
- const typeName = zodTypeName(unwrap(schema));
10
- return zodTypeToJsonSchema[typeName] ?? typeName;
11
- };
12
- /** Build the type annotation comment for an env entry. */
13
- const envTypeAnnotation = (fieldSchema, meta) => {
14
- const parts = [`type: ${typeLabel(fieldSchema)}`];
15
- const info = getDefault(fieldSchema);
16
- if (info.has) {
17
- parts.push(`default: ${formatValue(info.value)}`);
18
- }
19
- if (meta.secret) {
20
- parts.push('secret');
21
- }
22
- return `# ${parts.join(', ')}`;
23
- };
24
- /** Format a single env var entry. */
25
- const envEntry = (envVar, fieldSchema, meta) => {
26
- const effectiveMeta = !meta.secret && isLikelySecret(envVar) ? { ...meta, secret: true } : meta;
27
- const lines = [];
28
- const desc = getDescription(fieldSchema);
29
- if (desc) {
30
- lines.push(`# ${desc}`);
31
- }
32
- lines.push(envTypeAnnotation(fieldSchema, effectiveMeta));
33
- lines.push(`${envVar}=`);
34
- return lines;
35
- };
36
- /** Collect env entries from config metadata. */
37
- const collectEnvEntries = (schema, meta) => {
38
- const entries = [];
39
- for (const [path, fieldMeta] of meta) {
40
- if (!fieldMeta.env) {
41
- continue;
42
- }
43
- const fieldSchema = deriveFieldByPath(schema, path);
44
- if (!fieldSchema) {
45
- continue;
46
- }
47
- entries.push(...envEntry(fieldMeta.env, fieldSchema, fieldMeta));
48
- entries.push('');
49
- }
50
- return entries;
51
- };
52
- // ---------------------------------------------------------------------------
53
- // Public API
54
- // ---------------------------------------------------------------------------
55
- /**
56
- * Generate a `.env.example` file from `env()` bindings in the schema.
57
- *
58
- * Lists each env var with its type, default, and whether it is a secret.
59
- * Returns an empty string when no env bindings are present.
60
- */
61
- export const deriveConfigEnvExample = (schema) => {
62
- const entries = collectEnvEntries(schema, collectConfigMeta(schema));
63
- return entries.length === 0 ? '' : entries.join('\n');
64
- };
65
- //# sourceMappingURL=env.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/derive/env.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- /**
2
- * Config example file generation in multiple formats.
3
- *
4
- * Produces TOML, JSON, JSONC, and YAML example files from a Zod schema,
5
- * with defaults shown and deprecated fields annotated.
6
- */
7
- import type { z } from 'zod';
8
- type ExampleFormat = 'json' | 'jsonc' | 'toml' | 'yaml';
9
- /**
10
- * Generate an example config file in the specified format.
11
- *
12
- * Includes descriptions as comments, defaults shown, deprecated fields annotated.
13
- */
14
- export declare const deriveConfigExample: (schema: z.ZodObject<Record<string, z.ZodType>>, format: ExampleFormat) => string;
15
- export {};
16
- //# sourceMappingURL=example.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"example.d.ts","sourceRoot":"","sources":["../../src/derive/example.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAmM7B,KAAK,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAYxD;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,EAC9C,QAAQ,aAAa,KACpB,MAAoC,CAAC"}
@@ -1,138 +0,0 @@
1
- import { fieldComments, fieldValue, formatValue, getObjectShape, isObjectType, pushComments, unwrap, } from './helpers.js';
2
- // ---------------------------------------------------------------------------
3
- // TOML generation
4
- // ---------------------------------------------------------------------------
5
- /** Render a flat set of fields as TOML key = value lines. */
6
- const renderTomlFields = (shape, lines) => {
7
- for (const [key, fieldSchema] of Object.entries(shape)) {
8
- if (isObjectType(fieldSchema)) {
9
- continue;
10
- }
11
- pushComments(lines, fieldComments(fieldSchema, '#'), '');
12
- lines.push(`${key} = ${formatValue(fieldValue(fieldSchema))}`);
13
- }
14
- };
15
- /** Render nested objects as TOML sections, recursing with dotted prefixes. */
16
- const renderTomlSections = (shape, lines, prefix = '') => {
17
- for (const [key, fieldSchema] of Object.entries(shape)) {
18
- const nested = isObjectType(fieldSchema)
19
- ? getObjectShape(fieldSchema)
20
- : undefined;
21
- if (!nested) {
22
- continue;
23
- }
24
- const sectionKey = prefix ? `${prefix}.${key}` : key;
25
- if (lines.length > 0) {
26
- lines.push('');
27
- }
28
- lines.push(`[${sectionKey}]`);
29
- renderTomlFields(nested, lines);
30
- // oxlint-disable-next-line max-statements -- recursive TOML section rendering
31
- renderTomlSections(nested, lines, sectionKey);
32
- }
33
- };
34
- const formatToml = (schema) => {
35
- const shape = schema.shape;
36
- const lines = [];
37
- renderTomlFields(shape, lines);
38
- renderTomlSections(shape, lines);
39
- return `${lines.join('\n')}\n`;
40
- };
41
- // ---------------------------------------------------------------------------
42
- // JSON / JSONC generation
43
- // ---------------------------------------------------------------------------
44
- /** Resolve a field to its nested object or its scalar value. */
45
- const resolveJsonField = (fieldSchema, recurse) => {
46
- if (!isObjectType(fieldSchema)) {
47
- return fieldValue(fieldSchema);
48
- }
49
- const nested = getObjectShape(fieldSchema);
50
- if (!nested) {
51
- return fieldValue(fieldSchema);
52
- }
53
- const inner = unwrap(fieldSchema);
54
- return recurse(inner);
55
- };
56
- /** Build a plain object with default/placeholder values for JSON output. */
57
- const buildJsonObject = (schema) => {
58
- const shape = schema.shape;
59
- const obj = {};
60
- for (const [key, fieldSchema] of Object.entries(shape)) {
61
- obj[key] = resolveJsonField(fieldSchema, buildJsonObject);
62
- }
63
- return obj;
64
- };
65
- const formatJson = (schema) => `${JSON.stringify(buildJsonObject(schema), null, 2)}\n`;
66
- /** Serialize a nested object field for JSONC output. */
67
- const serializeJsoncObject = (fieldSchema) => {
68
- const nested = getObjectShape(fieldSchema);
69
- if (!nested) {
70
- return undefined;
71
- }
72
- const inner = unwrap(fieldSchema);
73
- return JSON.stringify(buildJsonObject(inner), null, 2).replaceAll('\n', '\n ');
74
- };
75
- /** Render a single JSONC entry (comments + key: value). */
76
- const renderJsoncEntry = (key, fieldSchema, isLast, lines) => {
77
- pushComments(lines, fieldComments(fieldSchema, '//'), ' ');
78
- const comma = isLast ? '' : ',';
79
- const serialized = isObjectType(fieldSchema)
80
- ? serializeJsoncObject(fieldSchema)
81
- : undefined;
82
- const val = serialized ?? formatValue(fieldValue(fieldSchema));
83
- lines.push(` "${key}": ${val}${comma}`);
84
- };
85
- const formatJsonc = (schema) => {
86
- const keys = Object.keys(schema.shape);
87
- const shape = schema.shape;
88
- const lines = ['{'];
89
- for (let i = 0; i < keys.length; i += 1) {
90
- const key = keys[i];
91
- renderJsoncEntry(key, shape[key], i === keys.length - 1, lines);
92
- }
93
- lines.push('}');
94
- return `${lines.join('\n')}\n`;
95
- };
96
- // ---------------------------------------------------------------------------
97
- // YAML generation
98
- // ---------------------------------------------------------------------------
99
- /** Render a single YAML scalar field. */
100
- const renderYamlScalar = (key, fieldSchema, indent, lines) => {
101
- pushComments(lines, fieldComments(fieldSchema, '#'), indent);
102
- lines.push(`${indent}${key}: ${formatValue(fieldValue(fieldSchema))}`);
103
- };
104
- /** Render YAML fields at a given indent level. */
105
- const renderYamlFields = (shape, indent, lines) => {
106
- for (const [key, fieldSchema] of Object.entries(shape)) {
107
- if (isObjectType(fieldSchema)) {
108
- const nested = getObjectShape(fieldSchema);
109
- if (!nested) {
110
- continue;
111
- }
112
- lines.push(`${indent}${key}:`);
113
- renderYamlFields(nested, `${indent} `, lines);
114
- }
115
- else {
116
- renderYamlScalar(key, fieldSchema, indent, lines);
117
- }
118
- }
119
- };
120
- const formatYaml = (schema) => {
121
- const shape = schema.shape;
122
- const lines = [];
123
- renderYamlFields(shape, '', lines);
124
- return `${lines.join('\n')}\n`;
125
- };
126
- const formatters = {
127
- json: formatJson,
128
- jsonc: formatJsonc,
129
- toml: formatToml,
130
- yaml: formatYaml,
131
- };
132
- /**
133
- * Generate an example config file in the specified format.
134
- *
135
- * Includes descriptions as comments, defaults shown, deprecated fields annotated.
136
- */
137
- export const deriveConfigExample = (schema, format) => formatters[format](schema);
138
- //# sourceMappingURL=example.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"example.js","sourceRoot":"","sources":["../../src/derive/example.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,aAAa,EACb,UAAU,EACV,WAAW,EACX,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,MAAM,GACP,MAAM,cAAc,CAAC;AAEtB,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,6DAA6D;AAC7D,MAAM,gBAAgB,GAAG,CACvB,KAAgC,EAChC,KAAe,EACT,EAAE;IACR,KAAK,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,IAAI,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9B,SAAS;QACX,CAAC;QACD,YAAY,CAAC,KAAK,EAAE,aAAa,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QACzD,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC;AACH,CAAC,CAAC;AAEF,8EAA8E;AAC9E,MAAM,kBAAkB,GAAG,CACzB,KAAgC,EAChC,KAAe,EACf,MAAM,GAAG,EAAE,EACL,EAAE;IACR,KAAK,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC;YACtC,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC;YAC7B,CAAC,CAAC,SAAS,CAAC;QACd,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,SAAS;QACX,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QACrD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,GAAG,CAAC,CAAC;QAC9B,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAChC,8EAA8E;QAC9E,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IAChD,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,MAA8C,EAAU,EAAE;IAC5E,MAAM,KAAK,GAAG,MAAM,CAAC,KAAkC,CAAC;IACxD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC/B,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACjC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,CAAC,CAAC;AAEF,8EAA8E;AAC9E,0BAA0B;AAC1B,8EAA8E;AAE9E,gEAAgE;AAChE,MAAM,gBAAgB,GAAG,CACvB,WAAsB,EACtB,OAE4B,EACnB,EAAE;IACX,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,OAAO,UAAU,CAAC,WAAW,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,MAAM,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,UAAU,CAAC,WAAW,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAA2C,CAAC;IAC5E,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;AACxB,CAAC,CAAC;AAEF,4EAA4E;AAC5E,MAAM,eAAe,GAAG,CACtB,MAA8C,EACrB,EAAE;IAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAkC,CAAC;IACxD,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,GAAG,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,MAA8C,EAAU,EAAE,CAC5E,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;AAE1D,wDAAwD;AACxD,MAAM,oBAAoB,GAAG,CAAC,WAAsB,EAAsB,EAAE;IAC1E,MAAM,MAAM,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAA2C,CAAC;IAC5E,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,UAAU,CAC/D,IAAI,EACJ,MAAM,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,2DAA2D;AAC3D,MAAM,gBAAgB,GAAG,CACvB,GAAW,EACX,WAAsB,EACtB,MAAe,EACf,KAAe,EACT,EAAE;IACR,YAAY,CAAC,KAAK,EAAE,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IAChC,MAAM,UAAU,GAAG,YAAY,CAAC,WAAW,CAAC;QAC1C,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC;QACnC,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,GAAG,GAAG,UAAU,IAAI,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;IAC/D,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC;AAC3C,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAClB,MAA8C,EACtC,EAAE;IACV,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAkC,CAAC;IACxD,MAAM,KAAK,GAAa,CAAC,GAAG,CAAC,CAAC;IAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAW,CAAC;QAC9B,gBAAgB,CACd,GAAG,EACH,KAAK,CAAC,GAAG,CAAc,EACvB,CAAC,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,EACrB,KAAK,CACN,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChB,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,CAAC,CAAC;AAEF,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,yCAAyC;AACzC,MAAM,gBAAgB,GAAG,CACvB,GAAW,EACX,WAAsB,EACtB,MAAc,EACd,KAAe,EACT,EAAE;IACR,YAAY,CAAC,KAAK,EAAE,aAAa,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;IAC7D,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,GAAG,KAAK,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;AACzE,CAAC,CAAC;AAEF,kDAAkD;AAClD,MAAM,gBAAgB,GAAG,CACvB,KAAgC,EAChC,MAAc,EACd,KAAe,EACT,EAAE;IACR,KAAK,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,IAAI,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;YAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,SAAS;YACX,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC;YAC/B,gBAAgB,CAAC,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,KAAK,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,gBAAgB,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,MAA8C,EAAU,EAAE;IAC5E,MAAM,KAAK,GAAG,MAAM,CAAC,KAAkC,CAAC;IACxD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,gBAAgB,CAAC,KAAK,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;IACnC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,CAAC,CAAC;AAQF,MAAM,UAAU,GAGZ;IACF,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,WAAW;IAClB,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,UAAU;CACjB,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,MAA8C,EAC9C,MAAqB,EACb,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC"}
@@ -1,35 +0,0 @@
1
- import type { z } from 'zod';
2
- /** Unwrap `.default()`, `.optional()`, `.nullable()` to reach the inner type. */
3
- export declare const unwrap: (schema: z.ZodType) => z.ZodType;
4
- /** Read the Zod type discriminant from a schema's def. */
5
- export declare const zodTypeName: (schema: z.ZodType) => string;
6
- /** Walk the registry up through wrappers to find a metadata key. */
7
- export declare const walkRegistryKey: (schema: z.ZodType, key: string) => unknown | undefined;
8
- /** Get the description from the global registry for a schema or its inner type. */
9
- export declare const getDescription: (schema: z.ZodType) => string | undefined;
10
- /** Get the deprecation message from the config meta for a field. */
11
- export declare const getDeprecation: (schema: z.ZodType) => string | undefined;
12
- /** Get the default value from a schema if it has one. */
13
- export declare const getDefault: (schema: z.ZodType) => {
14
- has: false;
15
- } | {
16
- has: true;
17
- value: unknown;
18
- };
19
- /** Check whether a schema (or its inner type) is a ZodObject. */
20
- export declare const isObjectType: (schema: z.ZodType) => boolean;
21
- /** Get the shape of a ZodObject, unwrapping wrappers first. */
22
- export declare const getObjectShape: (schema: z.ZodType) => Record<string, z.ZodType> | undefined;
23
- /** Resolve a dot-separated path to the field schema within an object. */
24
- export declare const deriveFieldByPath: (schema: z.ZodObject<Record<string, z.ZodType>>, path: string) => z.ZodType | undefined;
25
- /** Format a value as a quoted string or literal. */
26
- export declare const formatValue: (value: unknown) => string;
27
- /** Get the display value for a field (default or empty placeholder). */
28
- export declare const fieldValue: (schema: z.ZodType) => unknown;
29
- /** Collect comment lines for a field (description + deprecation). */
30
- export declare const fieldComments: (schema: z.ZodType, prefix: string) => readonly string[];
31
- /** Append comment lines to an output array. */
32
- export declare const pushComments: (lines: string[], comments: readonly string[], indent: string) => void;
33
- /** Map a Zod type name to a JSON Schema type. */
34
- export declare const zodTypeToJsonSchema: Record<string, string>;
35
- //# sourceMappingURL=helpers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/derive/helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAM7B,iFAAiF;AACjF,eAAO,MAAM,MAAM,GAAI,QAAQ,CAAC,CAAC,OAAO,KAAG,CAAC,CAAC,OAW5C,CAAC;AAEF,0DAA0D;AAC1D,eAAO,MAAM,WAAW,GAAI,QAAQ,CAAC,CAAC,OAAO,KAAG,MAG/C,CAAC;AAEF,oEAAoE;AACpE,eAAO,MAAM,eAAe,GAC1B,QAAQ,CAAC,CAAC,OAAO,EACjB,KAAK,MAAM,KACV,OAAO,GAAG,SAaZ,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,cAAc,GAAI,QAAQ,CAAC,CAAC,OAAO,KAAG,MAAM,GAAG,SACE,CAAC;AAE/D,oEAAoE;AACpE,eAAO,MAAM,cAAc,GAAI,QAAQ,CAAC,CAAC,OAAO,KAAG,MAAM,GAAG,SACS,CAAC;AAEtE,yDAAyD;AACzD,eAAO,MAAM,UAAU,GACrB,QAAQ,CAAC,CAAC,OAAO,KAChB;IAAE,GAAG,EAAE,KAAK,CAAA;CAAE,GAAG;IAAE,GAAG,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAM9C,CAAC;AAEF,iEAAiE;AACjE,eAAO,MAAM,YAAY,GAAI,QAAQ,CAAC,CAAC,OAAO,KAAG,OAIhD,CAAC;AAEF,+DAA+D;AAC/D,eAAO,MAAM,cAAc,GACzB,QAAQ,CAAC,CAAC,OAAO,KAChB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,SAU9B,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,EAC9C,MAAM,MAAM,KACX,CAAC,CAAC,OAAO,GAAG,SAad,CAAC;AAMF,oDAAoD;AACpD,eAAO,MAAM,WAAW,GAAI,OAAO,OAAO,KAAG,MAK5C,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,UAAU,GAAI,QAAQ,CAAC,CAAC,OAAO,KAAG,OAG9C,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,aAAa,GACxB,QAAQ,CAAC,CAAC,OAAO,EACjB,QAAQ,MAAM,KACb,SAAS,MAAM,EAWjB,CAAC;AAEF,+CAA+C;AAC/C,eAAO,MAAM,YAAY,GACvB,OAAO,MAAM,EAAE,EACf,UAAU,SAAS,MAAM,EAAE,EAC3B,QAAQ,MAAM,KACb,IAIF,CAAC;AAEF,iDAAiD;AACjD,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAItD,CAAC"}
@@ -1,116 +0,0 @@
1
- import { globalRegistry } from 'zod';
2
- // ---------------------------------------------------------------------------
3
- // Schema introspection helpers
4
- // ---------------------------------------------------------------------------
5
- /** Unwrap `.default()`, `.optional()`, `.nullable()` to reach the inner type. */
6
- export const unwrap = (schema) => {
7
- let current = schema;
8
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
9
- while (true) {
10
- const def = current.def;
11
- const inner = def['innerType'];
12
- if (!inner) {
13
- return current;
14
- }
15
- current = inner;
16
- }
17
- };
18
- /** Read the Zod type discriminant from a schema's def. */
19
- export const zodTypeName = (schema) => {
20
- const def = schema.def;
21
- return def['type'] ?? 'unknown';
22
- };
23
- /** Walk the registry up through wrappers to find a metadata key. */
24
- export const walkRegistryKey = (schema, key) => {
25
- let current = schema;
26
- while (current) {
27
- const meta = globalRegistry.get(current);
28
- if (meta?.[key] !== undefined) {
29
- return meta[key];
30
- }
31
- const def = current.def;
32
- current = def['innerType'];
33
- }
34
- return undefined;
35
- };
36
- /** Get the description from the global registry for a schema or its inner type. */
37
- export const getDescription = (schema) => walkRegistryKey(schema, 'description');
38
- /** Get the deprecation message from the config meta for a field. */
39
- export const getDeprecation = (schema) => walkRegistryKey(schema, 'deprecationMessage');
40
- /** Get the default value from a schema if it has one. */
41
- export const getDefault = (schema) => {
42
- const def = schema.def;
43
- if (def['type'] === 'default') {
44
- return { has: true, value: def['defaultValue'] };
45
- }
46
- return { has: false };
47
- };
48
- /** Check whether a schema (or its inner type) is a ZodObject. */
49
- export const isObjectType = (schema) => {
50
- const inner = unwrap(schema);
51
- const def = inner.def;
52
- return def['type'] === 'object' && 'shape' in def;
53
- };
54
- /** Get the shape of a ZodObject, unwrapping wrappers first. */
55
- export const getObjectShape = (schema) => {
56
- const inner = unwrap(schema);
57
- const def = inner.def;
58
- if (def['type'] !== 'object' || !('shape' in def)) {
59
- return undefined;
60
- }
61
- return inner.shape;
62
- };
63
- /** Resolve a dot-separated path to the field schema within an object. */
64
- export const deriveFieldByPath = (schema, path) => {
65
- const parts = path.split('.');
66
- let current = schema;
67
- for (const part of parts) {
68
- const shape = getObjectShape(current);
69
- if (!shape?.[part]) {
70
- return undefined;
71
- }
72
- current = shape[part];
73
- }
74
- return current;
75
- };
76
- // ---------------------------------------------------------------------------
77
- // Value formatting helpers
78
- // ---------------------------------------------------------------------------
79
- /** Format a value as a quoted string or literal. */
80
- export const formatValue = (value) => {
81
- if (typeof value === 'string') {
82
- return `"${value}"`;
83
- }
84
- return String(value);
85
- };
86
- /** Get the display value for a field (default or empty placeholder). */
87
- export const fieldValue = (schema) => {
88
- const info = getDefault(schema);
89
- return info.has ? info.value : '';
90
- };
91
- /** Collect comment lines for a field (description + deprecation). */
92
- export const fieldComments = (schema, prefix) => {
93
- const lines = [];
94
- const desc = getDescription(schema);
95
- if (desc) {
96
- lines.push(`${prefix} ${desc}`);
97
- }
98
- const dep = getDeprecation(schema);
99
- if (dep) {
100
- lines.push(`${prefix} DEPRECATED: ${dep}`);
101
- }
102
- return lines;
103
- };
104
- /** Append comment lines to an output array. */
105
- export const pushComments = (lines, comments, indent) => {
106
- for (const c of comments) {
107
- lines.push(`${indent}${c}`);
108
- }
109
- };
110
- /** Map a Zod type name to a JSON Schema type. */
111
- export const zodTypeToJsonSchema = {
112
- boolean: 'boolean',
113
- number: 'number',
114
- string: 'string',
115
- };
116
- //# sourceMappingURL=helpers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/derive/helpers.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- export { deriveConfigEnvExample } from './env.js';
2
- export { deriveConfigExample } from './example.js';
3
- export { deriveConfigJsonSchema } from './json-schema.js';
4
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/derive/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1,4 +0,0 @@
1
- export { deriveConfigEnvExample } from './env.js';
2
- export { deriveConfigExample } from './example.js';
3
- export { deriveConfigJsonSchema } from './json-schema.js';
4
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/derive/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1,18 +0,0 @@
1
- /**
2
- * JSON Schema generation from Zod object schemas.
3
- *
4
- * Produces JSON Schema Draft 2020-12 with descriptions, defaults,
5
- * deprecated annotations, and constraints.
6
- */
7
- import type { z } from 'zod';
8
- /**
9
- * Generate a JSON Schema from a Zod object schema.
10
- *
11
- * Includes descriptions, defaults, deprecated annotations, and constraints.
12
- * Produces JSON Schema Draft 2020-12.
13
- */
14
- export declare const deriveConfigJsonSchema: (schema: z.ZodObject<Record<string, z.ZodType>>, options?: {
15
- readonly description?: string;
16
- readonly title?: string;
17
- }) => Record<string, unknown>;
18
- //# sourceMappingURL=json-schema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"json-schema.d.ts","sourceRoot":"","sources":["../../src/derive/json-schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAsG7B;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GACjC,QAAQ,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,EAC9C,UAAU;IAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,KACnE,MAAM,CAAC,MAAM,EAAE,OAAO,CAmBxB,CAAC"}