@skmtc/core 0.0.787 → 0.0.789
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 +95 -0
- package/esm/context/GenerateContext.d.ts.map +1 -1
- package/esm/context/GenerateContext.js +95 -0
- package/esm/context/ParseContext.d.ts +178 -0
- package/esm/context/ParseContext.d.ts.map +1 -1
- package/esm/context/ParseContext.js +108 -0
- package/esm/dsl/Inserted.d.ts +240 -0
- package/esm/dsl/Inserted.d.ts.map +1 -1
- package/esm/dsl/Inserted.js +231 -0
- package/esm/dsl/JsonFile.d.ts +162 -0
- package/esm/dsl/JsonFile.d.ts.map +1 -1
- package/esm/dsl/JsonFile.js +157 -0
- package/esm/helpers/refFns.d.ts +160 -0
- package/esm/helpers/refFns.d.ts.map +1 -1
- package/esm/helpers/refFns.js +156 -0
- package/esm/oas/components/Components.d.ts +252 -2
- package/esm/oas/components/Components.d.ts.map +1 -1
- package/esm/oas/components/Components.js +241 -2
- package/esm/oas/operation/Operation.d.ts +107 -1
- package/esm/oas/operation/Operation.d.ts.map +1 -1
- package/esm/oas/operation/Operation.js +107 -1
- package/esm/oas/ref/Ref.d.ts +86 -0
- package/esm/oas/ref/Ref.d.ts.map +1 -1
- package/esm/oas/ref/Ref.js +86 -0
- package/esm/oas/union/Union.d.ts +119 -5
- package/esm/oas/union/Union.d.ts.map +1 -1
- package/esm/oas/union/Union.js +108 -5
- package/package.json +1 -1
- package/script/context/GenerateContext.d.ts +95 -0
- package/script/context/GenerateContext.d.ts.map +1 -1
- package/script/context/GenerateContext.js +95 -0
- package/script/context/ParseContext.d.ts +178 -0
- package/script/context/ParseContext.d.ts.map +1 -1
- package/script/context/ParseContext.js +108 -0
- package/script/dsl/Inserted.d.ts +240 -0
- package/script/dsl/Inserted.d.ts.map +1 -1
- package/script/dsl/Inserted.js +231 -0
- package/script/dsl/JsonFile.d.ts +162 -0
- package/script/dsl/JsonFile.d.ts.map +1 -1
- package/script/dsl/JsonFile.js +157 -0
- package/script/helpers/refFns.d.ts +160 -0
- package/script/helpers/refFns.d.ts.map +1 -1
- package/script/helpers/refFns.js +156 -0
- package/script/oas/components/Components.d.ts +252 -2
- package/script/oas/components/Components.d.ts.map +1 -1
- package/script/oas/components/Components.js +241 -2
- package/script/oas/operation/Operation.d.ts +107 -1
- package/script/oas/operation/Operation.d.ts.map +1 -1
- package/script/oas/operation/Operation.js +107 -1
- package/script/oas/ref/Ref.d.ts +86 -0
- package/script/oas/ref/Ref.d.ts.map +1 -1
- package/script/oas/ref/Ref.js +86 -0
- package/script/oas/union/Union.d.ts +119 -5
- package/script/oas/union/Union.d.ts.map +1 -1
- package/script/oas/union/Union.js +108 -5
|
@@ -114,6 +114,101 @@ type GenerateResult = {
|
|
|
114
114
|
previews: Record<string, Record<string, Preview>>;
|
|
115
115
|
mappings: Record<string, Record<string, Mapping>>;
|
|
116
116
|
};
|
|
117
|
+
/**
|
|
118
|
+
* The generation context for the second phase of the SKMTC transformation pipeline.
|
|
119
|
+
*
|
|
120
|
+
* `GenerateContext` manages the transformation of parsed OAS (OpenAPI Schema) objects
|
|
121
|
+
* into code artifacts using pluggable generators. It provides APIs for model and operation
|
|
122
|
+
* generation, file management, dependency tracking, and artifact registration.
|
|
123
|
+
*
|
|
124
|
+
* ## Key Responsibilities
|
|
125
|
+
*
|
|
126
|
+
* - **Generator Orchestration**: Executes pluggable model and operation generators
|
|
127
|
+
* - **Schema Processing**: Provides utilities for working with OAS schemas and references
|
|
128
|
+
* - **File Management**: Handles file creation, imports, exports, and dependencies
|
|
129
|
+
* - **Artifact Registration**: Collects generated definitions and files for rendering
|
|
130
|
+
* - **Type System Integration**: Bridges OAS types with generator-specific type systems
|
|
131
|
+
* - **Settings Management**: Handles skipping logic and client customizations
|
|
132
|
+
*
|
|
133
|
+
* ## Generator Integration
|
|
134
|
+
*
|
|
135
|
+
* The context works with two main types of generators:
|
|
136
|
+
* - **Model Generators**: Transform schema definitions into type definitions
|
|
137
|
+
* - **Operation Generators**: Transform API operations into client functions
|
|
138
|
+
*
|
|
139
|
+
* @example Basic usage in a model generator
|
|
140
|
+
* ```typescript
|
|
141
|
+
* import { ModelBase } from '@skmtc/core';
|
|
142
|
+
*
|
|
143
|
+
* class TypeScriptInterface extends ModelBase {
|
|
144
|
+
* generate(): Definition {
|
|
145
|
+
* const schema = this.context.getSchema(this.refName);
|
|
146
|
+
*
|
|
147
|
+
* return new Definition({
|
|
148
|
+
* context: this.context,
|
|
149
|
+
* identifier: Identifier.createType(this.refName),
|
|
150
|
+
* description: schema.description,
|
|
151
|
+
* value: {
|
|
152
|
+
* generatorKey: this.generatorKey,
|
|
153
|
+
* content: this.generateInterfaceBody(schema)
|
|
154
|
+
* }
|
|
155
|
+
* });
|
|
156
|
+
* }
|
|
157
|
+
* }
|
|
158
|
+
* ```
|
|
159
|
+
*
|
|
160
|
+
* @example Operation generator usage
|
|
161
|
+
* ```typescript
|
|
162
|
+
* class ApiClientGenerator extends OperationBase {
|
|
163
|
+
* generate(): Definition {
|
|
164
|
+
* const operation = this.context.getOperation(this.path, this.method);
|
|
165
|
+
*
|
|
166
|
+
* const functionName = this.context.createOperationName(this.path, this.method);
|
|
167
|
+
*
|
|
168
|
+
* return new Definition({
|
|
169
|
+
* context: this.context,
|
|
170
|
+
* identifier: Identifier.createVariable(functionName),
|
|
171
|
+
* value: {
|
|
172
|
+
* generatorKey: this.generatorKey,
|
|
173
|
+
* content: this.generateClientFunction(operation)
|
|
174
|
+
* }
|
|
175
|
+
* });
|
|
176
|
+
* }
|
|
177
|
+
* }
|
|
178
|
+
* ```
|
|
179
|
+
*
|
|
180
|
+
* @example Schema and type system integration
|
|
181
|
+
* ```typescript
|
|
182
|
+
* class MyGenerator extends ModelBase {
|
|
183
|
+
* generate(): Definition {
|
|
184
|
+
* const schema = this.context.getSchema(this.refName);
|
|
185
|
+
*
|
|
186
|
+
* // Transform schema using type system
|
|
187
|
+
* const typeOutput = this.context.transformSchema(schema, {
|
|
188
|
+
* stringType: 'string',
|
|
189
|
+
* numberType: 'number',
|
|
190
|
+
* arrayType: (items) => `Array<${items}>`
|
|
191
|
+
* });
|
|
192
|
+
*
|
|
193
|
+
* // Register dependencies
|
|
194
|
+
* if (schema.hasReferences()) {
|
|
195
|
+
* this.context.addImportsToFile('./models/types.ts', {
|
|
196
|
+
* './common': ['BaseModel']
|
|
197
|
+
* });
|
|
198
|
+
* }
|
|
199
|
+
*
|
|
200
|
+
* return new Definition({
|
|
201
|
+
* context: this.context,
|
|
202
|
+
* identifier: Identifier.createType(this.refName),
|
|
203
|
+
* value: {
|
|
204
|
+
* generatorKey: this.generatorKey,
|
|
205
|
+
* content: typeOutput.content
|
|
206
|
+
* }
|
|
207
|
+
* });
|
|
208
|
+
* }
|
|
209
|
+
* }
|
|
210
|
+
* ```
|
|
211
|
+
*/
|
|
117
212
|
export declare class GenerateContext {
|
|
118
213
|
#private;
|
|
119
214
|
oasDocument: OasDocument;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GenerateContext.d.ts","sourceRoot":"","sources":["../../src/context/GenerateContext.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE/C,OAAO,KAAK,EAAE,cAAc,EAAyC,MAAM,sBAAsB,CAAA;AACjG,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EAAmB,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AACrF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AACjE,OAAO,KAAK,EAAe,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAGzE,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAElD,OAAO,KAAK,KAAK,GAAG,MAAM,yCAAyC,CAAA;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,UAAU,EACV,gBAAgB,EACjB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAE7C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAA;AACvE,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EACX,OAAO,EAGP,OAAO,EACR,MAAM,qBAAqB,CAAA;AAE5B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAElD,KAAK,eAAe,GAAG;IACrB,WAAW,EAAE,WAAW,CAAA;IACxB,QAAQ,EAAE,cAAc,GAAG,SAAS,CAAA;IACpC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAA;IAClB,UAAU,EAAE,UAAU,CAAA;IACtB,oBAAoB,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAA;IAClD,oBAAoB,EAAE,CAAC,cAAc,GAAG,SAAS,OAAO,sBAAsB,CAAC,cAAc,CAAC,CAAA;CAC/F,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,eAAe,EAAE,MAAM,CAAA;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,eAAe,EAAE,MAAM,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAA;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAA;IACxC,WAAW,CAAC,EAAE,CAAC,UAAU,GAAG,SAAS,CAAC,EAAE,CAAA;CACzC,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAA;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAA;IACxC,WAAW,CAAC,EAAE,CAAC,UAAU,GAAG,SAAS,CAAC,EAAE,CAAA;IACxC,eAAe,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,2BAA2B,CAAC,MAAM,SAAS,UAAU,IAAI;IACnE,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,UAAU,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,eAAe,EAAE,eAAe,CAAA;IAChC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS,cAAc,IAAI;IAC5D,UAAU,EAAE,UAAU,CAAA;IACtB,KAAK,EAAE,CAAC,CAAA;IACR,eAAe,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,YAAY,CAAA;IACvB,YAAY,EAAE,MAAM,EAAE,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,sBAAsB,CAAC,CAAC,SAAS,cAAc,IAAI;IAC7D,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,CAAC,CAAA;IACd,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,yBAAyB,CAAC,MAAM,SAAS,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,OAAO,IAAI;IAC7F,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,eAAe,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,4BAA4B,GAAG;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,2BAA2B,CACrC,CAAC,SAAS,cAAc,EACxB,MAAM,SAAS,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,OAAO,IAErD,MAAM,SAAS,MAAM,CAAC,QAAQ,CAAC,GAC3B,UAAU,CAAC,CAAC,CAAC,GACb,UAAU,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;AAElE,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,cAAc,IAAI;IACzD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,CAAC,CAAA;IACd,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,YAAY,CACtB,CAAC,SAAS,cAAc,EACxB,CAAC,SAAS,cAAc,EACxB,cAAc,IACZ,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAA;AAElC,KAAK,uBAAuB,CAAC,CAAC,EAAE,cAAc,GAAG,SAAS,IAAI;IAC5D,SAAS,EAAE,YAAY,CAAA;IACvB,UAAU,EAAE,mBAAmB,CAAC,CAAC,EAAE,cAAc,CAAC,CAAA;CACnD,CAAA;AAED,KAAK,sBAAsB,CAAC,CAAC,EAAE,cAAc,GAAG,SAAS,IAAI;IAC3D,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,eAAe,CAAC,CAAC,EAAE,cAAc,CAAC,CAAA;CAC/C,CAAA;AAED,KAAK,cAAc,GAAG;IACpB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,QAAQ,CAAC,CAAA;IACnC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IACjD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CAClD,CAAA;AAED,qBAAa,eAAe;;IAI1B,WAAW,EAAE,WAAW,CAAA;IACxB,QAAQ,EAAE,cAAc,GAAG,SAAS,CAAA;IACpC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAA;IAClB,oBAAoB,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAA;IAClD,oBAAoB,EAAE,CAAC,cAAc,GAAG,SAAS,OAAO,sBAAsB,CAAC,cAAc,CAAC,CAAA;IAC9F,UAAU,EAAE,UAAU,CAAA;IACtB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;gBACtB,EACV,WAAW,EACX,QAAQ,EACR,MAAM,EACN,oBAAoB,EACpB,UAAU,EACV,oBAAoB,EACrB,EAAE,eAAe;IAalB;;OAEG;IACH,WAAW,IAAI,cAAc;IA6J7B,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;IAoBlD;;;;OAIG;IACH,iBAAiB,CAAC,CAAC,SAAS,cAAc,EAAE,EAC1C,UAAU,EACV,KAAK,EACL,eAAe,EACf,QAAQ,EACT,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;IAiD3C,oBAAoB;IACpB,YAAY,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,gBAAgB;IAWxD;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,OAAY,EAAE,WAAW,EAAE,eAAe,EAAE,SAAS,EAAE,EAAE,YAAY;IAmDhF;;;;;;;;;;;;;OAaG;IACH,eAAe,CAAC,CAAC,SAAS,cAAc,EAAE,CAAC,SAAS,cAAc,EAAE,cAAc,GAAG,SAAS,EAC5F,UAAU,EAAE,mBAAmB,CAAC,CAAC,EAAE,cAAc,CAAC,EAClD,SAAS,EAAE,YAAY,EACvB,EAAE,UAAU,EAAE,eAAe,EAAE,QAAgB,EAAE,GAAE,sBAAsB,CAAC,CAAC,CAAM,GAChF,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC;IAajC,qBAAqB,CACnB,CAAC,SAAS,cAAc,EACxB,MAAM,SAAS,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,OAAO,EACrD,cAAc,EAEd,UAAU,EAAE,eAAe,CAAC,CAAC,EAAE,cAAc,CAAC,EAC9C,EAAE,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,EAAE,yBAAyB,CAAC,MAAM,CAAC,EAC5E,EAAE,QAAgB,EAAE,GAAE,4BAAiC,GACtD,2BAA2B,CAAC,CAAC,EAAE,MAAM,CAAC;IAyCzC;;;;;;;;;;;;;OAaG;IAEH,WAAW,CAAC,CAAC,SAAS,cAAc,EAAE,CAAC,SAAS,cAAc,EAAE,cAAc,EAC5E,UAAU,EAAE,eAAe,CAAC,CAAC,EAAE,cAAc,CAAC,EAC9C,OAAO,EAAE,OAAO,EAChB,EAAE,UAAU,EAAE,eAAe,EAAE,QAAgB,EAAE,GAAE,kBAAkB,CAAC,CAAC,CAAM,GAC5E,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC;IAcjC;;;;;;;;;OASG;IACH,0BAA0B,CAAC,CAAC,EAAE,cAAc,EAAE,EAC5C,SAAS,EACT,UAAU,EACX,EAAE,uBAAuB,CAAC,CAAC,EAAE,cAAc,CAAC,GAAG,eAAe,CAAC,cAAc,CAAC;IAQ/E;;;;;;;;OAQG;IACH,sBAAsB,CAAC,CAAC,EAAE,cAAc,EAAE,EACxC,OAAO,EACP,UAAU,EACX,EAAE,sBAAsB,CAAC,CAAC,EAAE,cAAc,CAAC,GAAG,eAAe,CAAC,cAAc,CAAC;IAuB9E;;;;;OAKG;IACH,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;IAYzF;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS;CAOvE;AAED,KAAK,qBAAqB,GAAG;IAC3B,SAAS,EAAE,YAAY,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,4BAG/B,qBAAqB,KAAG,eAKzB,CAAA;AAEF,KAAK,iBAAiB,GAAG;IACvB,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,0BAA0B,iBAAiB,KAAG,WAI1E,CAAA"}
|
|
1
|
+
{"version":3,"file":"GenerateContext.d.ts","sourceRoot":"","sources":["../../src/context/GenerateContext.ts"],"names":[],"mappings":"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"}
|
|
@@ -62,6 +62,101 @@ const File_js_1 = require("../dsl/File.js");
|
|
|
62
62
|
const JsonFile_js_1 = require("../dsl/JsonFile.js");
|
|
63
63
|
const tiny_invariant_1 = __importDefault(require("tiny-invariant"));
|
|
64
64
|
const ts_pattern_1 = require("ts-pattern");
|
|
65
|
+
/**
|
|
66
|
+
* The generation context for the second phase of the SKMTC transformation pipeline.
|
|
67
|
+
*
|
|
68
|
+
* `GenerateContext` manages the transformation of parsed OAS (OpenAPI Schema) objects
|
|
69
|
+
* into code artifacts using pluggable generators. It provides APIs for model and operation
|
|
70
|
+
* generation, file management, dependency tracking, and artifact registration.
|
|
71
|
+
*
|
|
72
|
+
* ## Key Responsibilities
|
|
73
|
+
*
|
|
74
|
+
* - **Generator Orchestration**: Executes pluggable model and operation generators
|
|
75
|
+
* - **Schema Processing**: Provides utilities for working with OAS schemas and references
|
|
76
|
+
* - **File Management**: Handles file creation, imports, exports, and dependencies
|
|
77
|
+
* - **Artifact Registration**: Collects generated definitions and files for rendering
|
|
78
|
+
* - **Type System Integration**: Bridges OAS types with generator-specific type systems
|
|
79
|
+
* - **Settings Management**: Handles skipping logic and client customizations
|
|
80
|
+
*
|
|
81
|
+
* ## Generator Integration
|
|
82
|
+
*
|
|
83
|
+
* The context works with two main types of generators:
|
|
84
|
+
* - **Model Generators**: Transform schema definitions into type definitions
|
|
85
|
+
* - **Operation Generators**: Transform API operations into client functions
|
|
86
|
+
*
|
|
87
|
+
* @example Basic usage in a model generator
|
|
88
|
+
* ```typescript
|
|
89
|
+
* import { ModelBase } from '@skmtc/core';
|
|
90
|
+
*
|
|
91
|
+
* class TypeScriptInterface extends ModelBase {
|
|
92
|
+
* generate(): Definition {
|
|
93
|
+
* const schema = this.context.getSchema(this.refName);
|
|
94
|
+
*
|
|
95
|
+
* return new Definition({
|
|
96
|
+
* context: this.context,
|
|
97
|
+
* identifier: Identifier.createType(this.refName),
|
|
98
|
+
* description: schema.description,
|
|
99
|
+
* value: {
|
|
100
|
+
* generatorKey: this.generatorKey,
|
|
101
|
+
* content: this.generateInterfaceBody(schema)
|
|
102
|
+
* }
|
|
103
|
+
* });
|
|
104
|
+
* }
|
|
105
|
+
* }
|
|
106
|
+
* ```
|
|
107
|
+
*
|
|
108
|
+
* @example Operation generator usage
|
|
109
|
+
* ```typescript
|
|
110
|
+
* class ApiClientGenerator extends OperationBase {
|
|
111
|
+
* generate(): Definition {
|
|
112
|
+
* const operation = this.context.getOperation(this.path, this.method);
|
|
113
|
+
*
|
|
114
|
+
* const functionName = this.context.createOperationName(this.path, this.method);
|
|
115
|
+
*
|
|
116
|
+
* return new Definition({
|
|
117
|
+
* context: this.context,
|
|
118
|
+
* identifier: Identifier.createVariable(functionName),
|
|
119
|
+
* value: {
|
|
120
|
+
* generatorKey: this.generatorKey,
|
|
121
|
+
* content: this.generateClientFunction(operation)
|
|
122
|
+
* }
|
|
123
|
+
* });
|
|
124
|
+
* }
|
|
125
|
+
* }
|
|
126
|
+
* ```
|
|
127
|
+
*
|
|
128
|
+
* @example Schema and type system integration
|
|
129
|
+
* ```typescript
|
|
130
|
+
* class MyGenerator extends ModelBase {
|
|
131
|
+
* generate(): Definition {
|
|
132
|
+
* const schema = this.context.getSchema(this.refName);
|
|
133
|
+
*
|
|
134
|
+
* // Transform schema using type system
|
|
135
|
+
* const typeOutput = this.context.transformSchema(schema, {
|
|
136
|
+
* stringType: 'string',
|
|
137
|
+
* numberType: 'number',
|
|
138
|
+
* arrayType: (items) => `Array<${items}>`
|
|
139
|
+
* });
|
|
140
|
+
*
|
|
141
|
+
* // Register dependencies
|
|
142
|
+
* if (schema.hasReferences()) {
|
|
143
|
+
* this.context.addImportsToFile('./models/types.ts', {
|
|
144
|
+
* './common': ['BaseModel']
|
|
145
|
+
* });
|
|
146
|
+
* }
|
|
147
|
+
*
|
|
148
|
+
* return new Definition({
|
|
149
|
+
* context: this.context,
|
|
150
|
+
* identifier: Identifier.createType(this.refName),
|
|
151
|
+
* value: {
|
|
152
|
+
* generatorKey: this.generatorKey,
|
|
153
|
+
* content: typeOutput.content
|
|
154
|
+
* }
|
|
155
|
+
* });
|
|
156
|
+
* }
|
|
157
|
+
* }
|
|
158
|
+
* ```
|
|
159
|
+
*/
|
|
65
160
|
class GenerateContext {
|
|
66
161
|
constructor({ oasDocument, settings, logger, captureCurrentResult, stackTrail, toGeneratorConfigMap }) {
|
|
67
162
|
_GenerateContext_instances.add(this);
|
|
@@ -5,62 +5,240 @@ import type * as log from '../deps/jsr.io/@std/log/0.224.14/mod.js';
|
|
|
5
5
|
import type { StackTrail } from './StackTrail.js';
|
|
6
6
|
import * as v from 'valibot';
|
|
7
7
|
import type { IssueType } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Constructor arguments for {@link ParseContext}.
|
|
10
|
+
*/
|
|
8
11
|
type ConstructorArgs = {
|
|
12
|
+
/** The OpenAPI v3 document to parse */
|
|
9
13
|
documentObject: OpenAPIV3.Document;
|
|
14
|
+
/** Logger instance for debug information */
|
|
10
15
|
logger: log.Logger;
|
|
16
|
+
/** Stack trail for distributed tracing */
|
|
11
17
|
stackTrail: StackTrail;
|
|
18
|
+
/** Whether to suppress console output */
|
|
12
19
|
silent: boolean;
|
|
13
20
|
};
|
|
21
|
+
/**
|
|
22
|
+
* Return type for the parse operation.
|
|
23
|
+
*/
|
|
14
24
|
export type ParseReturn = {
|
|
25
|
+
/** The parsed OAS document */
|
|
15
26
|
oasDocument: OasDocument;
|
|
27
|
+
/** Array of parsing issues encountered */
|
|
16
28
|
issues: ParseIssue[];
|
|
17
29
|
};
|
|
30
|
+
/**
|
|
31
|
+
* Base type for parse warning messages.
|
|
32
|
+
*/
|
|
18
33
|
type ParseWarningBase = {
|
|
34
|
+
/** Issue severity level */
|
|
19
35
|
level: 'warning';
|
|
36
|
+
/** Warning message */
|
|
20
37
|
message: string;
|
|
21
38
|
};
|
|
39
|
+
/**
|
|
40
|
+
* Base type for parse error messages.
|
|
41
|
+
*/
|
|
22
42
|
type ParseErrorBase = {
|
|
43
|
+
/** Issue severity level */
|
|
23
44
|
level: 'error';
|
|
45
|
+
/** The error that occurred */
|
|
24
46
|
error: Error;
|
|
25
47
|
};
|
|
48
|
+
/**
|
|
49
|
+
* Base union type for parse issues.
|
|
50
|
+
*/
|
|
26
51
|
type ParseIssueBase = ParseErrorBase | ParseWarningBase;
|
|
52
|
+
/**
|
|
53
|
+
* Arguments for logging issues with a specific key.
|
|
54
|
+
*/
|
|
27
55
|
export type LogIssueArgs = ParseIssueBase & {
|
|
56
|
+
/** The key where the issue occurred */
|
|
28
57
|
key: string;
|
|
58
|
+
/** The parent object containing the issue */
|
|
29
59
|
parent: unknown;
|
|
60
|
+
/** The type of issue for categorization */
|
|
30
61
|
type: IssueType;
|
|
31
62
|
};
|
|
63
|
+
/**
|
|
64
|
+
* Arguments for logging issues without a specific key.
|
|
65
|
+
*/
|
|
32
66
|
export type LogIssueNoKeyArgs = ParseIssueBase & {
|
|
67
|
+
/** The parent object containing the issue */
|
|
33
68
|
parent: unknown;
|
|
69
|
+
/** The type of issue for categorization */
|
|
34
70
|
type: IssueType;
|
|
35
71
|
};
|
|
72
|
+
/**
|
|
73
|
+
* Arguments for provisional parsing with validation.
|
|
74
|
+
*/
|
|
36
75
|
export type ProvisionalParseArgs<T> = {
|
|
76
|
+
/** The key being parsed */
|
|
37
77
|
key: string;
|
|
78
|
+
/** The value to validate */
|
|
38
79
|
value: unknown;
|
|
80
|
+
/** The parent object context */
|
|
39
81
|
parent: unknown;
|
|
82
|
+
/** Valibot schema for validation */
|
|
40
83
|
schema: v.GenericSchema<T>;
|
|
84
|
+
/** Function to generate error messages */
|
|
41
85
|
toMessage: (value: unknown) => string;
|
|
86
|
+
/** The type of issue for categorization */
|
|
42
87
|
type: IssueType;
|
|
43
88
|
};
|
|
89
|
+
/**
|
|
90
|
+
* Arguments for logging skipped values during parsing.
|
|
91
|
+
*/
|
|
44
92
|
export type LogSkippedValuesArgs = {
|
|
93
|
+
/** Record of skipped key-value pairs */
|
|
45
94
|
skipped: Record<string, unknown>;
|
|
95
|
+
/** The parent object context */
|
|
46
96
|
parent: unknown;
|
|
97
|
+
/** String description of the parent type */
|
|
47
98
|
parentType: string;
|
|
48
99
|
};
|
|
100
|
+
/**
|
|
101
|
+
* Represents a parsing error with location context.
|
|
102
|
+
*/
|
|
49
103
|
export type ParseError = {
|
|
104
|
+
/** Error severity level */
|
|
50
105
|
level: 'error';
|
|
106
|
+
/** The error that occurred */
|
|
51
107
|
error: Error;
|
|
108
|
+
/** Location string where the error occurred */
|
|
52
109
|
location: string;
|
|
110
|
+
/** The parent object context */
|
|
53
111
|
parent: unknown;
|
|
112
|
+
/** The type of issue for categorization */
|
|
54
113
|
type: IssueType;
|
|
55
114
|
};
|
|
115
|
+
/**
|
|
116
|
+
* Represents a parsing warning with location context.
|
|
117
|
+
*/
|
|
56
118
|
export type ParseWarning = {
|
|
119
|
+
/** Warning severity level */
|
|
57
120
|
level: 'warning';
|
|
121
|
+
/** Warning message */
|
|
58
122
|
message: string;
|
|
123
|
+
/** Location string where the warning occurred */
|
|
59
124
|
location: string;
|
|
125
|
+
/** The parent object context */
|
|
60
126
|
parent: unknown;
|
|
127
|
+
/** The type of issue for categorization */
|
|
61
128
|
type: IssueType;
|
|
62
129
|
};
|
|
130
|
+
/**
|
|
131
|
+
* Union type for all parsing issues.
|
|
132
|
+
*/
|
|
63
133
|
export type ParseIssue = ParseError | ParseWarning;
|
|
134
|
+
/**
|
|
135
|
+
* The parsing context for the first phase of the SKMTC transformation pipeline.
|
|
136
|
+
*
|
|
137
|
+
* `ParseContext` is responsible for converting OpenAPI v3 JSON documents into
|
|
138
|
+
* the internal OAS (OpenAPI Schema) object representation used by SKMTC. It
|
|
139
|
+
* provides comprehensive error handling, validation, and issue tracking during
|
|
140
|
+
* the parsing process.
|
|
141
|
+
*
|
|
142
|
+
* This context handles the complex task of transforming external OpenAPI
|
|
143
|
+
* specifications into type-safe internal representations while maintaining
|
|
144
|
+
* detailed information about any parsing issues or inconsistencies found.
|
|
145
|
+
*
|
|
146
|
+
* ## Key Features
|
|
147
|
+
*
|
|
148
|
+
* - **JSON to OAS Conversion**: Transforms OpenAPI JSON into typed OAS objects
|
|
149
|
+
* - **Validation & Error Handling**: Comprehensive validation with detailed error reporting
|
|
150
|
+
* - **Issue Tracking**: Collects warnings and errors with precise location information
|
|
151
|
+
* - **Reference Management**: Handles complex reference resolution and tracking
|
|
152
|
+
* - **Logging Integration**: Provides detailed logging and tracing capabilities
|
|
153
|
+
* - **Silent Mode**: Can suppress console output while maintaining error collection
|
|
154
|
+
*
|
|
155
|
+
* @example Basic parsing usage
|
|
156
|
+
* ```typescript
|
|
157
|
+
* import { ParseContext } from '@skmtc/core';
|
|
158
|
+
*
|
|
159
|
+
* const parseContext = new ParseContext({
|
|
160
|
+
* documentObject: openApiJsonDocument,
|
|
161
|
+
* logger: myLogger,
|
|
162
|
+
* stackTrail: traceStack,
|
|
163
|
+
* silent: false
|
|
164
|
+
* });
|
|
165
|
+
*
|
|
166
|
+
* const oasDocument = parseContext.parse();
|
|
167
|
+
*
|
|
168
|
+
* // Check for parsing issues
|
|
169
|
+
* if (parseContext.issues.length > 0) {
|
|
170
|
+
* console.log('Parsing issues found:');
|
|
171
|
+
* parseContext.issues.forEach(issue => {
|
|
172
|
+
* console.log(`${issue.level}: ${issue.location} - ${issue.message || issue.error?.message}`);
|
|
173
|
+
* });
|
|
174
|
+
* }
|
|
175
|
+
*
|
|
176
|
+
* // Use the parsed document
|
|
177
|
+
* console.log('Parsed schemas:', Object.keys(oasDocument.components?.schemas || {}));
|
|
178
|
+
* ```
|
|
179
|
+
*
|
|
180
|
+
* @example Error handling during parsing
|
|
181
|
+
* ```typescript
|
|
182
|
+
* const parseContext = new ParseContext({
|
|
183
|
+
* documentObject: malformedOpenApiDoc,
|
|
184
|
+
* logger: logger,
|
|
185
|
+
* stackTrail: stack,
|
|
186
|
+
* silent: true
|
|
187
|
+
* });
|
|
188
|
+
*
|
|
189
|
+
* try {
|
|
190
|
+
* const parsed = parseContext.parse();
|
|
191
|
+
*
|
|
192
|
+
* // Separate errors from warnings
|
|
193
|
+
* const errors = parseContext.issues.filter(issue => issue.level === 'error');
|
|
194
|
+
* const warnings = parseContext.issues.filter(issue => issue.level === 'warning');
|
|
195
|
+
*
|
|
196
|
+
* if (errors.length > 0) {
|
|
197
|
+
* console.error(`${errors.length} parsing errors found`);
|
|
198
|
+
* errors.forEach(error => {
|
|
199
|
+
* console.error(`Error at ${error.location}: ${error.error.message}`);
|
|
200
|
+
* });
|
|
201
|
+
* }
|
|
202
|
+
*
|
|
203
|
+
* if (warnings.length > 0) {
|
|
204
|
+
* console.warn(`${warnings.length} parsing warnings found`);
|
|
205
|
+
* warnings.forEach(warning => {
|
|
206
|
+
* console.warn(`Warning at ${warning.location}: ${warning.message}`);
|
|
207
|
+
* });
|
|
208
|
+
* }
|
|
209
|
+
* } catch (error) {
|
|
210
|
+
* console.error('Critical parsing failure:', error);
|
|
211
|
+
* }
|
|
212
|
+
* ```
|
|
213
|
+
*
|
|
214
|
+
* @example Integration with CoreContext
|
|
215
|
+
* ```typescript
|
|
216
|
+
* // Typically used within CoreContext.parse()
|
|
217
|
+
* class CustomCoreContext extends CoreContext {
|
|
218
|
+
* parseWithCustomValidation(document: OpenAPIV3.Document) {
|
|
219
|
+
* const parseContext = new ParseContext({
|
|
220
|
+
* documentObject: document,
|
|
221
|
+
* logger: this.logger,
|
|
222
|
+
* stackTrail: this.stackTrail,
|
|
223
|
+
* silent: this.silent
|
|
224
|
+
* });
|
|
225
|
+
*
|
|
226
|
+
* const parsed = parseContext.parse();
|
|
227
|
+
*
|
|
228
|
+
* // Custom post-processing based on issues
|
|
229
|
+
* const criticalErrors = parseContext.issues.filter(issue =>
|
|
230
|
+
* issue.level === 'error' && issue.type === 'schema-validation'
|
|
231
|
+
* );
|
|
232
|
+
*
|
|
233
|
+
* if (criticalErrors.length > 0) {
|
|
234
|
+
* throw new Error(`Schema validation failed: ${criticalErrors.length} critical errors`);
|
|
235
|
+
* }
|
|
236
|
+
*
|
|
237
|
+
* return parsed;
|
|
238
|
+
* }
|
|
239
|
+
* }
|
|
240
|
+
* ```
|
|
241
|
+
*/
|
|
64
242
|
export declare class ParseContext {
|
|
65
243
|
#private;
|
|
66
244
|
documentObject: OpenAPIV3.Document;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParseContext.d.ts","sourceRoot":"","sources":["../../src/context/ParseContext.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ParseContext.d.ts","sourceRoot":"","sources":["../../src/context/ParseContext.ts"],"names":[],"mappings":"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"}
|
|
@@ -52,6 +52,114 @@ const toDocumentFieldsV3_js_1 = require("../oas/document/toDocumentFieldsV3.js")
|
|
|
52
52
|
const Document_js_1 = require("../oas/document/Document.js");
|
|
53
53
|
const tracer_js_1 = require("../helpers/tracer.js");
|
|
54
54
|
const v = __importStar(require("valibot"));
|
|
55
|
+
/**
|
|
56
|
+
* The parsing context for the first phase of the SKMTC transformation pipeline.
|
|
57
|
+
*
|
|
58
|
+
* `ParseContext` is responsible for converting OpenAPI v3 JSON documents into
|
|
59
|
+
* the internal OAS (OpenAPI Schema) object representation used by SKMTC. It
|
|
60
|
+
* provides comprehensive error handling, validation, and issue tracking during
|
|
61
|
+
* the parsing process.
|
|
62
|
+
*
|
|
63
|
+
* This context handles the complex task of transforming external OpenAPI
|
|
64
|
+
* specifications into type-safe internal representations while maintaining
|
|
65
|
+
* detailed information about any parsing issues or inconsistencies found.
|
|
66
|
+
*
|
|
67
|
+
* ## Key Features
|
|
68
|
+
*
|
|
69
|
+
* - **JSON to OAS Conversion**: Transforms OpenAPI JSON into typed OAS objects
|
|
70
|
+
* - **Validation & Error Handling**: Comprehensive validation with detailed error reporting
|
|
71
|
+
* - **Issue Tracking**: Collects warnings and errors with precise location information
|
|
72
|
+
* - **Reference Management**: Handles complex reference resolution and tracking
|
|
73
|
+
* - **Logging Integration**: Provides detailed logging and tracing capabilities
|
|
74
|
+
* - **Silent Mode**: Can suppress console output while maintaining error collection
|
|
75
|
+
*
|
|
76
|
+
* @example Basic parsing usage
|
|
77
|
+
* ```typescript
|
|
78
|
+
* import { ParseContext } from '@skmtc/core';
|
|
79
|
+
*
|
|
80
|
+
* const parseContext = new ParseContext({
|
|
81
|
+
* documentObject: openApiJsonDocument,
|
|
82
|
+
* logger: myLogger,
|
|
83
|
+
* stackTrail: traceStack,
|
|
84
|
+
* silent: false
|
|
85
|
+
* });
|
|
86
|
+
*
|
|
87
|
+
* const oasDocument = parseContext.parse();
|
|
88
|
+
*
|
|
89
|
+
* // Check for parsing issues
|
|
90
|
+
* if (parseContext.issues.length > 0) {
|
|
91
|
+
* console.log('Parsing issues found:');
|
|
92
|
+
* parseContext.issues.forEach(issue => {
|
|
93
|
+
* console.log(`${issue.level}: ${issue.location} - ${issue.message || issue.error?.message}`);
|
|
94
|
+
* });
|
|
95
|
+
* }
|
|
96
|
+
*
|
|
97
|
+
* // Use the parsed document
|
|
98
|
+
* console.log('Parsed schemas:', Object.keys(oasDocument.components?.schemas || {}));
|
|
99
|
+
* ```
|
|
100
|
+
*
|
|
101
|
+
* @example Error handling during parsing
|
|
102
|
+
* ```typescript
|
|
103
|
+
* const parseContext = new ParseContext({
|
|
104
|
+
* documentObject: malformedOpenApiDoc,
|
|
105
|
+
* logger: logger,
|
|
106
|
+
* stackTrail: stack,
|
|
107
|
+
* silent: true
|
|
108
|
+
* });
|
|
109
|
+
*
|
|
110
|
+
* try {
|
|
111
|
+
* const parsed = parseContext.parse();
|
|
112
|
+
*
|
|
113
|
+
* // Separate errors from warnings
|
|
114
|
+
* const errors = parseContext.issues.filter(issue => issue.level === 'error');
|
|
115
|
+
* const warnings = parseContext.issues.filter(issue => issue.level === 'warning');
|
|
116
|
+
*
|
|
117
|
+
* if (errors.length > 0) {
|
|
118
|
+
* console.error(`${errors.length} parsing errors found`);
|
|
119
|
+
* errors.forEach(error => {
|
|
120
|
+
* console.error(`Error at ${error.location}: ${error.error.message}`);
|
|
121
|
+
* });
|
|
122
|
+
* }
|
|
123
|
+
*
|
|
124
|
+
* if (warnings.length > 0) {
|
|
125
|
+
* console.warn(`${warnings.length} parsing warnings found`);
|
|
126
|
+
* warnings.forEach(warning => {
|
|
127
|
+
* console.warn(`Warning at ${warning.location}: ${warning.message}`);
|
|
128
|
+
* });
|
|
129
|
+
* }
|
|
130
|
+
* } catch (error) {
|
|
131
|
+
* console.error('Critical parsing failure:', error);
|
|
132
|
+
* }
|
|
133
|
+
* ```
|
|
134
|
+
*
|
|
135
|
+
* @example Integration with CoreContext
|
|
136
|
+
* ```typescript
|
|
137
|
+
* // Typically used within CoreContext.parse()
|
|
138
|
+
* class CustomCoreContext extends CoreContext {
|
|
139
|
+
* parseWithCustomValidation(document: OpenAPIV3.Document) {
|
|
140
|
+
* const parseContext = new ParseContext({
|
|
141
|
+
* documentObject: document,
|
|
142
|
+
* logger: this.logger,
|
|
143
|
+
* stackTrail: this.stackTrail,
|
|
144
|
+
* silent: this.silent
|
|
145
|
+
* });
|
|
146
|
+
*
|
|
147
|
+
* const parsed = parseContext.parse();
|
|
148
|
+
*
|
|
149
|
+
* // Custom post-processing based on issues
|
|
150
|
+
* const criticalErrors = parseContext.issues.filter(issue =>
|
|
151
|
+
* issue.level === 'error' && issue.type === 'schema-validation'
|
|
152
|
+
* );
|
|
153
|
+
*
|
|
154
|
+
* if (criticalErrors.length > 0) {
|
|
155
|
+
* throw new Error(`Schema validation failed: ${criticalErrors.length} critical errors`);
|
|
156
|
+
* }
|
|
157
|
+
*
|
|
158
|
+
* return parsed;
|
|
159
|
+
* }
|
|
160
|
+
* }
|
|
161
|
+
* ```
|
|
162
|
+
*/
|
|
55
163
|
class ParseContext {
|
|
56
164
|
constructor({ documentObject, logger, stackTrail, silent = true }) {
|
|
57
165
|
Object.defineProperty(this, "documentObject", {
|