@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.
- package/CHANGELOG.md +34 -0
- package/README.md +1 -1
- package/package.json +10 -2
- package/src/define-config.ts +6 -3
- package/src/extensions.ts +1 -1
- package/src/index.ts +0 -1
- package/src/registry.ts +1 -1
- package/src/resolve.ts +4 -2
- package/.turbo/turbo-build.log +0 -1
- package/.turbo/turbo-lint.log +0 -3
- package/.turbo/turbo-typecheck.log +0 -1
- package/dist/app-config.d.ts +0 -65
- package/dist/app-config.d.ts.map +0 -1
- package/dist/app-config.js +0 -177
- package/dist/app-config.js.map +0 -1
- package/dist/collect.d.ts +0 -11
- package/dist/collect.d.ts.map +0 -1
- package/dist/collect.js +0 -81
- package/dist/collect.js.map +0 -1
- package/dist/compose.d.ts +0 -26
- package/dist/compose.d.ts.map +0 -1
- package/dist/compose.js +0 -19
- package/dist/compose.js.map +0 -1
- package/dist/config-layer.d.ts +0 -11
- package/dist/config-layer.d.ts.map +0 -1
- package/dist/config-layer.js +0 -6
- package/dist/config-layer.js.map +0 -1
- package/dist/config-resource.d.ts +0 -3
- package/dist/config-resource.d.ts.map +0 -1
- package/dist/config-resource.js +0 -26
- package/dist/config-resource.js.map +0 -1
- package/dist/define-config.d.ts +0 -61
- package/dist/define-config.d.ts.map +0 -1
- package/dist/define-config.js +0 -87
- package/dist/define-config.js.map +0 -1
- package/dist/derive/env.d.ts +0 -15
- package/dist/derive/env.d.ts.map +0 -1
- package/dist/derive/env.js +0 -65
- package/dist/derive/env.js.map +0 -1
- package/dist/derive/example.d.ts +0 -16
- package/dist/derive/example.d.ts.map +0 -1
- package/dist/derive/example.js +0 -138
- package/dist/derive/example.js.map +0 -1
- package/dist/derive/helpers.d.ts +0 -35
- package/dist/derive/helpers.d.ts.map +0 -1
- package/dist/derive/helpers.js +0 -116
- package/dist/derive/helpers.js.map +0 -1
- package/dist/derive/index.d.ts +0 -4
- package/dist/derive/index.d.ts.map +0 -1
- package/dist/derive/index.js +0 -4
- package/dist/derive/index.js.map +0 -1
- package/dist/derive/json-schema.d.ts +0 -18
- package/dist/derive/json-schema.d.ts.map +0 -1
- package/dist/derive/json-schema.js +0 -97
- package/dist/derive/json-schema.js.map +0 -1
- package/dist/derive-fields.d.ts +0 -25
- package/dist/derive-fields.d.ts.map +0 -1
- package/dist/derive-fields.js +0 -147
- package/dist/derive-fields.js.map +0 -1
- package/dist/derive-provenance.d.ts +0 -30
- package/dist/derive-provenance.d.ts.map +0 -1
- package/dist/derive-provenance.js +0 -101
- package/dist/derive-provenance.js.map +0 -1
- package/dist/doctor.d.ts +0 -27
- package/dist/doctor.d.ts.map +0 -1
- package/dist/doctor.js +0 -131
- package/dist/doctor.js.map +0 -1
- package/dist/extensions.d.ts +0 -38
- package/dist/extensions.d.ts.map +0 -1
- package/dist/extensions.js +0 -35
- package/dist/extensions.js.map +0 -1
- package/dist/index.d.ts +0 -20
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -20
- package/dist/index.js.map +0 -1
- package/dist/merge.d.ts +0 -16
- package/dist/merge.d.ts.map +0 -1
- package/dist/merge.js +0 -34
- package/dist/merge.js.map +0 -1
- package/dist/ref.d.ts +0 -29
- package/dist/ref.d.ts.map +0 -1
- package/dist/ref.js +0 -30
- package/dist/ref.js.map +0 -1
- package/dist/registry.d.ts +0 -24
- package/dist/registry.d.ts.map +0 -1
- package/dist/registry.js +0 -12
- package/dist/registry.js.map +0 -1
- package/dist/resolve.d.ts +0 -21
- package/dist/resolve.d.ts.map +0 -1
- package/dist/resolve.js +0 -177
- package/dist/resolve.js.map +0 -1
- package/dist/secret-heuristics.d.ts +0 -10
- package/dist/secret-heuristics.d.ts.map +0 -1
- package/dist/secret-heuristics.js +0 -11
- package/dist/secret-heuristics.js.map +0 -1
- package/dist/trails/config-check.d.ts +0 -11
- package/dist/trails/config-check.d.ts.map +0 -1
- package/dist/trails/config-check.js +0 -53
- package/dist/trails/config-check.js.map +0 -1
- package/dist/trails/config-describe.d.ts +0 -12
- package/dist/trails/config-describe.d.ts.map +0 -1
- package/dist/trails/config-describe.js +0 -41
- package/dist/trails/config-describe.js.map +0 -1
- package/dist/trails/config-explain.d.ts +0 -8
- package/dist/trails/config-explain.d.ts.map +0 -1
- package/dist/trails/config-explain.js +0 -74
- package/dist/trails/config-explain.js.map +0 -1
- package/dist/trails/config-init.d.ts +0 -9
- package/dist/trails/config-init.d.ts.map +0 -1
- package/dist/trails/config-init.js +0 -78
- package/dist/trails/config-init.js.map +0 -1
- package/dist/workspace.d.ts +0 -9
- package/dist/workspace.d.ts.map +0 -1
- package/dist/workspace.js +0 -49
- package/dist/workspace.js.map +0 -1
- package/dist/zod-utils.d.ts +0 -14
- package/dist/zod-utils.d.ts.map +0 -1
- package/dist/zod-utils.js +0 -41
- package/dist/zod-utils.js.map +0 -1
- package/src/__tests__/app-config.test.ts +0 -342
- package/src/__tests__/compose.test.ts +0 -59
- package/src/__tests__/config-check.test.ts +0 -171
- package/src/__tests__/config-describe.test.ts +0 -154
- package/src/__tests__/config-explain.test.ts +0 -167
- package/src/__tests__/config-init.test.ts +0 -210
- package/src/__tests__/config-resource.test.ts +0 -87
- package/src/__tests__/define-config.test.ts +0 -269
- package/src/__tests__/derive-fields.test.ts +0 -158
- package/src/__tests__/derive-provenance.test.ts +0 -139
- package/src/__tests__/derive.test.ts +0 -269
- package/src/__tests__/doctor.test.ts +0 -172
- package/src/__tests__/extensions.test.ts +0 -134
- package/src/__tests__/ref.test.ts +0 -35
- package/src/__tests__/resolve.test.ts +0 -246
- package/src/__tests__/workspace.test.ts +0 -64
- package/src/workspace.ts +0 -56
- package/tsconfig.json +0 -9
- package/tsconfig.tests.json +0 -10
- package/tsconfig.tsbuildinfo +0 -1
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import { getDefault, getDeprecation, getDescription, getObjectShape, isObjectType, unwrap, zodTypeName, zodTypeToJsonSchema, } from './helpers.js';
|
|
2
|
-
// ---------------------------------------------------------------------------
|
|
3
|
-
// Helpers
|
|
4
|
-
// ---------------------------------------------------------------------------
|
|
5
|
-
/** Extract the JSON Schema type or enum from a Zod schema. */
|
|
6
|
-
const jsonSchemaType = (inner) => {
|
|
7
|
-
const typeName = zodTypeName(inner);
|
|
8
|
-
if (typeName === 'enum') {
|
|
9
|
-
const def = inner.def;
|
|
10
|
-
const entries = def['entries'];
|
|
11
|
-
return entries ? { enum: Object.keys(entries) } : {};
|
|
12
|
-
}
|
|
13
|
-
const mapped = zodTypeToJsonSchema[typeName];
|
|
14
|
-
return mapped ? { type: mapped } : {};
|
|
15
|
-
};
|
|
16
|
-
/** Annotation extractors for JSON Schema properties. */
|
|
17
|
-
const annotationExtractors = [
|
|
18
|
-
(s) => {
|
|
19
|
-
const desc = getDescription(s);
|
|
20
|
-
return desc ? { description: desc } : {};
|
|
21
|
-
},
|
|
22
|
-
(s) => {
|
|
23
|
-
const info = getDefault(s);
|
|
24
|
-
return info.has ? { default: info.value } : {};
|
|
25
|
-
},
|
|
26
|
-
(s) => {
|
|
27
|
-
const dep = getDeprecation(s);
|
|
28
|
-
return dep ? { deprecated: true } : {};
|
|
29
|
-
},
|
|
30
|
-
];
|
|
31
|
-
/** Extract annotations (description, default, deprecated) for JSON Schema. */
|
|
32
|
-
const jsonSchemaAnnotations = (fieldSchema) => Object.assign({}, ...annotationExtractors.map((fn) => fn(fieldSchema)));
|
|
33
|
-
/** Check if a field is required (no default and not optional). */
|
|
34
|
-
const isRequired = (fieldSchema) => {
|
|
35
|
-
const def = fieldSchema.def;
|
|
36
|
-
return def['type'] !== 'default' && def['type'] !== 'optional';
|
|
37
|
-
};
|
|
38
|
-
/** Convert a single Zod field schema to a JSON Schema property. */
|
|
39
|
-
const fieldToJsonSchema = (fieldSchema) => {
|
|
40
|
-
if (isObjectType(fieldSchema)) {
|
|
41
|
-
const nestedShape = getObjectShape(fieldSchema);
|
|
42
|
-
if (nestedShape) {
|
|
43
|
-
// oxlint-disable-next-line no-use-before-define -- mutual recursion with buildSchemaProperties
|
|
44
|
-
const { properties, required } = buildSchemaProperties(nestedShape);
|
|
45
|
-
return {
|
|
46
|
-
properties,
|
|
47
|
-
type: 'object',
|
|
48
|
-
...(required.length > 0 ? { required } : {}),
|
|
49
|
-
...jsonSchemaAnnotations(fieldSchema),
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
return {
|
|
54
|
-
...jsonSchemaType(unwrap(fieldSchema)),
|
|
55
|
-
...jsonSchemaAnnotations(fieldSchema),
|
|
56
|
-
};
|
|
57
|
-
};
|
|
58
|
-
/** Build properties and required arrays from a schema shape. */
|
|
59
|
-
const buildSchemaProperties = (shape) => {
|
|
60
|
-
const properties = {};
|
|
61
|
-
const required = [];
|
|
62
|
-
for (const [key, fieldSchema] of Object.entries(shape)) {
|
|
63
|
-
properties[key] = fieldToJsonSchema(fieldSchema);
|
|
64
|
-
if (isRequired(fieldSchema)) {
|
|
65
|
-
required.push(key);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
return { properties, required };
|
|
69
|
-
};
|
|
70
|
-
// ---------------------------------------------------------------------------
|
|
71
|
-
// Public API
|
|
72
|
-
// ---------------------------------------------------------------------------
|
|
73
|
-
/**
|
|
74
|
-
* Generate a JSON Schema from a Zod object schema.
|
|
75
|
-
*
|
|
76
|
-
* Includes descriptions, defaults, deprecated annotations, and constraints.
|
|
77
|
-
* Produces JSON Schema Draft 2020-12.
|
|
78
|
-
*/
|
|
79
|
-
export const deriveConfigJsonSchema = (schema, options) => {
|
|
80
|
-
const { properties, required } = buildSchemaProperties(schema.shape);
|
|
81
|
-
const result = {
|
|
82
|
-
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
83
|
-
properties,
|
|
84
|
-
type: 'object',
|
|
85
|
-
};
|
|
86
|
-
if (options?.title) {
|
|
87
|
-
result['title'] = options.title;
|
|
88
|
-
}
|
|
89
|
-
if (options?.description) {
|
|
90
|
-
result['description'] = options.description;
|
|
91
|
-
}
|
|
92
|
-
if (required.length > 0) {
|
|
93
|
-
result['required'] = required;
|
|
94
|
-
}
|
|
95
|
-
return result;
|
|
96
|
-
};
|
|
97
|
-
//# sourceMappingURL=json-schema.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"json-schema.js","sourceRoot":"","sources":["../../src/derive/json-schema.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,UAAU,EACV,cAAc,EACd,cAAc,EACd,cAAc,EACd,YAAY,EACZ,MAAM,EACN,WAAW,EACX,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAEtB,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,8DAA8D;AAC9D,MAAM,cAAc,GAAG,CAAC,KAAgB,EAA2B,EAAE;IACnE,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAyC,CAAC;QAC5D,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAuC,CAAC;QACrE,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACvD,CAAC;IACD,MAAM,MAAM,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC7C,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACxC,CAAC,CAAC;AAEF,wDAAwD;AACxD,MAAM,oBAAoB,GAEQ;IAChC,CAAC,CAAC,EAAE,EAAE;QACJ,MAAM,IAAI,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3C,CAAC;IACD,CAAC,CAAC,EAAE,EAAE;QACJ,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACjD,CAAC;IACD,CAAC,CAAC,EAAE,EAAE;QACJ,MAAM,GAAG,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;QAC9B,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACzC,CAAC;CACF,CAAC;AAEF,8EAA8E;AAC9E,MAAM,qBAAqB,GAAG,CAC5B,WAAsB,EACG,EAAE,CAC3B,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAE1E,kEAAkE;AAClE,MAAM,UAAU,GAAG,CAAC,WAAsB,EAAW,EAAE;IACrD,MAAM,GAAG,GAAG,WAAW,CAAC,GAAyC,CAAC;IAClE,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,UAAU,CAAC;AACjE,CAAC,CAAC;AAEF,mEAAmE;AACnE,MAAM,iBAAiB,GAAG,CAAC,WAAsB,EAA2B,EAAE;IAC5E,IAAI,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9B,MAAM,WAAW,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;QAChD,IAAI,WAAW,EAAE,CAAC;YAChB,+FAA+F;YAC/F,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;YACpE,OAAO;gBACL,UAAU;gBACV,IAAI,EAAE,QAAQ;gBACd,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5C,GAAG,qBAAqB,CAAC,WAAW,CAAC;aACtC,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO;QACL,GAAG,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACtC,GAAG,qBAAqB,CAAC,WAAW,CAAC;KACtC,CAAC;AACJ,CAAC,CAAC;AAEF,gEAAgE;AAChE,MAAM,qBAAqB,GAAG,CAC5B,KAAgC,EAIhC,EAAE;IACF,MAAM,UAAU,GAA4C,EAAE,CAAC;IAC/D,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,UAAU,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;QACjD,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5B,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AAClC,CAAC,CAAC;AAEF,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,MAA8C,EAC9C,OAAoE,EAC3C,EAAE;IAC3B,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,qBAAqB,CACpD,MAAM,CAAC,KAAkC,CAC1C,CAAC;IACF,MAAM,MAAM,GAA4B;QACtC,OAAO,EAAE,8CAA8C;QACvD,UAAU;QACV,IAAI,EAAE,QAAQ;KACf,CAAC;IACF,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;QACnB,MAAM,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;IAClC,CAAC;IACD,IAAI,OAAO,EAAE,WAAW,EAAE,CAAC;QACzB,MAAM,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IAC9C,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC;IAChC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
|
package/dist/derive-fields.d.ts
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Config introspection — describe all fields in a schema without values.
|
|
3
|
-
*
|
|
4
|
-
* Returns a structured catalog suitable for CLI rendering or agent inspection.
|
|
5
|
-
*/
|
|
6
|
-
import type { z } from 'zod';
|
|
7
|
-
/** Description of a single config field. */
|
|
8
|
-
export interface FieldDescription {
|
|
9
|
-
readonly path: string;
|
|
10
|
-
readonly type: string;
|
|
11
|
-
readonly description?: string;
|
|
12
|
-
readonly default?: unknown;
|
|
13
|
-
readonly required: boolean;
|
|
14
|
-
readonly env?: string;
|
|
15
|
-
readonly secret?: boolean;
|
|
16
|
-
readonly deprecated?: string;
|
|
17
|
-
readonly constraints?: Record<string, unknown>;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Describe all fields in a schema without needing a config file.
|
|
21
|
-
*
|
|
22
|
-
* Returns a structured catalog suitable for CLI rendering or agent inspection.
|
|
23
|
-
*/
|
|
24
|
-
export declare const deriveConfigFields: (schema: z.ZodObject<Record<string, z.ZodType>>) => readonly FieldDescription[];
|
|
25
|
-
//# sourceMappingURL=derive-fields.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"derive-fields.d.ts","sourceRoot":"","sources":["../src/derive-fields.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAS7B,4CAA4C;AAC5C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChD;AAsMD;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,KAC7C,SAAS,gBAAgB,EAmB3B,CAAC"}
|
package/dist/derive-fields.js
DELETED
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Config introspection — describe all fields in a schema without values.
|
|
3
|
-
*
|
|
4
|
-
* Returns a structured catalog suitable for CLI rendering or agent inspection.
|
|
5
|
-
*/
|
|
6
|
-
import { globalRegistry } from 'zod';
|
|
7
|
-
import { collectConfigMeta } from './collect.js';
|
|
8
|
-
import { isZodObject, unwrapToBase, zodDef } from './zod-utils.js';
|
|
9
|
-
// ---------------------------------------------------------------------------
|
|
10
|
-
// Helpers (defined before consumers — satisfies no-use-before-define)
|
|
11
|
-
// ---------------------------------------------------------------------------
|
|
12
|
-
/** Read the description from the Zod global registry. */
|
|
13
|
-
const getDescription = (schema) => {
|
|
14
|
-
const meta = globalRegistry.get(schema);
|
|
15
|
-
return meta?.description;
|
|
16
|
-
};
|
|
17
|
-
/** Handle a single unwrap step; returns updated inner type and state, or null to stop. */
|
|
18
|
-
const unwrapStep = (def, state) => {
|
|
19
|
-
const typeName = def['type'];
|
|
20
|
-
if (typeName === 'default') {
|
|
21
|
-
return {
|
|
22
|
-
inner: def['innerType'],
|
|
23
|
-
state: { ...state, defaultValue: def['defaultValue'], hasDefault: true },
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
if (typeName === 'optional') {
|
|
27
|
-
return {
|
|
28
|
-
inner: def['innerType'],
|
|
29
|
-
state: { ...state, isOptional: true },
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
if (typeName === 'nullable') {
|
|
33
|
-
return { inner: def['innerType'], state };
|
|
34
|
-
}
|
|
35
|
-
return null;
|
|
36
|
-
};
|
|
37
|
-
/** Unwrap through default/optional/nullable wrappers to find the base type. */
|
|
38
|
-
const unwrapSchema = (schema) => {
|
|
39
|
-
let current = schema;
|
|
40
|
-
let state = {
|
|
41
|
-
defaultValue: undefined,
|
|
42
|
-
hasDefault: false,
|
|
43
|
-
isOptional: false,
|
|
44
|
-
};
|
|
45
|
-
for (let depth = 0; depth < 10; depth += 1) {
|
|
46
|
-
const result = unwrapStep(zodDef(current), state);
|
|
47
|
-
if (!result) {
|
|
48
|
-
break;
|
|
49
|
-
}
|
|
50
|
-
current = result.inner;
|
|
51
|
-
({ state } = result);
|
|
52
|
-
}
|
|
53
|
-
return { base: current, ...state };
|
|
54
|
-
};
|
|
55
|
-
/** Resolve the user-facing type name from a base Zod schema. */
|
|
56
|
-
const resolveTypeName = (schema) => {
|
|
57
|
-
const typeName = zodDef(schema)['type'];
|
|
58
|
-
const typeMap = {
|
|
59
|
-
boolean: 'boolean',
|
|
60
|
-
enum: 'enum',
|
|
61
|
-
number: 'number',
|
|
62
|
-
string: 'string',
|
|
63
|
-
};
|
|
64
|
-
return typeMap[typeName] ?? typeName;
|
|
65
|
-
};
|
|
66
|
-
/** Extract enum values from an enum def. */
|
|
67
|
-
const extractEnumConstraints = (def) => {
|
|
68
|
-
const entries = def['entries'];
|
|
69
|
-
if (!entries) {
|
|
70
|
-
return undefined;
|
|
71
|
-
}
|
|
72
|
-
return { values: Object.values(entries) };
|
|
73
|
-
};
|
|
74
|
-
/** Extract min/max from a number schema's properties. */
|
|
75
|
-
const extractNumberConstraints = (schema) => {
|
|
76
|
-
const result = {};
|
|
77
|
-
const numSchema = schema;
|
|
78
|
-
if (numSchema.minValue !== undefined && numSchema.minValue !== null) {
|
|
79
|
-
result['min'] = numSchema.minValue;
|
|
80
|
-
}
|
|
81
|
-
if (numSchema.maxValue !== undefined && numSchema.maxValue !== null) {
|
|
82
|
-
result['max'] = numSchema.maxValue;
|
|
83
|
-
}
|
|
84
|
-
return Object.keys(result).length > 0 ? result : undefined;
|
|
85
|
-
};
|
|
86
|
-
/** Extract constraints from a base schema (min, max, enum values). */
|
|
87
|
-
const extractConstraints = (schema) => {
|
|
88
|
-
const def = zodDef(schema);
|
|
89
|
-
const typeName = def['type'];
|
|
90
|
-
if (typeName === 'enum') {
|
|
91
|
-
return extractEnumConstraints(def);
|
|
92
|
-
}
|
|
93
|
-
if (typeName === 'number') {
|
|
94
|
-
return extractNumberConstraints(schema);
|
|
95
|
-
}
|
|
96
|
-
return undefined;
|
|
97
|
-
};
|
|
98
|
-
/** Build a single FieldDescription from a leaf schema and its metadata. */
|
|
99
|
-
const buildFieldDescription = (path, fieldSchema, configMeta) => {
|
|
100
|
-
const { base, defaultValue, hasDefault, isOptional } = unwrapSchema(fieldSchema);
|
|
101
|
-
const meta = configMeta.get(path);
|
|
102
|
-
const description = getDescription(base) ?? getDescription(fieldSchema);
|
|
103
|
-
const constraints = extractConstraints(base);
|
|
104
|
-
return {
|
|
105
|
-
...(constraints ? { constraints } : {}),
|
|
106
|
-
...(hasDefault ? { default: defaultValue } : {}),
|
|
107
|
-
...(meta?.deprecated ? { deprecated: meta.deprecated } : {}),
|
|
108
|
-
...(description ? { description } : {}),
|
|
109
|
-
...(meta?.env ? { env: meta.env } : {}),
|
|
110
|
-
path,
|
|
111
|
-
required: !hasDefault && !isOptional,
|
|
112
|
-
...(meta?.secret ? { secret: meta.secret } : {}),
|
|
113
|
-
type: resolveTypeName(base),
|
|
114
|
-
};
|
|
115
|
-
};
|
|
116
|
-
/** Walk one level of an object shape, collecting leaves and queuing nested objects. */
|
|
117
|
-
const walkShapeLevel = (shape, prefix, configMeta, results, queue) => {
|
|
118
|
-
for (const [key, fieldSchema] of Object.entries(shape)) {
|
|
119
|
-
const path = prefix ? `${prefix}.${key}` : key;
|
|
120
|
-
if (isZodObject(fieldSchema)) {
|
|
121
|
-
queue.push({ prefix: path, schema: unwrapToBase(fieldSchema) });
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
results.push(buildFieldDescription(path, fieldSchema, configMeta));
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
};
|
|
128
|
-
// ---------------------------------------------------------------------------
|
|
129
|
-
// Public API
|
|
130
|
-
// ---------------------------------------------------------------------------
|
|
131
|
-
/**
|
|
132
|
-
* Describe all fields in a schema without needing a config file.
|
|
133
|
-
*
|
|
134
|
-
* Returns a structured catalog suitable for CLI rendering or agent inspection.
|
|
135
|
-
*/
|
|
136
|
-
export const deriveConfigFields = (schema) => {
|
|
137
|
-
const configMeta = collectConfigMeta(schema);
|
|
138
|
-
const queue = [];
|
|
139
|
-
const results = [];
|
|
140
|
-
walkShapeLevel(schema.shape, '', configMeta, results, queue);
|
|
141
|
-
for (let entry = queue.pop(); entry; entry = queue.pop()) {
|
|
142
|
-
const nested = zodDef(entry.schema)['shape'];
|
|
143
|
-
walkShapeLevel(nested, entry.prefix, configMeta, results, queue);
|
|
144
|
-
}
|
|
145
|
-
return results;
|
|
146
|
-
};
|
|
147
|
-
//# sourceMappingURL=derive-fields.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"derive-fields.js","sourceRoot":"","sources":["../src/derive-fields.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Config provenance — show which source won for each config field.
|
|
3
|
-
*
|
|
4
|
-
* Used for debugging: answers "where did this value come from?"
|
|
5
|
-
*/
|
|
6
|
-
import type { z } from 'zod';
|
|
7
|
-
/** Provenance entry describing the source of a resolved config value. */
|
|
8
|
-
export interface ProvenanceEntry {
|
|
9
|
-
readonly path: string;
|
|
10
|
-
readonly value: unknown;
|
|
11
|
-
readonly source: 'default' | 'base' | 'profile' | 'local' | 'env';
|
|
12
|
-
readonly redacted: boolean;
|
|
13
|
-
}
|
|
14
|
-
/** Options for explaining config provenance. */
|
|
15
|
-
export interface DeriveConfigProvenanceOptions<T extends z.ZodType> {
|
|
16
|
-
readonly schema: T;
|
|
17
|
-
readonly base?: Record<string, unknown>;
|
|
18
|
-
readonly profile?: Record<string, unknown>;
|
|
19
|
-
readonly local?: Record<string, unknown>;
|
|
20
|
-
readonly env?: Record<string, string | undefined>;
|
|
21
|
-
readonly resolved: Record<string, unknown>;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Show which source won for each config field.
|
|
25
|
-
*
|
|
26
|
-
* Used for debugging — answers "where did this value come from?"
|
|
27
|
-
*
|
|
28
|
-
*/
|
|
29
|
-
export declare const deriveConfigProvenance: <T extends z.ZodType>(options: DeriveConfigProvenanceOptions<T>) => readonly ProvenanceEntry[];
|
|
30
|
-
//# sourceMappingURL=derive-provenance.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"derive-provenance.d.ts","sourceRoot":"","sources":["../src/derive-provenance.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAU7B,yEAAyE;AACzE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,KAAK,CAAC;IAClE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,gDAAgD;AAChD,MAAM,WAAW,6BAA6B,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO;IAChE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACnB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAClD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC5C;AAmGD;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EACxD,SAAS,6BAA6B,CAAC,CAAC,CAAC,KACxC,SAAS,eAAe,EAoC1B,CAAC"}
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Config provenance — show which source won for each config field.
|
|
3
|
-
*
|
|
4
|
-
* Used for debugging: answers "where did this value come from?"
|
|
5
|
-
*/
|
|
6
|
-
import { collectConfigMeta } from './collect.js';
|
|
7
|
-
import { isLikelySecret } from './secret-heuristics.js';
|
|
8
|
-
import { getAtPath, isZodObject, unwrapToBase, zodDef } from './zod-utils.js';
|
|
9
|
-
// ---------------------------------------------------------------------------
|
|
10
|
-
// Helpers (defined before consumers)
|
|
11
|
-
// ---------------------------------------------------------------------------
|
|
12
|
-
/** Build a map of path → env var name from config metadata. */
|
|
13
|
-
const buildEnvMap = (schema) => {
|
|
14
|
-
const meta = collectConfigMeta(schema);
|
|
15
|
-
const result = new Map();
|
|
16
|
-
for (const [path, fieldMeta] of meta) {
|
|
17
|
-
if (fieldMeta.env) {
|
|
18
|
-
result.set(path, fieldMeta.env);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
return result;
|
|
22
|
-
};
|
|
23
|
-
/** Build a set of paths marked as secret from config metadata. */
|
|
24
|
-
const buildSecretSet = (schema) => {
|
|
25
|
-
const meta = collectConfigMeta(schema);
|
|
26
|
-
const result = new Set();
|
|
27
|
-
for (const [path, fieldMeta] of meta) {
|
|
28
|
-
if (fieldMeta.secret) {
|
|
29
|
-
result.add(path);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
/** Determine which source provided the winning value for a given path. */
|
|
35
|
-
const determineSource = (path, resolved, sources, envMap, envVars) => {
|
|
36
|
-
if (envVars && envMap.has(path)) {
|
|
37
|
-
const envVar = envMap.get(path);
|
|
38
|
-
if (envVar && envVars[envVar] !== undefined) {
|
|
39
|
-
return 'env';
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
const resolvedValue = getAtPath(resolved, path);
|
|
43
|
-
for (const [name, values] of sources) {
|
|
44
|
-
if (values && getAtPath(values, path) === resolvedValue) {
|
|
45
|
-
return name;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
return 'default';
|
|
49
|
-
};
|
|
50
|
-
/** Collect all leaf field paths from an object schema. */
|
|
51
|
-
const collectLeafPaths = (schema, prefix) => {
|
|
52
|
-
const paths = [];
|
|
53
|
-
const queue = [{ prefix, schema }];
|
|
54
|
-
for (let entry = queue.pop(); entry; entry = queue.pop()) {
|
|
55
|
-
const shape = zodDef(entry.schema)['shape'];
|
|
56
|
-
for (const [key, fieldSchema] of Object.entries(shape)) {
|
|
57
|
-
const path = entry.prefix ? `${entry.prefix}.${key}` : key;
|
|
58
|
-
if (isZodObject(fieldSchema)) {
|
|
59
|
-
queue.push({ prefix: path, schema: unwrapToBase(fieldSchema) });
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
paths.push(path);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
return paths;
|
|
67
|
-
};
|
|
68
|
-
// ---------------------------------------------------------------------------
|
|
69
|
-
// Public API
|
|
70
|
-
// ---------------------------------------------------------------------------
|
|
71
|
-
/**
|
|
72
|
-
* Show which source won for each config field.
|
|
73
|
-
*
|
|
74
|
-
* Used for debugging — answers "where did this value come from?"
|
|
75
|
-
*
|
|
76
|
-
*/
|
|
77
|
-
export const deriveConfigProvenance = (options) => {
|
|
78
|
-
const objSchema = options.schema;
|
|
79
|
-
const envMap = buildEnvMap(objSchema);
|
|
80
|
-
const secretSet = buildSecretSet(objSchema);
|
|
81
|
-
const sources = [
|
|
82
|
-
['local', options.local],
|
|
83
|
-
['profile', options.profile],
|
|
84
|
-
['base', options.base],
|
|
85
|
-
];
|
|
86
|
-
const paths = collectLeafPaths(objSchema, '');
|
|
87
|
-
return paths.map((path) => {
|
|
88
|
-
const source = determineSource(path, options.resolved, sources, envMap, options.env);
|
|
89
|
-
const envVarName = envMap.get(path);
|
|
90
|
-
const isSecret = secretSet.has(path) ||
|
|
91
|
-
(envVarName !== undefined && isLikelySecret(envVarName));
|
|
92
|
-
const rawValue = getAtPath(options.resolved, path);
|
|
93
|
-
return {
|
|
94
|
-
path,
|
|
95
|
-
redacted: isSecret,
|
|
96
|
-
source,
|
|
97
|
-
value: isSecret ? '[REDACTED]' : rawValue,
|
|
98
|
-
};
|
|
99
|
-
});
|
|
100
|
-
};
|
|
101
|
-
//# sourceMappingURL=derive-provenance.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"derive-provenance.js","sourceRoot":"","sources":["../src/derive-provenance.ts"],"names":[],"mappings":"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"}
|
package/dist/doctor.d.ts
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Config doctor — structured diagnostics for a config object against a schema.
|
|
3
|
-
*
|
|
4
|
-
* Reports which fields are valid, missing, using defaults, deprecated, or invalid.
|
|
5
|
-
*/
|
|
6
|
-
import type { z } from 'zod';
|
|
7
|
-
/** Diagnostic status for a single config field. */
|
|
8
|
-
export interface ConfigDiagnostic {
|
|
9
|
-
readonly path: string;
|
|
10
|
-
readonly status: 'valid' | 'missing' | 'invalid' | 'deprecated' | 'default';
|
|
11
|
-
readonly message: string;
|
|
12
|
-
readonly value?: unknown;
|
|
13
|
-
}
|
|
14
|
-
/** Aggregated result from checking config against a schema. */
|
|
15
|
-
export interface CheckResult {
|
|
16
|
-
readonly diagnostics: readonly ConfigDiagnostic[];
|
|
17
|
-
readonly valid: boolean;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Check a config object against a schema and return structured diagnostics.
|
|
21
|
-
*
|
|
22
|
-
* Reports which fields are valid, missing, using defaults, deprecated, or invalid.
|
|
23
|
-
*/
|
|
24
|
-
export declare const checkConfig: <T extends z.ZodType>(schema: T, values: Record<string, unknown>, options?: {
|
|
25
|
-
readonly env?: Record<string, string | undefined>;
|
|
26
|
-
}) => CheckResult;
|
|
27
|
-
//# sourceMappingURL=doctor.d.ts.map
|
package/dist/doctor.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAS7B,mDAAmD;AACnD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,CAAC;IAC5E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,+DAA+D;AAC/D,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,WAAW,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAClD,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAoKD;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAC7C,QAAQ,CAAC,EACT,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,UAAU;IAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;CAAE,KAC9D,WAkBF,CAAC"}
|
package/dist/doctor.js
DELETED
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Config doctor — structured diagnostics for a config object against a schema.
|
|
3
|
-
*
|
|
4
|
-
* Reports which fields are valid, missing, using defaults, deprecated, or invalid.
|
|
5
|
-
*/
|
|
6
|
-
import { collectConfigMeta } from './collect.js';
|
|
7
|
-
import { getAtPath, isZodObject, unwrapToBase, zodDef } from './zod-utils.js';
|
|
8
|
-
// ---------------------------------------------------------------------------
|
|
9
|
-
// Helpers (defined before consumers)
|
|
10
|
-
// ---------------------------------------------------------------------------
|
|
11
|
-
/** Check if a schema wraps a ZodDefault. */
|
|
12
|
-
const isDefaultWrapper = (schema) => zodDef(schema)['type'] === 'default';
|
|
13
|
-
/** Check if a schema wraps a ZodOptional. */
|
|
14
|
-
const isOptionalWrapper = (schema) => zodDef(schema)['type'] === 'optional';
|
|
15
|
-
/** Get the default value from a ZodDefault wrapper. */
|
|
16
|
-
const getDefaultValue = (schema) => zodDef(schema)['defaultValue'];
|
|
17
|
-
/** Set a value at a dot-separated path, creating intermediate objects. */
|
|
18
|
-
const setAtPath = (obj, path, value) => {
|
|
19
|
-
const parts = path.split('.');
|
|
20
|
-
let current = obj;
|
|
21
|
-
for (let i = 0; i < parts.length - 1; i += 1) {
|
|
22
|
-
const part = parts[i];
|
|
23
|
-
const next = current[part];
|
|
24
|
-
const nested = typeof next === 'object' && next !== null
|
|
25
|
-
? next
|
|
26
|
-
: {};
|
|
27
|
-
current[part] = nested;
|
|
28
|
-
current = nested;
|
|
29
|
-
}
|
|
30
|
-
const lastPart = parts.at(-1);
|
|
31
|
-
current[lastPart] = value;
|
|
32
|
-
};
|
|
33
|
-
/** Build values object with env overrides applied. */
|
|
34
|
-
const applyEnvToValues = (values, schema, envVars) => {
|
|
35
|
-
const meta = collectConfigMeta(schema);
|
|
36
|
-
const result = structuredClone(values);
|
|
37
|
-
for (const [path, fieldMeta] of meta) {
|
|
38
|
-
if (fieldMeta.env && envVars[fieldMeta.env] !== undefined) {
|
|
39
|
-
setAtPath(result, path, envVars[fieldMeta.env]);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
return result;
|
|
43
|
-
};
|
|
44
|
-
/** Validate a single field value against its schema. */
|
|
45
|
-
const validateFieldValue = (path, fieldSchema, value) => {
|
|
46
|
-
const result = fieldSchema.safeParse(value);
|
|
47
|
-
if (result.success) {
|
|
48
|
-
return { message: 'OK', path, status: 'valid', value };
|
|
49
|
-
}
|
|
50
|
-
const issue = result.error?.issues?.[0];
|
|
51
|
-
const msg = issue ? issue.message : 'Invalid value';
|
|
52
|
-
return { message: msg, path, status: 'invalid', value };
|
|
53
|
-
};
|
|
54
|
-
/** Classify a single field and produce a diagnostic. */
|
|
55
|
-
const classifyField = (path, fieldSchema, values, deprecatedMeta) => {
|
|
56
|
-
const value = getAtPath(values, path);
|
|
57
|
-
const deprecationMsg = deprecatedMeta.get(path);
|
|
58
|
-
if (deprecationMsg && value !== undefined) {
|
|
59
|
-
return { message: deprecationMsg, path, status: 'deprecated', value };
|
|
60
|
-
}
|
|
61
|
-
if (value === undefined && isDefaultWrapper(fieldSchema)) {
|
|
62
|
-
return {
|
|
63
|
-
message: 'Using default value',
|
|
64
|
-
path,
|
|
65
|
-
status: 'default',
|
|
66
|
-
value: getDefaultValue(fieldSchema),
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
if (value === undefined && !isOptionalWrapper(fieldSchema)) {
|
|
70
|
-
return {
|
|
71
|
-
message: `Required field "${path}" is missing`,
|
|
72
|
-
path,
|
|
73
|
-
status: 'missing',
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
return validateFieldValue(path, fieldSchema, value);
|
|
77
|
-
};
|
|
78
|
-
/** Collect deprecated metadata paths from config meta. */
|
|
79
|
-
const collectDeprecatedPaths = (schema) => {
|
|
80
|
-
const meta = collectConfigMeta(schema);
|
|
81
|
-
const result = new Map();
|
|
82
|
-
for (const [path, fieldMeta] of meta) {
|
|
83
|
-
if (fieldMeta.deprecated) {
|
|
84
|
-
result.set(path, fieldMeta.deprecated);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
return result;
|
|
88
|
-
};
|
|
89
|
-
/** Walk an object shape and enqueue leaf fields or nested objects. */
|
|
90
|
-
const walkShape = (schema, prefix, queue, leaves) => {
|
|
91
|
-
const shape = zodDef(schema)['shape'];
|
|
92
|
-
for (const [key, fieldSchema] of Object.entries(shape)) {
|
|
93
|
-
const path = prefix ? `${prefix}.${key}` : key;
|
|
94
|
-
if (isZodObject(fieldSchema)) {
|
|
95
|
-
queue.push({ path, schema: unwrapToBase(fieldSchema) });
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
leaves.push({ path, schema: fieldSchema });
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
};
|
|
102
|
-
/** Collect all leaf fields from a schema, walking nested objects iteratively. */
|
|
103
|
-
const collectLeaves = (schema) => {
|
|
104
|
-
const queue = [];
|
|
105
|
-
const leaves = [];
|
|
106
|
-
walkShape(schema, '', queue, leaves);
|
|
107
|
-
for (let entry = queue.pop(); entry; entry = queue.pop()) {
|
|
108
|
-
walkShape(entry.schema, entry.path, queue, leaves);
|
|
109
|
-
}
|
|
110
|
-
return leaves;
|
|
111
|
-
};
|
|
112
|
-
// ---------------------------------------------------------------------------
|
|
113
|
-
// Public API
|
|
114
|
-
// ---------------------------------------------------------------------------
|
|
115
|
-
/**
|
|
116
|
-
* Check a config object against a schema and return structured diagnostics.
|
|
117
|
-
*
|
|
118
|
-
* Reports which fields are valid, missing, using defaults, deprecated, or invalid.
|
|
119
|
-
*/
|
|
120
|
-
export const checkConfig = (schema, values, options) => {
|
|
121
|
-
const objSchema = schema;
|
|
122
|
-
const effectiveValues = options?.env
|
|
123
|
-
? applyEnvToValues(values, objSchema, options.env)
|
|
124
|
-
: values;
|
|
125
|
-
const deprecatedMeta = collectDeprecatedPaths(objSchema);
|
|
126
|
-
const leaves = collectLeaves(objSchema);
|
|
127
|
-
const diagnostics = leaves.map((leaf) => classifyField(leaf.path, leaf.schema, effectiveValues, deprecatedMeta));
|
|
128
|
-
const valid = diagnostics.every((d) => d.status !== 'missing' && d.status !== 'invalid');
|
|
129
|
-
return { diagnostics, valid };
|
|
130
|
-
};
|
|
131
|
-
//# sourceMappingURL=doctor.js.map
|
package/dist/doctor.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
|
package/dist/extensions.d.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import type { z } from 'zod';
|
|
2
|
-
/** Metadata shape stored on Zod schemas via `.meta()`. */
|
|
3
|
-
export interface ConfigFieldMeta {
|
|
4
|
-
readonly env?: string;
|
|
5
|
-
readonly secret?: boolean;
|
|
6
|
-
readonly deprecated?: string;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Bind a schema field to an environment variable.
|
|
10
|
-
*
|
|
11
|
-
* Must be called BEFORE `.default()`, `.optional()`, or other transforms
|
|
12
|
-
* so that the metadata lives on the inner type where `collectConfigMeta`
|
|
13
|
-
* can find it by unwrapping wrappers.
|
|
14
|
-
*/
|
|
15
|
-
export declare const env: <T extends z.ZodType>(schema: T, varName: string) => T;
|
|
16
|
-
/**
|
|
17
|
-
* Mark a schema field as sensitive. Redacted in survey, explain, and logs.
|
|
18
|
-
*
|
|
19
|
-
* Must be called BEFORE `.default()`, `.optional()`, or other transforms.
|
|
20
|
-
*/
|
|
21
|
-
export declare const secret: <T extends z.ZodType>(schema: T) => T;
|
|
22
|
-
/**
|
|
23
|
-
* Mark a schema field as deprecated with migration guidance.
|
|
24
|
-
*
|
|
25
|
-
* Stores **two** meta keys: `deprecated: true` and `deprecationMessage: string`.
|
|
26
|
-
* This indirection exists because Zod 4's `GlobalMeta` types `deprecated` as
|
|
27
|
-
* `boolean | undefined` — there is no way to attach a migration message to the
|
|
28
|
-
* standard key. We set `deprecated: true` so Zod-native tooling (schema
|
|
29
|
-
* serializers, OpenAPI generators) recognises the field as deprecated, and store
|
|
30
|
-
* the human-readable message under `deprecationMessage` for our own
|
|
31
|
-
* `collectConfigMeta` / survey / explain trailheads.
|
|
32
|
-
*
|
|
33
|
-
* Must be called BEFORE `.default()`, `.optional()`, or other transforms
|
|
34
|
-
* so that the metadata lives on the inner type where `collectConfigMeta`
|
|
35
|
-
* can find it by unwrapping wrappers.
|
|
36
|
-
*/
|
|
37
|
-
export declare const deprecated: <T extends z.ZodType>(schema: T, message: string) => T;
|
|
38
|
-
//# sourceMappingURL=extensions.d.ts.map
|
package/dist/extensions.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"extensions.d.ts","sourceRoot":"","sources":["../src/extensions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,0DAA0D;AAC1D,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,GAAG,GAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,MAAM,KAAG,CAChB,CAAC;AAEvD;;;;GAIG;AACH,eAAO,MAAM,MAAM,GAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAG,CACF,CAAC;AAEvD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAC5C,QAAQ,CAAC,EACT,SAAS,MAAM,KACd,CAKM,CAAC"}
|