oas-normalize 15.3.0 → 15.5.0

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/README.md CHANGED
@@ -150,10 +150,10 @@ try {
150
150
  }
151
151
  ```
152
152
 
153
- If you want to always receive a `ValidationResult` object back (which includes a flag that indicates if the supplied API definition is valid or not), you can set the `throwIfInvalid` option to `false`:
153
+ If you want to always receive a `ValidationResult` object back (which includes a flag that indicates if the supplied API definition is valid or not), you can set the `shouldThrowIfInvalid` option to `false`:
154
154
 
155
155
  ```ts
156
- const result = await oas.validate({ throwIfInvalid: false });
156
+ const result = await oas.validate({ shouldThrowIfInvalid: false });
157
157
  console.log(result);
158
158
 
159
159
  /*
package/dist/index.cjs CHANGED
@@ -159,7 +159,7 @@ var OASNormalize = class _OASNormalize {
159
159
  *
160
160
  */
161
161
  async validate(opts = {}) {
162
- const throwIfInvalid = _nullishCoalesce(opts.throwIfInvalid, () => ( true));
162
+ const shouldThrowIfInvalid = _nullishCoalesce(opts.shouldThrowIfInvalid, () => ( true));
163
163
  const parserOptions = opts.parser || this.opts.parser || {};
164
164
  if (!parserOptions.validate) parserOptions.validate = {};
165
165
  if (!parserOptions.validate.errors) parserOptions.validate.errors = {};
@@ -168,7 +168,7 @@ var OASNormalize = class _OASNormalize {
168
168
  return _chunkHIUYACR6cjs.isPostman.call(void 0, schema) ? _OASNormalize.convertPostmanToOpenAPI(schema) : schema;
169
169
  }).then(async (schema) => {
170
170
  if (!_chunkHIUYACR6cjs.isSwagger.call(void 0, schema) && !_chunkHIUYACR6cjs.isOpenAPI.call(void 0, schema)) {
171
- if (throwIfInvalid) {
171
+ if (shouldThrowIfInvalid) {
172
172
  throw new (0, _chunkAKXTCPGMcjs.ValidationError)("The supplied API definition is unsupported.");
173
173
  }
174
174
  return {
@@ -181,7 +181,7 @@ var OASNormalize = class _OASNormalize {
181
181
  } else if (_chunkHIUYACR6cjs.isSwagger.call(void 0, schema)) {
182
182
  const baseVersion = parseInt(schema.swagger, 10);
183
183
  if (baseVersion === 1) {
184
- if (throwIfInvalid) {
184
+ if (shouldThrowIfInvalid) {
185
185
  throw new (0, _chunkAKXTCPGMcjs.ValidationError)("Swagger v1.2 is unsupported.");
186
186
  }
187
187
  return {
@@ -195,7 +195,7 @@ var OASNormalize = class _OASNormalize {
195
195
  }
196
196
  const clonedSchema = JSON.parse(JSON.stringify(schema));
197
197
  const result = await _openapiparser.validate.call(void 0, clonedSchema, parserOptions);
198
- if (!result.valid && throwIfInvalid) {
198
+ if (!result.valid && shouldThrowIfInvalid) {
199
199
  throw new (0, _chunkAKXTCPGMcjs.ValidationError)(_openapiparser.compileErrors.call(void 0, result), {
200
200
  errors: result.errors,
201
201
  warnings: result.warnings
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/erunion/code/readme/oas/packages/oas-normalize/dist/index.cjs","../src/index.ts"],"names":[],"mappings":"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","file":"/Users/erunion/code/readme/oas/packages/oas-normalize/dist/index.cjs","sourcesContent":[null,"import type { ParserOptions, ValidationResult } from '@readme/openapi-parser';\nimport type { OpenAPI, OpenAPIV2, OpenAPIV3 } from 'openapi-types';\nimport type { Options } from './lib/types.js';\n\nimport fs from 'node:fs';\n\nimport { bundle, compileErrors, dereference, validate } from '@readme/openapi-parser';\nimport postmanToOpenAPI from '@readme/postman-to-openapi';\nimport converter from 'swagger2openapi';\n\nimport { ValidationError } from './lib/errors.js';\nimport {\n getAPIDefinitionType,\n getType,\n isOpenAPI,\n isPostman,\n isSwagger,\n prepareURL,\n stringToJSON,\n} from './lib/utils.js';\n\n// biome-ignore lint/style/noDefaultExport: This is fine for now.\nexport default class OASNormalize {\n cache: {\n bundle?: OpenAPI.Document | false;\n convert?: OpenAPI.Document | false;\n deref?: OpenAPI.Document | false;\n load?: Record<string, unknown> | false;\n };\n\n // biome-ignore lint/suspicious/noExplicitAny: Intentionally loose because this library supports a wide variety of inputs.\n file: any;\n\n opts: Options;\n\n type: ReturnType<typeof getType>;\n\n // biome-ignore lint/suspicious/noExplicitAny: Intentionally loose because this library supports a wide variety of inputs.\n constructor(file: any, opts?: Options) {\n this.file = file;\n this.opts = {\n colorizeErrors: false,\n enablePaths: false,\n parser: {},\n ...opts,\n };\n\n if (!this.opts.enablePaths) {\n if (!this.opts.parser) this.opts.parser = {};\n if (!this.opts.parser.resolve) this.opts.parser.resolve = {};\n this.opts.parser.resolve = { file: false };\n }\n\n this.type = getType(this.file);\n\n this.cache = {\n load: false,\n bundle: false,\n deref: false,\n };\n }\n\n /**\n * Load and return the API definition that `oas-normalize` was initialized with.\n *\n */\n async load(): Promise<Record<string, unknown>> {\n if (this.cache.load) return this.cache.load;\n\n const resolve = (obj: Parameters<typeof stringToJSON>[0]) => {\n const ret = stringToJSON(obj);\n this.cache.load = ret;\n return ret;\n };\n\n switch (this.type) {\n case 'json':\n case 'string-json':\n case 'string-yaml':\n return resolve(this.file);\n\n case 'buffer':\n return resolve(this.file.toString());\n\n case 'url': {\n const { url, options } = prepareURL(this.file);\n const resp = await fetch(url, options).then(res => res.text());\n return resolve(resp);\n }\n\n case 'path': {\n // Load a local file\n if (!this.opts.enablePaths) {\n throw new Error('Use `opts.enablePaths` to enable accessing local files.');\n }\n\n const contents = fs.readFileSync(this.file).toString();\n if (!contents.trim()) {\n throw new Error('No file contents found.');\n }\n return resolve(contents);\n }\n\n default:\n throw new Error('Could not load this file.');\n }\n }\n\n private static async convertPostmanToOpenAPI(schema: Record<string, unknown>) {\n return postmanToOpenAPI(JSON.stringify(schema), undefined, {\n outputFormat: 'json',\n replaceVars: true,\n }).then(JSON.parse);\n }\n\n /**\n * Bundle up the given API definition, resolving any external `$ref` pointers in the process.\n *\n */\n async bundle(): Promise<OpenAPI.Document> {\n if (this.cache.bundle) return this.cache.bundle;\n const parserOptions = this.opts.parser || {};\n\n return this.load()\n .then(schema => {\n // Though Postman collections don't support `$ref` pointers for us to bundle we'll still\n // upconvert it to an OpenAPI definition file so our returned dataset is always one of\n // those for a Postman dataset.\n if (isPostman(schema)) {\n return OASNormalize.convertPostmanToOpenAPI(schema);\n }\n\n return schema;\n })\n .then(schema => bundle(schema, parserOptions))\n .then(bundled => {\n this.cache.bundle = bundled;\n return bundled;\n });\n }\n\n /**\n * Dereference the given API definition.\n *\n */\n async dereference(): Promise<OpenAPI.Document> {\n if (this.cache.deref) return this.cache.deref;\n const parserOptions = this.opts.parser || {};\n\n return this.load()\n .then(schema => {\n // Though Postman collections don't support `$ref` pointers for us to dereference we'll\n // still upconvert it to an OpenAPI definition file so our returned dataset is always one\n // of those for a Postman dataset.\n if (isPostman(schema)) {\n return OASNormalize.convertPostmanToOpenAPI(schema);\n }\n\n return schema;\n })\n .then(schema => dereference(schema, parserOptions))\n .then(dereferenced => {\n this.cache.deref = dereferenced;\n return dereferenced;\n });\n }\n\n /**\n * Dereference the given API definition.\n *\n * This method is deprecated in favor of `dereference`. It will be removed in a future release.\n *\n * @deprecated\n */\n async deref(): Promise<OpenAPI.Document> {\n return this.dereference();\n }\n\n /**\n * Convert a given API definition to OpenAPI if it is not already.\n *\n */\n async convert(): Promise<OpenAPI.Document> {\n if (this.cache.convert) return this.cache.convert;\n\n return this.load()\n .then(async schema => {\n // If we have a Postman collection we need to convert it to OpenAPI.\n return isPostman(schema) ? OASNormalize.convertPostmanToOpenAPI(schema) : schema;\n })\n .then(async schema => {\n if (!isSwagger(schema) && !isOpenAPI(schema)) {\n throw new Error('The supplied API definition is unsupported.');\n } else if (isOpenAPI(schema)) {\n return schema;\n }\n\n const baseVersion = parseInt(schema.swagger, 10);\n if (baseVersion === 1) {\n throw new Error('Swagger v1.2 is unsupported.');\n }\n\n return converter\n .convertObj(schema, { anchors: true })\n .then((options: { openapi: OpenAPI.Document }) => options.openapi);\n });\n }\n\n /**\n * Validate a given API definition.\n *\n * If supplied a Postman collection it will be converted to OpenAPI first and then run through\n * standard OpenAPI validation.\n *\n */\n async validate(\n opts: {\n /**\n * Options to supply to our OpenAPI parser. See `@readme/openapi-parser` for documentation.\n * This option is deprecated in favor of the `parser` option on the constructor. It will be\n * removed in a future release.\n *\n * @see {@link https://npm.im/@readme/openapi-parser}\n * @deprecated\n */\n parser?: ParserOptions;\n\n /**\n * Determines if `.validate()` throws a `ValidationError` if the API definition is invalid.\n *\n * By default this will always happen however if you want to always instead receive a\n * `ValidationResult` object back, which will still allow you to determine if the supplied\n * API definition is valid or not, you can set this to `false`.\n */\n throwIfInvalid?: boolean;\n } = {},\n ): Promise<ValidationResult> {\n const throwIfInvalid = opts.throwIfInvalid ?? true;\n const parserOptions = opts.parser || this.opts.parser || {};\n if (!parserOptions.validate) parserOptions.validate = {};\n if (!parserOptions.validate.errors) parserOptions.validate.errors = {};\n\n parserOptions.validate.errors.colorize = this.opts.colorizeErrors;\n\n return this.load()\n .then(async schema => {\n // Because we don't have something akin to `openapi-parser` for Postman collections we just\n // always convert them to OpenAPI.\n return isPostman(schema) ? OASNormalize.convertPostmanToOpenAPI(schema) : schema;\n })\n .then(async schema => {\n if (!isSwagger(schema) && !isOpenAPI(schema)) {\n if (throwIfInvalid) {\n throw new ValidationError('The supplied API definition is unsupported.');\n }\n\n return {\n valid: false,\n errors: [{ message: 'The supplied API definition is unsupported.' }],\n warnings: [],\n additionalErrors: 0,\n specification: null,\n };\n } else if (isSwagger(schema)) {\n const baseVersion = parseInt(schema.swagger, 10);\n if (baseVersion === 1) {\n if (throwIfInvalid) {\n throw new ValidationError('Swagger v1.2 is unsupported.');\n }\n\n return {\n valid: false,\n errors: [{ message: 'Swagger v1.2 is unsupported.' }],\n warnings: [],\n additionalErrors: 0,\n specification: 'Swagger',\n };\n }\n }\n\n /**\n * `OpenAPIParser.validate()` dereferences schemas at the same time as validation, mutating\n * the supplied parameter in the process, and does not give us an option to disable this.\n * As we already have a dereferencing method on this library, and this method just needs to\n * tell us if the API definition is valid or not, we need to clone the schema before\n * supplying it to `openapi-parser`.\n */\n const clonedSchema = JSON.parse(JSON.stringify(schema));\n\n const result = await validate(clonedSchema, parserOptions);\n if (!result.valid && throwIfInvalid) {\n throw new ValidationError(compileErrors(result), {\n errors: result.errors,\n warnings: result.warnings,\n });\n }\n\n // The API definition, whatever its format or specification, is valid.\n return result;\n });\n }\n\n /**\n * Retrieve OpenAPI, Swagger, or Postman version information about the supplied API definition.\n *\n */\n async version(): Promise<{\n specification: 'openapi' | 'postman' | 'swagger';\n version: string | 'unknown';\n }> {\n return this.load().then(schema => {\n switch (getAPIDefinitionType(schema)) {\n case 'openapi':\n return {\n specification: 'openapi',\n version: (schema as unknown as OpenAPIV3.Document).openapi,\n };\n\n case 'postman': {\n let version = 'unknown';\n if ((schema?.info as Record<string, string>)?.schema) {\n // Though `info.schema` is required by the Postman spec there's no strictness to its\n // contents so we'll do our best to extract a version out of this schema URL that they\n // seem to usually match. If not we'll fallback to treating it as an `unknown` version.\n const match = (schema?.info as Record<string, string>).schema.match(\n /http(s?):\\/\\/schema.getpostman.com\\/json\\/collection\\/v([0-9.]+)\\//,\n );\n\n if (match) {\n version = match[2];\n }\n }\n\n return {\n specification: 'postman',\n version,\n };\n }\n\n case 'swagger':\n return {\n specification: 'swagger',\n version: (schema as unknown as OpenAPIV2.Document).swagger,\n };\n\n default:\n throw new Error('Unknown file detected.');\n }\n });\n }\n}\n"]}
1
+ {"version":3,"sources":["/Users/erunion/code/readme/oas/packages/oas-normalize/dist/index.cjs","../src/index.ts"],"names":[],"mappings":"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","file":"/Users/erunion/code/readme/oas/packages/oas-normalize/dist/index.cjs","sourcesContent":[null,"import type { ParserOptions, ValidationResult } from '@readme/openapi-parser';\nimport type { OpenAPI, OpenAPIV2, OpenAPIV3 } from 'openapi-types';\nimport type { Options } from './lib/types.js';\n\nimport fs from 'node:fs';\n\nimport { bundle, compileErrors, dereference, validate } from '@readme/openapi-parser';\nimport postmanToOpenAPI from '@readme/postman-to-openapi';\nimport converter from 'swagger2openapi';\n\nimport { ValidationError } from './lib/errors.js';\nimport {\n getAPIDefinitionType,\n getType,\n isOpenAPI,\n isPostman,\n isSwagger,\n prepareURL,\n stringToJSON,\n} from './lib/utils.js';\n\n// biome-ignore lint/style/noDefaultExport: This is fine for now.\nexport default class OASNormalize {\n cache: {\n bundle?: OpenAPI.Document | false;\n convert?: OpenAPI.Document | false;\n deref?: OpenAPI.Document | false;\n load?: Record<string, unknown> | false;\n };\n\n // biome-ignore lint/suspicious/noExplicitAny: Intentionally loose because this library supports a wide variety of inputs.\n file: any;\n\n opts: Options;\n\n type: ReturnType<typeof getType>;\n\n // biome-ignore lint/suspicious/noExplicitAny: Intentionally loose because this library supports a wide variety of inputs.\n constructor(file: any, opts?: Options) {\n this.file = file;\n this.opts = {\n colorizeErrors: false,\n enablePaths: false,\n parser: {},\n ...opts,\n };\n\n if (!this.opts.enablePaths) {\n if (!this.opts.parser) this.opts.parser = {};\n if (!this.opts.parser.resolve) this.opts.parser.resolve = {};\n this.opts.parser.resolve = { file: false };\n }\n\n this.type = getType(this.file);\n\n this.cache = {\n load: false,\n bundle: false,\n deref: false,\n };\n }\n\n /**\n * Load and return the API definition that `oas-normalize` was initialized with.\n *\n */\n async load(): Promise<Record<string, unknown>> {\n if (this.cache.load) return this.cache.load;\n\n const resolve = (obj: Parameters<typeof stringToJSON>[0]) => {\n const ret = stringToJSON(obj);\n this.cache.load = ret;\n return ret;\n };\n\n switch (this.type) {\n case 'json':\n case 'string-json':\n case 'string-yaml':\n return resolve(this.file);\n\n case 'buffer':\n return resolve(this.file.toString());\n\n case 'url': {\n const { url, options } = prepareURL(this.file);\n const resp = await fetch(url, options).then(res => res.text());\n return resolve(resp);\n }\n\n case 'path': {\n // Load a local file\n if (!this.opts.enablePaths) {\n throw new Error('Use `opts.enablePaths` to enable accessing local files.');\n }\n\n const contents = fs.readFileSync(this.file).toString();\n if (!contents.trim()) {\n throw new Error('No file contents found.');\n }\n return resolve(contents);\n }\n\n default:\n throw new Error('Could not load this file.');\n }\n }\n\n private static async convertPostmanToOpenAPI(schema: Record<string, unknown>) {\n return postmanToOpenAPI(JSON.stringify(schema), undefined, {\n outputFormat: 'json',\n replaceVars: true,\n }).then(JSON.parse);\n }\n\n /**\n * Bundle up the given API definition, resolving any external `$ref` pointers in the process.\n *\n */\n async bundle(): Promise<OpenAPI.Document> {\n if (this.cache.bundle) return this.cache.bundle;\n const parserOptions = this.opts.parser || {};\n\n return this.load()\n .then(schema => {\n // Though Postman collections don't support `$ref` pointers for us to bundle we'll still\n // upconvert it to an OpenAPI definition file so our returned dataset is always one of\n // those for a Postman dataset.\n if (isPostman(schema)) {\n return OASNormalize.convertPostmanToOpenAPI(schema);\n }\n\n return schema;\n })\n .then(schema => bundle(schema, parserOptions))\n .then(bundled => {\n this.cache.bundle = bundled;\n return bundled;\n });\n }\n\n /**\n * Dereference the given API definition.\n *\n */\n async dereference(): Promise<OpenAPI.Document> {\n if (this.cache.deref) return this.cache.deref;\n const parserOptions = this.opts.parser || {};\n\n return this.load()\n .then(schema => {\n // Though Postman collections don't support `$ref` pointers for us to dereference we'll\n // still upconvert it to an OpenAPI definition file so our returned dataset is always one\n // of those for a Postman dataset.\n if (isPostman(schema)) {\n return OASNormalize.convertPostmanToOpenAPI(schema);\n }\n\n return schema;\n })\n .then(schema => dereference(schema, parserOptions))\n .then(dereferenced => {\n this.cache.deref = dereferenced;\n return dereferenced;\n });\n }\n\n /**\n * Dereference the given API definition.\n *\n * This method is deprecated in favor of `dereference`. It will be removed in a future release.\n *\n * @deprecated\n */\n async deref(): Promise<OpenAPI.Document> {\n return this.dereference();\n }\n\n /**\n * Convert a given API definition to OpenAPI if it is not already.\n *\n */\n async convert(): Promise<OpenAPI.Document> {\n if (this.cache.convert) return this.cache.convert;\n\n return this.load()\n .then(async schema => {\n // If we have a Postman collection we need to convert it to OpenAPI.\n return isPostman(schema) ? OASNormalize.convertPostmanToOpenAPI(schema) : schema;\n })\n .then(async schema => {\n if (!isSwagger(schema) && !isOpenAPI(schema)) {\n throw new Error('The supplied API definition is unsupported.');\n } else if (isOpenAPI(schema)) {\n return schema;\n }\n\n const baseVersion = parseInt(schema.swagger, 10);\n if (baseVersion === 1) {\n throw new Error('Swagger v1.2 is unsupported.');\n }\n\n return converter\n .convertObj(schema, { anchors: true })\n .then((options: { openapi: OpenAPI.Document }) => options.openapi);\n });\n }\n\n /**\n * Validate a given API definition.\n *\n * If supplied a Postman collection it will be converted to OpenAPI first and then run through\n * standard OpenAPI validation.\n *\n */\n async validate(\n opts: {\n /**\n * Options to supply to our OpenAPI parser. See `@readme/openapi-parser` for documentation.\n * This option is deprecated in favor of the `parser` option on the constructor. It will be\n * removed in a future release.\n *\n * @see {@link https://npm.im/@readme/openapi-parser}\n * @deprecated\n */\n parser?: ParserOptions;\n\n /**\n * Determines if `.validate()` should throw a `ValidationError` if the API definition is\n * invalid.\n *\n * By default this will always happen however if you want to always instead receive a\n * `ValidationResult` object back, which will still allow you to determine if the supplied\n * API definition is valid or not, you can set this to `false`.\n */\n shouldThrowIfInvalid?: boolean;\n } = {},\n ): Promise<ValidationResult> {\n const shouldThrowIfInvalid = opts.shouldThrowIfInvalid ?? true;\n const parserOptions = opts.parser || this.opts.parser || {};\n if (!parserOptions.validate) parserOptions.validate = {};\n if (!parserOptions.validate.errors) parserOptions.validate.errors = {};\n\n parserOptions.validate.errors.colorize = this.opts.colorizeErrors;\n\n return this.load()\n .then(async schema => {\n // Because we don't have something akin to `openapi-parser` for Postman collections we just\n // always convert them to OpenAPI.\n return isPostman(schema) ? OASNormalize.convertPostmanToOpenAPI(schema) : schema;\n })\n .then(async schema => {\n if (!isSwagger(schema) && !isOpenAPI(schema)) {\n if (shouldThrowIfInvalid) {\n throw new ValidationError('The supplied API definition is unsupported.');\n }\n\n return {\n valid: false,\n errors: [{ message: 'The supplied API definition is unsupported.' }],\n warnings: [],\n additionalErrors: 0,\n specification: null,\n };\n } else if (isSwagger(schema)) {\n const baseVersion = parseInt(schema.swagger, 10);\n if (baseVersion === 1) {\n if (shouldThrowIfInvalid) {\n throw new ValidationError('Swagger v1.2 is unsupported.');\n }\n\n return {\n valid: false,\n errors: [{ message: 'Swagger v1.2 is unsupported.' }],\n warnings: [],\n additionalErrors: 0,\n specification: 'Swagger',\n };\n }\n }\n\n /**\n * `OpenAPIParser.validate()` dereferences schemas at the same time as validation, mutating\n * the supplied parameter in the process, and does not give us an option to disable this.\n * As we already have a dereferencing method on this library, and this method just needs to\n * tell us if the API definition is valid or not, we need to clone the schema before\n * supplying it to `openapi-parser`.\n */\n const clonedSchema = JSON.parse(JSON.stringify(schema));\n\n const result = await validate(clonedSchema, parserOptions);\n if (!result.valid && shouldThrowIfInvalid) {\n throw new ValidationError(compileErrors(result), {\n errors: result.errors,\n warnings: result.warnings,\n });\n }\n\n // The API definition, whatever its format or specification, is valid.\n return result;\n });\n }\n\n /**\n * Retrieve OpenAPI, Swagger, or Postman version information about the supplied API definition.\n *\n */\n async version(): Promise<{\n specification: 'openapi' | 'postman' | 'swagger';\n version: string | 'unknown';\n }> {\n return this.load().then(schema => {\n switch (getAPIDefinitionType(schema)) {\n case 'openapi':\n return {\n specification: 'openapi',\n version: (schema as unknown as OpenAPIV3.Document).openapi,\n };\n\n case 'postman': {\n let version = 'unknown';\n if ((schema?.info as Record<string, string>)?.schema) {\n // Though `info.schema` is required by the Postman spec there's no strictness to its\n // contents so we'll do our best to extract a version out of this schema URL that they\n // seem to usually match. If not we'll fallback to treating it as an `unknown` version.\n const match = (schema?.info as Record<string, string>).schema.match(\n /http(s?):\\/\\/schema.getpostman.com\\/json\\/collection\\/v([0-9.]+)\\//,\n );\n\n if (match) {\n version = match[2];\n }\n }\n\n return {\n specification: 'postman',\n version,\n };\n }\n\n case 'swagger':\n return {\n specification: 'swagger',\n version: (schema as unknown as OpenAPIV2.Document).swagger,\n };\n\n default:\n throw new Error('Unknown file detected.');\n }\n });\n }\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -61,13 +61,14 @@ declare class OASNormalize {
61
61
  */
62
62
  parser?: ParserOptions;
63
63
  /**
64
- * Determines if `.validate()` throws a `ValidationError` if the API definition is invalid.
64
+ * Determines if `.validate()` should throw a `ValidationError` if the API definition is
65
+ * invalid.
65
66
  *
66
67
  * By default this will always happen however if you want to always instead receive a
67
68
  * `ValidationResult` object back, which will still allow you to determine if the supplied
68
69
  * API definition is valid or not, you can set this to `false`.
69
70
  */
70
- throwIfInvalid?: boolean;
71
+ shouldThrowIfInvalid?: boolean;
71
72
  }): Promise<ValidationResult>;
72
73
  /**
73
74
  * Retrieve OpenAPI, Swagger, or Postman version information about the supplied API definition.
package/dist/index.d.ts CHANGED
@@ -61,13 +61,14 @@ declare class OASNormalize {
61
61
  */
62
62
  parser?: ParserOptions;
63
63
  /**
64
- * Determines if `.validate()` throws a `ValidationError` if the API definition is invalid.
64
+ * Determines if `.validate()` should throw a `ValidationError` if the API definition is
65
+ * invalid.
65
66
  *
66
67
  * By default this will always happen however if you want to always instead receive a
67
68
  * `ValidationResult` object back, which will still allow you to determine if the supplied
68
69
  * API definition is valid or not, you can set this to `false`.
69
70
  */
70
- throwIfInvalid?: boolean;
71
+ shouldThrowIfInvalid?: boolean;
71
72
  }): Promise<ValidationResult>;
72
73
  /**
73
74
  * Retrieve OpenAPI, Swagger, or Postman version information about the supplied API definition.
package/dist/index.js CHANGED
@@ -159,7 +159,7 @@ var OASNormalize = class _OASNormalize {
159
159
  *
160
160
  */
161
161
  async validate(opts = {}) {
162
- const throwIfInvalid = opts.throwIfInvalid ?? true;
162
+ const shouldThrowIfInvalid = opts.shouldThrowIfInvalid ?? true;
163
163
  const parserOptions = opts.parser || this.opts.parser || {};
164
164
  if (!parserOptions.validate) parserOptions.validate = {};
165
165
  if (!parserOptions.validate.errors) parserOptions.validate.errors = {};
@@ -168,7 +168,7 @@ var OASNormalize = class _OASNormalize {
168
168
  return isPostman(schema) ? _OASNormalize.convertPostmanToOpenAPI(schema) : schema;
169
169
  }).then(async (schema) => {
170
170
  if (!isSwagger(schema) && !isOpenAPI(schema)) {
171
- if (throwIfInvalid) {
171
+ if (shouldThrowIfInvalid) {
172
172
  throw new ValidationError("The supplied API definition is unsupported.");
173
173
  }
174
174
  return {
@@ -181,7 +181,7 @@ var OASNormalize = class _OASNormalize {
181
181
  } else if (isSwagger(schema)) {
182
182
  const baseVersion = parseInt(schema.swagger, 10);
183
183
  if (baseVersion === 1) {
184
- if (throwIfInvalid) {
184
+ if (shouldThrowIfInvalid) {
185
185
  throw new ValidationError("Swagger v1.2 is unsupported.");
186
186
  }
187
187
  return {
@@ -195,7 +195,7 @@ var OASNormalize = class _OASNormalize {
195
195
  }
196
196
  const clonedSchema = JSON.parse(JSON.stringify(schema));
197
197
  const result = await validate(clonedSchema, parserOptions);
198
- if (!result.valid && throwIfInvalid) {
198
+ if (!result.valid && shouldThrowIfInvalid) {
199
199
  throw new ValidationError(compileErrors(result), {
200
200
  errors: result.errors,
201
201
  warnings: result.warnings
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { ParserOptions, ValidationResult } from '@readme/openapi-parser';\nimport type { OpenAPI, OpenAPIV2, OpenAPIV3 } from 'openapi-types';\nimport type { Options } from './lib/types.js';\n\nimport fs from 'node:fs';\n\nimport { bundle, compileErrors, dereference, validate } from '@readme/openapi-parser';\nimport postmanToOpenAPI from '@readme/postman-to-openapi';\nimport converter from 'swagger2openapi';\n\nimport { ValidationError } from './lib/errors.js';\nimport {\n getAPIDefinitionType,\n getType,\n isOpenAPI,\n isPostman,\n isSwagger,\n prepareURL,\n stringToJSON,\n} from './lib/utils.js';\n\n// biome-ignore lint/style/noDefaultExport: This is fine for now.\nexport default class OASNormalize {\n cache: {\n bundle?: OpenAPI.Document | false;\n convert?: OpenAPI.Document | false;\n deref?: OpenAPI.Document | false;\n load?: Record<string, unknown> | false;\n };\n\n // biome-ignore lint/suspicious/noExplicitAny: Intentionally loose because this library supports a wide variety of inputs.\n file: any;\n\n opts: Options;\n\n type: ReturnType<typeof getType>;\n\n // biome-ignore lint/suspicious/noExplicitAny: Intentionally loose because this library supports a wide variety of inputs.\n constructor(file: any, opts?: Options) {\n this.file = file;\n this.opts = {\n colorizeErrors: false,\n enablePaths: false,\n parser: {},\n ...opts,\n };\n\n if (!this.opts.enablePaths) {\n if (!this.opts.parser) this.opts.parser = {};\n if (!this.opts.parser.resolve) this.opts.parser.resolve = {};\n this.opts.parser.resolve = { file: false };\n }\n\n this.type = getType(this.file);\n\n this.cache = {\n load: false,\n bundle: false,\n deref: false,\n };\n }\n\n /**\n * Load and return the API definition that `oas-normalize` was initialized with.\n *\n */\n async load(): Promise<Record<string, unknown>> {\n if (this.cache.load) return this.cache.load;\n\n const resolve = (obj: Parameters<typeof stringToJSON>[0]) => {\n const ret = stringToJSON(obj);\n this.cache.load = ret;\n return ret;\n };\n\n switch (this.type) {\n case 'json':\n case 'string-json':\n case 'string-yaml':\n return resolve(this.file);\n\n case 'buffer':\n return resolve(this.file.toString());\n\n case 'url': {\n const { url, options } = prepareURL(this.file);\n const resp = await fetch(url, options).then(res => res.text());\n return resolve(resp);\n }\n\n case 'path': {\n // Load a local file\n if (!this.opts.enablePaths) {\n throw new Error('Use `opts.enablePaths` to enable accessing local files.');\n }\n\n const contents = fs.readFileSync(this.file).toString();\n if (!contents.trim()) {\n throw new Error('No file contents found.');\n }\n return resolve(contents);\n }\n\n default:\n throw new Error('Could not load this file.');\n }\n }\n\n private static async convertPostmanToOpenAPI(schema: Record<string, unknown>) {\n return postmanToOpenAPI(JSON.stringify(schema), undefined, {\n outputFormat: 'json',\n replaceVars: true,\n }).then(JSON.parse);\n }\n\n /**\n * Bundle up the given API definition, resolving any external `$ref` pointers in the process.\n *\n */\n async bundle(): Promise<OpenAPI.Document> {\n if (this.cache.bundle) return this.cache.bundle;\n const parserOptions = this.opts.parser || {};\n\n return this.load()\n .then(schema => {\n // Though Postman collections don't support `$ref` pointers for us to bundle we'll still\n // upconvert it to an OpenAPI definition file so our returned dataset is always one of\n // those for a Postman dataset.\n if (isPostman(schema)) {\n return OASNormalize.convertPostmanToOpenAPI(schema);\n }\n\n return schema;\n })\n .then(schema => bundle(schema, parserOptions))\n .then(bundled => {\n this.cache.bundle = bundled;\n return bundled;\n });\n }\n\n /**\n * Dereference the given API definition.\n *\n */\n async dereference(): Promise<OpenAPI.Document> {\n if (this.cache.deref) return this.cache.deref;\n const parserOptions = this.opts.parser || {};\n\n return this.load()\n .then(schema => {\n // Though Postman collections don't support `$ref` pointers for us to dereference we'll\n // still upconvert it to an OpenAPI definition file so our returned dataset is always one\n // of those for a Postman dataset.\n if (isPostman(schema)) {\n return OASNormalize.convertPostmanToOpenAPI(schema);\n }\n\n return schema;\n })\n .then(schema => dereference(schema, parserOptions))\n .then(dereferenced => {\n this.cache.deref = dereferenced;\n return dereferenced;\n });\n }\n\n /**\n * Dereference the given API definition.\n *\n * This method is deprecated in favor of `dereference`. It will be removed in a future release.\n *\n * @deprecated\n */\n async deref(): Promise<OpenAPI.Document> {\n return this.dereference();\n }\n\n /**\n * Convert a given API definition to OpenAPI if it is not already.\n *\n */\n async convert(): Promise<OpenAPI.Document> {\n if (this.cache.convert) return this.cache.convert;\n\n return this.load()\n .then(async schema => {\n // If we have a Postman collection we need to convert it to OpenAPI.\n return isPostman(schema) ? OASNormalize.convertPostmanToOpenAPI(schema) : schema;\n })\n .then(async schema => {\n if (!isSwagger(schema) && !isOpenAPI(schema)) {\n throw new Error('The supplied API definition is unsupported.');\n } else if (isOpenAPI(schema)) {\n return schema;\n }\n\n const baseVersion = parseInt(schema.swagger, 10);\n if (baseVersion === 1) {\n throw new Error('Swagger v1.2 is unsupported.');\n }\n\n return converter\n .convertObj(schema, { anchors: true })\n .then((options: { openapi: OpenAPI.Document }) => options.openapi);\n });\n }\n\n /**\n * Validate a given API definition.\n *\n * If supplied a Postman collection it will be converted to OpenAPI first and then run through\n * standard OpenAPI validation.\n *\n */\n async validate(\n opts: {\n /**\n * Options to supply to our OpenAPI parser. See `@readme/openapi-parser` for documentation.\n * This option is deprecated in favor of the `parser` option on the constructor. It will be\n * removed in a future release.\n *\n * @see {@link https://npm.im/@readme/openapi-parser}\n * @deprecated\n */\n parser?: ParserOptions;\n\n /**\n * Determines if `.validate()` throws a `ValidationError` if the API definition is invalid.\n *\n * By default this will always happen however if you want to always instead receive a\n * `ValidationResult` object back, which will still allow you to determine if the supplied\n * API definition is valid or not, you can set this to `false`.\n */\n throwIfInvalid?: boolean;\n } = {},\n ): Promise<ValidationResult> {\n const throwIfInvalid = opts.throwIfInvalid ?? true;\n const parserOptions = opts.parser || this.opts.parser || {};\n if (!parserOptions.validate) parserOptions.validate = {};\n if (!parserOptions.validate.errors) parserOptions.validate.errors = {};\n\n parserOptions.validate.errors.colorize = this.opts.colorizeErrors;\n\n return this.load()\n .then(async schema => {\n // Because we don't have something akin to `openapi-parser` for Postman collections we just\n // always convert them to OpenAPI.\n return isPostman(schema) ? OASNormalize.convertPostmanToOpenAPI(schema) : schema;\n })\n .then(async schema => {\n if (!isSwagger(schema) && !isOpenAPI(schema)) {\n if (throwIfInvalid) {\n throw new ValidationError('The supplied API definition is unsupported.');\n }\n\n return {\n valid: false,\n errors: [{ message: 'The supplied API definition is unsupported.' }],\n warnings: [],\n additionalErrors: 0,\n specification: null,\n };\n } else if (isSwagger(schema)) {\n const baseVersion = parseInt(schema.swagger, 10);\n if (baseVersion === 1) {\n if (throwIfInvalid) {\n throw new ValidationError('Swagger v1.2 is unsupported.');\n }\n\n return {\n valid: false,\n errors: [{ message: 'Swagger v1.2 is unsupported.' }],\n warnings: [],\n additionalErrors: 0,\n specification: 'Swagger',\n };\n }\n }\n\n /**\n * `OpenAPIParser.validate()` dereferences schemas at the same time as validation, mutating\n * the supplied parameter in the process, and does not give us an option to disable this.\n * As we already have a dereferencing method on this library, and this method just needs to\n * tell us if the API definition is valid or not, we need to clone the schema before\n * supplying it to `openapi-parser`.\n */\n const clonedSchema = JSON.parse(JSON.stringify(schema));\n\n const result = await validate(clonedSchema, parserOptions);\n if (!result.valid && throwIfInvalid) {\n throw new ValidationError(compileErrors(result), {\n errors: result.errors,\n warnings: result.warnings,\n });\n }\n\n // The API definition, whatever its format or specification, is valid.\n return result;\n });\n }\n\n /**\n * Retrieve OpenAPI, Swagger, or Postman version information about the supplied API definition.\n *\n */\n async version(): Promise<{\n specification: 'openapi' | 'postman' | 'swagger';\n version: string | 'unknown';\n }> {\n return this.load().then(schema => {\n switch (getAPIDefinitionType(schema)) {\n case 'openapi':\n return {\n specification: 'openapi',\n version: (schema as unknown as OpenAPIV3.Document).openapi,\n };\n\n case 'postman': {\n let version = 'unknown';\n if ((schema?.info as Record<string, string>)?.schema) {\n // Though `info.schema` is required by the Postman spec there's no strictness to its\n // contents so we'll do our best to extract a version out of this schema URL that they\n // seem to usually match. If not we'll fallback to treating it as an `unknown` version.\n const match = (schema?.info as Record<string, string>).schema.match(\n /http(s?):\\/\\/schema.getpostman.com\\/json\\/collection\\/v([0-9.]+)\\//,\n );\n\n if (match) {\n version = match[2];\n }\n }\n\n return {\n specification: 'postman',\n version,\n };\n }\n\n case 'swagger':\n return {\n specification: 'swagger',\n version: (schema as unknown as OpenAPIV2.Document).swagger,\n };\n\n default:\n throw new Error('Unknown file detected.');\n }\n });\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { ParserOptions, ValidationResult } from '@readme/openapi-parser';\nimport type { OpenAPI, OpenAPIV2, OpenAPIV3 } from 'openapi-types';\nimport type { Options } from './lib/types.js';\n\nimport fs from 'node:fs';\n\nimport { bundle, compileErrors, dereference, validate } from '@readme/openapi-parser';\nimport postmanToOpenAPI from '@readme/postman-to-openapi';\nimport converter from 'swagger2openapi';\n\nimport { ValidationError } from './lib/errors.js';\nimport {\n getAPIDefinitionType,\n getType,\n isOpenAPI,\n isPostman,\n isSwagger,\n prepareURL,\n stringToJSON,\n} from './lib/utils.js';\n\n// biome-ignore lint/style/noDefaultExport: This is fine for now.\nexport default class OASNormalize {\n cache: {\n bundle?: OpenAPI.Document | false;\n convert?: OpenAPI.Document | false;\n deref?: OpenAPI.Document | false;\n load?: Record<string, unknown> | false;\n };\n\n // biome-ignore lint/suspicious/noExplicitAny: Intentionally loose because this library supports a wide variety of inputs.\n file: any;\n\n opts: Options;\n\n type: ReturnType<typeof getType>;\n\n // biome-ignore lint/suspicious/noExplicitAny: Intentionally loose because this library supports a wide variety of inputs.\n constructor(file: any, opts?: Options) {\n this.file = file;\n this.opts = {\n colorizeErrors: false,\n enablePaths: false,\n parser: {},\n ...opts,\n };\n\n if (!this.opts.enablePaths) {\n if (!this.opts.parser) this.opts.parser = {};\n if (!this.opts.parser.resolve) this.opts.parser.resolve = {};\n this.opts.parser.resolve = { file: false };\n }\n\n this.type = getType(this.file);\n\n this.cache = {\n load: false,\n bundle: false,\n deref: false,\n };\n }\n\n /**\n * Load and return the API definition that `oas-normalize` was initialized with.\n *\n */\n async load(): Promise<Record<string, unknown>> {\n if (this.cache.load) return this.cache.load;\n\n const resolve = (obj: Parameters<typeof stringToJSON>[0]) => {\n const ret = stringToJSON(obj);\n this.cache.load = ret;\n return ret;\n };\n\n switch (this.type) {\n case 'json':\n case 'string-json':\n case 'string-yaml':\n return resolve(this.file);\n\n case 'buffer':\n return resolve(this.file.toString());\n\n case 'url': {\n const { url, options } = prepareURL(this.file);\n const resp = await fetch(url, options).then(res => res.text());\n return resolve(resp);\n }\n\n case 'path': {\n // Load a local file\n if (!this.opts.enablePaths) {\n throw new Error('Use `opts.enablePaths` to enable accessing local files.');\n }\n\n const contents = fs.readFileSync(this.file).toString();\n if (!contents.trim()) {\n throw new Error('No file contents found.');\n }\n return resolve(contents);\n }\n\n default:\n throw new Error('Could not load this file.');\n }\n }\n\n private static async convertPostmanToOpenAPI(schema: Record<string, unknown>) {\n return postmanToOpenAPI(JSON.stringify(schema), undefined, {\n outputFormat: 'json',\n replaceVars: true,\n }).then(JSON.parse);\n }\n\n /**\n * Bundle up the given API definition, resolving any external `$ref` pointers in the process.\n *\n */\n async bundle(): Promise<OpenAPI.Document> {\n if (this.cache.bundle) return this.cache.bundle;\n const parserOptions = this.opts.parser || {};\n\n return this.load()\n .then(schema => {\n // Though Postman collections don't support `$ref` pointers for us to bundle we'll still\n // upconvert it to an OpenAPI definition file so our returned dataset is always one of\n // those for a Postman dataset.\n if (isPostman(schema)) {\n return OASNormalize.convertPostmanToOpenAPI(schema);\n }\n\n return schema;\n })\n .then(schema => bundle(schema, parserOptions))\n .then(bundled => {\n this.cache.bundle = bundled;\n return bundled;\n });\n }\n\n /**\n * Dereference the given API definition.\n *\n */\n async dereference(): Promise<OpenAPI.Document> {\n if (this.cache.deref) return this.cache.deref;\n const parserOptions = this.opts.parser || {};\n\n return this.load()\n .then(schema => {\n // Though Postman collections don't support `$ref` pointers for us to dereference we'll\n // still upconvert it to an OpenAPI definition file so our returned dataset is always one\n // of those for a Postman dataset.\n if (isPostman(schema)) {\n return OASNormalize.convertPostmanToOpenAPI(schema);\n }\n\n return schema;\n })\n .then(schema => dereference(schema, parserOptions))\n .then(dereferenced => {\n this.cache.deref = dereferenced;\n return dereferenced;\n });\n }\n\n /**\n * Dereference the given API definition.\n *\n * This method is deprecated in favor of `dereference`. It will be removed in a future release.\n *\n * @deprecated\n */\n async deref(): Promise<OpenAPI.Document> {\n return this.dereference();\n }\n\n /**\n * Convert a given API definition to OpenAPI if it is not already.\n *\n */\n async convert(): Promise<OpenAPI.Document> {\n if (this.cache.convert) return this.cache.convert;\n\n return this.load()\n .then(async schema => {\n // If we have a Postman collection we need to convert it to OpenAPI.\n return isPostman(schema) ? OASNormalize.convertPostmanToOpenAPI(schema) : schema;\n })\n .then(async schema => {\n if (!isSwagger(schema) && !isOpenAPI(schema)) {\n throw new Error('The supplied API definition is unsupported.');\n } else if (isOpenAPI(schema)) {\n return schema;\n }\n\n const baseVersion = parseInt(schema.swagger, 10);\n if (baseVersion === 1) {\n throw new Error('Swagger v1.2 is unsupported.');\n }\n\n return converter\n .convertObj(schema, { anchors: true })\n .then((options: { openapi: OpenAPI.Document }) => options.openapi);\n });\n }\n\n /**\n * Validate a given API definition.\n *\n * If supplied a Postman collection it will be converted to OpenAPI first and then run through\n * standard OpenAPI validation.\n *\n */\n async validate(\n opts: {\n /**\n * Options to supply to our OpenAPI parser. See `@readme/openapi-parser` for documentation.\n * This option is deprecated in favor of the `parser` option on the constructor. It will be\n * removed in a future release.\n *\n * @see {@link https://npm.im/@readme/openapi-parser}\n * @deprecated\n */\n parser?: ParserOptions;\n\n /**\n * Determines if `.validate()` should throw a `ValidationError` if the API definition is\n * invalid.\n *\n * By default this will always happen however if you want to always instead receive a\n * `ValidationResult` object back, which will still allow you to determine if the supplied\n * API definition is valid or not, you can set this to `false`.\n */\n shouldThrowIfInvalid?: boolean;\n } = {},\n ): Promise<ValidationResult> {\n const shouldThrowIfInvalid = opts.shouldThrowIfInvalid ?? true;\n const parserOptions = opts.parser || this.opts.parser || {};\n if (!parserOptions.validate) parserOptions.validate = {};\n if (!parserOptions.validate.errors) parserOptions.validate.errors = {};\n\n parserOptions.validate.errors.colorize = this.opts.colorizeErrors;\n\n return this.load()\n .then(async schema => {\n // Because we don't have something akin to `openapi-parser` for Postman collections we just\n // always convert them to OpenAPI.\n return isPostman(schema) ? OASNormalize.convertPostmanToOpenAPI(schema) : schema;\n })\n .then(async schema => {\n if (!isSwagger(schema) && !isOpenAPI(schema)) {\n if (shouldThrowIfInvalid) {\n throw new ValidationError('The supplied API definition is unsupported.');\n }\n\n return {\n valid: false,\n errors: [{ message: 'The supplied API definition is unsupported.' }],\n warnings: [],\n additionalErrors: 0,\n specification: null,\n };\n } else if (isSwagger(schema)) {\n const baseVersion = parseInt(schema.swagger, 10);\n if (baseVersion === 1) {\n if (shouldThrowIfInvalid) {\n throw new ValidationError('Swagger v1.2 is unsupported.');\n }\n\n return {\n valid: false,\n errors: [{ message: 'Swagger v1.2 is unsupported.' }],\n warnings: [],\n additionalErrors: 0,\n specification: 'Swagger',\n };\n }\n }\n\n /**\n * `OpenAPIParser.validate()` dereferences schemas at the same time as validation, mutating\n * the supplied parameter in the process, and does not give us an option to disable this.\n * As we already have a dereferencing method on this library, and this method just needs to\n * tell us if the API definition is valid or not, we need to clone the schema before\n * supplying it to `openapi-parser`.\n */\n const clonedSchema = JSON.parse(JSON.stringify(schema));\n\n const result = await validate(clonedSchema, parserOptions);\n if (!result.valid && shouldThrowIfInvalid) {\n throw new ValidationError(compileErrors(result), {\n errors: result.errors,\n warnings: result.warnings,\n });\n }\n\n // The API definition, whatever its format or specification, is valid.\n return result;\n });\n }\n\n /**\n * Retrieve OpenAPI, Swagger, or Postman version information about the supplied API definition.\n *\n */\n async version(): Promise<{\n specification: 'openapi' | 'postman' | 'swagger';\n version: string | 'unknown';\n }> {\n return this.load().then(schema => {\n switch (getAPIDefinitionType(schema)) {\n case 'openapi':\n return {\n specification: 'openapi',\n version: (schema as unknown as OpenAPIV3.Document).openapi,\n };\n\n case 'postman': {\n let version = 'unknown';\n if ((schema?.info as Record<string, string>)?.schema) {\n // Though `info.schema` is required by the Postman spec there's no strictness to its\n // contents so we'll do our best to extract a version out of this schema URL that they\n // seem to usually match. If not we'll fallback to treating it as an `unknown` version.\n const match = (schema?.info as Record<string, string>).schema.match(\n /http(s?):\\/\\/schema.getpostman.com\\/json\\/collection\\/v([0-9.]+)\\//,\n );\n\n if (match) {\n version = match[2];\n }\n }\n\n return {\n specification: 'postman',\n version,\n };\n }\n\n case 'swagger':\n return {\n specification: 'swagger',\n version: (schema as unknown as OpenAPIV2.Document).swagger,\n };\n\n default:\n throw new Error('Unknown file detected.');\n }\n });\n }\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oas-normalize",
3
- "version": "15.3.0",
3
+ "version": "15.5.0",
4
4
  "description": "Tooling for converting, validating, and parsing OpenAPI, Swagger, and Postman API definitions",
5
5
  "type": "module",
6
6
  "exports": {
@@ -67,14 +67,14 @@
67
67
  },
68
68
  "license": "MIT",
69
69
  "dependencies": {
70
- "@readme/openapi-parser": "^5.2.1",
70
+ "@readme/openapi-parser": "^5.3.0",
71
71
  "@readme/postman-to-openapi": "^4.1.0",
72
72
  "js-yaml": "^4.1.0",
73
73
  "openapi-types": "^12.1.3",
74
74
  "swagger2openapi": "^7.0.8"
75
75
  },
76
76
  "devDependencies": {
77
- "@readme/oas-examples": "^7.0.4",
77
+ "@readme/oas-examples": "^7.1.0",
78
78
  "@types/js-yaml": "^4.0.9",
79
79
  "@types/swagger2openapi": "^7.0.4",
80
80
  "nock": "^14.0.2",
@@ -83,5 +83,5 @@
83
83
  "vitest": "^4.0.8"
84
84
  },
85
85
  "prettier": "@readme/standards/prettier",
86
- "gitHead": "fa28db715970254290eda0604a90a9ab6173dffc"
86
+ "gitHead": "fca3e8132c5bff47152974bcc010be5138b8992d"
87
87
  }