oas 36.0.3 → 37.0.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.
Files changed (38) hide show
  1. package/README.md +0 -5
  2. package/dist/analyzer/index.cjs +83 -28
  3. package/dist/analyzer/index.cjs.map +1 -1
  4. package/dist/analyzer/index.d.cts +3 -10
  5. package/dist/analyzer/index.d.ts +3 -10
  6. package/dist/analyzer/index.js +81 -26
  7. package/dist/analyzer/index.js.map +1 -1
  8. package/dist/analyzer/types.d.cts +0 -1
  9. package/dist/analyzer/types.d.ts +0 -1
  10. package/dist/{chunk-BJCTM2ME.cjs → chunk-GS43VKJH.cjs} +319 -270
  11. package/dist/chunk-GS43VKJH.cjs.map +1 -0
  12. package/dist/{chunk-6MDVLJ3A.js → chunk-IEN4GZPF.js} +9 -23
  13. package/dist/chunk-IEN4GZPF.js.map +1 -0
  14. package/dist/{chunk-SCWW2SNX.cjs → chunk-UKD63LKG.cjs} +10 -24
  15. package/dist/chunk-UKD63LKG.cjs.map +1 -0
  16. package/dist/{chunk-RQZ2BPMU.js → chunk-WIVQX3DA.js} +198 -149
  17. package/dist/chunk-WIVQX3DA.js.map +1 -0
  18. package/dist/index.cjs +634 -7
  19. package/dist/index.cjs.map +1 -1
  20. package/dist/index.d.cts +38 -135
  21. package/dist/index.d.ts +38 -135
  22. package/dist/index.js +633 -6
  23. package/dist/index.js.map +1 -1
  24. package/dist/operation/index.cjs +3 -3
  25. package/dist/operation/index.js +2 -2
  26. package/dist/reducer/index.cjs +7 -7
  27. package/dist/reducer/index.js +1 -1
  28. package/dist/utils.cjs +2 -2
  29. package/dist/utils.js +1 -1
  30. package/package.json +1 -2
  31. package/dist/chunk-4WJUHXQH.js +0 -866
  32. package/dist/chunk-4WJUHXQH.js.map +0 -1
  33. package/dist/chunk-6MDVLJ3A.js.map +0 -1
  34. package/dist/chunk-BJCTM2ME.cjs.map +0 -1
  35. package/dist/chunk-LJWHPW4H.cjs +0 -866
  36. package/dist/chunk-LJWHPW4H.cjs.map +0 -1
  37. package/dist/chunk-RQZ2BPMU.js.map +0 -1
  38. package/dist/chunk-SCWW2SNX.cjs.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
1
+ {"version":3,"sources":["../src/lib/get-auth.ts","../src/index.ts"],"sourcesContent":["import type {\n AuthForHAR,\n KeyedSecuritySchemeObject,\n OASDocument,\n SecuritySchemeDefaultAuthPrimitive,\n User,\n} from '../types.js';\n\nimport { isRef } from '../types.js';\n\nimport { dereferenceRef } from './refs.js';\n\ntype authKey = unknown | { password: number | string; user: number | string } | null;\n\nfunction getPrimitiveDefaultAuth(scheme: KeyedSecuritySchemeObject): SecuritySchemeDefaultAuthPrimitive | null {\n // For OAuth, primitive `x-default` values are token defaults. Object-shaped defaults\n // are reserved for API Explorer client credentials and should not be sent as auth.\n return typeof scheme['x-default'] === 'number' || typeof scheme['x-default'] === 'string'\n ? scheme['x-default']\n : null;\n}\n\n/**\n * @param user User to retrieve retrieve an auth key for.\n * @param scheme The type of security scheme that we want a key for.\n */\nfunction getKey(user: User, scheme: KeyedSecuritySchemeObject): authKey {\n switch (scheme.type) {\n case 'oauth2':\n return user[scheme._key] || user.apiKey || getPrimitiveDefaultAuth(scheme) || null;\n\n case 'apiKey':\n return user[scheme._key] || user.apiKey || scheme['x-default'] || null;\n\n case 'http':\n if (scheme.scheme === 'basic') {\n return (\n user[scheme._key] ||\n (user.user || user.pass ? { user: user.user || null, pass: user.pass || null } : scheme['x-default']) || {\n user: null,\n pass: null,\n }\n );\n }\n\n if (scheme.scheme === 'bearer') {\n return user[scheme._key] || user.apiKey || scheme['x-default'] || null;\n }\n return null;\n\n default:\n return null;\n }\n}\n\n/**\n * Retrieve auth keys for a specific security scheme for a given user for a specific \"app\" that\n * they have configured.\n *\n * For `scheme` we're typing it to a union of `SecurityScheme` and `any` because we have handling\n * and tests for an unknown or unrecognized `type` and though it's not possible with the\n * `SecurityScheme.type` to be unrecognized it may still be possible to get an unrecognized scheme\n * with this method in the wild as we have API definitions in our database that were ingested\n * before we had good validation in place.\n *\n * @param user User\n * @param scheme Security scheme to get auth keys for.\n * @param selectedApp The user app to retrieve an auth key for.\n */\nexport function getByScheme(\n user: User,\n scheme = {} as KeyedSecuritySchemeObject,\n selectedApp?: number | string,\n): authKey {\n if (user?.keys?.length) {\n if (selectedApp) {\n const userKey = user.keys.find(k => k.name === selectedApp);\n if (!userKey) {\n return null;\n }\n\n return getKey(userKey, scheme);\n }\n\n return getKey(user.keys[0], scheme);\n }\n\n return getKey(user, scheme);\n}\n\n/**\n * Retrieve auth keys for an API definition from a given user for a specific \"app\" that they have\n * configured.\n *\n * @param api API definition\n * @param user User\n * @param selectedApp The user app to retrieve an auth key for.\n */\nexport function getAuth(api: OASDocument, user: User, selectedApp?: number | string): AuthForHAR {\n return Object.keys(api?.components?.securitySchemes || {})\n .map(scheme => {\n const securityScheme = dereferenceRef(api.components?.securitySchemes?.[scheme], api);\n if (!securityScheme || isRef(securityScheme)) {\n // If this security scheme is invalid or an unresolvable `$ref` pointer then we should skip\n // it.\n return false;\n }\n\n return {\n [scheme]: getByScheme(\n user,\n {\n ...securityScheme,\n _key: scheme,\n },\n selectedApp,\n ),\n };\n })\n .filter((item): item is AuthForHAR => item !== undefined)\n .reduce((prev, next) => Object.assign(prev, next), {});\n}\n","import type { Extensions } from './extensions.js';\nimport type { PathMatch, PathMatches, SplitUrlResult } from './lib/urls.js';\nimport type {\n AuthForHAR,\n HttpMethods,\n OASDocument,\n OperationObject,\n SecuritySchemeObject,\n ServerObject,\n Servers,\n ServerVariable,\n ServerVariablesObject,\n User,\n} from './types.js';\nimport type { OpenAPIV3_1 } from 'openapi-types';\n\nimport {\n CODE_SAMPLES,\n extensionDefaults,\n getExtension,\n HEADERS,\n hasRootExtension,\n OAUTH_OPTIONS,\n PARAMETER_ORDERING,\n SAMPLES_LANGUAGES,\n validateParameterOrdering,\n} from './extensions.js';\nimport { getAuth } from './lib/get-auth.js';\nimport getUserVariable from './lib/get-user-variable.js';\nimport { dereferenceRef } from './lib/refs.js';\nimport {\n defaultVariablesFromServers,\n filterPathMethods,\n findTargetPath,\n generatePathMatches,\n normalizedURLFromServers,\n splitUrlFromServers,\n stripTrailingSlash,\n transformURLIntoRegex,\n variablesFromServers,\n} from './lib/urls.js';\nimport { Operation, Webhook } from './operation/index.js';\nimport { isOpenAPI31, isRef } from './types.js';\nimport { SERVER_VARIABLE_REGEX, supportedMethods } from './utils.js';\n\nexport default class Oas {\n /**\n * The current OpenAPI definition.\n */\n api: OASDocument;\n\n /**\n * The current user that we should use when pulling auth tokens from security schemes.\n */\n user: User;\n\n /**\n * @param oas An OpenAPI definition.\n * @param user The information about a user that we should use when pulling auth tokens from\n * security schemes.\n */\n constructor(oas: OASDocument | string, user?: User) {\n if (typeof oas === 'string') {\n // oxlint-disable-next-line readme/json-parse-try-catch -- If this fails we should fail.\n this.api = (JSON.parse(oas) || {}) as OASDocument;\n } else {\n this.api = oas || ({} as OASDocument);\n }\n\n this.user = user || {};\n }\n\n /**\n * This will initialize a new instance of the `Oas` class. This method is useful if you're using\n * Typescript and are attempting to supply an untyped JSON object into `Oas` as it will force-type\n * that object to an `OASDocument` for you.\n *\n * @param oas An OpenAPI definition.\n * @param user The information about a user that we should use when pulling auth tokens from\n * security schemes.\n */\n static init(oas: OASDocument | Record<string, unknown>, user?: User): Oas {\n return new Oas(oas as OASDocument, user);\n }\n\n /**\n * Retrieve the OpenAPI version that this API definition is targeted for.\n */\n getVersion(): string {\n if (this.api.openapi) {\n return this.api.openapi;\n }\n\n throw new Error('Unable to recognize what specification version this API definition conforms to.');\n }\n\n /**\n * Retrieve the current OpenAPI API Definition.\n *\n */\n getDefinition(): OASDocument {\n return this.api;\n }\n\n url(selected = 0, variables?: ServerVariable): string {\n const url = normalizedURLFromServers(this.api.servers, selected);\n return this.replaceUrl(url, variables || this.defaultVariables(selected)).trim();\n }\n\n variables(selected = 0): ServerVariablesObject {\n return variablesFromServers(this.api.servers, selected);\n }\n\n defaultVariables(selected = 0): ServerVariable {\n return defaultVariablesFromServers(this.api.servers, selected, this.user);\n }\n\n splitUrl(selected = 0): SplitUrlResult {\n return splitUrlFromServers(this.api.servers, selected);\n }\n\n /**\n * With a fully composed server URL, run through our list of known OAS servers and return back\n * which server URL was selected along with any contained server variables split out.\n *\n * For example, if you have an OAS server URL of `https://{name}.example.com:{port}/{basePath}`,\n * and pass in `https://buster.example.com:3000/pet` to this function, you'll get back the\n * following:\n *\n * { selected: 0, variables: { name: 'buster', port: 3000, basePath: 'pet' } }\n *\n * Re-supplying this data to `oas.url()` should return the same URL you passed into this method.\n *\n * @param baseUrl A given URL to extract server variables out of.\n */\n splitVariables(baseUrl: string): Servers | false {\n const matchedServer = (this.api.servers || [])\n .map((server, i) => {\n const rgx = transformURLIntoRegex(server.url);\n const found = new RegExp(rgx).exec(baseUrl);\n if (!found) {\n return false;\n }\n\n // While it'd be nice to use named regex groups to extract path parameters from the URL and\n // match them up with the variables that we have present in it, JS unfortunately doesn't\n // support having the groups duplicated. So instead of doing that we need to re-regex the\n // server URL, this time splitting on the path parameters -- this way we'll be able to\n // extract the parameter names and match them up with the matched server that we obtained\n // above.\n const variables: Record<string, number | string> = {};\n Array.from(server.url.matchAll(SERVER_VARIABLE_REGEX)).forEach((variable, y) => {\n variables[variable[1]] = found[y + 1];\n });\n\n return {\n selected: i,\n variables,\n };\n })\n .filter(item => item !== false);\n\n return matchedServer.length ? matchedServer[0] : false;\n }\n\n /**\n * Replace templated variables with supplied data in a given URL.\n *\n * There are a couple ways that this will utilize variable data:\n *\n * - Supplying a `variables` object. If this is supplied, this data will always take priority.\n * This incoming `variables` object can be two formats:\n * `{ variableName: { default: 'value' } }` and `{ variableName: 'value' }`. If the former is\n * present, that will take precedence over the latter.\n * - If the supplied `variables` object is empty or does not match the current template name,\n * we fallback to the data stored in `this.user` and attempt to match against that.\n * See `getUserVariable` for some more information on how this data is pulled from `this.user`.\n *\n * If no variables supplied match up with the template name, the template name will instead be\n * used as the variable data.\n *\n * @param url A URL to swap variables into.\n * @param variables An object containing variables to swap into the URL.\n */\n replaceUrl(url: string, variables: ServerVariable = {}): string {\n // When we're constructing URLs, server URLs with trailing slashes cause problems with doing\n // lookups, so if we have one here on, slice it off.\n return stripTrailingSlash(\n url.replace(SERVER_VARIABLE_REGEX, (original: string, key: string) => {\n if (key in variables) {\n const data = variables[key];\n if (typeof data === 'object') {\n if (!Array.isArray(data) && data !== null && 'default' in data) {\n return String(data.default);\n }\n } else {\n return String(data);\n }\n }\n\n const userVariable = getUserVariable(this.user, key);\n if (userVariable) {\n return String(userVariable);\n }\n\n return original;\n }),\n );\n }\n\n /**\n * Retrieve an Operation of Webhook class instance for a given path and method.\n *\n * @param path Path to lookup and retrieve.\n * @param method HTTP Method to retrieve on the path.\n */\n operation(\n path: string,\n method: HttpMethods,\n opts: {\n /**\n * If you prefer to first look for a webhook with this path and method.\n */\n isWebhook?: boolean;\n } = {},\n ): Operation {\n // If we're unable to locate an operation for this path+method combination within the API\n // definition, we should still set an empty schema on the operation in the `Operation` class\n // because if we don't trying to use any of the accessors on that class are going to fail as\n // `schema` will be `undefined`.\n let operation: OperationObject = {\n parameters: [],\n };\n\n if (opts.isWebhook) {\n if (isOpenAPI31(this.api)) {\n const webhookPath = dereferenceRef(this.api?.webhooks?.[path], this.api);\n if (webhookPath && !isRef(webhookPath)) {\n if (webhookPath?.[method]) {\n operation = webhookPath[method];\n return new Webhook(this, path, method, operation);\n }\n }\n }\n }\n\n if (this?.api?.paths?.[path]) {\n const pathItem = dereferenceRef(this.api.paths[path], this.api);\n if (pathItem?.[method]) {\n operation = dereferenceRef(pathItem[method], this.api);\n }\n }\n\n return new Operation(this, path, method, operation);\n }\n\n findOperationMatches(url: string): PathMatches | undefined {\n const { origin, hostname } = new URL(url);\n const originRegExp = new RegExp(origin, 'i');\n const { servers, paths } = this.api;\n\n let pathName: string | undefined;\n let targetServer: ServerObject | undefined;\n let matchedServer: ServerObject | undefined;\n\n if (!servers || !servers.length) {\n // If this API definition doesn't have any servers set up let's treat it as if it were\n // https://example.com because that's the default origin we add in `normalizedUrl` under the\n // same circumstances. Without this we won't be able to match paths within what is otherwise\n // a valid OpenAPI definition.\n matchedServer = {\n url: 'https://example.com',\n };\n } else {\n matchedServer = servers.find(s => originRegExp.exec(this.replaceUrl(s.url, s.variables || {})));\n if (!matchedServer) {\n const hostnameRegExp = new RegExp(hostname);\n matchedServer = servers.find(s => hostnameRegExp.exec(this.replaceUrl(s.url, s.variables || {})));\n }\n }\n\n if (matchedServer) {\n // Instead of setting `url` directly against `matchedServer` we need to set it to an\n // intermediary object as directly modifying `matchedServer.url` will in turn update\n // `this.servers[idx].url` which we absolutely do not want to happen.\n targetServer = {\n ...matchedServer,\n url: this.replaceUrl(matchedServer.url, matchedServer.variables || {}),\n };\n\n [, pathName] = url.split(new RegExp(targetServer.url, 'i'));\n }\n\n // If we **still** haven't found a matching server, then the OAS server URL might have server\n // variables and we should loosen it up with regex to try to discover a matching path.\n //\n // For example if an OAS has `https://{region}.node.example.com/v14` set as its server URL, and\n // the `this.user` object has a `region` value of `us`, if we're trying to locate an operation\n // for https://eu.node.example.com/v14/api/esm we won't be able to because normally the users\n // `region` of `us` will be transposed in and we'll be trying to locate `eu.node.example.com`\n // in `us.node.example.com` -- which won't work.\n //\n // So what this does is transform `https://{region}.node.example.com/v14` into\n // `https://([-_a-zA-Z0-9[\\\\]]+).node.example.com/v14`, and from there we'll be able to match\n // https://eu.node.example.com/v14/api/esm and ultimately find the operation matches for\n // `/api/esm`.\n if (!matchedServer || !pathName) {\n const matchedServerAndPath = (servers || [])\n .map(server => {\n const rgx = transformURLIntoRegex(server.url);\n const found = new RegExp(rgx).exec(url);\n if (!found) {\n return;\n }\n\n return {\n matchedServer: server,\n pathName: url.split(new RegExp(rgx)).slice(-1).pop(),\n };\n })\n .filter((item): item is { matchedServer: ServerObject; pathName: string | undefined } => item !== undefined);\n\n if (!matchedServerAndPath.length) {\n return undefined;\n }\n\n pathName = matchedServerAndPath[0].pathName;\n targetServer = {\n ...matchedServerAndPath[0].matchedServer,\n };\n }\n\n if (pathName === undefined) return undefined;\n if (pathName === '') pathName = '/';\n if (!paths || !targetServer) return undefined;\n const annotatedPaths = generatePathMatches(paths, pathName, targetServer.url);\n if (!annotatedPaths.length) return undefined;\n\n return annotatedPaths;\n }\n\n /**\n * Discover an operation in an OAS from a fully-formed URL and HTTP method. Will return an object\n * containing a `url` object and another one for `operation`. This differs from `getOperation()`\n * in that it does not return an instance of the `Operation` class.\n *\n * @param url A full URL to look up.\n * @param method The cooresponding HTTP method to look up.\n */\n findOperation(url: string, method: HttpMethods): PathMatch | undefined {\n const annotatedPaths = this.findOperationMatches(url);\n if (!annotatedPaths) {\n return undefined;\n }\n\n const matches = filterPathMethods(annotatedPaths, method);\n if (!matches.length) return undefined;\n return findTargetPath(matches);\n }\n\n /**\n * Discover an operation in an OAS from a fully-formed URL without an HTTP method. Will return an\n * object containing a `url` object and another one for `operation`.\n *\n * @param url A full URL to look up.\n */\n findOperationWithoutMethod(url: string): PathMatch | undefined {\n const annotatedPaths = this.findOperationMatches(url);\n if (!annotatedPaths) {\n return undefined;\n }\n\n return findTargetPath(annotatedPaths);\n }\n\n /**\n * Retrieve an operation in an OAS from a fully-formed URL and HTTP method. Differs from\n * `findOperation` in that while this method will return an `Operation` instance,\n * `findOperation()` does not.\n *\n * @param url A full URL to look up.\n * @param method The cooresponding HTTP method to look up.\n */\n getOperation(url: string, method: HttpMethods): Operation | undefined {\n const op = this.findOperation(url, method);\n if (op === undefined) {\n return undefined;\n }\n\n return this.operation(op.url.nonNormalizedPath, method);\n }\n\n /**\n * Retrieve an operation in an OAS by an `operationId`.\n *\n * If an operation does not have an `operationId` one will be generated in place, using the\n * default behavior of `Operation.getOperationId()`, and then asserted against your query.\n *\n * Note that because `operationId`s are unique that uniqueness does include casing so the ID\n * you are looking for will be asserted as an exact match.\n *\n * @see {Operation.getOperationId()}\n * @param id The `operationId` to look up.\n */\n getOperationById(id: string): Operation | Webhook | undefined {\n let found: Operation | Webhook | undefined;\n\n Object.values(this.getPaths()).forEach(operations => {\n if (found) return;\n found = Object.values(operations).find(operation => operation.getOperationId() === id);\n });\n\n if (found) {\n return found;\n }\n\n Object.entries(this.getWebhooks()).forEach(([, webhooks]) => {\n if (found) return;\n found = Object.values(webhooks).find(webhook => webhook.getOperationId() === id);\n });\n\n return found;\n }\n\n /**\n * With an object of user information, retrieve the appropriate API auth keys from the current\n * OAS definition.\n *\n * @see {@link https://docs.readme.com/docs/passing-data-to-jwt}\n * @param user User\n * @param selectedApp The user app to retrieve an auth key for.\n */\n getAuth(user: User, selectedApp?: number | string): AuthForHAR {\n if (!this.api?.components?.securitySchemes) {\n return {};\n }\n\n return getAuth(this.api, user, selectedApp);\n }\n\n /**\n * Determine if a security scheme exists within the API definition.\n *\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.0.md#security-scheme-object}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#security-scheme-object}\n * @param name The name of the security scheme to check for.\n */\n hasSecurityScheme(name: string): boolean {\n return Boolean(this.api?.components?.securitySchemes?.[name]);\n }\n\n /**\n * Retrieve a security scheme from the API definition.\n *\n * If the found security scheme is a `$ref` pointer it will be lazily dereferenced; if the scheme\n * cannot be resolved after that process (eg. it's circular or is an invalid `$ref`) then\n * `undefined` will be returned.\n *\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.0.md#security-scheme-object}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#security-scheme-object}\n * @param name The name of the security scheme to retrieve.\n */\n getSecurityScheme(name: string): SecuritySchemeObject | undefined {\n if (!this.hasSecurityScheme(name)) {\n return undefined;\n }\n\n let scheme = this.api?.components?.securitySchemes?.[name];\n if (!scheme) return undefined;\n if (isRef(scheme)) {\n scheme = dereferenceRef(scheme, this.api);\n if (!scheme || isRef(scheme)) return undefined;\n }\n\n return scheme;\n }\n\n /**\n * Returns the `paths` object that exists in this API definition but with every `method` mapped\n * to an instance of the `Operation` class.\n *\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.0.md#openapi-object}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#openapi-object}\n */\n getPaths(): Record<string, Record<HttpMethods, Operation | Webhook>> {\n const paths: Record<string, Record<HttpMethods, Operation | Webhook>> = {};\n if (!this.api.paths) {\n return paths;\n }\n\n Object.keys(this.api.paths).forEach(path => {\n // If this is a specification extension then we should ignore it.\n if (path.startsWith('x-')) {\n return;\n }\n\n paths[path] = {} as Record<HttpMethods, Operation | Webhook>;\n\n let pathItem = this.api.paths![path];\n if (!pathItem) {\n return;\n } else if (isRef(pathItem)) {\n // Though this library is generally unaware of `$ref` pointers we're making a singular\n // exception with this accessor out of convenience.\n this.api.paths![path] = dereferenceRef(pathItem, this.api);\n pathItem = this.api.paths![path];\n if (!pathItem || isRef(pathItem)) {\n return;\n }\n }\n\n Object.keys(pathItem).forEach(method => {\n /**\n * Because a path doesn't need to contain a keyed-object of HTTP methods, we should exclude\n * anything from within the paths object that isn't a known HTTP method.\n *\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.0.md#fixed-fields-7}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#fixed-fields-7}\n */\n if (!supportedMethods.includes(method as HttpMethods)) {\n return;\n }\n\n paths[path][method as HttpMethods] = this.operation(path, method as HttpMethods);\n });\n });\n\n return paths;\n }\n\n /**\n * Returns the `webhooks` object that exists in this API definition but with every `method`\n * mapped to an instance of the `Webhook` class.\n *\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.0.md#openapi-object}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#openapi-object}\n */\n getWebhooks(): Record<string, Record<HttpMethods, Webhook>> {\n const webhooks: Record<string, Record<HttpMethods, Webhook>> = {};\n if (!isOpenAPI31(this.api) || !this.api.webhooks) {\n return webhooks;\n }\n\n Object.keys(this.api.webhooks).forEach(id => {\n webhooks[id] = {} as Record<HttpMethods, Webhook>;\n\n const webhookPath = dereferenceRef((this.api as OpenAPIV3_1.Document).webhooks?.[id], this.api);\n if (webhookPath) {\n Object.keys(webhookPath).forEach(method => {\n if (!supportedMethods.includes(method as HttpMethods)) {\n return;\n }\n\n webhooks[id][method as HttpMethods] = this.operation(id, method as HttpMethods, {\n isWebhook: true,\n }) as Webhook;\n });\n }\n });\n\n return webhooks;\n }\n\n /**\n * Return an array of all tag names that exist on this API definition.\n *\n * If the API definition uses the `x-disable-tag-sorting` extension then tags will be returned in\n * the order they're defined.\n *\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.0.md#openapi-object}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#openapi-object}\n * @param setIfMissing If a tag is not present on an operation that operations path will be added\n * into the list of tags returned.\n */\n getTags(setIfMissing = false): string[] {\n const allTags = new Set<string>();\n\n const oasTags = this.api.tags?.map(tag => tag.name) || [];\n\n const disableTagSorting = getExtension('disable-tag-sorting', this.api);\n\n Object.entries(this.getPaths()).forEach(([path, operations]) => {\n Object.values(operations).forEach(operation => {\n const tags = operation.getTags();\n if (setIfMissing && !tags.length) {\n allTags.add(path);\n return;\n }\n\n tags.forEach(tag => {\n allTags.add(tag.name);\n });\n });\n });\n\n Object.entries(this.getWebhooks()).forEach(([path, webhooks]) => {\n Object.values(webhooks).forEach(webhook => {\n const tags = webhook.getTags();\n if (setIfMissing && !tags.length) {\n allTags.add(path);\n return;\n }\n\n tags.forEach(tag => {\n allTags.add(tag.name);\n });\n });\n });\n\n // Tags that exist only on the endpoint\n const endpointTags: string[] = [];\n // Tags that the user has defined in the `tags` array\n const tagsArray: string[] = [];\n\n // Distinguish between which tags exist in the `tags` array and which tags\n // exist only at the endpoint level. For tags that exist only at the\n // endpoint level, we'll just tack that on to the end of the sorted tags.\n if (disableTagSorting) {\n return Array.from(allTags);\n }\n\n Array.from(allTags).forEach(tag => {\n if (oasTags.includes(tag)) {\n tagsArray.push(tag);\n } else {\n endpointTags.push(tag);\n }\n });\n\n let sortedTags = tagsArray.toSorted((a, b) => {\n return oasTags.indexOf(a) - oasTags.indexOf(b);\n });\n\n sortedTags = sortedTags.concat(endpointTags);\n\n return sortedTags;\n }\n\n /**\n * Determine if a given a custom specification extension exists within the API definition.\n *\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#specification-extensions}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#specification-extensions}\n * @param extension Specification extension to lookup.\n */\n hasExtension(extension: string): boolean {\n return hasRootExtension(extension, this.api);\n }\n\n /**\n * Retrieve a custom specification extension off of the API definition.\n *\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#specification-extensions}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#specification-extensions}\n * @param extension Specification extension to lookup.\n */\n getExtension(extension: string | keyof Extensions, operation?: Operation): any {\n return getExtension(extension, this.api, operation);\n }\n\n /**\n * Determine if a given OpenAPI custom extension is valid or not.\n *\n * @see {@link https://docs.readme.com/docs/openapi-extensions}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#specification-extensions}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#specification-extensions}\n * @param extension Specification extension to validate.\n * @throws\n */\n validateExtension(extension: keyof Extensions): void {\n if (this.hasExtension('x-readme')) {\n const data = this.getExtension('x-readme') satisfies Extensions;\n if (typeof data !== 'object' || Array.isArray(data) || data === null) {\n throw new TypeError('\"x-readme\" must be of type \"Object\"');\n }\n\n if (extension in data) {\n if ([CODE_SAMPLES, HEADERS, PARAMETER_ORDERING, SAMPLES_LANGUAGES].includes(extension)) {\n if (data[extension] !== undefined) {\n if (!Array.isArray(data[extension])) {\n throw new TypeError(`\"x-readme.${extension}\" must be of type \"Array\"`);\n }\n\n if (extension === PARAMETER_ORDERING) {\n validateParameterOrdering(data[extension], `x-readme.${extension}`);\n }\n }\n } else if (extension === OAUTH_OPTIONS) {\n if (typeof data[extension] !== 'object') {\n throw new TypeError(`\"x-readme.${extension}\" must be of type \"Object\"`);\n }\n } else if (typeof data[extension] !== 'boolean') {\n throw new TypeError(`\"x-readme.${extension}\" must be of type \"Boolean\"`);\n }\n }\n }\n\n // If the extension isn't grouped under `x-readme`, we need to look for them with `x-` prefixes.\n if (this.hasExtension(`x-${extension}`)) {\n const data = this.getExtension(`x-${extension}`);\n if ([CODE_SAMPLES, HEADERS, PARAMETER_ORDERING, SAMPLES_LANGUAGES].includes(extension)) {\n if (!Array.isArray(data)) {\n throw new TypeError(`\"x-${extension}\" must be of type \"Array\"`);\n }\n\n if (extension === PARAMETER_ORDERING) {\n validateParameterOrdering(data, `x-${extension}`);\n }\n } else if (extension === OAUTH_OPTIONS) {\n if (typeof data !== 'object') {\n throw new TypeError(`\"x-${extension}\" must be of type \"Object\"`);\n }\n } else if (typeof data !== 'boolean') {\n throw new TypeError(`\"x-${extension}\" must be of type \"Boolean\"`);\n }\n }\n }\n\n /**\n * Validate all of our custom or known OpenAPI extensions, throwing exceptions when necessary.\n *\n * @see {@link https://docs.readme.com/docs/openapi-extensions}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#specification-extensions}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#specification-extensions}\n */\n validateExtensions(): void {\n Object.keys(extensionDefaults).forEach(extension => {\n this.validateExtension(extension as keyof Extensions);\n });\n }\n}\n"],"mappings":"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","names":[]}
@@ -2,13 +2,13 @@
2
2
 
3
3
 
4
4
 
5
- var _chunkBJCTM2MEcjs = require('../chunk-BJCTM2ME.cjs');
6
- require('../chunk-SCWW2SNX.cjs');
5
+ var _chunkGS43VKJHcjs = require('../chunk-GS43VKJH.cjs');
6
+ require('../chunk-UKD63LKG.cjs');
7
7
  require('../chunk-AYA3UT4L.cjs');
8
8
  require('../chunk-7PWF3F2W.cjs');
9
9
 
10
10
 
11
11
 
12
12
 
13
- exports.Callback = _chunkBJCTM2MEcjs.Callback; exports.Operation = _chunkBJCTM2MEcjs.Operation; exports.Webhook = _chunkBJCTM2MEcjs.Webhook;
13
+ exports.Callback = _chunkGS43VKJHcjs.Callback; exports.Operation = _chunkGS43VKJHcjs.Operation; exports.Webhook = _chunkGS43VKJHcjs.Webhook;
14
14
  //# sourceMappingURL=index.cjs.map
@@ -2,8 +2,8 @@ import {
2
2
  Callback,
3
3
  Operation,
4
4
  Webhook
5
- } from "../chunk-RQZ2BPMU.js";
6
- import "../chunk-6MDVLJ3A.js";
5
+ } from "../chunk-WIVQX3DA.js";
6
+ import "../chunk-IEN4GZPF.js";
7
7
  import "../chunk-S27IGTVG.js";
8
8
  import "../chunk-XG4HGNCN.js";
9
9
  export {
@@ -4,7 +4,7 @@ var _chunkW6GBV2JTcjs = require('../chunk-W6GBV2JT.cjs');
4
4
 
5
5
 
6
6
 
7
- var _chunkSCWW2SNXcjs = require('../chunk-SCWW2SNX.cjs');
7
+ var _chunkUKD63LKGcjs = require('../chunk-UKD63LKG.cjs');
8
8
  require('../chunk-AYA3UT4L.cjs');
9
9
 
10
10
 
@@ -274,7 +274,7 @@ var OpenAPIReducer = (_class = class _OpenAPIReducer {
274
274
  const pathSegment = match[1];
275
275
  const method = match[2];
276
276
  if (pathSegment && method) {
277
- return { path: _chunkSCWW2SNXcjs.decodePointer.call(void 0, pathSegment), method };
277
+ return { path: _chunkUKD63LKGcjs.decodePointer.call(void 0, pathSegment), method };
278
278
  }
279
279
  }
280
280
  return null;
@@ -293,7 +293,7 @@ var OpenAPIReducer = (_class = class _OpenAPIReducer {
293
293
  const webhookName = match[1];
294
294
  const method = match[2];
295
295
  if (webhookName && method) {
296
- return { name: _chunkSCWW2SNXcjs.decodePointer.call(void 0, webhookName), method };
296
+ return { name: _chunkUKD63LKGcjs.decodePointer.call(void 0, webhookName), method };
297
297
  }
298
298
  }
299
299
  return null;
@@ -321,7 +321,7 @@ var OpenAPIReducer = (_class = class _OpenAPIReducer {
321
321
  }
322
322
  }
323
323
  Object.keys(_optionalChain([this, 'access', _23 => _23.definition, 'access', _24 => _24.paths, 'optionalAccess', _25 => _25[path]]) || {}).forEach((method) => {
324
- if (method === "parameters" || !_chunkSCWW2SNXcjs.supportedMethods.includes(method.toLowerCase())) {
324
+ if (method === "parameters" || !_chunkUKD63LKGcjs.supportedMethods.includes(method.toLowerCase())) {
325
325
  return;
326
326
  }
327
327
  if (this.hasPathsToReduceBy) {
@@ -395,7 +395,7 @@ var OpenAPIReducer = (_class = class _OpenAPIReducer {
395
395
  return;
396
396
  }
397
397
  Object.keys(webhook).forEach((method) => {
398
- if (method === "parameters" || !_chunkSCWW2SNXcjs.supportedMethods.includes(method.toLowerCase())) {
398
+ if (method === "parameters" || !_chunkUKD63LKGcjs.supportedMethods.includes(method.toLowerCase())) {
399
399
  return;
400
400
  }
401
401
  if (this.hasWebhooksToReduceBy) {
@@ -470,7 +470,7 @@ var OpenAPIReducer = (_class = class _OpenAPIReducer {
470
470
  }
471
471
  Object.keys(_optionalChain([this, 'access', _39 => _39.definition, 'access', _40 => _40.paths, 'optionalAccess', _41 => _41[path]]) || {}).forEach((method) => {
472
472
  const methodLC = method.toLowerCase();
473
- if (method === "parameters" || !_chunkSCWW2SNXcjs.supportedMethods.includes(methodLC)) {
473
+ if (method === "parameters" || !_chunkUKD63LKGcjs.supportedMethods.includes(methodLC)) {
474
474
  return;
475
475
  }
476
476
  const retainedByRef = this.retainPathMethods.has(`${pathLC}|${methodLC}`) || Array.from(this.$refs).some((ref) => {
@@ -555,7 +555,7 @@ var OpenAPIReducer = (_class = class _OpenAPIReducer {
555
555
  }
556
556
  Object.keys(webhook).forEach((method) => {
557
557
  const methodLC = method.toLowerCase();
558
- if (method === "parameters" || !_chunkSCWW2SNXcjs.supportedMethods.includes(methodLC)) {
558
+ if (method === "parameters" || !_chunkUKD63LKGcjs.supportedMethods.includes(methodLC)) {
559
559
  return;
560
560
  }
561
561
  const retainedByRef = this.retainWebhookMethods.has(`${nameLC}|${methodLC}`);
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  decodePointer,
6
6
  supportedMethods
7
- } from "../chunk-6MDVLJ3A.js";
7
+ } from "../chunk-IEN4GZPF.js";
8
8
  import "../chunk-S27IGTVG.js";
9
9
  import {
10
10
  isOpenAPI31,
package/dist/utils.cjs CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
 
8
8
 
9
- var _chunkSCWW2SNXcjs = require('./chunk-SCWW2SNX.cjs');
9
+ var _chunkUKD63LKGcjs = require('./chunk-UKD63LKG.cjs');
10
10
  require('./chunk-AYA3UT4L.cjs');
11
11
  require('./chunk-7PWF3F2W.cjs');
12
12
 
@@ -17,5 +17,5 @@ require('./chunk-7PWF3F2W.cjs');
17
17
 
18
18
 
19
19
 
20
- exports.SERVER_VARIABLE_REGEX = _chunkSCWW2SNXcjs.SERVER_VARIABLE_REGEX; exports.dereferenceRef = _chunkSCWW2SNXcjs.dereferenceRef; exports.dereferenceRefDeep = _chunkSCWW2SNXcjs.dereferenceRefDeep; exports.getParameterContentType = _chunkSCWW2SNXcjs.getParameterContentType; exports.jsonSchemaTypes = _chunkSCWW2SNXcjs.types; exports.matchesMimeType = _chunkSCWW2SNXcjs.matches_mimetype_default; exports.supportedMethods = _chunkSCWW2SNXcjs.supportedMethods;
20
+ exports.SERVER_VARIABLE_REGEX = _chunkUKD63LKGcjs.SERVER_VARIABLE_REGEX; exports.dereferenceRef = _chunkUKD63LKGcjs.dereferenceRef; exports.dereferenceRefDeep = _chunkUKD63LKGcjs.dereferenceRefDeep; exports.getParameterContentType = _chunkUKD63LKGcjs.getParameterContentType; exports.jsonSchemaTypes = _chunkUKD63LKGcjs.types; exports.matchesMimeType = _chunkUKD63LKGcjs.matches_mimetype_default; exports.supportedMethods = _chunkUKD63LKGcjs.supportedMethods;
21
21
  //# sourceMappingURL=utils.cjs.map
package/dist/utils.js CHANGED
@@ -6,7 +6,7 @@ import {
6
6
  matches_mimetype_default,
7
7
  supportedMethods,
8
8
  types
9
- } from "./chunk-6MDVLJ3A.js";
9
+ } from "./chunk-IEN4GZPF.js";
10
10
  import "./chunk-S27IGTVG.js";
11
11
  import "./chunk-XG4HGNCN.js";
12
12
  export {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oas",
3
- "version": "36.0.3",
3
+ "version": "37.0.0",
4
4
  "description": "Comprehensive tooling for working with OpenAPI definitions",
5
5
  "license": "MIT",
6
6
  "author": "ReadMe <support@readme.io> (https://readme.com)",
@@ -83,7 +83,6 @@
83
83
  "watch": "tsc --watch"
84
84
  },
85
85
  "dependencies": {
86
- "@apidevtools/json-schema-ref-parser": "^14.1.1",
87
86
  "@readme/openapi-parser": "^6.1.3",
88
87
  "@types/json-schema": "^7.0.11",
89
88
  "json-schema-merge-allof": "^0.8.1",