@skmtc/core 0.16.3 → 0.18.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/context/GenerateContext.d.ts +3 -3
- package/esm/context/GenerateContext.d.ts.map +1 -1
- package/esm/context/GenerateContext.js +45 -32
- package/esm/context/ParseContext.d.ts +16 -0
- package/esm/context/ParseContext.d.ts.map +1 -1
- package/esm/context/ParseContext.js +16 -0
- package/esm/dsl/model/ModelDriver.d.ts.map +1 -1
- package/esm/dsl/model/ModelDriver.js +29 -0
- package/esm/dsl/model/toModelEntry.d.ts +9 -3
- package/esm/dsl/model/toModelEntry.d.ts.map +1 -1
- package/esm/dsl/model/toModelEntry.js +29 -1
- package/esm/dsl/model/toModelProjectionBase.d.ts +16 -3
- package/esm/dsl/model/toModelProjectionBase.d.ts.map +1 -1
- package/esm/dsl/model/toModelProjectionBase.js +3 -3
- package/esm/dsl/model/types.d.ts +46 -0
- package/esm/dsl/model/types.d.ts.map +1 -1
- package/esm/dsl/operation/gql/types.d.ts +6 -1
- package/esm/dsl/operation/gql/types.d.ts.map +1 -1
- package/esm/dsl/operation/oas/types.d.ts +6 -1
- package/esm/dsl/operation/oas/types.d.ts.map +1 -1
- package/esm/enrichments/validateConfig.d.ts +60 -0
- package/esm/enrichments/validateConfig.d.ts.map +1 -0
- package/esm/enrichments/validateConfig.js +176 -0
- package/esm/mod.d.ts +1 -0
- package/esm/mod.d.ts.map +1 -1
- package/esm/mod.js +1 -0
- package/esm/parse/v3-0/_merge-all-of/decompose-union.d.ts.map +1 -1
- package/esm/parse/v3-0/_merge-all-of/decompose-union.js +8 -12
- package/esm/parse/v3-0/_merge-all-of/merge-union.d.ts.map +1 -1
- package/esm/parse/v3-0/_merge-all-of/merge-union.js +0 -8
- package/esm/parse/v3-0/schema/toSchemasV3.d.ts.map +1 -1
- package/esm/parse/v3-0/schema/toSchemasV3.js +8 -0
- package/esm/parse/v3-1/_merge-all-of/decompose-union.d.ts.map +1 -1
- package/esm/parse/v3-1/_merge-all-of/decompose-union.js +8 -12
- package/esm/parse/v3-1/_merge-all-of/merge-union.d.ts.map +1 -1
- package/esm/parse/v3-1/_merge-all-of/merge-union.js +0 -8
- package/esm/parse/v3-1/schema/toSchemasV3.d.ts.map +1 -1
- package/esm/parse/v3-1/schema/toSchemasV3.js +8 -0
- package/esm/types/Settings.d.ts +16 -3
- package/esm/types/Settings.d.ts.map +1 -1
- package/esm/types/Settings.js +19 -13
- package/package.json +1 -1
- package/script/context/GenerateContext.d.ts +3 -3
- package/script/context/GenerateContext.d.ts.map +1 -1
- package/script/context/GenerateContext.js +45 -32
- package/script/context/ParseContext.d.ts +16 -0
- package/script/context/ParseContext.d.ts.map +1 -1
- package/script/context/ParseContext.js +16 -0
- package/script/dsl/model/ModelDriver.d.ts.map +1 -1
- package/script/dsl/model/ModelDriver.js +29 -0
- package/script/dsl/model/toModelEntry.d.ts +9 -3
- package/script/dsl/model/toModelEntry.d.ts.map +1 -1
- package/script/dsl/model/toModelEntry.js +65 -1
- package/script/dsl/model/toModelProjectionBase.d.ts +16 -3
- package/script/dsl/model/toModelProjectionBase.d.ts.map +1 -1
- package/script/dsl/model/toModelProjectionBase.js +3 -3
- package/script/dsl/model/types.d.ts +46 -0
- package/script/dsl/model/types.d.ts.map +1 -1
- package/script/dsl/operation/gql/types.d.ts +6 -1
- package/script/dsl/operation/gql/types.d.ts.map +1 -1
- package/script/dsl/operation/oas/types.d.ts +6 -1
- package/script/dsl/operation/oas/types.d.ts.map +1 -1
- package/script/enrichments/validateConfig.d.ts +60 -0
- package/script/enrichments/validateConfig.d.ts.map +1 -0
- package/script/enrichments/validateConfig.js +213 -0
- package/script/mod.d.ts +1 -0
- package/script/mod.d.ts.map +1 -1
- package/script/mod.js +1 -0
- package/script/parse/v3-0/_merge-all-of/decompose-union.d.ts.map +1 -1
- package/script/parse/v3-0/_merge-all-of/decompose-union.js +8 -12
- package/script/parse/v3-0/_merge-all-of/merge-union.d.ts.map +1 -1
- package/script/parse/v3-0/_merge-all-of/merge-union.js +0 -8
- package/script/parse/v3-0/schema/toSchemasV3.d.ts.map +1 -1
- package/script/parse/v3-0/schema/toSchemasV3.js +8 -0
- package/script/parse/v3-1/_merge-all-of/decompose-union.d.ts.map +1 -1
- package/script/parse/v3-1/_merge-all-of/decompose-union.js +8 -12
- package/script/parse/v3-1/_merge-all-of/merge-union.d.ts.map +1 -1
- package/script/parse/v3-1/_merge-all-of/merge-union.js +0 -8
- package/script/parse/v3-1/schema/toSchemasV3.d.ts.map +1 -1
- package/script/parse/v3-1/schema/toSchemasV3.js +8 -0
- package/script/types/Settings.d.ts +16 -3
- package/script/types/Settings.d.ts.map +1 -1
- package/script/types/Settings.js +16 -10
|
@@ -133,7 +133,12 @@ export type OasOperationConfig<EnrichmentType = undefined> = {
|
|
|
133
133
|
type: 'oasOperation';
|
|
134
134
|
transform: ({ context, operation, variant }: TransformOasOperationArgs) => void;
|
|
135
135
|
toEnrichmentSchema: () => v.GenericSchema<EnrichmentType>;
|
|
136
|
-
|
|
136
|
+
/**
|
|
137
|
+
* Optional capability gate, evaluated before `include` / `skip`. Absent →
|
|
138
|
+
* treated as `() => true` (every operation supported). `toOasOperationEntry`
|
|
139
|
+
* defaults it for built configs; a hand-constructed config may omit it.
|
|
140
|
+
*/
|
|
141
|
+
isSupported?: ({ context, operation }: IsSupportedOasOperationArgs) => boolean;
|
|
137
142
|
/**
|
|
138
143
|
* Optional: compute the DEFAULT enrichment values for an operation from its
|
|
139
144
|
* schema — the seed the CMS persists and the user then edits. The pipeline
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/dsl/operation/oas/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/dsl/operation/oas/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { type GeneratorEnrichments } from '../types/Enrichments.js';
|
|
2
|
+
import type { EnrichmentSource } from './toEnrichmentDescriptor.js';
|
|
3
|
+
/**
|
|
4
|
+
* Which of the three enrichment scopes a validation issue belongs to.
|
|
5
|
+
* Mirrors the `{ subject, generator, stack }` umbrella members.
|
|
6
|
+
*/
|
|
7
|
+
export type EnrichmentValidationScope = 'subject' | 'generator' | 'stack';
|
|
8
|
+
/**
|
|
9
|
+
* One enrichment value that fails its generator's Valibot enrichment
|
|
10
|
+
* schema — the authoritative validation verdict. Produced by
|
|
11
|
+
* {@link validateConfig}; the routing fields locate the offending leaf in
|
|
12
|
+
* `client.json#settings.enrichments`:
|
|
13
|
+
*
|
|
14
|
+
* - **operation subject** — `subject` = path, `method` = HTTP method
|
|
15
|
+
* - **model subject** — `subject` = refName (no `method`)
|
|
16
|
+
* - **gql operation subject** — `subject` = field name, `method` = root kind
|
|
17
|
+
* - **generator** run-constant — `scope: 'generator'` (no subject routing)
|
|
18
|
+
* - **stack** run-constant — `scope: 'stack'` (no subject routing)
|
|
19
|
+
*
|
|
20
|
+
* `field` is the dotted path to the offending key *within* the leaf
|
|
21
|
+
* (absent when the whole leaf is the wrong shape).
|
|
22
|
+
*/
|
|
23
|
+
export type EnrichmentValidationIssue = {
|
|
24
|
+
generator: string;
|
|
25
|
+
scope: EnrichmentValidationScope;
|
|
26
|
+
subject?: string;
|
|
27
|
+
method?: string;
|
|
28
|
+
variant?: string;
|
|
29
|
+
field?: string;
|
|
30
|
+
message: string;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* The single enrichment-validation authority. Validates every enrichment
|
|
34
|
+
* value in `enrichments` against its owning generator's Valibot enrichment
|
|
35
|
+
* schema (`toEnrichmentSchema`) — composed across the supplied generator
|
|
36
|
+
* `sources` — and returns the flat list of value errors. This is the same
|
|
37
|
+
* Valibot that the engine parses at generate time; `validateConfig` exposes
|
|
38
|
+
* it as a standalone, **documentless** check (no OpenAPI/SDL needed — only
|
|
39
|
+
* the values and the schemas), usable wherever a verdict is needed:
|
|
40
|
+
* pre-persist, CLI push, schema-drift migration, and the Publish gate.
|
|
41
|
+
*
|
|
42
|
+
* Scope of this check (value validity only):
|
|
43
|
+
* - **catches** wrong-typed / missing-required / failed-refinement values
|
|
44
|
+
* against the current schema, and a generator configured but absent from
|
|
45
|
+
* the stack (`scope: 'generator'`, "not present in the stack").
|
|
46
|
+
* - **does not** flag unknown *fields* — Valibot's `v.object` strips
|
|
47
|
+
* unknown keys rather than erroring. Field-level referential drift ("this
|
|
48
|
+
* key is no longer in the schema") is the descriptor referential check's
|
|
49
|
+
* job, not this one.
|
|
50
|
+
* - **does not** resolve subjects against a document — subject *existence*
|
|
51
|
+
* (does this path/refName exist) needs the schema document and is the
|
|
52
|
+
* caller's concern.
|
|
53
|
+
*
|
|
54
|
+
* `sources` mirrors {@link toEnrichmentDescriptor}'s input: pass
|
|
55
|
+
* `Object.values(toGeneratorConfigMap())`. The walk is decoupled from
|
|
56
|
+
* `GeneratorConfig` via {@link EnrichmentSource} so tests can pass plain
|
|
57
|
+
* entry-like objects.
|
|
58
|
+
*/
|
|
59
|
+
export declare const validateConfig: (enrichments: GeneratorEnrichments | undefined, sources: readonly EnrichmentSource[]) => EnrichmentValidationIssue[];
|
|
60
|
+
//# sourceMappingURL=validateConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateConfig.d.ts","sourceRoot":"","sources":["../../src/enrichments/validateConfig.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,oBAAoB,EAC1B,MAAM,yBAAyB,CAAA;AAChC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAEnE;;;GAGG;AACH,MAAM,MAAM,yBAAyB,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAA;AAEzE;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,yBAAyB,CAAA;IAChC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAkID;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,cAAc,GACzB,aAAa,oBAAoB,GAAG,SAAS,EAC7C,SAAS,SAAS,gBAAgB,EAAE,KACnC,yBAAyB,EA6C3B,CAAA"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import * as v from 'valibot';
|
|
2
|
+
import { GENERATOR_ENRICHMENT_KEY, STACK_ENRICHMENT_KEY, isReservedEnrichmentKey } from '../types/Enrichments.js';
|
|
3
|
+
const isRecord = (input) => typeof input === 'object' && input !== null && !Array.isArray(input);
|
|
4
|
+
const firstKey = (path) => path && path.length > 0 && path[0].key !== undefined ? String(path[0].key) : undefined;
|
|
5
|
+
const fieldPath = (path) => path && path.length > 1
|
|
6
|
+
? path
|
|
7
|
+
.slice(1)
|
|
8
|
+
.map(segment => String(segment.key))
|
|
9
|
+
.join('.')
|
|
10
|
+
: undefined;
|
|
11
|
+
/**
|
|
12
|
+
* Collect every `{ subject, method?, variant, values }` leaf from a
|
|
13
|
+
* generator's enrichment slot, walking the routing depth its **kind**
|
|
14
|
+
* dictates — model (`refName → variant`), oas operation
|
|
15
|
+
* (`path → method → variant`), gql operation
|
|
16
|
+
* (`rootKind → fieldName → variant`). Because the kind is read from the
|
|
17
|
+
* generator entry, operation-vs-model is known authoritatively — there is
|
|
18
|
+
* no `'main' in value` shape-guessing. Reserved keys (`_generator`) are
|
|
19
|
+
* skipped; malformed nodes are skipped (they surface elsewhere, never here
|
|
20
|
+
* as a value error).
|
|
21
|
+
*/
|
|
22
|
+
const collectSubjectLeaves = (type, slot) => {
|
|
23
|
+
const leaves = [];
|
|
24
|
+
for (const [subjectKey, subjectValue] of Object.entries(slot)) {
|
|
25
|
+
if (isReservedEnrichmentKey(subjectKey))
|
|
26
|
+
continue;
|
|
27
|
+
if (!isRecord(subjectValue))
|
|
28
|
+
continue;
|
|
29
|
+
switch (type) {
|
|
30
|
+
case 'model': {
|
|
31
|
+
// refName → { variant: values }
|
|
32
|
+
for (const [variant, values] of Object.entries(subjectValue)) {
|
|
33
|
+
leaves.push({ subject: subjectKey, variant, values });
|
|
34
|
+
}
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
case 'oasOperation': {
|
|
38
|
+
// path → { method: { variant: values } }
|
|
39
|
+
for (const [method, variants] of Object.entries(subjectValue)) {
|
|
40
|
+
if (!isRecord(variants))
|
|
41
|
+
continue;
|
|
42
|
+
for (const [variant, values] of Object.entries(variants)) {
|
|
43
|
+
leaves.push({ subject: subjectKey, method, variant, values });
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
case 'webhook': {
|
|
49
|
+
// name → { method: { variant: values } }
|
|
50
|
+
for (const [method, variants] of Object.entries(subjectValue)) {
|
|
51
|
+
if (!isRecord(variants))
|
|
52
|
+
continue;
|
|
53
|
+
for (const [variant, values] of Object.entries(variants)) {
|
|
54
|
+
leaves.push({ subject: subjectKey, method, variant, values });
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
case 'gqlOperation': {
|
|
60
|
+
// rootKind → { fieldName: { variant: values } }
|
|
61
|
+
for (const [fieldName, variants] of Object.entries(subjectValue)) {
|
|
62
|
+
if (!isRecord(variants))
|
|
63
|
+
continue;
|
|
64
|
+
for (const [variant, values] of Object.entries(variants)) {
|
|
65
|
+
leaves.push({ subject: fieldName, method: subjectKey, variant, values });
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
default: {
|
|
71
|
+
const _exhaustive = type;
|
|
72
|
+
throw new Error(`Unhandled generator type: ${String(_exhaustive)}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return leaves;
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Validate one scope's value against the generator's composite umbrella
|
|
80
|
+
* schema, reporting only issues that belong to that scope. The other two
|
|
81
|
+
* scopes are passed `undefined` and any issues they raise are filtered out,
|
|
82
|
+
* so each scope is validated in isolation without duplicating run-constant
|
|
83
|
+
* errors across every subject. Mirrors generate-time
|
|
84
|
+
* `v.parse(toEnrichmentSchema(), { subject, generator, stack })`, swapping
|
|
85
|
+
* `parse` for `safeParse` to collect rather than throw.
|
|
86
|
+
*/
|
|
87
|
+
const parseScope = (schema, scope, value, tag) => {
|
|
88
|
+
const raw = {
|
|
89
|
+
subject: undefined,
|
|
90
|
+
generator: undefined,
|
|
91
|
+
stack: undefined
|
|
92
|
+
};
|
|
93
|
+
raw[scope] = value;
|
|
94
|
+
const result = v.safeParse(schema, raw);
|
|
95
|
+
if (result.success)
|
|
96
|
+
return [];
|
|
97
|
+
return result.issues
|
|
98
|
+
.filter(issue => firstKey(issue.path) === scope)
|
|
99
|
+
.map(issue => {
|
|
100
|
+
const field = fieldPath(issue.path);
|
|
101
|
+
return {
|
|
102
|
+
...tag,
|
|
103
|
+
scope,
|
|
104
|
+
...(field !== undefined ? { field } : {}),
|
|
105
|
+
message: issue.message
|
|
106
|
+
};
|
|
107
|
+
});
|
|
108
|
+
};
|
|
109
|
+
/**
|
|
110
|
+
* The single enrichment-validation authority. Validates every enrichment
|
|
111
|
+
* value in `enrichments` against its owning generator's Valibot enrichment
|
|
112
|
+
* schema (`toEnrichmentSchema`) — composed across the supplied generator
|
|
113
|
+
* `sources` — and returns the flat list of value errors. This is the same
|
|
114
|
+
* Valibot that the engine parses at generate time; `validateConfig` exposes
|
|
115
|
+
* it as a standalone, **documentless** check (no OpenAPI/SDL needed — only
|
|
116
|
+
* the values and the schemas), usable wherever a verdict is needed:
|
|
117
|
+
* pre-persist, CLI push, schema-drift migration, and the Publish gate.
|
|
118
|
+
*
|
|
119
|
+
* Scope of this check (value validity only):
|
|
120
|
+
* - **catches** wrong-typed / missing-required / failed-refinement values
|
|
121
|
+
* against the current schema, and a generator configured but absent from
|
|
122
|
+
* the stack (`scope: 'generator'`, "not present in the stack").
|
|
123
|
+
* - **does not** flag unknown *fields* — Valibot's `v.object` strips
|
|
124
|
+
* unknown keys rather than erroring. Field-level referential drift ("this
|
|
125
|
+
* key is no longer in the schema") is the descriptor referential check's
|
|
126
|
+
* job, not this one.
|
|
127
|
+
* - **does not** resolve subjects against a document — subject *existence*
|
|
128
|
+
* (does this path/refName exist) needs the schema document and is the
|
|
129
|
+
* caller's concern.
|
|
130
|
+
*
|
|
131
|
+
* `sources` mirrors {@link toEnrichmentDescriptor}'s input: pass
|
|
132
|
+
* `Object.values(toGeneratorConfigMap())`. The walk is decoupled from
|
|
133
|
+
* `GeneratorConfig` via {@link EnrichmentSource} so tests can pass plain
|
|
134
|
+
* entry-like objects.
|
|
135
|
+
*/
|
|
136
|
+
export const validateConfig = (enrichments, sources) => {
|
|
137
|
+
if (!isRecord(enrichments))
|
|
138
|
+
return [];
|
|
139
|
+
const sourceById = new Map(sources.map(source => [source.id, source]));
|
|
140
|
+
const stack = enrichments[STACK_ENRICHMENT_KEY];
|
|
141
|
+
const issues = [];
|
|
142
|
+
for (const [generatorId, slot] of Object.entries(enrichments)) {
|
|
143
|
+
if (generatorId === STACK_ENRICHMENT_KEY)
|
|
144
|
+
continue;
|
|
145
|
+
// Other `_`-prefixed top-level keys are reserved/unknown — the
|
|
146
|
+
// `generatorEnrichments` schema flags those structurally, not here.
|
|
147
|
+
if (isReservedEnrichmentKey(generatorId))
|
|
148
|
+
continue;
|
|
149
|
+
const source = sourceById.get(generatorId);
|
|
150
|
+
if (!source) {
|
|
151
|
+
issues.push({
|
|
152
|
+
generator: generatorId,
|
|
153
|
+
scope: 'generator',
|
|
154
|
+
message: `Generator '${generatorId}' has enrichments configured but is not present in the stack.`
|
|
155
|
+
});
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
const schema = source.toEnrichmentSchema?.();
|
|
159
|
+
if (!schema || !isRecord(slot))
|
|
160
|
+
continue;
|
|
161
|
+
// Run-constant scopes — validated once per generator (each generator's
|
|
162
|
+
// umbrella declares its own `generator` / `stack` member shape).
|
|
163
|
+
issues.push(...parseScope(schema, 'generator', slot[GENERATOR_ENRICHMENT_KEY], { generator: generatorId }));
|
|
164
|
+
issues.push(...parseScope(schema, 'stack', stack, { generator: generatorId }));
|
|
165
|
+
// Subject scope — one parse per (subject, variant) leaf.
|
|
166
|
+
for (const leaf of collectSubjectLeaves(source.type, slot)) {
|
|
167
|
+
issues.push(...parseScope(schema, 'subject', leaf.values, {
|
|
168
|
+
generator: generatorId,
|
|
169
|
+
subject: leaf.subject,
|
|
170
|
+
...(leaf.method !== undefined ? { method: leaf.method } : {}),
|
|
171
|
+
variant: leaf.variant
|
|
172
|
+
}));
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return issues;
|
|
176
|
+
};
|
package/esm/mod.d.ts
CHANGED
|
@@ -192,6 +192,7 @@ export * from './types/Modifiers.js';
|
|
|
192
192
|
export * from './types/ModuleExport.js';
|
|
193
193
|
export * from './types/AccessorPath.js';
|
|
194
194
|
export * from './enrichments/toEnrichmentDescriptor.js';
|
|
195
|
+
export * from './enrichments/validateConfig.js';
|
|
195
196
|
export * from './enrichments/readEnrichments.js';
|
|
196
197
|
export * from './types/Preview.js';
|
|
197
198
|
export * from './types/RefName.js';
|
package/esm/mod.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AACH,OAAO,qBAAqB,CAAC;AAG7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,2BAA2B,CAAA;AACzC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,eAAe,CAAA;AAC7B,cAAc,0BAA0B,CAAA;AACxC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,cAAc,mBAAmB,CAAA;AACjC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,sCAAsC,CAAA;AACpD,cAAc,6BAA6B,CAAA;AAC3C,cAAc,sBAAsB,CAAA;AACpC,cAAc,2CAA2C,CAAA;AACzD,cAAc,qDAAqD,CAAA;AACnE,cAAc,4CAA4C,CAAA;AAC1D,cAAc,8BAA8B,CAAA;AAC5C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,0CAA0C,CAAA;AACxD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,wBAAwB,CAAA;AACtC,cAAc,2CAA2C,CAAA;AACzD,cAAc,qDAAqD,CAAA;AACnE,cAAc,4CAA4C,CAAA;AAC1D,cAAc,8BAA8B,CAAA;AAC5C,cAAc,qBAAqB,CAAA;AACnC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,2BAA2B,CAAA;AACzC,cAAc,sBAAsB,CAAA;AACpC,cAAc,yBAAyB,CAAA;AACvC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AACpC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,qCAAqC,CAAA;AACnD,cAAc,0BAA0B,CAAA;AACxC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,yBAAyB,CAAA;AACvC,cAAc,sBAAsB,CAAA;AACpC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,0BAA0B,CAAA;AACxC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,mCAAmC,CAAA;AACjD,cAAc,gCAAgC,CAAA;AAC9C,cAAc,0BAA0B,CAAA;AACxC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,sCAAsC,CAAA;AACpD,cAAc,4CAA4C,CAAA;AAC1D,cAAc,4BAA4B,CAAA;AAC1C,cAAc,0BAA0B,CAAA;AACxC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAClC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,0BAA0B,CAAA;AACxC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,mCAAmC,CAAA;AACjD,cAAc,wBAAwB,CAAA;AACtC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,wBAAwB,CAAA;AACtC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,0BAA0B,CAAA;AACxC,cAAc,sCAAsC,CAAA;AACpD,cAAc,8BAA8B,CAAA;AAC5C,cAAc,oCAAoC,CAAA;AAClD,cAAc,4BAA4B,CAAA;AAC1C,cAAc,kBAAkB,CAAA;AAChC,cAAc,wBAAwB,CAAA;AACtC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,kCAAkC,CAAA;AAChD,cAAc,4BAA4B,CAAA;AAC1C,cAAc,wBAAwB,CAAA;AACtC,cAAc,oCAAoC,CAAA;AAClD,cAAc,kDAAkD,CAAA;AAChE,cAAc,yCAAyC,CAAA;AACvD,cAAc,wBAAwB,CAAA;AACtC,cAAc,wCAAwC,CAAA;AACtD,cAAc,wBAAwB,CAAA;AACtC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,kBAAkB,CAAA;AAChC,cAAc,wBAAwB,CAAA;AACtC,cAAc,sBAAsB,CAAA;AACpC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,0BAA0B,CAAA;AACxC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,mCAAmC,CAAA;AACjD,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,8BAA8B,CAAA;AAC5C,mBAAmB,8BAA8B,CAAA;AACjD,cAAc,+BAA+B,CAAA;AAC7C,mBAAmB,+BAA+B,CAAA;AAClD,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,wBAAwB,CAAA;AACtC,cAAc,yBAAyB,CAAA;AACvC,cAAc,wBAAwB,CAAA;AACtC,cAAc,0BAA0B,CAAA;AACxC,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,sBAAsB,CAAA;AACpC,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,yCAAyC,CAAA;AACvD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,kCAAkC,CAAA;AAChD,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yCAAyC,CAAA;AACvD,cAAc,+BAA+B,CAAA;AAC7C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,yBAAyB,CAAA"}
|
package/esm/mod.js
CHANGED
|
@@ -190,6 +190,7 @@ export * from './types/Modifiers.js';
|
|
|
190
190
|
export * from './types/ModuleExport.js';
|
|
191
191
|
export * from './types/AccessorPath.js';
|
|
192
192
|
export * from './enrichments/toEnrichmentDescriptor.js';
|
|
193
|
+
export * from './enrichments/validateConfig.js';
|
|
193
194
|
export * from './enrichments/readEnrichments.js';
|
|
194
195
|
export * from './types/Preview.js';
|
|
195
196
|
export * from './types/RefName.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decompose-union.d.ts","sourceRoot":"","sources":["../../../../src/parse/v3-0/_merge-all-of/decompose-union.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAQ/D,KAAK,kBAAkB,GAAG;IACxB,MAAM,EAAE,YAAY,CAAA;IACpB,SAAS,EAAE,OAAO,GAAG,OAAO,CAAA;CAC7B,CAAA;AAED,KAAK,oBAAoB,GAAG;IAC1B,cAAc,EAAE,YAAY,CAAA;IAC5B,UAAU,EAAE,CAAC,YAAY,GAAG,eAAe,CAAC,EAAE,CAAA;IAC9C,aAAa,EAAE,YAAY,CAAA;CAC5B,CAAA;AAGD,eAAO,MAAM,cAAc,GAAI,uBAAuB,kBAAkB,KAAG,
|
|
1
|
+
{"version":3,"file":"decompose-union.d.ts","sourceRoot":"","sources":["../../../../src/parse/v3-0/_merge-all-of/decompose-union.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAQ/D,KAAK,kBAAkB,GAAG;IACxB,MAAM,EAAE,YAAY,CAAA;IACpB,SAAS,EAAE,OAAO,GAAG,OAAO,CAAA;CAC7B,CAAA;AAED,KAAK,oBAAoB,GAAG;IAC1B,cAAc,EAAE,YAAY,CAAA;IAC5B,UAAU,EAAE,CAAC,YAAY,GAAG,eAAe,CAAC,EAAE,CAAA;IAC9C,aAAa,EAAE,YAAY,CAAA;CAC5B,CAAA;AAGD,eAAO,MAAM,cAAc,GAAI,uBAAuB,kBAAkB,KAAG,oBA2C1E,CAAA"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
// Convert a schema object into an array of schemas that can be merged iteratively into a new schema
|
|
2
2
|
export const decomposeUnion = ({ schema, groupType }) => {
|
|
3
3
|
if (!schema[groupType]) {
|
|
4
|
-
console.log('NO GROUP TYPE', JSON.stringify(schema, null, 2));
|
|
5
4
|
return {
|
|
6
5
|
beforeExcluded: {},
|
|
7
6
|
decomposed: [schema],
|
|
@@ -38,15 +37,13 @@ export const decomposeUnion = ({ schema, groupType }) => {
|
|
|
38
37
|
};
|
|
39
38
|
return result;
|
|
40
39
|
};
|
|
41
|
-
//
|
|
42
|
-
// cross-product-merged into each member.
|
|
43
|
-
//
|
|
44
|
-
//
|
|
45
|
-
//
|
|
46
|
-
//
|
|
47
|
-
//
|
|
48
|
-
// for every member and collapses the union to an empty array. TypeScript
|
|
49
|
-
// can't model `not` anyway, so it rides the union wrapper, ignored.
|
|
40
|
+
// Union-level keys: kept on the union (via beforeExcluded/afterExcluded)
|
|
41
|
+
// rather than cross-product-merged into each member. Merging a metadata key
|
|
42
|
+
// *into* a member would resolve `$ref` members (to merge it in), losing their
|
|
43
|
+
// names — `toUnion` already captures these on the union itself.
|
|
44
|
+
// (`not` is deliberately NOT excluded here — it has no faithful TypeScript
|
|
45
|
+
// representation, so a schema using it is refused upstream in `toSchemaV3`
|
|
46
|
+
// rather than silently dropped from the union.)
|
|
50
47
|
const excludedProperties = [
|
|
51
48
|
'discriminator',
|
|
52
49
|
'default',
|
|
@@ -57,8 +54,7 @@ const excludedProperties = [
|
|
|
57
54
|
'examples',
|
|
58
55
|
'readOnly',
|
|
59
56
|
'writeOnly',
|
|
60
|
-
'deprecated'
|
|
61
|
-
'not'
|
|
57
|
+
'deprecated'
|
|
62
58
|
];
|
|
63
59
|
const exclude = (entries) => {
|
|
64
60
|
return entries.reduce((acc, [key, value]) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-union.d.ts","sourceRoot":"","sources":["../../../../src/parse/v3-0/_merge-all-of/merge-union.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAI3E,KAAK,cAAc,GAAG;IACpB,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE,QAAQ,CAAA;IAChB,SAAS,EAAE,OAAO,GAAG,OAAO,CAAA;CAC7B,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,+BAA+B,cAAc,KAAG,iBAiC1E,CAAA;AAED,KAAK,qBAAqB,GAAG;IAC3B,KAAK,EAAE,YAAY,CAAA;IACnB,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE,QAAQ,CAAA;IAChB,SAAS,EAAE,OAAO,GAAG,OAAO,CAAA;CAC7B,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,sCAK/B,qBAAqB,KAAG,
|
|
1
|
+
{"version":3,"file":"merge-union.d.ts","sourceRoot":"","sources":["../../../../src/parse/v3-0/_merge-all-of/merge-union.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAI3E,KAAK,cAAc,GAAG;IACpB,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE,QAAQ,CAAA;IAChB,SAAS,EAAE,OAAO,GAAG,OAAO,CAAA;CAC7B,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,+BAA+B,cAAc,KAAG,iBAiC1E,CAAA;AAED,KAAK,qBAAqB,GAAG;IAC3B,KAAK,EAAE,YAAY,CAAA;IACnB,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE,QAAQ,CAAA;IAChB,SAAS,EAAE,OAAO,GAAG,OAAO,CAAA;CAC7B,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,sCAK/B,qBAAqB,KAAG,YAyB1B,CAAA"}
|
|
@@ -42,14 +42,6 @@ export const mergeCrossProduct = ({ first, second, getRef, groupType }) => {
|
|
|
42
42
|
}
|
|
43
43
|
})
|
|
44
44
|
.filter(item => item !== undefined);
|
|
45
|
-
// Defensive floor: when both groups are non-empty the cross product is
|
|
46
|
-
// non-empty, so an empty `mergedGroup` means every merge *failed* (an
|
|
47
|
-
// unmergeable constraint in `secondGroup`). Keep the un-merged `firstGroup`
|
|
48
|
-
// rather than collapsing to an empty union. A genuinely empty input union
|
|
49
|
-
// (`anyOf: []` → empty group) is left empty so `toSchemasV3` still throws.
|
|
50
|
-
if (mergedGroup.length === 0 && firstGroup.length > 0 && secondGroup.length > 0) {
|
|
51
|
-
return { [groupType]: firstGroup };
|
|
52
|
-
}
|
|
53
45
|
return {
|
|
54
46
|
[groupType]: mergedGroup.flatMap(item => {
|
|
55
47
|
if (!isRef(item) && Array.isArray(item[groupType])) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toSchemasV3.d.ts","sourceRoot":"","sources":["../../../../src/parse/v3-0/schema/toSchemasV3.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAEtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAarD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AAChE,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,eAAe,GAAG,SAAS,CAAC,YAAY,CAAC,CAAA;IAC3E,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,gBAAgB,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,kCAIzB,eAAe,KAAG,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,CAmB/D,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,eAAe,GAAG,SAAS,CAAC,YAAY,CAAC,GAAG,SAAS,CAAA;IACvF,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,gBAAgB,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,kCAIjC,uBAAuB,KAAG,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,SAM3E,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,SAAS,CAAC,eAAe,GAAG,SAAS,CAAC,YAAY,CAAA;IAC1D,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,gBAAgB,CAAA;CAC1B,CAAA;AA0CD,eAAO,MAAM,UAAU,GAAI,iCAIxB,cAAc,KAAG,SAAS,GAAG,MAAM,CAAC,QAAQ,
|
|
1
|
+
{"version":3,"file":"toSchemasV3.d.ts","sourceRoot":"","sources":["../../../../src/parse/v3-0/schema/toSchemasV3.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAEtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAarD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AAChE,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,eAAe,GAAG,SAAS,CAAC,YAAY,CAAC,CAAA;IAC3E,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,gBAAgB,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,kCAIzB,eAAe,KAAG,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,CAmB/D,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,eAAe,GAAG,SAAS,CAAC,YAAY,CAAC,GAAG,SAAS,CAAA;IACvF,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,gBAAgB,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,kCAIjC,uBAAuB,KAAG,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,SAM3E,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,SAAS,CAAC,eAAe,GAAG,SAAS,CAAC,YAAY,CAAA;IAC1D,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,gBAAgB,CAAA;CAC1B,CAAA;AA0CD,eAAO,MAAM,UAAU,GAAI,iCAIxB,cAAc,KAAG,SAAS,GAAG,MAAM,CAAC,QAAQ,CA6P9C,CAAA;AA+CD,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,SAAS,CAAC,eAAe,GAAG,SAAS,CAAC,YAAY,GAAG,SAAS,CAAA;IACtE,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,gBAAgB,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,iCAIhC,sBAAsB,KAAG,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,SAM1D,CAAA"}
|
|
@@ -73,6 +73,14 @@ export const toSchemaV3 = ({ schema, stackTrail, context }) => {
|
|
|
73
73
|
if (isRef(schema)) {
|
|
74
74
|
return toRefV31({ ref: schema, refType: 'schema', stackTrail, context });
|
|
75
75
|
}
|
|
76
|
+
// OpenAPI `not` has no faithful TypeScript representation: a generated type
|
|
77
|
+
// that ignored it would *widen* the contract (accepting shapes the schema
|
|
78
|
+
// forbids). Refuse the schema rather than emit a type that lies. The throw
|
|
79
|
+
// is isolated by `tryParseAt` into an `INVALID_SCHEMA` issue, and consumers
|
|
80
|
+
// of this schema are pruned via `removeErroredItems` (INVALID_DEPENDENCY_REF).
|
|
81
|
+
if ('not' in schema) {
|
|
82
|
+
throw new Error('Schema uses unsupported "not" keyword');
|
|
83
|
+
}
|
|
76
84
|
if ('allOf' in schema && Array.isArray(schema.allOf)) {
|
|
77
85
|
return stackTrail.trace('allOf', st => {
|
|
78
86
|
// A single-member allOf collapses to its sole member — the value must
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decompose-union.d.ts","sourceRoot":"","sources":["../../../../src/parse/v3-1/_merge-all-of/decompose-union.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAQ/D,KAAK,kBAAkB,GAAG;IACxB,MAAM,EAAE,YAAY,CAAA;IACpB,SAAS,EAAE,OAAO,GAAG,OAAO,CAAA;CAC7B,CAAA;AAED,KAAK,oBAAoB,GAAG;IAC1B,cAAc,EAAE,YAAY,CAAA;IAC5B,UAAU,EAAE,CAAC,YAAY,GAAG,eAAe,CAAC,EAAE,CAAA;IAC9C,aAAa,EAAE,YAAY,CAAA;CAC5B,CAAA;AAGD,eAAO,MAAM,cAAc,GAAI,uBAAuB,kBAAkB,KAAG,
|
|
1
|
+
{"version":3,"file":"decompose-union.d.ts","sourceRoot":"","sources":["../../../../src/parse/v3-1/_merge-all-of/decompose-union.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAQ/D,KAAK,kBAAkB,GAAG;IACxB,MAAM,EAAE,YAAY,CAAA;IACpB,SAAS,EAAE,OAAO,GAAG,OAAO,CAAA;CAC7B,CAAA;AAED,KAAK,oBAAoB,GAAG;IAC1B,cAAc,EAAE,YAAY,CAAA;IAC5B,UAAU,EAAE,CAAC,YAAY,GAAG,eAAe,CAAC,EAAE,CAAA;IAC9C,aAAa,EAAE,YAAY,CAAA;CAC5B,CAAA;AAGD,eAAO,MAAM,cAAc,GAAI,uBAAuB,kBAAkB,KAAG,oBA2C1E,CAAA"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
// Convert a schema object into an array of schemas that can be merged iteratively into a new schema
|
|
2
2
|
export const decomposeUnion = ({ schema, groupType }) => {
|
|
3
3
|
if (!schema[groupType]) {
|
|
4
|
-
console.log('NO GROUP TYPE', JSON.stringify(schema, null, 2));
|
|
5
4
|
return {
|
|
6
5
|
beforeExcluded: {},
|
|
7
6
|
decomposed: [schema],
|
|
@@ -38,15 +37,13 @@ export const decomposeUnion = ({ schema, groupType }) => {
|
|
|
38
37
|
};
|
|
39
38
|
return result;
|
|
40
39
|
};
|
|
41
|
-
//
|
|
42
|
-
// cross-product-merged into each member.
|
|
43
|
-
//
|
|
44
|
-
//
|
|
45
|
-
//
|
|
46
|
-
//
|
|
47
|
-
//
|
|
48
|
-
// for every member and collapses the union to an empty array. TypeScript
|
|
49
|
-
// can't model `not` anyway, so it rides the union wrapper, ignored.
|
|
40
|
+
// Union-level keys: kept on the union (via beforeExcluded/afterExcluded)
|
|
41
|
+
// rather than cross-product-merged into each member. Merging a metadata key
|
|
42
|
+
// *into* a member would resolve `$ref` members (to merge it in), losing their
|
|
43
|
+
// names — `toUnion` already captures these on the union itself.
|
|
44
|
+
// (`not` is deliberately NOT excluded here — it has no faithful TypeScript
|
|
45
|
+
// representation, so a schema using it is refused upstream in `toSchemaV3`
|
|
46
|
+
// rather than silently dropped from the union.)
|
|
50
47
|
const excludedProperties = [
|
|
51
48
|
'discriminator',
|
|
52
49
|
'default',
|
|
@@ -57,8 +54,7 @@ const excludedProperties = [
|
|
|
57
54
|
'examples',
|
|
58
55
|
'readOnly',
|
|
59
56
|
'writeOnly',
|
|
60
|
-
'deprecated'
|
|
61
|
-
'not'
|
|
57
|
+
'deprecated'
|
|
62
58
|
];
|
|
63
59
|
const exclude = (entries) => {
|
|
64
60
|
return entries.reduce((acc, [key, value]) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-union.d.ts","sourceRoot":"","sources":["../../../../src/parse/v3-1/_merge-all-of/merge-union.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAI3E,KAAK,cAAc,GAAG;IACpB,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE,QAAQ,CAAA;IAChB,SAAS,EAAE,OAAO,GAAG,OAAO,CAAA;CAC7B,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,+BAA+B,cAAc,KAAG,iBAiC1E,CAAA;AAED,KAAK,qBAAqB,GAAG;IAC3B,KAAK,EAAE,YAAY,CAAA;IACnB,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE,QAAQ,CAAA;IAChB,SAAS,EAAE,OAAO,GAAG,OAAO,CAAA;CAC7B,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,sCAK/B,qBAAqB,KAAG,
|
|
1
|
+
{"version":3,"file":"merge-union.d.ts","sourceRoot":"","sources":["../../../../src/parse/v3-1/_merge-all-of/merge-union.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAI3E,KAAK,cAAc,GAAG;IACpB,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE,QAAQ,CAAA;IAChB,SAAS,EAAE,OAAO,GAAG,OAAO,CAAA;CAC7B,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,+BAA+B,cAAc,KAAG,iBAiC1E,CAAA;AAED,KAAK,qBAAqB,GAAG;IAC3B,KAAK,EAAE,YAAY,CAAA;IACnB,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE,QAAQ,CAAA;IAChB,SAAS,EAAE,OAAO,GAAG,OAAO,CAAA;CAC7B,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,sCAK/B,qBAAqB,KAAG,YAyB1B,CAAA"}
|
|
@@ -42,14 +42,6 @@ export const mergeCrossProduct = ({ first, second, getRef, groupType }) => {
|
|
|
42
42
|
}
|
|
43
43
|
})
|
|
44
44
|
.filter(item => item !== undefined);
|
|
45
|
-
// Defensive floor: when both groups are non-empty the cross product is
|
|
46
|
-
// non-empty, so an empty `mergedGroup` means every merge *failed* (an
|
|
47
|
-
// unmergeable constraint in `secondGroup`). Keep the un-merged `firstGroup`
|
|
48
|
-
// rather than collapsing to an empty union. A genuinely empty input union
|
|
49
|
-
// (`anyOf: []` → empty group) is left empty so `toSchemasV3` still throws.
|
|
50
|
-
if (mergedGroup.length === 0 && firstGroup.length > 0 && secondGroup.length > 0) {
|
|
51
|
-
return { [groupType]: firstGroup };
|
|
52
|
-
}
|
|
53
45
|
return {
|
|
54
46
|
[groupType]: mergedGroup.flatMap(item => {
|
|
55
47
|
if (!isRef(item) && Array.isArray(item[groupType])) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toSchemasV3.d.ts","sourceRoot":"","sources":["../../../../src/parse/v3-1/schema/toSchemasV3.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAEtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAarD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AAChE,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,eAAe,GAAG,SAAS,CAAC,YAAY,CAAC,CAAA;IAC3E,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,gBAAgB,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,kCAIzB,eAAe,KAAG,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,CAmB/D,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,eAAe,GAAG,SAAS,CAAC,YAAY,CAAC,GAAG,SAAS,CAAA;IACvF,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,gBAAgB,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,kCAIjC,uBAAuB,KAAG,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,SAM3E,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,SAAS,CAAC,eAAe,GAAG,SAAS,CAAC,YAAY,CAAA;IAC1D,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,gBAAgB,CAAA;CAC1B,CAAA;AAuPD,eAAO,MAAM,UAAU,GAAI,iCAIxB,cAAc,KAAG,SAAS,GAAG,MAAM,CAAC,QAAQ,
|
|
1
|
+
{"version":3,"file":"toSchemasV3.d.ts","sourceRoot":"","sources":["../../../../src/parse/v3-1/schema/toSchemasV3.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAEtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAarD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AAChE,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,eAAe,GAAG,SAAS,CAAC,YAAY,CAAC,CAAA;IAC3E,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,gBAAgB,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,kCAIzB,eAAe,KAAG,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,CAmB/D,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,eAAe,GAAG,SAAS,CAAC,YAAY,CAAC,GAAG,SAAS,CAAA;IACvF,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,gBAAgB,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,kCAIjC,uBAAuB,KAAG,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,SAM3E,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,SAAS,CAAC,eAAe,GAAG,SAAS,CAAC,YAAY,CAAA;IAC1D,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,gBAAgB,CAAA;CAC1B,CAAA;AAuPD,eAAO,MAAM,UAAU,GAAI,iCAIxB,cAAc,KAAG,SAAS,GAAG,MAAM,CAAC,QAAQ,CA6Q9C,CAAA;AA+CD,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,SAAS,CAAC,eAAe,GAAG,SAAS,CAAC,YAAY,GAAG,SAAS,CAAA;IACtE,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,gBAAgB,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,iCAIhC,sBAAsB,KAAG,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,SAM1D,CAAA"}
|
|
@@ -239,6 +239,14 @@ export const toSchemaV3 = ({ schema, stackTrail, context }) => {
|
|
|
239
239
|
if (isRef(schema)) {
|
|
240
240
|
return toRefV31({ ref: schema, refType: 'schema', stackTrail, context });
|
|
241
241
|
}
|
|
242
|
+
// OpenAPI `not` has no faithful TypeScript representation: a generated type
|
|
243
|
+
// that ignored it would *widen* the contract (accepting shapes the schema
|
|
244
|
+
// forbids). Refuse the schema rather than emit a type that lies. The throw
|
|
245
|
+
// is isolated by `tryParseAt` into an `INVALID_SCHEMA` issue, and consumers
|
|
246
|
+
// of this schema are pruned via `removeErroredItems` (INVALID_DEPENDENCY_REF).
|
|
247
|
+
if ('not' in schema) {
|
|
248
|
+
throw new Error('Schema uses unsupported "not" keyword');
|
|
249
|
+
}
|
|
242
250
|
const normalized = normalizeSchemaShape(schema);
|
|
243
251
|
if (normalized !== schema) {
|
|
244
252
|
return toSchemaV3({ schema: normalized, stackTrail, context });
|
package/esm/types/Settings.d.ts
CHANGED
|
@@ -49,9 +49,9 @@
|
|
|
49
49
|
* @module Settings
|
|
50
50
|
*/
|
|
51
51
|
import "../_dnt.polyfills.js";
|
|
52
|
-
import { type GeneratorEnrichments } from
|
|
53
|
-
import * as v from
|
|
54
|
-
import { type Method } from
|
|
52
|
+
import { type GeneratorEnrichments } from "./Enrichments.js";
|
|
53
|
+
import * as v from "valibot";
|
|
54
|
+
import { type Method } from "./Method.js";
|
|
55
55
|
/**
|
|
56
56
|
* Valibot schema for {@link ModulePackage}.
|
|
57
57
|
*
|
|
@@ -430,6 +430,13 @@ export type ClientSettings = {
|
|
|
430
430
|
* in v1. See {@link AnchorsSettings}.
|
|
431
431
|
*/
|
|
432
432
|
anchors?: AnchorsSettings;
|
|
433
|
+
/**
|
|
434
|
+
* Preview input-matcher discovery directories (project-root relative, e.g.
|
|
435
|
+
* `src/fields`, `src/inputs`). A preview/hub concern: the generation engine
|
|
436
|
+
* ignores it. Declared here so the CLI preserves it when reading `client.json`
|
|
437
|
+
* and carries it through `skmtc push` to the hub.
|
|
438
|
+
*/
|
|
439
|
+
inputDirs?: string[];
|
|
433
440
|
};
|
|
434
441
|
/**
|
|
435
442
|
* Configuration for SKMTC client with optional project identification.
|
|
@@ -442,6 +449,12 @@ export type SkmtcClientConfig = {
|
|
|
442
449
|
serverUrl?: string;
|
|
443
450
|
/** Optional project identifier for organizational contexts */
|
|
444
451
|
projectKey?: string;
|
|
452
|
+
/**
|
|
453
|
+
* skmtc-hub push destination in `@<account>/<slug>` form (the account may be
|
|
454
|
+
* a user or an org) — the `skmtc push` target, analogous to a git remote.
|
|
455
|
+
* Ignored by `skmtc generate`; consumed only by `skmtc push`.
|
|
456
|
+
*/
|
|
457
|
+
project?: string;
|
|
445
458
|
/** Optional schema path or url for OpenAPI schema */
|
|
446
459
|
source?: string;
|
|
447
460
|
/** Client settings for customizing generation behavior */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Settings.d.ts","sourceRoot":"","sources":["../../src/types/Settings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,OAAO,sBAAsB,CAAC;AAG9B,OAAO,
|
|
1
|
+
{"version":3,"file":"Settings.d.ts","sourceRoot":"","sources":["../../src/types/Settings.ts"],"names":[],"mappings":"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"}
|