oas 25.2.0 → 25.2.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.
@@ -1,16 +1,16 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
  var _chunkCPI37LBJcjs = require('../chunk-CPI37LBJ.cjs');
4
+
5
+
6
+
7
+ var _chunkW6GBV2JTcjs = require('../chunk-W6GBV2JT.cjs');
4
8
  require('../chunk-DAS55TQF.cjs');
5
9
  require('../chunk-VIIXOUMH.cjs');
6
10
  require('../chunk-TG4VCYD4.cjs');
7
11
  require('../chunk-YHO3AOX6.cjs');
8
12
  require('../chunk-4DQE5VZI.cjs');
9
13
 
10
-
11
-
12
- var _chunkW6GBV2JTcjs = require('../chunk-W6GBV2JT.cjs');
13
-
14
14
  // src/analyzer/queries/openapi.ts
15
15
  function additionalProperties(definition) {
16
16
  return _chunkW6GBV2JTcjs.query.call(void 0, ["$..additionalProperties"], definition).map((res) => _chunkW6GBV2JTcjs.refizePointer.call(void 0, res.pointer));
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/erunion/code/readme/oas/packages/oas/dist/analyzer/index.cjs","../../src/analyzer/queries/openapi.ts","../../src/analyzer/queries/readme.ts","../../src/analyzer/index.ts"],"names":["additionalProperties","callbacks","circularRefs","commonParameters","discriminators","links","parameterSerialization","polymorphism","serverVariables","webhooks","xml","authDefaults","codeSampleLanguages","customCodeSamples","codeSamplesDisabled","explorerDisabled","staticHeaders","rawBody","refNames"],"mappings":"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","file":"/Users/erunion/code/readme/oas/packages/oas/dist/analyzer/index.cjs","sourcesContent":[null,"import type { OASDocument } from '../../types.js';\n\nimport Oas from '../../index.js';\nimport { query, refizePointer } from '../util.js';\n\n/**\n * Determine if a given API definition uses the `additionalProperties` schema property.\n *\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#schema-object}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#schema-object}\n */\nexport function additionalProperties(definition: OASDocument) {\n return query(['$..additionalProperties'], definition).map(res => refizePointer(res.pointer));\n}\n\n/**\n * Determine if a given API definition utilizes `callbacks`.\n *\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#callback-object}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#callback-object}\n */\nexport function callbacks(definition: OASDocument) {\n return query(['$.components.callbacks', '$.paths..callbacks'], definition).map(res => refizePointer(res.pointer));\n}\n\n/**\n * Determine if a given API definition has circular refs.\n *\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#schema-object}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#schema-object}\n */\nexport async function circularRefs(definition: OASDocument) {\n // Dereferencing will update the passed in variable, which we don't want to do, so we\n // instantiated `Oas` with a clone.\n // eslint-disable-next-line try-catch-failsafe/json-parse\n const oas = new Oas(JSON.parse(JSON.stringify(definition)));\n await oas.dereference();\n\n const results = oas.getCircularReferences();\n\n results.sort();\n return results;\n}\n\n/**\n * Determine if a given API definition utilizes common parameters.\n *\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#path-item-object}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#path-item-object}\n */\nexport function commonParameters(definition: OASDocument) {\n return query(['$..paths[*].parameters'], definition).map(res => refizePointer(res.pointer));\n}\n\n/**\n * Determine if a given API definition utilizes discriminators.\n *\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#discriminator-object}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#discriminator-object}\n */\nexport function discriminators(definition: OASDocument) {\n return query(['$..discriminator'], definition).map(res => refizePointer(res.pointer));\n}\n\n/**\n * Determine if a given API definition utilizes `links`.\n *\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#link-object}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#link-object}\n */\nexport function links(definition: OASDocument) {\n return query(['$..links'], definition).map(res => refizePointer(res.pointer));\n}\n\n/**\n * Determine all of the available media types used within an API definition.\n *\n * @todo This query currently picks up false positives if there is an object named `content`.\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#request-body-object}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#request-body-object}\n */\nexport function mediaTypes(definition: OASDocument) {\n const results = Array.from(\n new Set(\n query(['$..paths..content'], definition)\n .map(res => {\n // This'll transform `results`, which looks like `[['application/json'], ['text/xml']]`\n // into `['application/json', 'text/xml']`.\n return Object.keys(res.value);\n })\n .flat(),\n ),\n );\n\n results.sort();\n return results;\n}\n\n/**\n * Determine if a given API definition uses parameter serialization.\n *\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#parameter-object}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#parameter-object}\n */\nexport function parameterSerialization(definition: OASDocument) {\n return query(['$..parameters[*].style^'], definition).map(res => refizePointer(res.pointer));\n}\n\n/**\n * Determine if a given API definition utilizes schema polymorphism and/of interitance.\n *\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#schema-object}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#schema-object}\n */\nexport function polymorphism(definition: OASDocument) {\n const results = Array.from(\n new Set(query(['$..allOf^', '$..anyOf^', '$..oneOf^'], definition).map(res => refizePointer(res.pointer))),\n );\n\n results.sort();\n return results;\n}\n\n/**\n * Determine every kind of security type that a given API definition has documented.\n *\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#security-scheme-object}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#security-scheme-object}\n */\nexport function securityTypes(definition: OASDocument) {\n return Array.from(new Set(query(['$.components.securitySchemes..type'], definition).map(res => res.value as string)));\n}\n\n/**\n * Determine if a given API definition utilizes server variables.\n *\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#server-variable-object}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#server-variable-object}\n */\nexport function serverVariables(definition: OASDocument) {\n return query(['$.servers..variables^'], definition).map(res => refizePointer(res.pointer));\n}\n\n/**\n * Determine how many operations are defined in a given API definition.\n *\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#operation-object}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#operation-object}\n */\nexport function totalOperations(definition: OASDocument) {\n return query(['$..paths[*]'], definition)\n .map(res => Object.keys(res.value))\n .flat().length;\n}\n\n/**\n * Determine if a given API definition utilizes `webhooks` support in OpenAPI 3.1.\n *\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#oasWebhooks}\n */\nexport function webhooks(definition: OASDocument) {\n return query(['$.webhooks[*]'], definition).map(res => refizePointer(res.pointer));\n}\n\n/**\n * Determine if a given API definition has XML schemas, payloads, or responses.\n *\n * @todo detect `+xml` media types\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#xml-object}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#xml-object}\n */\nexport function xml(definition: OASDocument) {\n return query(\n [\n '$.components.schemas..xml^',\n '$..parameters..xml^',\n '$..requestBody..xml^',\n\n \"$..requestBody..['application/xml']\",\n \"$..requestBody..['application/xml-external-parsed-entity']\",\n \"$..requestBody..['application/xml-dtd']\",\n \"$..requestBody..['text/xml']\",\n \"$..requestBody..['text/xml-external-parsed-entity']\",\n '$..requestBody.content[?(@property.match(/\\\\+xml$/i))]',\n\n \"$..responses..['application/xml']\",\n \"$..responses..['application/xml-external-parsed-entity']\",\n \"$..responses..['application/xml-dtd']\",\n \"$..responses..['text/xml']\",\n \"$..responses..['text/xml-external-parsed-entity']\",\n '$..responses[*].content[?(@property.match(/\\\\+xml$/i))]',\n ],\n definition,\n ).map(res => refizePointer(res.pointer));\n}\n","import type { OASDocument } from '../../types.js';\n\nimport { query, refizePointer } from '../util.js';\n\n/**\n * Determine if a given API definition is using our `x-default` extension for defining auth\n * defaults.\n *\n * @see {@link https://docs.readme.com/main/docs/openapi-extensions#authentication-defaults}\n */\nexport function authDefaults(definition: OASDocument) {\n return query([\"$.components.securitySchemes..['x-default']^\"], definition).map(res => refizePointer(res.pointer));\n}\n\n/**\n * Determine all of the code sample languages, using the `x-readme.samples-languages` extension\n * that are specified within an API definition.\n *\n * @see {@link https://docs.readme.com/main/docs/openapi-extensions#code-sample-languages}\n */\nexport function codeSampleLanguages(definition: OASDocument) {\n const results: string[] = Array.from(\n new Set(\n query([\"$..['x-readme']['samples-languages']\", \"$..['x-samples-languages']\"], definition)\n .map(res => res.value as string)\n .reduce((prev, next) => prev.concat(next), []),\n ),\n );\n\n results.sort();\n return results;\n}\n\n/**\n * Determine if a given API defintion is using the `x-samples-enabled` extension for disabling\n * code samples.\n *\n * @see {@link https://docs.readme.com/main/docs/openapi-extensions#disable-code-examples}\n */\nexport function codeSamplesDisabled(definition: OASDocument) {\n return Array.from(\n new Set(\n query(\n [\n \"$['x-samples-enabled']^\",\n \"$['x-readme']['samples-enabled']\",\n \"$..paths[*]..['x-samples-enabled']^\",\n \"$..paths[*]..['x-readme']['samples-enabled']^^\",\n ],\n definition,\n ).map(res => refizePointer(res.pointer)),\n ),\n );\n}\n\n/**\n * Determine if a given API definition is using our `x-proxy-enabled` extension for disabling the\n * \"Try It\" CORS proxy.\n *\n * @see {@link https://docs.readme.com/main/docs/openapi-extensions#cors-proxy-enabled}\n */\nexport function corsProxyDisabled(definition: OASDocument) {\n return Array.from(\n new Set(\n query(\n [\n \"$['x-proxy-enabled']^\",\n \"$['x-readme']['proxy-enabled']\",\n \"$..paths[*]..['x-proxy-enabled']^\",\n \"$..paths[*]..['x-readme']['proxy-enabled']^^\",\n ],\n definition,\n ).map(res => refizePointer(res.pointer)),\n ),\n );\n}\n\n/**\n * Determine if a given API definition is using our `x-code-samples` extension for documentating\n * custom code samples.\n *\n * @see {@link https://docs.readme.com/main/docs/openapi-extensions#custom-code-samples}\n */\nexport function customCodeSamples(definition: OASDocument) {\n return query([\"$..['x-code-samples']\", \"$..['x-readme']['code-samples']\"], definition)\n .filter(res => {\n // If `code-samples` is an empty array then we ignore it.\n return Array.isArray(res.value) && res.value.length ? res : false;\n })\n .map(res => refizePointer(res.pointer));\n}\n\n/**\n * Determine if a given API definition is using our `x-explorer-enabled` extension for disabling\n * \"Try It\" functionality.\n *\n * @see {@link https://docs.readme.com/main/docs/openapi-extensions#disable-the-api-explorer}\n */\nexport function explorerDisabled(definition: OASDocument) {\n return query(\n [\n \"$['x-explorer-enabled']^\",\n \"$['x-readme']['explorer-enabled']\",\n \"$..paths[*]..['x-explorer-enabled']^\",\n \"$..paths[*]..['x-readme']['explorer-enabled']^^\",\n ],\n definition,\n ).map(res => refizePointer(res.pointer));\n}\n\n/**\n * Determine if a given API definition uses the `RAW_BODY` manual API hack for raw body content.\n *\n * @see {@link https://docs.readme.com/main/docs/manual-api-editor#raw-body-content-body-content}\n */\nexport function rawBody(definition: OASDocument) {\n return query(['$..RAW_BODY^^'], definition).map(res => refizePointer(res.pointer));\n}\n\n/**\n * Determine if a given API definition is using our `x-readme.headers` extension for defining\n * static headers.\n *\n * @see {@link https://docs.readme.com/main/docs/openapi-extensions#static-headers}\n */\nexport function staticHeaders(definition: OASDocument) {\n return query([\"$..['x-headers']\", \"$..['x-readme']['headers']\"], definition)\n .filter(res => {\n // If `headers` is an empty array then we ignore it.\n return Array.isArray(res.value) && res.value.length ? res : false;\n })\n .map(res => refizePointer(res.pointer));\n}\n\n/**\n * Determine if a given API definition previously had references by checking if we added the\n * `x-readme-ref-name` extension after dereferencing.\n */\nexport function refNames(definition: OASDocument) {\n return query([\"$..['x-readme-ref-name']\"], definition).map(res => refizePointer(res.pointer));\n}\n","import type { OASAnalysis } from './types.js';\nimport type { OASDocument } from '../types.js';\n\nimport * as OPENAPI_QUERIES from './queries/openapi.js';\nimport * as README_QUERIES from './queries/readme.js';\n\n/**\n * Analyze a given OpenAPI or Swagger definition for any OpenAPI, JSON Schema, and ReadMe-specific\n * feature uses it may contain.\n *\n * @todo this might be worth moving into the `oas` package at some point\n */\nexport default async function analyzer(definition: OASDocument): Promise<OASAnalysis> {\n const additionalProperties = OPENAPI_QUERIES.additionalProperties(definition);\n const callbacks = OPENAPI_QUERIES.callbacks(definition);\n const circularRefs = await OPENAPI_QUERIES.circularRefs(definition);\n const commonParameters = OPENAPI_QUERIES.commonParameters(definition);\n const discriminators = OPENAPI_QUERIES.discriminators(definition);\n const links = OPENAPI_QUERIES.links(definition);\n const parameterSerialization = OPENAPI_QUERIES.parameterSerialization(definition);\n const polymorphism = OPENAPI_QUERIES.polymorphism(definition);\n const serverVariables = OPENAPI_QUERIES.serverVariables(definition);\n const webhooks = OPENAPI_QUERIES.webhooks(definition);\n const xml = OPENAPI_QUERIES.xml(definition);\n\n const authDefaults = README_QUERIES.authDefaults(definition);\n const codeSampleLanguages = README_QUERIES.codeSampleLanguages(definition);\n const customCodeSamples = README_QUERIES.customCodeSamples(definition);\n const codeSamplesDisabled = README_QUERIES.codeSamplesDisabled(definition);\n const disabledCorsProxy = README_QUERIES.corsProxyDisabled(definition);\n const explorerDisabled = README_QUERIES.explorerDisabled(definition);\n const staticHeaders = README_QUERIES.staticHeaders(definition);\n const rawBody = README_QUERIES.rawBody(definition);\n const refNames = README_QUERIES.refNames(definition);\n\n const analysis: OASAnalysis = {\n general: {\n mediaTypes: {\n name: 'Media Type',\n found: OPENAPI_QUERIES.mediaTypes(definition),\n },\n operationTotal: {\n name: 'Operation',\n found: OPENAPI_QUERIES.totalOperations(definition),\n },\n securityTypes: {\n name: 'Security Type',\n found: OPENAPI_QUERIES.securityTypes(definition),\n },\n },\n openapi: {\n additionalProperties: {\n present: !!additionalProperties.length,\n locations: additionalProperties,\n },\n callbacks: {\n present: !!callbacks.length,\n locations: callbacks,\n },\n circularRefs: {\n present: !!circularRefs.length,\n locations: circularRefs,\n },\n commonParameters: {\n present: !!commonParameters.length,\n locations: commonParameters,\n },\n discriminators: {\n present: !!discriminators.length,\n locations: discriminators,\n },\n links: {\n present: !!links.length,\n locations: links,\n },\n style: {\n present: !!parameterSerialization.length,\n locations: parameterSerialization,\n },\n polymorphism: {\n present: !!polymorphism.length,\n locations: polymorphism,\n },\n serverVariables: {\n present: !!serverVariables.length,\n locations: serverVariables,\n },\n webhooks: {\n present: !!webhooks.length,\n locations: webhooks,\n },\n xml: {\n present: !!xml.length,\n locations: xml,\n },\n },\n readme: {\n 'x-default': {\n present: !!authDefaults.length,\n locations: authDefaults,\n },\n 'x-readme.code-samples': {\n present: !!customCodeSamples.length,\n locations: customCodeSamples,\n },\n 'x-readme.headers': {\n present: !!staticHeaders.length,\n locations: staticHeaders,\n },\n 'x-readme.explorer-enabled': {\n present: !!explorerDisabled.length,\n locations: explorerDisabled,\n },\n 'x-readme.proxy-enabled': {\n present: !!disabledCorsProxy.length,\n locations: disabledCorsProxy,\n },\n 'x-readme.samples-languages': {\n present: !!codeSampleLanguages.length,\n locations: codeSampleLanguages,\n },\n 'x-readme-ref-name': {\n present: !!refNames.length,\n locations: refNames,\n },\n },\n };\n\n // We should only surface analysis for deprecated features and extensions if they have them as\n // there's no reason to give them information about something they can't use and should no longer\n // know about.\n if (codeSamplesDisabled.length) {\n analysis.readme['x-readme.samples-enabled'] = {\n present: !!codeSamplesDisabled.length,\n locations: codeSamplesDisabled,\n };\n }\n\n if (rawBody.length) {\n analysis.readme.raw_body = {\n present: !!rawBody.length,\n locations: rawBody,\n };\n }\n\n return analysis;\n}\n"]}
1
+ {"version":3,"sources":["/Users/erunion/code/readme/oas/packages/oas/dist/analyzer/index.cjs","../../src/analyzer/queries/openapi.ts","../../src/analyzer/queries/readme.ts","../../src/analyzer/index.ts"],"names":["additionalProperties","callbacks","circularRefs","commonParameters","discriminators","links","parameterSerialization","polymorphism","serverVariables","webhooks","xml","authDefaults","codeSampleLanguages","customCodeSamples","codeSamplesDisabled","explorerDisabled","staticHeaders","rawBody","refNames"],"mappings":"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","file":"/Users/erunion/code/readme/oas/packages/oas/dist/analyzer/index.cjs","sourcesContent":[null,"import type { OASDocument } from '../../types.js';\n\nimport Oas from '../../index.js';\nimport { query, refizePointer } from '../util.js';\n\n/**\n * Determine if a given API definition uses the `additionalProperties` schema property.\n *\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#schema-object}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#schema-object}\n */\nexport function additionalProperties(definition: OASDocument) {\n return query(['$..additionalProperties'], definition).map(res => refizePointer(res.pointer));\n}\n\n/**\n * Determine if a given API definition utilizes `callbacks`.\n *\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#callback-object}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#callback-object}\n */\nexport function callbacks(definition: OASDocument) {\n return query(['$.components.callbacks', '$.paths..callbacks'], definition).map(res => refizePointer(res.pointer));\n}\n\n/**\n * Determine if a given API definition has circular refs.\n *\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#schema-object}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#schema-object}\n */\nexport async function circularRefs(definition: OASDocument) {\n // Dereferencing will update the passed in variable, which we don't want to do, so we\n // instantiated `Oas` with a clone.\n // eslint-disable-next-line try-catch-failsafe/json-parse\n const oas = new Oas(JSON.parse(JSON.stringify(definition)));\n await oas.dereference();\n\n const results = oas.getCircularReferences();\n\n results.sort();\n return results;\n}\n\n/**\n * Determine if a given API definition utilizes common parameters.\n *\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#path-item-object}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#path-item-object}\n */\nexport function commonParameters(definition: OASDocument) {\n return query(['$..paths[*].parameters'], definition).map(res => refizePointer(res.pointer));\n}\n\n/**\n * Determine if a given API definition utilizes discriminators.\n *\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#discriminator-object}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#discriminator-object}\n */\nexport function discriminators(definition: OASDocument) {\n return query(['$..discriminator'], definition).map(res => refizePointer(res.pointer));\n}\n\n/**\n * Determine if a given API definition utilizes `links`.\n *\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#link-object}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#link-object}\n */\nexport function links(definition: OASDocument) {\n return query(['$..links'], definition).map(res => refizePointer(res.pointer));\n}\n\n/**\n * Determine all of the available media types used within an API definition.\n *\n * @todo This query currently picks up false positives if there is an object named `content`.\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#request-body-object}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#request-body-object}\n */\nexport function mediaTypes(definition: OASDocument) {\n const results = Array.from(\n new Set(\n query(['$..paths..content'], definition)\n .map(res => {\n // This'll transform `results`, which looks like `[['application/json'], ['text/xml']]`\n // into `['application/json', 'text/xml']`.\n return Object.keys(res.value);\n })\n .flat(),\n ),\n );\n\n results.sort();\n return results;\n}\n\n/**\n * Determine if a given API definition uses parameter serialization.\n *\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#parameter-object}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#parameter-object}\n */\nexport function parameterSerialization(definition: OASDocument) {\n return query(['$..parameters[*].style^'], definition).map(res => refizePointer(res.pointer));\n}\n\n/**\n * Determine if a given API definition utilizes schema polymorphism and/of interitance.\n *\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#schema-object}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#schema-object}\n */\nexport function polymorphism(definition: OASDocument) {\n const results = Array.from(\n new Set(query(['$..allOf^', '$..anyOf^', '$..oneOf^'], definition).map(res => refizePointer(res.pointer))),\n );\n\n results.sort();\n return results;\n}\n\n/**\n * Determine every kind of security type that a given API definition has documented.\n *\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#security-scheme-object}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#security-scheme-object}\n */\nexport function securityTypes(definition: OASDocument) {\n return Array.from(new Set(query(['$.components.securitySchemes..type'], definition).map(res => res.value as string)));\n}\n\n/**\n * Determine if a given API definition utilizes server variables.\n *\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#server-variable-object}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#server-variable-object}\n */\nexport function serverVariables(definition: OASDocument) {\n return query(['$.servers..variables^'], definition).map(res => refizePointer(res.pointer));\n}\n\n/**\n * Determine how many operations are defined in a given API definition.\n *\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#operation-object}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#operation-object}\n */\nexport function totalOperations(definition: OASDocument) {\n return query(['$..paths[*]'], definition)\n .map(res => Object.keys(res.value))\n .flat().length;\n}\n\n/**\n * Determine if a given API definition utilizes `webhooks` support in OpenAPI 3.1.\n *\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#oasWebhooks}\n */\nexport function webhooks(definition: OASDocument) {\n return query(['$.webhooks[*]'], definition).map(res => refizePointer(res.pointer));\n}\n\n/**\n * Determine if a given API definition has XML schemas, payloads, or responses.\n *\n * @todo detect `+xml` media types\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#xml-object}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#xml-object}\n */\nexport function xml(definition: OASDocument) {\n return query(\n [\n '$.components.schemas..xml^',\n '$..parameters..xml^',\n '$..requestBody..xml^',\n\n \"$..requestBody..['application/xml']\",\n \"$..requestBody..['application/xml-external-parsed-entity']\",\n \"$..requestBody..['application/xml-dtd']\",\n \"$..requestBody..['text/xml']\",\n \"$..requestBody..['text/xml-external-parsed-entity']\",\n '$..requestBody.content[?(@property.match(/\\\\+xml$/i))]',\n\n \"$..responses..['application/xml']\",\n \"$..responses..['application/xml-external-parsed-entity']\",\n \"$..responses..['application/xml-dtd']\",\n \"$..responses..['text/xml']\",\n \"$..responses..['text/xml-external-parsed-entity']\",\n '$..responses[*].content[?(@property.match(/\\\\+xml$/i))]',\n ],\n definition,\n ).map(res => refizePointer(res.pointer));\n}\n","import type { OASDocument } from '../../types.js';\n\nimport { query, refizePointer } from '../util.js';\n\n/**\n * Determine if a given API definition is using our `x-default` extension for defining auth\n * defaults.\n *\n * @see {@link https://docs.readme.com/main/docs/openapi-extensions#authentication-defaults}\n */\nexport function authDefaults(definition: OASDocument) {\n return query([\"$.components.securitySchemes..['x-default']^\"], definition).map(res => refizePointer(res.pointer));\n}\n\n/**\n * Determine all of the code sample languages, using the `x-readme.samples-languages` extension\n * that are specified within an API definition.\n *\n * @see {@link https://docs.readme.com/main/docs/openapi-extensions#code-sample-languages}\n */\nexport function codeSampleLanguages(definition: OASDocument) {\n const results: string[] = Array.from(\n new Set(\n query([\"$..['x-readme']['samples-languages']\", \"$..['x-samples-languages']\"], definition)\n .map(res => res.value as string)\n .reduce((prev, next) => prev.concat(next), []),\n ),\n );\n\n results.sort();\n return results;\n}\n\n/**\n * Determine if a given API defintion is using the `x-samples-enabled` extension for disabling\n * code samples.\n *\n * @see {@link https://docs.readme.com/main/docs/openapi-extensions#disable-code-examples}\n */\nexport function codeSamplesDisabled(definition: OASDocument) {\n return Array.from(\n new Set(\n query(\n [\n \"$['x-samples-enabled']^\",\n \"$['x-readme']['samples-enabled']\",\n \"$..paths[*]..['x-samples-enabled']^\",\n \"$..paths[*]..['x-readme']['samples-enabled']^^\",\n ],\n definition,\n ).map(res => refizePointer(res.pointer)),\n ),\n );\n}\n\n/**\n * Determine if a given API definition is using our `x-proxy-enabled` extension for disabling the\n * \"Try It\" CORS proxy.\n *\n * @see {@link https://docs.readme.com/main/docs/openapi-extensions#cors-proxy-enabled}\n */\nexport function corsProxyDisabled(definition: OASDocument) {\n return Array.from(\n new Set(\n query(\n [\n \"$['x-proxy-enabled']^\",\n \"$['x-readme']['proxy-enabled']\",\n \"$..paths[*]..['x-proxy-enabled']^\",\n \"$..paths[*]..['x-readme']['proxy-enabled']^^\",\n ],\n definition,\n ).map(res => refizePointer(res.pointer)),\n ),\n );\n}\n\n/**\n * Determine if a given API definition is using our `x-code-samples` extension for documentating\n * custom code samples.\n *\n * @see {@link https://docs.readme.com/main/docs/openapi-extensions#custom-code-samples}\n */\nexport function customCodeSamples(definition: OASDocument) {\n return query([\"$..['x-code-samples']\", \"$..['x-readme']['code-samples']\"], definition)\n .filter(res => {\n // If `code-samples` is an empty array then we ignore it.\n return Array.isArray(res.value) && res.value.length ? res : false;\n })\n .map(res => refizePointer(res.pointer));\n}\n\n/**\n * Determine if a given API definition is using our `x-explorer-enabled` extension for disabling\n * \"Try It\" functionality.\n *\n * @see {@link https://docs.readme.com/main/docs/openapi-extensions#disable-the-api-explorer}\n */\nexport function explorerDisabled(definition: OASDocument) {\n return query(\n [\n \"$['x-explorer-enabled']^\",\n \"$['x-readme']['explorer-enabled']\",\n \"$..paths[*]..['x-explorer-enabled']^\",\n \"$..paths[*]..['x-readme']['explorer-enabled']^^\",\n ],\n definition,\n ).map(res => refizePointer(res.pointer));\n}\n\n/**\n * Determine if a given API definition uses the `RAW_BODY` manual API hack for raw body content.\n *\n * @see {@link https://docs.readme.com/main/docs/manual-api-editor#raw-body-content-body-content}\n */\nexport function rawBody(definition: OASDocument) {\n return query(['$..RAW_BODY^^'], definition).map(res => refizePointer(res.pointer));\n}\n\n/**\n * Determine if a given API definition is using our `x-readme.headers` extension for defining\n * static headers.\n *\n * @see {@link https://docs.readme.com/main/docs/openapi-extensions#static-headers}\n */\nexport function staticHeaders(definition: OASDocument) {\n return query([\"$..['x-headers']\", \"$..['x-readme']['headers']\"], definition)\n .filter(res => {\n // If `headers` is an empty array then we ignore it.\n return Array.isArray(res.value) && res.value.length ? res : false;\n })\n .map(res => refizePointer(res.pointer));\n}\n\n/**\n * Determine if a given API definition previously had references by checking if we added the\n * `x-readme-ref-name` extension after dereferencing.\n */\nexport function refNames(definition: OASDocument) {\n return query([\"$..['x-readme-ref-name']\"], definition).map(res => refizePointer(res.pointer));\n}\n","import type { OASAnalysis } from './types.js';\nimport type { OASDocument } from '../types.js';\n\nimport * as OPENAPI_QUERIES from './queries/openapi.js';\nimport * as README_QUERIES from './queries/readme.js';\n\n/**\n * Analyze a given OpenAPI or Swagger definition for any OpenAPI, JSON Schema, and ReadMe-specific\n * feature uses it may contain.\n *\n * @todo this might be worth moving into the `oas` package at some point\n */\nexport default async function analyzer(definition: OASDocument): Promise<OASAnalysis> {\n const additionalProperties = OPENAPI_QUERIES.additionalProperties(definition);\n const callbacks = OPENAPI_QUERIES.callbacks(definition);\n const circularRefs = await OPENAPI_QUERIES.circularRefs(definition);\n const commonParameters = OPENAPI_QUERIES.commonParameters(definition);\n const discriminators = OPENAPI_QUERIES.discriminators(definition);\n const links = OPENAPI_QUERIES.links(definition);\n const parameterSerialization = OPENAPI_QUERIES.parameterSerialization(definition);\n const polymorphism = OPENAPI_QUERIES.polymorphism(definition);\n const serverVariables = OPENAPI_QUERIES.serverVariables(definition);\n const webhooks = OPENAPI_QUERIES.webhooks(definition);\n const xml = OPENAPI_QUERIES.xml(definition);\n\n const authDefaults = README_QUERIES.authDefaults(definition);\n const codeSampleLanguages = README_QUERIES.codeSampleLanguages(definition);\n const customCodeSamples = README_QUERIES.customCodeSamples(definition);\n const codeSamplesDisabled = README_QUERIES.codeSamplesDisabled(definition);\n const disabledCorsProxy = README_QUERIES.corsProxyDisabled(definition);\n const explorerDisabled = README_QUERIES.explorerDisabled(definition);\n const staticHeaders = README_QUERIES.staticHeaders(definition);\n const rawBody = README_QUERIES.rawBody(definition);\n const refNames = README_QUERIES.refNames(definition);\n\n const analysis: OASAnalysis = {\n general: {\n mediaTypes: {\n name: 'Media Type',\n found: OPENAPI_QUERIES.mediaTypes(definition),\n },\n operationTotal: {\n name: 'Operation',\n found: OPENAPI_QUERIES.totalOperations(definition),\n },\n securityTypes: {\n name: 'Security Type',\n found: OPENAPI_QUERIES.securityTypes(definition),\n },\n },\n openapi: {\n additionalProperties: {\n present: !!additionalProperties.length,\n locations: additionalProperties,\n },\n callbacks: {\n present: !!callbacks.length,\n locations: callbacks,\n },\n circularRefs: {\n present: !!circularRefs.length,\n locations: circularRefs,\n },\n commonParameters: {\n present: !!commonParameters.length,\n locations: commonParameters,\n },\n discriminators: {\n present: !!discriminators.length,\n locations: discriminators,\n },\n links: {\n present: !!links.length,\n locations: links,\n },\n style: {\n present: !!parameterSerialization.length,\n locations: parameterSerialization,\n },\n polymorphism: {\n present: !!polymorphism.length,\n locations: polymorphism,\n },\n serverVariables: {\n present: !!serverVariables.length,\n locations: serverVariables,\n },\n webhooks: {\n present: !!webhooks.length,\n locations: webhooks,\n },\n xml: {\n present: !!xml.length,\n locations: xml,\n },\n },\n readme: {\n 'x-default': {\n present: !!authDefaults.length,\n locations: authDefaults,\n },\n 'x-readme.code-samples': {\n present: !!customCodeSamples.length,\n locations: customCodeSamples,\n },\n 'x-readme.headers': {\n present: !!staticHeaders.length,\n locations: staticHeaders,\n },\n 'x-readme.explorer-enabled': {\n present: !!explorerDisabled.length,\n locations: explorerDisabled,\n },\n 'x-readme.proxy-enabled': {\n present: !!disabledCorsProxy.length,\n locations: disabledCorsProxy,\n },\n 'x-readme.samples-languages': {\n present: !!codeSampleLanguages.length,\n locations: codeSampleLanguages,\n },\n 'x-readme-ref-name': {\n present: !!refNames.length,\n locations: refNames,\n },\n },\n };\n\n // We should only surface analysis for deprecated features and extensions if they have them as\n // there's no reason to give them information about something they can't use and should no longer\n // know about.\n if (codeSamplesDisabled.length) {\n analysis.readme['x-readme.samples-enabled'] = {\n present: !!codeSamplesDisabled.length,\n locations: codeSamplesDisabled,\n };\n }\n\n if (rawBody.length) {\n analysis.readme.raw_body = {\n present: !!rawBody.length,\n locations: rawBody,\n };\n }\n\n return analysis;\n}\n"]}
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  Oas
3
3
  } from "../chunk-V6OITOCT.js";
4
+ import {
5
+ query,
6
+ refizePointer
7
+ } from "../chunk-CKC36IL7.js";
4
8
  import "../chunk-CLQZGF6D.js";
5
9
  import "../chunk-SITXIAYE.js";
6
10
  import "../chunk-W7MR5CC7.js";
7
11
  import "../chunk-P2SB77YR.js";
8
12
  import "../chunk-QMLWI5HD.js";
9
- import {
10
- query,
11
- refizePointer
12
- } from "../chunk-CKC36IL7.js";
13
13
 
14
14
  // src/analyzer/queries/openapi.ts
15
15
  function additionalProperties(definition) {
@@ -4,7 +4,6 @@ var _chunkW6GBV2JTcjs = require('../chunk-W6GBV2JT.cjs');
4
4
 
5
5
  // src/reducer/index.ts
6
6
  var _jsonpointer = require('jsonpointer'); var _jsonpointer2 = _interopRequireDefault(_jsonpointer);
7
- var _utils = require('oas-normalize/lib/utils');
8
7
  function getUsedRefs(schema) {
9
8
  return _chunkW6GBV2JTcjs.query.call(void 0, ["$..['$ref']"], schema);
10
9
  }
@@ -32,7 +31,7 @@ function reducer(definition, opts = {}) {
32
31
  }, {}) : {};
33
32
  const $refs = /* @__PURE__ */ new Set();
34
33
  const usedTags = /* @__PURE__ */ new Set();
35
- if (_utils.getAPIDefinitionType.call(void 0, definition) !== "openapi") {
34
+ if (!definition.openapi) {
36
35
  throw new Error("Sorry, only OpenAPI definitions are supported.");
37
36
  }
38
37
  const reduced = JSON.parse(JSON.stringify(definition));
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/erunion/code/readme/oas/packages/oas/dist/reducer/index.cjs","../../src/reducer/index.ts"],"names":[],"mappings":"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","file":"/Users/erunion/code/readme/oas/packages/oas/dist/reducer/index.cjs","sourcesContent":[null,"import type { ComponentsObject, HttpMethods, OASDocument, TagObject } from '../types.js';\n\nimport jsonPointer from 'jsonpointer';\nimport { getAPIDefinitionType } from 'oas-normalize/lib/utils';\n\nimport { query } from '../analyzer/util.js';\n\ninterface ReducerOptions {\n /** A key-value object of path + method combinations to reduce by. */\n paths?: Record<string, string[] | '*'>;\n /** An array of tags in the OpenAPI definition to reduce by. */\n tags?: string[];\n}\n\n/**\n * Query a JSON Schema object for any `$ref` pointers. Return any pointers that were found.\n *\n * @param schema JSON Schema object to look for any `$ref` pointers within it.\n */\nfunction getUsedRefs(schema: any) {\n return query([\"$..['$ref']\"], schema);\n}\n\n/**\n * Recursively process a `$ref` pointer and accumulate any other `$ref` pointers that it or its\n * children use.\n *\n * @param schema JSON Schema object to look for and accumulate any `$ref` pointers that it may have.\n * @param $refs Known set of `$ref` pointers.\n * @param $ref `$ref` pointer to fetch a schema from out of the supplied schema.\n */\nfunction accumulateUsedRefs(schema: Record<string, unknown>, $refs: Set<string>, $ref: any): void {\n let $refSchema;\n if (typeof $ref === 'string') $refSchema = jsonPointer.get(schema, $ref.substring(1));\n if ($refSchema === undefined) {\n // If the schema we have wasn't fully dereferenced or bundled for whatever reason and this\n // `$ref` that we have doesn't exist here we shouldn't try to search for more `$ref` pointers\n // in a schema that doesn't exist.\n return;\n }\n\n getUsedRefs($refSchema).forEach(({ value: currRef }) => {\n // If we've already processed this $ref don't send us into an infinite loop.\n if ($refs.has(currRef)) {\n return;\n }\n\n $refs.add(currRef);\n accumulateUsedRefs(schema, $refs, currRef);\n });\n}\n\n/**\n * With an array of tags or object of paths+method combinations, reduce an OpenAPI definition to a\n * new definition that just contains those tags or path + methods.\n *\n * @example <caption>Reduce by an array of tags only.</caption>\n * reducer(apiDefinition, { tags: ['pet'] })\n *\n * @example <caption>Reduce by a specific path and methods.</caption>\n * reducer(apiDefinition, { paths: { '/pet': ['get', 'post'] } })\n *\n * @example <caption>Reduce by a specific path and all methods it has.</caption>\n * reducer(apiDefinition, { paths: { '/pet': '*' } })\n *\n * @param definition A valid OpenAPI 3.x definition\n */\nexport default function reducer(definition: OASDocument, opts: ReducerOptions = {}) {\n // Convert tags and paths to lowercase since casing should not matter.\n const reduceTags = 'tags' in opts ? opts.tags.map(tag => tag.toLowerCase()) : [];\n const reducePaths =\n 'paths' in opts\n ? Object.entries(opts.paths).reduce((acc: Record<string, string[] | string>, [key, value]) => {\n const newKey = key.toLowerCase();\n const newValue = Array.isArray(value) ? value.map(v => v.toLowerCase()) : value.toLowerCase();\n acc[newKey] = newValue;\n return acc;\n }, {})\n : {};\n\n const $refs: Set<string> = new Set();\n const usedTags: Set<string> = new Set();\n\n if (getAPIDefinitionType(definition) !== 'openapi') {\n throw new Error('Sorry, only OpenAPI definitions are supported.');\n }\n\n // Stringify and parse so we get a full non-reference clone of the API definition to work with.\n // eslint-disable-next-line try-catch-failsafe/json-parse\n const reduced = JSON.parse(JSON.stringify(definition)) as OASDocument;\n\n // Retain any root-level security definitions.\n if ('security' in reduced) {\n Object.values(reduced.security).forEach(sec => {\n Object.keys(sec).forEach(scheme => {\n $refs.add(`#/components/securitySchemes/${scheme}`);\n });\n });\n }\n\n if ('paths' in reduced) {\n Object.keys(reduced.paths).forEach(path => {\n const pathLC = path.toLowerCase();\n\n if (Object.keys(reducePaths).length) {\n if (!(pathLC in reducePaths)) {\n delete reduced.paths[path];\n return;\n }\n }\n\n Object.keys(reduced.paths[path]).forEach((method: HttpMethods | 'parameters') => {\n // If this method is `parameters` we should always retain it.\n if (method !== 'parameters') {\n if (Object.keys(reducePaths).length) {\n if (\n reducePaths[pathLC] !== '*' &&\n Array.isArray(reducePaths[pathLC]) &&\n !reducePaths[pathLC].includes(method)\n ) {\n delete reduced.paths[path][method];\n return;\n }\n }\n }\n\n const operation = reduced.paths[path][method];\n\n // If we're reducing by tags and this operation doesn't live in one of those, remove it.\n if (reduceTags.length) {\n if (!('tags' in operation)) {\n delete reduced.paths[path][method];\n return;\n } else if (!operation.tags.filter(tag => reduceTags.includes(tag.toLowerCase())).length) {\n delete reduced.paths[path][method];\n return;\n }\n }\n\n // Accumulate a list of used tags so we can filter out any ones that we don't need later.\n if ('tags' in operation) {\n operation.tags.forEach((tag: string) => {\n usedTags.add(tag);\n });\n }\n\n // Accumulate a list of $ref pointers that are used within this operation.\n getUsedRefs(operation).forEach(({ value: ref }) => {\n $refs.add(ref);\n });\n\n // Accumulate any used security schemas that we need to retain.\n if ('security' in operation) {\n Object.values(operation.security).forEach(sec => {\n Object.keys(sec).forEach(scheme => {\n $refs.add(`#/components/securitySchemes/${scheme}`);\n });\n });\n }\n });\n\n // If this path no longer has any methods, delete it.\n if (!Object.keys(reduced.paths[path]).length) {\n delete reduced.paths[path];\n }\n });\n\n // If we don't have any more paths after cleanup, throw an error because an OpenAPI file must\n // have at least one path.\n if (!Object.keys(reduced.paths).length) {\n throw new Error('All paths in the API definition were removed. Did you supply the right path name to reduce by?');\n }\n }\n\n // Recursively accumulate any components that are in use.\n $refs.forEach($ref => accumulateUsedRefs(reduced, $refs, $ref));\n\n // Remove any unused components.\n if ('components' in reduced) {\n Object.keys(reduced.components).forEach((componentType: keyof ComponentsObject) => {\n Object.keys(reduced.components[componentType]).forEach(component => {\n if (!$refs.has(`#/components/${componentType}/${component}`)) {\n delete reduced.components[componentType][component];\n }\n });\n\n // If this component group is now empty, delete it.\n if (!Object.keys(reduced.components[componentType]).length) {\n delete reduced.components[componentType];\n }\n });\n\n // If this path no longer has any components, delete it.\n if (!Object.keys(reduced.components).length) {\n delete reduced.components;\n }\n }\n\n // Remove any unused tags.\n if ('tags' in reduced) {\n reduced.tags.forEach((tag: TagObject, k: number) => {\n if (!usedTags.has(tag.name)) {\n delete reduced.tags[k];\n }\n });\n\n // Remove any now empty items from the tags array.\n reduced.tags = reduced.tags.filter(Boolean);\n\n if (!reduced.tags.length) {\n delete reduced.tags;\n }\n }\n\n return reduced;\n}\n"]}
1
+ {"version":3,"sources":["/Users/erunion/code/readme/oas/packages/oas/dist/reducer/index.cjs","../../src/reducer/index.ts"],"names":[],"mappings":"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","file":"/Users/erunion/code/readme/oas/packages/oas/dist/reducer/index.cjs","sourcesContent":[null,"import type { ComponentsObject, HttpMethods, OASDocument, TagObject } from '../types.js';\n\nimport jsonPointer from 'jsonpointer';\n\nimport { query } from '../analyzer/util.js';\n\ninterface ReducerOptions {\n /** A key-value object of path + method combinations to reduce by. */\n paths?: Record<string, string[] | '*'>;\n /** An array of tags in the OpenAPI definition to reduce by. */\n tags?: string[];\n}\n\n/**\n * Query a JSON Schema object for any `$ref` pointers. Return any pointers that were found.\n *\n * @param schema JSON Schema object to look for any `$ref` pointers within it.\n */\nfunction getUsedRefs(schema: any) {\n return query([\"$..['$ref']\"], schema);\n}\n\n/**\n * Recursively process a `$ref` pointer and accumulate any other `$ref` pointers that it or its\n * children use.\n *\n * @param schema JSON Schema object to look for and accumulate any `$ref` pointers that it may have.\n * @param $refs Known set of `$ref` pointers.\n * @param $ref `$ref` pointer to fetch a schema from out of the supplied schema.\n */\nfunction accumulateUsedRefs(schema: Record<string, unknown>, $refs: Set<string>, $ref: any): void {\n let $refSchema;\n if (typeof $ref === 'string') $refSchema = jsonPointer.get(schema, $ref.substring(1));\n if ($refSchema === undefined) {\n // If the schema we have wasn't fully dereferenced or bundled for whatever reason and this\n // `$ref` that we have doesn't exist here we shouldn't try to search for more `$ref` pointers\n // in a schema that doesn't exist.\n return;\n }\n\n getUsedRefs($refSchema).forEach(({ value: currRef }) => {\n // If we've already processed this $ref don't send us into an infinite loop.\n if ($refs.has(currRef)) {\n return;\n }\n\n $refs.add(currRef);\n accumulateUsedRefs(schema, $refs, currRef);\n });\n}\n\n/**\n * With an array of tags or object of paths+method combinations, reduce an OpenAPI definition to a\n * new definition that just contains those tags or path + methods.\n *\n * @example <caption>Reduce by an array of tags only.</caption>\n * reducer(apiDefinition, { tags: ['pet'] })\n *\n * @example <caption>Reduce by a specific path and methods.</caption>\n * reducer(apiDefinition, { paths: { '/pet': ['get', 'post'] } })\n *\n * @example <caption>Reduce by a specific path and all methods it has.</caption>\n * reducer(apiDefinition, { paths: { '/pet': '*' } })\n *\n * @param definition A valid OpenAPI 3.x definition\n */\nexport default function reducer(definition: OASDocument, opts: ReducerOptions = {}) {\n // Convert tags and paths to lowercase since casing should not matter.\n const reduceTags = 'tags' in opts ? opts.tags.map(tag => tag.toLowerCase()) : [];\n const reducePaths =\n 'paths' in opts\n ? Object.entries(opts.paths).reduce((acc: Record<string, string[] | string>, [key, value]) => {\n const newKey = key.toLowerCase();\n const newValue = Array.isArray(value) ? value.map(v => v.toLowerCase()) : value.toLowerCase();\n acc[newKey] = newValue;\n return acc;\n }, {})\n : {};\n\n const $refs: Set<string> = new Set();\n const usedTags: Set<string> = new Set();\n\n if (!definition.openapi) {\n throw new Error('Sorry, only OpenAPI definitions are supported.');\n }\n\n // Stringify and parse so we get a full non-reference clone of the API definition to work with.\n // eslint-disable-next-line try-catch-failsafe/json-parse\n const reduced = JSON.parse(JSON.stringify(definition)) as OASDocument;\n\n // Retain any root-level security definitions.\n if ('security' in reduced) {\n Object.values(reduced.security).forEach(sec => {\n Object.keys(sec).forEach(scheme => {\n $refs.add(`#/components/securitySchemes/${scheme}`);\n });\n });\n }\n\n if ('paths' in reduced) {\n Object.keys(reduced.paths).forEach(path => {\n const pathLC = path.toLowerCase();\n\n if (Object.keys(reducePaths).length) {\n if (!(pathLC in reducePaths)) {\n delete reduced.paths[path];\n return;\n }\n }\n\n Object.keys(reduced.paths[path]).forEach((method: HttpMethods | 'parameters') => {\n // If this method is `parameters` we should always retain it.\n if (method !== 'parameters') {\n if (Object.keys(reducePaths).length) {\n if (\n reducePaths[pathLC] !== '*' &&\n Array.isArray(reducePaths[pathLC]) &&\n !reducePaths[pathLC].includes(method)\n ) {\n delete reduced.paths[path][method];\n return;\n }\n }\n }\n\n const operation = reduced.paths[path][method];\n\n // If we're reducing by tags and this operation doesn't live in one of those, remove it.\n if (reduceTags.length) {\n if (!('tags' in operation)) {\n delete reduced.paths[path][method];\n return;\n } else if (!operation.tags.filter(tag => reduceTags.includes(tag.toLowerCase())).length) {\n delete reduced.paths[path][method];\n return;\n }\n }\n\n // Accumulate a list of used tags so we can filter out any ones that we don't need later.\n if ('tags' in operation) {\n operation.tags.forEach((tag: string) => {\n usedTags.add(tag);\n });\n }\n\n // Accumulate a list of $ref pointers that are used within this operation.\n getUsedRefs(operation).forEach(({ value: ref }) => {\n $refs.add(ref);\n });\n\n // Accumulate any used security schemas that we need to retain.\n if ('security' in operation) {\n Object.values(operation.security).forEach(sec => {\n Object.keys(sec).forEach(scheme => {\n $refs.add(`#/components/securitySchemes/${scheme}`);\n });\n });\n }\n });\n\n // If this path no longer has any methods, delete it.\n if (!Object.keys(reduced.paths[path]).length) {\n delete reduced.paths[path];\n }\n });\n\n // If we don't have any more paths after cleanup, throw an error because an OpenAPI file must\n // have at least one path.\n if (!Object.keys(reduced.paths).length) {\n throw new Error('All paths in the API definition were removed. Did you supply the right path name to reduce by?');\n }\n }\n\n // Recursively accumulate any components that are in use.\n $refs.forEach($ref => accumulateUsedRefs(reduced, $refs, $ref));\n\n // Remove any unused components.\n if ('components' in reduced) {\n Object.keys(reduced.components).forEach((componentType: keyof ComponentsObject) => {\n Object.keys(reduced.components[componentType]).forEach(component => {\n if (!$refs.has(`#/components/${componentType}/${component}`)) {\n delete reduced.components[componentType][component];\n }\n });\n\n // If this component group is now empty, delete it.\n if (!Object.keys(reduced.components[componentType]).length) {\n delete reduced.components[componentType];\n }\n });\n\n // If this path no longer has any components, delete it.\n if (!Object.keys(reduced.components).length) {\n delete reduced.components;\n }\n }\n\n // Remove any unused tags.\n if ('tags' in reduced) {\n reduced.tags.forEach((tag: TagObject, k: number) => {\n if (!usedTags.has(tag.name)) {\n delete reduced.tags[k];\n }\n });\n\n // Remove any now empty items from the tags array.\n reduced.tags = reduced.tags.filter(Boolean);\n\n if (!reduced.tags.length) {\n delete reduced.tags;\n }\n }\n\n return reduced;\n}\n"]}
@@ -4,7 +4,6 @@ import {
4
4
 
5
5
  // src/reducer/index.ts
6
6
  import jsonPointer from "jsonpointer";
7
- import { getAPIDefinitionType } from "oas-normalize/lib/utils";
8
7
  function getUsedRefs(schema) {
9
8
  return query(["$..['$ref']"], schema);
10
9
  }
@@ -32,7 +31,7 @@ function reducer(definition, opts = {}) {
32
31
  }, {}) : {};
33
32
  const $refs = /* @__PURE__ */ new Set();
34
33
  const usedTags = /* @__PURE__ */ new Set();
35
- if (getAPIDefinitionType(definition) !== "openapi") {
34
+ if (!definition.openapi) {
36
35
  throw new Error("Sorry, only OpenAPI definitions are supported.");
37
36
  }
38
37
  const reduced = JSON.parse(JSON.stringify(definition));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/reducer/index.ts"],"sourcesContent":["import type { ComponentsObject, HttpMethods, OASDocument, TagObject } from '../types.js';\n\nimport jsonPointer from 'jsonpointer';\nimport { getAPIDefinitionType } from 'oas-normalize/lib/utils';\n\nimport { query } from '../analyzer/util.js';\n\ninterface ReducerOptions {\n /** A key-value object of path + method combinations to reduce by. */\n paths?: Record<string, string[] | '*'>;\n /** An array of tags in the OpenAPI definition to reduce by. */\n tags?: string[];\n}\n\n/**\n * Query a JSON Schema object for any `$ref` pointers. Return any pointers that were found.\n *\n * @param schema JSON Schema object to look for any `$ref` pointers within it.\n */\nfunction getUsedRefs(schema: any) {\n return query([\"$..['$ref']\"], schema);\n}\n\n/**\n * Recursively process a `$ref` pointer and accumulate any other `$ref` pointers that it or its\n * children use.\n *\n * @param schema JSON Schema object to look for and accumulate any `$ref` pointers that it may have.\n * @param $refs Known set of `$ref` pointers.\n * @param $ref `$ref` pointer to fetch a schema from out of the supplied schema.\n */\nfunction accumulateUsedRefs(schema: Record<string, unknown>, $refs: Set<string>, $ref: any): void {\n let $refSchema;\n if (typeof $ref === 'string') $refSchema = jsonPointer.get(schema, $ref.substring(1));\n if ($refSchema === undefined) {\n // If the schema we have wasn't fully dereferenced or bundled for whatever reason and this\n // `$ref` that we have doesn't exist here we shouldn't try to search for more `$ref` pointers\n // in a schema that doesn't exist.\n return;\n }\n\n getUsedRefs($refSchema).forEach(({ value: currRef }) => {\n // If we've already processed this $ref don't send us into an infinite loop.\n if ($refs.has(currRef)) {\n return;\n }\n\n $refs.add(currRef);\n accumulateUsedRefs(schema, $refs, currRef);\n });\n}\n\n/**\n * With an array of tags or object of paths+method combinations, reduce an OpenAPI definition to a\n * new definition that just contains those tags or path + methods.\n *\n * @example <caption>Reduce by an array of tags only.</caption>\n * reducer(apiDefinition, { tags: ['pet'] })\n *\n * @example <caption>Reduce by a specific path and methods.</caption>\n * reducer(apiDefinition, { paths: { '/pet': ['get', 'post'] } })\n *\n * @example <caption>Reduce by a specific path and all methods it has.</caption>\n * reducer(apiDefinition, { paths: { '/pet': '*' } })\n *\n * @param definition A valid OpenAPI 3.x definition\n */\nexport default function reducer(definition: OASDocument, opts: ReducerOptions = {}) {\n // Convert tags and paths to lowercase since casing should not matter.\n const reduceTags = 'tags' in opts ? opts.tags.map(tag => tag.toLowerCase()) : [];\n const reducePaths =\n 'paths' in opts\n ? Object.entries(opts.paths).reduce((acc: Record<string, string[] | string>, [key, value]) => {\n const newKey = key.toLowerCase();\n const newValue = Array.isArray(value) ? value.map(v => v.toLowerCase()) : value.toLowerCase();\n acc[newKey] = newValue;\n return acc;\n }, {})\n : {};\n\n const $refs: Set<string> = new Set();\n const usedTags: Set<string> = new Set();\n\n if (getAPIDefinitionType(definition) !== 'openapi') {\n throw new Error('Sorry, only OpenAPI definitions are supported.');\n }\n\n // Stringify and parse so we get a full non-reference clone of the API definition to work with.\n // eslint-disable-next-line try-catch-failsafe/json-parse\n const reduced = JSON.parse(JSON.stringify(definition)) as OASDocument;\n\n // Retain any root-level security definitions.\n if ('security' in reduced) {\n Object.values(reduced.security).forEach(sec => {\n Object.keys(sec).forEach(scheme => {\n $refs.add(`#/components/securitySchemes/${scheme}`);\n });\n });\n }\n\n if ('paths' in reduced) {\n Object.keys(reduced.paths).forEach(path => {\n const pathLC = path.toLowerCase();\n\n if (Object.keys(reducePaths).length) {\n if (!(pathLC in reducePaths)) {\n delete reduced.paths[path];\n return;\n }\n }\n\n Object.keys(reduced.paths[path]).forEach((method: HttpMethods | 'parameters') => {\n // If this method is `parameters` we should always retain it.\n if (method !== 'parameters') {\n if (Object.keys(reducePaths).length) {\n if (\n reducePaths[pathLC] !== '*' &&\n Array.isArray(reducePaths[pathLC]) &&\n !reducePaths[pathLC].includes(method)\n ) {\n delete reduced.paths[path][method];\n return;\n }\n }\n }\n\n const operation = reduced.paths[path][method];\n\n // If we're reducing by tags and this operation doesn't live in one of those, remove it.\n if (reduceTags.length) {\n if (!('tags' in operation)) {\n delete reduced.paths[path][method];\n return;\n } else if (!operation.tags.filter(tag => reduceTags.includes(tag.toLowerCase())).length) {\n delete reduced.paths[path][method];\n return;\n }\n }\n\n // Accumulate a list of used tags so we can filter out any ones that we don't need later.\n if ('tags' in operation) {\n operation.tags.forEach((tag: string) => {\n usedTags.add(tag);\n });\n }\n\n // Accumulate a list of $ref pointers that are used within this operation.\n getUsedRefs(operation).forEach(({ value: ref }) => {\n $refs.add(ref);\n });\n\n // Accumulate any used security schemas that we need to retain.\n if ('security' in operation) {\n Object.values(operation.security).forEach(sec => {\n Object.keys(sec).forEach(scheme => {\n $refs.add(`#/components/securitySchemes/${scheme}`);\n });\n });\n }\n });\n\n // If this path no longer has any methods, delete it.\n if (!Object.keys(reduced.paths[path]).length) {\n delete reduced.paths[path];\n }\n });\n\n // If we don't have any more paths after cleanup, throw an error because an OpenAPI file must\n // have at least one path.\n if (!Object.keys(reduced.paths).length) {\n throw new Error('All paths in the API definition were removed. Did you supply the right path name to reduce by?');\n }\n }\n\n // Recursively accumulate any components that are in use.\n $refs.forEach($ref => accumulateUsedRefs(reduced, $refs, $ref));\n\n // Remove any unused components.\n if ('components' in reduced) {\n Object.keys(reduced.components).forEach((componentType: keyof ComponentsObject) => {\n Object.keys(reduced.components[componentType]).forEach(component => {\n if (!$refs.has(`#/components/${componentType}/${component}`)) {\n delete reduced.components[componentType][component];\n }\n });\n\n // If this component group is now empty, delete it.\n if (!Object.keys(reduced.components[componentType]).length) {\n delete reduced.components[componentType];\n }\n });\n\n // If this path no longer has any components, delete it.\n if (!Object.keys(reduced.components).length) {\n delete reduced.components;\n }\n }\n\n // Remove any unused tags.\n if ('tags' in reduced) {\n reduced.tags.forEach((tag: TagObject, k: number) => {\n if (!usedTags.has(tag.name)) {\n delete reduced.tags[k];\n }\n });\n\n // Remove any now empty items from the tags array.\n reduced.tags = reduced.tags.filter(Boolean);\n\n if (!reduced.tags.length) {\n delete reduced.tags;\n }\n }\n\n return reduced;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/reducer/index.ts"],"sourcesContent":["import type { ComponentsObject, HttpMethods, OASDocument, TagObject } from '../types.js';\n\nimport jsonPointer from 'jsonpointer';\n\nimport { query } from '../analyzer/util.js';\n\ninterface ReducerOptions {\n /** A key-value object of path + method combinations to reduce by. */\n paths?: Record<string, string[] | '*'>;\n /** An array of tags in the OpenAPI definition to reduce by. */\n tags?: string[];\n}\n\n/**\n * Query a JSON Schema object for any `$ref` pointers. Return any pointers that were found.\n *\n * @param schema JSON Schema object to look for any `$ref` pointers within it.\n */\nfunction getUsedRefs(schema: any) {\n return query([\"$..['$ref']\"], schema);\n}\n\n/**\n * Recursively process a `$ref` pointer and accumulate any other `$ref` pointers that it or its\n * children use.\n *\n * @param schema JSON Schema object to look for and accumulate any `$ref` pointers that it may have.\n * @param $refs Known set of `$ref` pointers.\n * @param $ref `$ref` pointer to fetch a schema from out of the supplied schema.\n */\nfunction accumulateUsedRefs(schema: Record<string, unknown>, $refs: Set<string>, $ref: any): void {\n let $refSchema;\n if (typeof $ref === 'string') $refSchema = jsonPointer.get(schema, $ref.substring(1));\n if ($refSchema === undefined) {\n // If the schema we have wasn't fully dereferenced or bundled for whatever reason and this\n // `$ref` that we have doesn't exist here we shouldn't try to search for more `$ref` pointers\n // in a schema that doesn't exist.\n return;\n }\n\n getUsedRefs($refSchema).forEach(({ value: currRef }) => {\n // If we've already processed this $ref don't send us into an infinite loop.\n if ($refs.has(currRef)) {\n return;\n }\n\n $refs.add(currRef);\n accumulateUsedRefs(schema, $refs, currRef);\n });\n}\n\n/**\n * With an array of tags or object of paths+method combinations, reduce an OpenAPI definition to a\n * new definition that just contains those tags or path + methods.\n *\n * @example <caption>Reduce by an array of tags only.</caption>\n * reducer(apiDefinition, { tags: ['pet'] })\n *\n * @example <caption>Reduce by a specific path and methods.</caption>\n * reducer(apiDefinition, { paths: { '/pet': ['get', 'post'] } })\n *\n * @example <caption>Reduce by a specific path and all methods it has.</caption>\n * reducer(apiDefinition, { paths: { '/pet': '*' } })\n *\n * @param definition A valid OpenAPI 3.x definition\n */\nexport default function reducer(definition: OASDocument, opts: ReducerOptions = {}) {\n // Convert tags and paths to lowercase since casing should not matter.\n const reduceTags = 'tags' in opts ? opts.tags.map(tag => tag.toLowerCase()) : [];\n const reducePaths =\n 'paths' in opts\n ? Object.entries(opts.paths).reduce((acc: Record<string, string[] | string>, [key, value]) => {\n const newKey = key.toLowerCase();\n const newValue = Array.isArray(value) ? value.map(v => v.toLowerCase()) : value.toLowerCase();\n acc[newKey] = newValue;\n return acc;\n }, {})\n : {};\n\n const $refs: Set<string> = new Set();\n const usedTags: Set<string> = new Set();\n\n if (!definition.openapi) {\n throw new Error('Sorry, only OpenAPI definitions are supported.');\n }\n\n // Stringify and parse so we get a full non-reference clone of the API definition to work with.\n // eslint-disable-next-line try-catch-failsafe/json-parse\n const reduced = JSON.parse(JSON.stringify(definition)) as OASDocument;\n\n // Retain any root-level security definitions.\n if ('security' in reduced) {\n Object.values(reduced.security).forEach(sec => {\n Object.keys(sec).forEach(scheme => {\n $refs.add(`#/components/securitySchemes/${scheme}`);\n });\n });\n }\n\n if ('paths' in reduced) {\n Object.keys(reduced.paths).forEach(path => {\n const pathLC = path.toLowerCase();\n\n if (Object.keys(reducePaths).length) {\n if (!(pathLC in reducePaths)) {\n delete reduced.paths[path];\n return;\n }\n }\n\n Object.keys(reduced.paths[path]).forEach((method: HttpMethods | 'parameters') => {\n // If this method is `parameters` we should always retain it.\n if (method !== 'parameters') {\n if (Object.keys(reducePaths).length) {\n if (\n reducePaths[pathLC] !== '*' &&\n Array.isArray(reducePaths[pathLC]) &&\n !reducePaths[pathLC].includes(method)\n ) {\n delete reduced.paths[path][method];\n return;\n }\n }\n }\n\n const operation = reduced.paths[path][method];\n\n // If we're reducing by tags and this operation doesn't live in one of those, remove it.\n if (reduceTags.length) {\n if (!('tags' in operation)) {\n delete reduced.paths[path][method];\n return;\n } else if (!operation.tags.filter(tag => reduceTags.includes(tag.toLowerCase())).length) {\n delete reduced.paths[path][method];\n return;\n }\n }\n\n // Accumulate a list of used tags so we can filter out any ones that we don't need later.\n if ('tags' in operation) {\n operation.tags.forEach((tag: string) => {\n usedTags.add(tag);\n });\n }\n\n // Accumulate a list of $ref pointers that are used within this operation.\n getUsedRefs(operation).forEach(({ value: ref }) => {\n $refs.add(ref);\n });\n\n // Accumulate any used security schemas that we need to retain.\n if ('security' in operation) {\n Object.values(operation.security).forEach(sec => {\n Object.keys(sec).forEach(scheme => {\n $refs.add(`#/components/securitySchemes/${scheme}`);\n });\n });\n }\n });\n\n // If this path no longer has any methods, delete it.\n if (!Object.keys(reduced.paths[path]).length) {\n delete reduced.paths[path];\n }\n });\n\n // If we don't have any more paths after cleanup, throw an error because an OpenAPI file must\n // have at least one path.\n if (!Object.keys(reduced.paths).length) {\n throw new Error('All paths in the API definition were removed. Did you supply the right path name to reduce by?');\n }\n }\n\n // Recursively accumulate any components that are in use.\n $refs.forEach($ref => accumulateUsedRefs(reduced, $refs, $ref));\n\n // Remove any unused components.\n if ('components' in reduced) {\n Object.keys(reduced.components).forEach((componentType: keyof ComponentsObject) => {\n Object.keys(reduced.components[componentType]).forEach(component => {\n if (!$refs.has(`#/components/${componentType}/${component}`)) {\n delete reduced.components[componentType][component];\n }\n });\n\n // If this component group is now empty, delete it.\n if (!Object.keys(reduced.components[componentType]).length) {\n delete reduced.components[componentType];\n }\n });\n\n // If this path no longer has any components, delete it.\n if (!Object.keys(reduced.components).length) {\n delete reduced.components;\n }\n }\n\n // Remove any unused tags.\n if ('tags' in reduced) {\n reduced.tags.forEach((tag: TagObject, k: number) => {\n if (!usedTags.has(tag.name)) {\n delete reduced.tags[k];\n }\n });\n\n // Remove any now empty items from the tags array.\n reduced.tags = reduced.tags.filter(Boolean);\n\n if (!reduced.tags.length) {\n delete reduced.tags;\n }\n }\n\n return reduced;\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oas",
3
- "version": "25.2.0",
3
+ "version": "25.2.1",
4
4
  "description": "Comprehensive tooling for working with OpenAPI definitions",
5
5
  "license": "MIT",
6
6
  "author": "ReadMe <support@readme.io> (https://readme.com)",
@@ -94,7 +94,6 @@
94
94
  "jsonpath-plus": "^10.0.0",
95
95
  "jsonpointer": "^5.0.0",
96
96
  "memoizee": "^0.4.16",
97
- "oas-normalize": "^11.1.4",
98
97
  "openapi-types": "^12.1.1",
99
98
  "path-to-regexp": "^8.1.0",
100
99
  "remove-undefined-objects": "^5.0.0"
@@ -110,5 +109,5 @@
110
109
  "vitest": "^2.1.3"
111
110
  },
112
111
  "prettier": "@readme/eslint-config/prettier",
113
- "gitHead": "1c0625fc0002bd15f726f5fff396dfc2cd566a4b"
112
+ "gitHead": "5705800d43618a2dcaa5f32926eeff944a6ebbc2"
114
113
  }