diff --git a/packages/parser/json-schema-parser/CHANGELOG.md b/packages/parser/json-schema-parser/CHANGELOG.md index 46e5f3f..f07688d 100644 --- a/packages/parser/json-schema-parser/CHANGELOG.md +++ b/packages/parser/json-schema-parser/CHANGELOG.md @@ -23,6 +23,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Added - Added `parse`. +- Added `DereferencedSchemaResult`. - Added `DereferenceFunction` - Added `ParseJsonSchemaOptions` - Added `UriOptions`. diff --git a/packages/parser/json-schema-parser/src/jsonSchema/202012/calculations/dereferenceJsonSchema.spec.ts b/packages/parser/json-schema-parser/src/jsonSchema/202012/calculations/dereferenceJsonSchema.spec.ts index 6e0ddfb..5a6be5e 100644 --- a/packages/parser/json-schema-parser/src/jsonSchema/202012/calculations/dereferenceJsonSchema.spec.ts +++ b/packages/parser/json-schema-parser/src/jsonSchema/202012/calculations/dereferenceJsonSchema.spec.ts @@ -85,6 +85,7 @@ describe(dereferenceJsonSchema.name, () => { describe('when called, and traverseJsonSchema() calls callback twice with an schema with a reference', () => { let dereferencedSchemaFixture: JsonSchema; + let dereferencedUriOptionsFixture: UriOptions; let subSchemaFixture: JsonSchemaObject; let baseUriFixture: string; let referenceMapFixture: Map; @@ -93,6 +94,9 @@ describe(dereferenceJsonSchema.name, () => { beforeAll(async () => { dereferencedSchemaFixture = JsonRootSchemaFixtures.any; + dereferencedUriOptionsFixture = { + retrievalUri: 'dereferenced://uri/options', + }; subSchemaFixture = JsonRootSchemaFixtures.withRef; baseUriFixture = 'base://fixture'; referenceMapFixture = new Map(); @@ -123,7 +127,10 @@ describe(dereferenceJsonSchema.name, () => { ) .mockImplementationOnce(() => undefined); - derefMock.mockResolvedValueOnce(dereferencedSchemaFixture); + derefMock.mockResolvedValueOnce({ + schema: dereferencedSchemaFixture, + uriOptions: dereferencedUriOptionsFixture, + }); result = await dereferenceJsonSchema( derefMock, @@ -147,7 +154,7 @@ describe(dereferenceJsonSchema.name, () => { expect(getJsonSchemaBaseUri).toHaveBeenNthCalledWith( 2, dereferencedSchemaFixture, - uriOptionsFixture, + dereferencedUriOptionsFixture, ); }); diff --git a/packages/parser/json-schema-parser/src/jsonSchema/202012/calculations/dereferenceJsonSchema.ts b/packages/parser/json-schema-parser/src/jsonSchema/202012/calculations/dereferenceJsonSchema.ts index 6fd13ad..b26e102 100644 --- a/packages/parser/json-schema-parser/src/jsonSchema/202012/calculations/dereferenceJsonSchema.ts +++ b/packages/parser/json-schema-parser/src/jsonSchema/202012/calculations/dereferenceJsonSchema.ts @@ -2,6 +2,7 @@ import { JsonSchema } from '@cuaklabs/json-schema-types/2020-12'; import { Uri } from '@cuaklabs/uri'; import { traverseJsonSchema } from '../actions/traverseJsonSchema'; +import { DereferencedSchemaResult } from '../models/DereferencedSchemaResult'; import { DereferenceFunction } from '../models/DereferenceFunction'; import { TraverseJsonSchemaCallbackParams } from '../models/TraverseJsonSchemaCallbackParams'; import { UriOptions } from '../models/UriOptions'; @@ -23,19 +24,19 @@ export async function dereferenceJsonSchema( await Promise.all( missingSchemaUris.map(async (schemaUri: string): Promise => { - const dereferencedSchema: JsonSchema = await deref( + const dereferencedSchemaResult: DereferencedSchemaResult = await deref( schema, baseUri, schemaUri, ); - referenceMap.set(schemaUri, dereferencedSchema); + referenceMap.set(schemaUri, dereferencedSchemaResult.schema); await dereferenceJsonSchema( deref, - dereferencedSchema, + dereferencedSchemaResult.schema, referenceMap, - uriOptions, + dereferencedSchemaResult.uriOptions, ); }), ); diff --git a/packages/parser/json-schema-parser/src/jsonSchema/202012/index.ts b/packages/parser/json-schema-parser/src/jsonSchema/202012/index.ts index d496fdb..ecd4d18 100644 --- a/packages/parser/json-schema-parser/src/jsonSchema/202012/index.ts +++ b/packages/parser/json-schema-parser/src/jsonSchema/202012/index.ts @@ -1,8 +1,16 @@ import { parse } from './calculations/parse'; +import { DereferencedSchemaResult } from './models/DereferencedSchemaResult'; import { DereferenceFunction } from './models/DereferenceFunction'; +import { JsonSchemaParseResult } from './models/JsonSchemaParseResult'; import { ParseJsonSchemaOptions } from './models/ParseJsonSchemaOptions'; import { UriOptions } from './models/UriOptions'; -export type { DereferenceFunction, ParseJsonSchemaOptions, UriOptions }; +export type { + DereferencedSchemaResult, + DereferenceFunction, + JsonSchemaParseResult, + ParseJsonSchemaOptions, + UriOptions, +}; export { parse }; diff --git a/packages/parser/json-schema-parser/src/jsonSchema/202012/models/DereferenceFunction.ts b/packages/parser/json-schema-parser/src/jsonSchema/202012/models/DereferenceFunction.ts index 9411ea6..3311ff3 100644 --- a/packages/parser/json-schema-parser/src/jsonSchema/202012/models/DereferenceFunction.ts +++ b/packages/parser/json-schema-parser/src/jsonSchema/202012/models/DereferenceFunction.ts @@ -1,7 +1,9 @@ import { JsonSchema } from '@cuaklabs/json-schema-types/2020-12'; +import { DereferencedSchemaResult } from './DereferencedSchemaResult'; + export type DereferenceFunction = ( schema: JsonSchema, baseUri: string, uri: string, -) => Promise; +) => Promise; diff --git a/packages/parser/json-schema-parser/src/jsonSchema/202012/models/DereferencedSchemaResult.ts b/packages/parser/json-schema-parser/src/jsonSchema/202012/models/DereferencedSchemaResult.ts new file mode 100644 index 0000000..e6bbd1a --- /dev/null +++ b/packages/parser/json-schema-parser/src/jsonSchema/202012/models/DereferencedSchemaResult.ts @@ -0,0 +1,8 @@ +import { JsonSchema } from '@cuaklabs/json-schema-types/2020-12'; + +import { UriOptions } from '..'; + +export interface DereferencedSchemaResult { + schema: JsonSchema; + uriOptions: UriOptions; +}