diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..fc82c5d
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,86 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+
+# Runtime data
+pids
+*.pid
+*.seed
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+.nyc_output
+
+# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (http://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directories
+node_modules
+jspm_packages
+
+# Optional npm cache directory
+.npm
+
+# Optional REPL history
+.node_repl_history
+
+# =========================
+# Operating System Files
+# =========================
+
+# OSX
+# =========================
+
+.DS_Store
+.AppleDouble
+.LSOverride
+
+# Thumbnails
+._*
+
+# Files that might appear in the root of a volume
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
+# Windows
+# =========================
+
+# Windows image file caches
+Thumbs.db
+ehthumbs.db
+
+# Folder config file
+Desktop.ini
+
+# Recycle Bin used on file shares
+$RECYCLE.BIN/
+
+# Windows Installer files
+*.cab
+*.msi
+*.msm
+*.msp
+
+# Windows shortcuts
+*.lnk
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..6498ebc
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,7 @@
+# Changelog
+
+## [Unreleased]
+### Changed
+
+## [v1.0.0] 30-05-2021
+Initial version
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..a53aaeb
--- /dev/null
+++ b/README.md
@@ -0,0 +1,81 @@
+# OpenAPI schema validator
+[](https://github.com/seriousme/openapi-schema-validator/actions?query=workflow%3A%22Node.js+CI%22)
+[](https://coveralls.io/github/seriousme/openapi-schema-validator?branch=master)
+[](https://lgtm.com/projects/g/seriousme/openapi-schema-validator/context:javascript)
+[](https://www.npmjs.com/package/@seriousme/openapi-schema-validator)
+
+
+
+
+A JSON schema validator for [OpenAPI](https://www.openapis.org/) specifications, it currently supports:
+- [2.0](https://spec.openapis.org/oas/v2.0)
+- [3.0.x](https://spec.openapis.org/oas/v3.0.3)
+- [3.1.x](https://spec.openapis.org/oas/v3.1.0)
+
+
+## Install
+```
+npm i @seriousme/openapi-schema-validator --save
+```
+
+
+### Usage
+
+```javascript
+import Validator from "openapi-schema-validator";
+
+console.log(Validator.supportedVersions.has("3.1"))
+// prints true
+
+const validator = new Validator();
+const res = await validator.validate('./petstore.json');
+if (res.valid){
+ console.log("Specification matches schema for version", validator.version);
+ const schema = validator.resolveRefs());
+ // schema now contains a Javascript object containing the dereferenced schema
+} else {
+ console.log("Specification does not match Schema");
+ console.log(res.errors);
+}
+
+```
+
+
+### API
+- `.validate(specification)`
+
+Thsi function tries to validata a specification against the OpenApi schemas. `specification` can be one of:
+
+- a JSON object
+- a JSON object encoded as string
+- a YAML string
+- a filename
+
+External references are *not* automatically resolved so you need to inline them yourself if required.
+The result is an object:
+```
+{
+ valid: ,
+ errors: // only present if valid is false
+}
+```
+
+- `.version`
+
+If validation is succesfull this will return the openApi version found e.g. ("2.0","3.0","3.1).
+The openApi specification only specifies major/minor versions as separate schemas. So "3.0.3" results in "3.0".
+
+- `.resolveRefs(options)`
+
+This function tries to resolve all internal references. External references are *not* automatically resolved so you need to inline them yourself if required. By default it will use the last specification passed to `.validate()`
+but you can explicity pass a specification by passing `{specification:}` as options.
+The result is an `object` where all references have been resolved.
+Resolution of references is `shallow` This should normally not be a problem for this use case.
+
+- `Validator.supportedVersions`
+
+This static property returns the OpenApi versions supported by this package as a `Set`. If present, the result of `.version` is a member of this `Set`.
+
+
+# License
+Licensed under the [MIT license](https://opensource.org/licenses/MIT)
diff --git a/index.d.ts b/index.d.ts
new file mode 100644
index 0000000..511327b
--- /dev/null
+++ b/index.d.ts
@@ -0,0 +1,16 @@
+export default class Validator {
+ static supportedVersions: Set;
+ constructor(ajvOptions?: {
+ strict: boolean;
+ validateFormats: boolean;
+ });
+ resolveRefs(opts?: {
+ specification?: object
+ }): object;
+ validate(schema: object | string): Promise<{
+ valid: boolean;
+ errors?: any
+ }>;
+ specification: object;
+ version: string;
+}
diff --git a/index.js b/index.js
new file mode 100644
index 0000000..98e36a9
--- /dev/null
+++ b/index.js
@@ -0,0 +1,94 @@
+import Ajv from 'ajv';
+import Ajv2020 from 'ajv/dist/2020.js';
+import { createRequire } from 'module';
+import JSYaml from 'js-yaml';
+import { readFile, stat } from 'fs/promises'
+import { resolve } from './resolve.js'
+
+
+const importJSON = createRequire(import.meta.url);
+
+const openApiVersions = new Set(['2.0', '3.0', '3.1']);
+const ajvVersions = {
+ "http://json-schema.org/draft-07/schema": Ajv,
+ "https://json-schema.org/draft/2020-12/schema": Ajv2020
+}
+
+const openApiSchemas = {};
+
+function getOpenApiVersion(specification) {
+ for (const version of openApiVersions) {
+ const prop = specification[(version == "2.0") ? 'swagger' : 'openapi'];
+ if (typeof prop === "string" && prop.startsWith(version)) {
+ return version
+ }
+ }
+ return undefined
+}
+
+async function getSpecFromData(data) {
+ if (typeof data === 'object') {
+ return data;
+ }
+ if (typeof data === 'string') {
+ if (data.match(/\n/)) {
+ try {
+ return JSYaml.load(data);
+ }
+ catch (_) {
+ return undefined
+ };
+ }
+ try {
+ const fileData = await readFile(data, "utf-8");
+ return JSYaml.load(fileData);
+ } catch (_) {
+ return undefined;
+ }
+ }
+}
+
+
+export default class Validator {
+ constructor(ajvOptions = { strict: false, validateFormats: false }) {
+ this.ajvOptions = ajvOptions;
+ return this;
+ }
+
+ resolveRefs(opts={}){
+ return resolve(this.specification || opts.specification)
+ }
+
+ static supportedVersions = openApiVersions;
+
+ async validate(data) {
+ const specification = await getSpecFromData(data);
+ this.specification = specification;
+ if (specification === undefined || specification === null) {
+ return {
+ valid: false,
+ errors: "Cannot find JSON, YAML or filename in data"
+ };
+ }
+ const version = getOpenApiVersion(specification);
+ this.version = version;
+ if (!version) {
+ return {
+ valid: false,
+ errors: "Cannot find supported swagger/openapi version in specification, version must be a string."
+ };
+ }
+ const schema = await importJSON(`./schemas/v${version}/schema.json`);
+ const schemaVersion = schema.$schema;
+ const AjvClass = ajvVersions[schemaVersion];
+ const ajv = new AjvClass(this.ajvOptions);
+ const validate = ajv.compile(schema);
+ const result = {
+ valid: validate(specification)
+ };
+ if (validate.errors) {
+ result.errors = validate.errors
+ }
+ return result
+ }
+}
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..144fae9
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,3768 @@
+{
+ "name": "@seriousme/openapi-schema-validator",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz",
+ "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.12.13"
+ }
+ },
+ "@babel/compat-data": {
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz",
+ "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==",
+ "dev": true
+ },
+ "@babel/core": {
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.0.tgz",
+ "integrity": "sha512-8YqpRig5NmIHlMLw09zMlPTvUVMILjqCOtVgu+TVNWEBvy9b5I3RRyhqnrV4hjgEK7n8P9OqvkWJAFmEL6Wwfw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.12.13",
+ "@babel/generator": "^7.14.0",
+ "@babel/helper-compilation-targets": "^7.13.16",
+ "@babel/helper-module-transforms": "^7.14.0",
+ "@babel/helpers": "^7.14.0",
+ "@babel/parser": "^7.14.0",
+ "@babel/template": "^7.12.13",
+ "@babel/traverse": "^7.14.0",
+ "@babel/types": "^7.14.0",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.1.2",
+ "semver": "^6.3.0",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/generator": {
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.0.tgz",
+ "integrity": "sha512-C6u00HbmsrNPug6A+CiNl8rEys7TsdcXwg12BHi2ca5rUfAs3+UwZsuDQSXnc+wCElCXMB8gMaJ3YXDdh8fAlg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.14.0",
+ "jsesc": "^2.5.1",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/helper-compilation-targets": {
+ "version": "7.13.16",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz",
+ "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==",
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.13.15",
+ "@babel/helper-validator-option": "^7.12.17",
+ "browserslist": "^4.14.5",
+ "semver": "^6.3.0"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz",
+ "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.12.13",
+ "@babel/template": "^7.12.13",
+ "@babel/types": "^7.12.13"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz",
+ "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.12.13"
+ }
+ },
+ "@babel/helper-member-expression-to-functions": {
+ "version": "7.13.12",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz",
+ "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.13.12"
+ }
+ },
+ "@babel/helper-module-imports": {
+ "version": "7.13.12",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz",
+ "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.13.12"
+ }
+ },
+ "@babel/helper-module-transforms": {
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz",
+ "integrity": "sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.13.12",
+ "@babel/helper-replace-supers": "^7.13.12",
+ "@babel/helper-simple-access": "^7.13.12",
+ "@babel/helper-split-export-declaration": "^7.12.13",
+ "@babel/helper-validator-identifier": "^7.14.0",
+ "@babel/template": "^7.12.13",
+ "@babel/traverse": "^7.14.0",
+ "@babel/types": "^7.14.0"
+ }
+ },
+ "@babel/helper-optimise-call-expression": {
+ "version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz",
+ "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.12.13"
+ }
+ },
+ "@babel/helper-replace-supers": {
+ "version": "7.13.12",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz",
+ "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-member-expression-to-functions": "^7.13.12",
+ "@babel/helper-optimise-call-expression": "^7.12.13",
+ "@babel/traverse": "^7.13.0",
+ "@babel/types": "^7.13.12"
+ }
+ },
+ "@babel/helper-simple-access": {
+ "version": "7.13.12",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz",
+ "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.13.12"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz",
+ "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.12.13"
+ }
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz",
+ "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==",
+ "dev": true
+ },
+ "@babel/helper-validator-option": {
+ "version": "7.12.17",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz",
+ "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==",
+ "dev": true
+ },
+ "@babel/helpers": {
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz",
+ "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.12.13",
+ "@babel/traverse": "^7.14.0",
+ "@babel/types": "^7.14.0"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz",
+ "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.14.0",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.0.tgz",
+ "integrity": "sha512-AHbfoxesfBALg33idaTBVUkLnfXtsgvJREf93p4p0Lwsz4ppfE7g1tpEXVm4vrxUcH4DVhAa9Z1m1zqf9WUC7Q==",
+ "dev": true
+ },
+ "@babel/template": {
+ "version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz",
+ "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.12.13",
+ "@babel/parser": "^7.12.13",
+ "@babel/types": "^7.12.13"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz",
+ "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.12.13",
+ "@babel/generator": "^7.14.0",
+ "@babel/helper-function-name": "^7.12.13",
+ "@babel/helper-split-export-declaration": "^7.12.13",
+ "@babel/parser": "^7.14.0",
+ "@babel/types": "^7.14.0",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0"
+ }
+ },
+ "@babel/types": {
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.0.tgz",
+ "integrity": "sha512-O2LVLdcnWplaGxiPBz12d0HcdN8QdxdsWYhz5LSeuukV/5mn2xUUc3gBeU4QBYPJ18g/UToe8F532XJ608prmg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.14.0",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "@bcoe/v8-coverage": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
+ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
+ "dev": true
+ },
+ "@istanbuljs/load-nyc-config": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
+ "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.3.1",
+ "find-up": "^4.1.0",
+ "get-package-type": "^0.1.0",
+ "js-yaml": "^3.13.1",
+ "resolve-from": "^5.0.0"
+ },
+ "dependencies": {
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ }
+ }
+ },
+ "@istanbuljs/schema": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
+ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
+ "dev": true
+ },
+ "@types/istanbul-lib-coverage": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
+ "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==",
+ "dev": true
+ },
+ "aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "dev": true,
+ "requires": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ }
+ },
+ "ajv": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.2.0.tgz",
+ "integrity": "sha512-WSNGFuyWd//XO8n/m/EaOlNLtO0yL8EXT/74LqT4khdhpZjP7lkj/kT5uwRmGitKEVp/Oj7ZUHeGfPtgHhQ5CA==",
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ajv-formats": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.0.2.tgz",
+ "integrity": "sha512-Brah4Uo5/U8v76c6euTwtjVFFaVishwnJrQBYpev1JRh4vjA1F4HY3UzQez41YUCszUCXKagG8v6eVRBHV1gkw==",
+ "requires": {
+ "ajv": "^8.0.0"
+ }
+ },
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "anymatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+ "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "dev": true,
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "append-transform": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz",
+ "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==",
+ "dev": true,
+ "requires": {
+ "default-require-extensions": "^3.0.0"
+ }
+ },
+ "archy": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
+ "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=",
+ "dev": true
+ },
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+ },
+ "asn1": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ },
+ "async-hook-domain": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/async-hook-domain/-/async-hook-domain-2.0.3.tgz",
+ "integrity": "sha512-MadiLLDEZRZzZwcm0dgS+K99qXZ4H2saAUwUgwzFulbAkXrKi3AX5FvWS3FFTQtLMwrqcGqAJe6o12KrObejQA==",
+ "dev": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+ "dev": true
+ },
+ "aws4": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
+ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+ "dev": true,
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "dev": true
+ },
+ "bind-obj-methods": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bind-obj-methods/-/bind-obj-methods-3.0.0.tgz",
+ "integrity": "sha512-nLEaaz3/sEzNSyPWRsN9HNsqwk1AUyECtGj+XwGdIi3xABnEqecvXtIJ0wehQXuuER5uZ/5fTs2usONgYjG+iw==",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "browserslist": {
+ "version": "4.16.6",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz",
+ "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==",
+ "dev": true,
+ "requires": {
+ "caniuse-lite": "^1.0.30001219",
+ "colorette": "^1.2.2",
+ "electron-to-chromium": "^1.3.723",
+ "escalade": "^3.1.1",
+ "node-releases": "^1.1.71"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+ "dev": true
+ },
+ "c8": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/c8/-/c8-7.7.2.tgz",
+ "integrity": "sha512-8AqNnUMxB3hsgYCYso2GJjlwnaNPlrEEbYbCQb7N76V1nrOgCKXiTcE3gXU18rIj0FeduPywROrIBMC7XAKApg==",
+ "dev": true,
+ "requires": {
+ "@bcoe/v8-coverage": "^0.2.3",
+ "@istanbuljs/schema": "^0.1.2",
+ "find-up": "^5.0.0",
+ "foreground-child": "^2.0.0",
+ "istanbul-lib-coverage": "^3.0.0",
+ "istanbul-lib-report": "^3.0.0",
+ "istanbul-reports": "^3.0.2",
+ "rimraf": "^3.0.0",
+ "test-exclude": "^6.0.0",
+ "v8-to-istanbul": "^7.1.0",
+ "yargs": "^16.2.0",
+ "yargs-parser": "^20.2.7"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true
+ },
+ "locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^5.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "requires": {
+ "yocto-queue": "^0.1.0"
+ }
+ },
+ "p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^3.0.2"
+ }
+ },
+ "string-width": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
+ "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.0"
+ }
+ },
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true
+ },
+ "yargs": {
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "dev": true,
+ "requires": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "20.2.7",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz",
+ "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==",
+ "dev": true
+ }
+ }
+ },
+ "caching-transform": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz",
+ "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==",
+ "dev": true,
+ "requires": {
+ "hasha": "^5.0.0",
+ "make-dir": "^3.0.0",
+ "package-hash": "^4.0.0",
+ "write-file-atomic": "^3.0.0"
+ }
+ },
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true
+ },
+ "caniuse-lite": {
+ "version": "1.0.30001220",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001220.tgz",
+ "integrity": "sha512-pjC2T4DIDyGAKTL4dMvGUQaMUHRmhvPpAgNNTa14jaBWHu+bLQgvpFqElxh9L4829Fdx0PlKiMp3wnYldRtECA==",
+ "dev": true
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "dependencies": {
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ }
+ }
+ },
+ "chokidar": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz",
+ "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==",
+ "dev": true,
+ "requires": {
+ "anymatch": "~3.1.1",
+ "braces": "~3.0.2",
+ "fsevents": "~2.3.1",
+ "glob-parent": "~5.1.0",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.5.0"
+ }
+ },
+ "clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+ "dev": true
+ },
+ "cliui": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
+ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^2.1.1",
+ "strip-ansi": "^4.0.0",
+ "wrap-ansi": "^2.0.0"
+ }
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "color-support": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
+ "dev": true
+ },
+ "colorette": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz",
+ "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==",
+ "dev": true
+ },
+ "combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dev": true,
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
+ "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ }
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "coveralls": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.1.0.tgz",
+ "integrity": "sha512-sHxOu2ELzW8/NC1UP5XVLbZDzO4S3VxfFye3XYCznopHy02YjNkHcj5bKaVw2O7hVaBdBjEdQGpie4II1mWhuQ==",
+ "dev": true,
+ "requires": {
+ "js-yaml": "^3.13.1",
+ "lcov-parse": "^1.0.0",
+ "log-driver": "^1.2.7",
+ "minimist": "^1.2.5",
+ "request": "^2.88.2"
+ },
+ "dependencies": {
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ }
+ }
+ },
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "debug": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+ "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "default-require-extensions": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz",
+ "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==",
+ "dev": true,
+ "requires": {
+ "strip-bom": "^4.0.0"
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
+ },
+ "diff": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+ "dev": true
+ },
+ "ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+ "dev": true,
+ "requires": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "electron-to-chromium": {
+ "version": "1.3.725",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.725.tgz",
+ "integrity": "sha512-2BbeAESz7kc6KBzs7WVrMc1BY5waUphk4D4DX5dSQXJhsc3tP5ZFaiyuL0AB7vUKzDYpIeYwTYlEfxyjsGUrhw==",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "es6-error": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
+ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==",
+ "dev": true
+ },
+ "escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
+ "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
+ "dev": true
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true
+ },
+ "events-to-array": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz",
+ "integrity": "sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y=",
+ "dev": true
+ },
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "find-cache-dir": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz",
+ "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==",
+ "dev": true,
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^3.0.2",
+ "pkg-dir": "^4.1.0"
+ }
+ },
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "findit": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/findit/-/findit-2.0.0.tgz",
+ "integrity": "sha1-ZQnwEmr0wXhVHPqZOU4DLhOk1W4=",
+ "dev": true
+ },
+ "foreground-child": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz",
+ "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "dev": true
+ },
+ "form-data": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+ "dev": true,
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fromentries": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz",
+ "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==",
+ "dev": true
+ },
+ "fs-exists-cached": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz",
+ "integrity": "sha1-zyVVTKBQ3EmuZla0HeQiWJidy84=",
+ "dev": true
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "dev": true,
+ "optional": true
+ },
+ "function-loop": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/function-loop/-/function-loop-2.0.1.tgz",
+ "integrity": "sha512-ktIR+O6i/4h+j/ZhZJNdzeI4i9lEPeEK6UPR2EVyTVBqOwcU3Za9xYKLH64ZR9HmcROyRrOkizNyjjtWJzDDkQ==",
+ "dev": true
+ },
+ "gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "dev": true
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true
+ },
+ "get-package-type": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
+ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
+ "dev": true
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.2.6",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
+ "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==",
+ "dev": true
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+ "dev": true
+ },
+ "har-validator": {
+ "version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
+ "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.12.3",
+ "har-schema": "^2.0.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ }
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "hasha": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz",
+ "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==",
+ "dev": true,
+ "requires": {
+ "is-stream": "^2.0.0",
+ "type-fest": "^0.8.0"
+ }
+ },
+ "html-escaper": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
+ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
+ "dev": true
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "requires": {
+ "binary-extensions": "^2.0.0"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
+ "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
+ "dev": true
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "dev": true
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "istanbul-lib-coverage": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz",
+ "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==",
+ "dev": true
+ },
+ "istanbul-lib-hook": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz",
+ "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==",
+ "dev": true,
+ "requires": {
+ "append-transform": "^2.0.0"
+ }
+ },
+ "istanbul-lib-instrument": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz",
+ "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.7.5",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-coverage": "^3.0.0",
+ "semver": "^6.3.0"
+ }
+ },
+ "istanbul-lib-processinfo": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz",
+ "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==",
+ "dev": true,
+ "requires": {
+ "archy": "^1.0.0",
+ "cross-spawn": "^7.0.0",
+ "istanbul-lib-coverage": "^3.0.0-alpha.1",
+ "make-dir": "^3.0.0",
+ "p-map": "^3.0.0",
+ "rimraf": "^3.0.0",
+ "uuid": "^3.3.3"
+ }
+ },
+ "istanbul-lib-report": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
+ "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
+ "dev": true,
+ "requires": {
+ "istanbul-lib-coverage": "^3.0.0",
+ "make-dir": "^3.0.0",
+ "supports-color": "^7.1.0"
+ },
+ "dependencies": {
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "istanbul-lib-source-maps": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz",
+ "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.1",
+ "istanbul-lib-coverage": "^3.0.0",
+ "source-map": "^0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "istanbul-reports": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz",
+ "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==",
+ "dev": true,
+ "requires": {
+ "html-escaper": "^2.0.0",
+ "istanbul-lib-report": "^3.0.0"
+ }
+ },
+ "jackspeak": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-1.4.0.tgz",
+ "integrity": "sha512-VDcSunT+wcccoG46FtzuBAyQKlzhHjli4q31e1fIHGOsRspqNUFjVzGb+7eIFDlTvqLygxapDHPHS0ouT2o/tw==",
+ "dev": true,
+ "requires": {
+ "cliui": "^4.1.0"
+ }
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "dev": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true
+ },
+ "json5": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
+ "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ }
+ },
+ "lcov-parse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz",
+ "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=",
+ "dev": true
+ },
+ "libtap": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/libtap/-/libtap-1.1.1.tgz",
+ "integrity": "sha512-Fye8fh1+G7E8qqmjQaY+pXGxy7HM0S6bqCCJFLa16+g2jODBByxbJFDpjbDNF69wfRVyvJ+foLZc1WTIv7dx+g==",
+ "dev": true,
+ "requires": {
+ "async-hook-domain": "^2.0.1",
+ "bind-obj-methods": "^3.0.0",
+ "diff": "^4.0.2",
+ "function-loop": "^2.0.1",
+ "minipass": "^3.1.1",
+ "own-or": "^1.0.0",
+ "own-or-env": "^1.0.1",
+ "signal-exit": "^3.0.2",
+ "stack-utils": "^2.0.1",
+ "tap-parser": "^10.0.1",
+ "tap-yaml": "^1.0.0",
+ "tcompare": "^5.0.1",
+ "trivial-deferred": "^1.0.1",
+ "yapool": "^1.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "lodash.flattendeep": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz",
+ "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=",
+ "dev": true
+ },
+ "log-driver": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz",
+ "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dev": true,
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "dev": true,
+ "requires": {
+ "semver": "^6.0.0"
+ }
+ },
+ "mime-db": {
+ "version": "1.47.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz",
+ "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.30",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz",
+ "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.47.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
+ "dev": true
+ },
+ "minipass": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz",
+ "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==",
+ "dev": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node-preload": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz",
+ "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==",
+ "dev": true,
+ "requires": {
+ "process-on-spawn": "^1.0.0"
+ }
+ },
+ "node-releases": {
+ "version": "1.1.71",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz",
+ "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==",
+ "dev": true
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "nyc": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz",
+ "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==",
+ "dev": true,
+ "requires": {
+ "@istanbuljs/load-nyc-config": "^1.0.0",
+ "@istanbuljs/schema": "^0.1.2",
+ "caching-transform": "^4.0.0",
+ "convert-source-map": "^1.7.0",
+ "decamelize": "^1.2.0",
+ "find-cache-dir": "^3.2.0",
+ "find-up": "^4.1.0",
+ "foreground-child": "^2.0.0",
+ "get-package-type": "^0.1.0",
+ "glob": "^7.1.6",
+ "istanbul-lib-coverage": "^3.0.0",
+ "istanbul-lib-hook": "^3.0.0",
+ "istanbul-lib-instrument": "^4.0.0",
+ "istanbul-lib-processinfo": "^2.0.2",
+ "istanbul-lib-report": "^3.0.0",
+ "istanbul-lib-source-maps": "^4.0.0",
+ "istanbul-reports": "^3.0.2",
+ "make-dir": "^3.0.0",
+ "node-preload": "^0.2.1",
+ "p-map": "^3.0.0",
+ "process-on-spawn": "^1.0.0",
+ "resolve-from": "^5.0.0",
+ "rimraf": "^3.0.0",
+ "signal-exit": "^3.0.2",
+ "spawn-wrap": "^2.0.0",
+ "test-exclude": "^6.0.0",
+ "yargs": "^15.0.2"
+ }
+ },
+ "oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "opener": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz",
+ "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==",
+ "dev": true
+ },
+ "own-or": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/own-or/-/own-or-1.0.0.tgz",
+ "integrity": "sha1-Tod/vtqaLsgAD7wLyuOWRe6L+Nw=",
+ "dev": true
+ },
+ "own-or-env": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/own-or-env/-/own-or-env-1.0.1.tgz",
+ "integrity": "sha512-y8qULRbRAlL6x2+M0vIe7jJbJx/kmUTzYonRAa2ayesR2qWLswninkVyeJe4x3IEXhdgoNodzjQRKAoEs6Fmrw==",
+ "dev": true,
+ "requires": {
+ "own-or": "^1.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "p-map": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
+ "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
+ "dev": true,
+ "requires": {
+ "aggregate-error": "^3.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true
+ },
+ "package-hash": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz",
+ "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.15",
+ "hasha": "^5.0.0",
+ "lodash.flattendeep": "^4.4.0",
+ "release-zalgo": "^1.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+ "dev": true
+ },
+ "picomatch": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz",
+ "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==",
+ "dev": true
+ },
+ "pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "requires": {
+ "find-up": "^4.0.0"
+ }
+ },
+ "process-on-spawn": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz",
+ "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==",
+ "dev": true,
+ "requires": {
+ "fromentries": "^1.2.0"
+ }
+ },
+ "prop-types": {
+ "version": "15.7.2",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
+ "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.8.1"
+ }
+ },
+ "psl": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
+ "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
+ "dev": true
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
+ },
+ "qs": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+ "dev": true
+ },
+ "react": {
+ "version": "16.14.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz",
+ "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1",
+ "prop-types": "^15.6.2"
+ }
+ },
+ "react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
+ "dev": true
+ },
+ "readdirp": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
+ "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
+ "dev": true,
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "release-zalgo": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz",
+ "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=",
+ "dev": true,
+ "requires": {
+ "es6-error": "^4.0.1"
+ }
+ },
+ "request": {
+ "version": "2.88.2",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
+ "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.3",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.5.0",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true
+ },
+ "require-from-string": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="
+ },
+ "require-main-filename": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
+ "dev": true
+ },
+ "resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
+ "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "source-map-support": {
+ "version": "0.5.19",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
+ "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "spawn-wrap": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz",
+ "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==",
+ "dev": true,
+ "requires": {
+ "foreground-child": "^2.0.0",
+ "is-windows": "^1.0.2",
+ "make-dir": "^3.0.0",
+ "rimraf": "^3.0.0",
+ "signal-exit": "^3.0.2",
+ "which": "^2.0.1"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "sshpk": {
+ "version": "1.16.1",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
+ "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
+ "dev": true,
+ "requires": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ }
+ },
+ "stack-utils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz",
+ "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^2.0.0"
+ }
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
+ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "tap": {
+ "version": "15.0.6",
+ "resolved": "https://registry.npmjs.org/tap/-/tap-15.0.6.tgz",
+ "integrity": "sha512-f3LaBSGgXkwTh17Lj4H4DxKIl4BrDZlmxWHtLVGwl8vx+XxNKvf0qMbeFLVhsVTRVz9E5yTaSUweB00YcO+TMw==",
+ "dev": true,
+ "requires": {
+ "@types/react": "^16.9.23",
+ "chokidar": "^3.3.0",
+ "coveralls": "^3.0.11",
+ "findit": "^2.0.0",
+ "foreground-child": "^2.0.0",
+ "fs-exists-cached": "^1.0.0",
+ "glob": "^7.1.6",
+ "import-jsx": "^4.0.0",
+ "ink": "^2.7.1",
+ "isexe": "^2.0.0",
+ "istanbul-lib-processinfo": "^2.0.2",
+ "jackspeak": "^1.4.0",
+ "libtap": "^1.1.1",
+ "minipass": "^3.1.1",
+ "mkdirp": "^1.0.4",
+ "nyc": "^15.1.0",
+ "opener": "^1.5.1",
+ "react": "^16.12.0",
+ "rimraf": "^3.0.0",
+ "signal-exit": "^3.0.0",
+ "source-map-support": "^0.5.16",
+ "tap-mocha-reporter": "^5.0.0",
+ "tap-parser": "^10.0.1",
+ "tap-yaml": "^1.0.0",
+ "tcompare": "^5.0.4",
+ "treport": "^2.0.1",
+ "which": "^2.0.2"
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.12.13",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.12.13"
+ }
+ },
+ "@babel/compat-data": {
+ "version": "7.13.12",
+ "bundled": true,
+ "dev": true
+ },
+ "@babel/core": {
+ "version": "7.13.14",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.12.13",
+ "@babel/generator": "^7.13.9",
+ "@babel/helper-compilation-targets": "^7.13.13",
+ "@babel/helper-module-transforms": "^7.13.14",
+ "@babel/helpers": "^7.13.10",
+ "@babel/parser": "^7.13.13",
+ "@babel/template": "^7.12.13",
+ "@babel/traverse": "^7.13.13",
+ "@babel/types": "^7.13.14",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.1.2",
+ "semver": "^6.3.0",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/generator": {
+ "version": "7.13.9",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.13.0",
+ "jsesc": "^2.5.1",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/helper-annotate-as-pure": {
+ "version": "7.12.13",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.12.13"
+ }
+ },
+ "@babel/helper-compilation-targets": {
+ "version": "7.13.13",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.13.12",
+ "@babel/helper-validator-option": "^7.12.17",
+ "browserslist": "^4.14.5",
+ "semver": "^6.3.0"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.12.13",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.12.13",
+ "@babel/template": "^7.12.13",
+ "@babel/types": "^7.12.13"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.12.13",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.12.13"
+ }
+ },
+ "@babel/helper-member-expression-to-functions": {
+ "version": "7.13.12",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.13.12"
+ }
+ },
+ "@babel/helper-module-imports": {
+ "version": "7.13.12",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.13.12"
+ }
+ },
+ "@babel/helper-module-transforms": {
+ "version": "7.13.14",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.13.12",
+ "@babel/helper-replace-supers": "^7.13.12",
+ "@babel/helper-simple-access": "^7.13.12",
+ "@babel/helper-split-export-declaration": "^7.12.13",
+ "@babel/helper-validator-identifier": "^7.12.11",
+ "@babel/template": "^7.12.13",
+ "@babel/traverse": "^7.13.13",
+ "@babel/types": "^7.13.14"
+ }
+ },
+ "@babel/helper-optimise-call-expression": {
+ "version": "7.12.13",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.12.13"
+ }
+ },
+ "@babel/helper-plugin-utils": {
+ "version": "7.13.0",
+ "bundled": true,
+ "dev": true
+ },
+ "@babel/helper-replace-supers": {
+ "version": "7.13.12",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "@babel/helper-member-expression-to-functions": "^7.13.12",
+ "@babel/helper-optimise-call-expression": "^7.12.13",
+ "@babel/traverse": "^7.13.0",
+ "@babel/types": "^7.13.12"
+ }
+ },
+ "@babel/helper-simple-access": {
+ "version": "7.13.12",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.13.12"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.12.13",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.12.13"
+ }
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.12.11",
+ "bundled": true,
+ "dev": true
+ },
+ "@babel/helper-validator-option": {
+ "version": "7.12.17",
+ "bundled": true,
+ "dev": true
+ },
+ "@babel/helpers": {
+ "version": "7.13.10",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.12.13",
+ "@babel/traverse": "^7.13.0",
+ "@babel/types": "^7.13.0"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.13.10",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.12.11",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.13.13",
+ "bundled": true,
+ "dev": true
+ },
+ "@babel/plugin-proposal-object-rest-spread": {
+ "version": "7.13.8",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.13.8",
+ "@babel/helper-compilation-targets": "^7.13.8",
+ "@babel/helper-plugin-utils": "^7.13.0",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-transform-parameters": "^7.13.0"
+ }
+ },
+ "@babel/plugin-syntax-jsx": {
+ "version": "7.12.13",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.12.13"
+ }
+ },
+ "@babel/plugin-syntax-object-rest-spread": {
+ "version": "7.8.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-transform-destructuring": {
+ "version": "7.13.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.13.0"
+ }
+ },
+ "@babel/plugin-transform-parameters": {
+ "version": "7.13.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.13.0"
+ }
+ },
+ "@babel/plugin-transform-react-jsx": {
+ "version": "7.13.12",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.12.13",
+ "@babel/helper-module-imports": "^7.13.12",
+ "@babel/helper-plugin-utils": "^7.13.0",
+ "@babel/plugin-syntax-jsx": "^7.12.13",
+ "@babel/types": "^7.13.12"
+ }
+ },
+ "@babel/template": {
+ "version": "7.12.13",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.12.13",
+ "@babel/parser": "^7.12.13",
+ "@babel/types": "^7.12.13"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.13.13",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.12.13",
+ "@babel/generator": "^7.13.9",
+ "@babel/helper-function-name": "^7.12.13",
+ "@babel/helper-split-export-declaration": "^7.12.13",
+ "@babel/parser": "^7.13.13",
+ "@babel/types": "^7.13.13",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0"
+ }
+ },
+ "@babel/types": {
+ "version": "7.13.14",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.12.11",
+ "lodash": "^4.17.19",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "@types/prop-types": {
+ "version": "15.7.3",
+ "bundled": true,
+ "dev": true
+ },
+ "@types/react": {
+ "version": "16.14.5",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "@types/prop-types": "*",
+ "@types/scheduler": "*",
+ "csstype": "^3.0.2"
+ }
+ },
+ "@types/scheduler": {
+ "version": "0.16.1",
+ "bundled": true,
+ "dev": true
+ },
+ "@types/yoga-layout": {
+ "version": "1.9.2",
+ "bundled": true,
+ "dev": true
+ },
+ "ansi-escapes": {
+ "version": "4.3.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.21.3"
+ }
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "ansicolors": {
+ "version": "0.3.2",
+ "bundled": true,
+ "dev": true
+ },
+ "arrify": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "astral-regex": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "auto-bind": {
+ "version": "4.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "browserslist": {
+ "version": "4.16.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "caniuse-lite": "^1.0.30001181",
+ "colorette": "^1.2.1",
+ "electron-to-chromium": "^1.3.649",
+ "escalade": "^3.1.1",
+ "node-releases": "^1.1.70"
+ }
+ },
+ "caller-callsite": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "callsites": "^2.0.0"
+ }
+ },
+ "caller-path": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "caller-callsite": "^2.0.0"
+ }
+ },
+ "callsites": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "caniuse-lite": {
+ "version": "1.0.30001204",
+ "bundled": true,
+ "dev": true
+ },
+ "cardinal": {
+ "version": "2.1.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansicolors": "~0.3.2",
+ "redeyed": "~2.1.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "ci-info": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "cli-cursor": {
+ "version": "3.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^3.1.0"
+ }
+ },
+ "cli-truncate": {
+ "version": "2.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "slice-ansi": "^3.0.0",
+ "string-width": "^4.2.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "bundled": true,
+ "dev": true
+ },
+ "colorette": {
+ "version": "1.2.2",
+ "bundled": true,
+ "dev": true
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.7.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "csstype": {
+ "version": "3.0.7",
+ "bundled": true,
+ "dev": true
+ },
+ "debug": {
+ "version": "4.3.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "electron-to-chromium": {
+ "version": "1.3.703",
+ "bundled": true,
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "escalade": {
+ "version": "3.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "bundled": true,
+ "dev": true
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "events-to-array": {
+ "version": "1.1.2",
+ "bundled": true,
+ "dev": true
+ },
+ "find-cache-dir": {
+ "version": "3.3.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^3.0.2",
+ "pkg-dir": "^4.1.0"
+ }
+ },
+ "find-up": {
+ "version": "4.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "gensync": {
+ "version": "1.0.0-beta.2",
+ "bundled": true,
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.6",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "globals": {
+ "version": "11.12.0",
+ "bundled": true,
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "import-jsx": {
+ "version": "4.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.5.5",
+ "@babel/plugin-proposal-object-rest-spread": "^7.5.5",
+ "@babel/plugin-transform-destructuring": "^7.5.0",
+ "@babel/plugin-transform-react-jsx": "^7.3.0",
+ "caller-path": "^2.0.0",
+ "find-cache-dir": "^3.2.0",
+ "make-dir": "^3.0.2",
+ "resolve-from": "^3.0.0",
+ "rimraf": "^3.0.0"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "bundled": true,
+ "dev": true
+ },
+ "ink": {
+ "version": "2.7.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^4.2.1",
+ "arrify": "^2.0.1",
+ "auto-bind": "^4.0.0",
+ "chalk": "^3.0.0",
+ "cli-cursor": "^3.1.0",
+ "cli-truncate": "^2.1.0",
+ "is-ci": "^2.0.0",
+ "lodash.throttle": "^4.1.1",
+ "log-update": "^3.0.0",
+ "prop-types": "^15.6.2",
+ "react-reconciler": "^0.24.0",
+ "scheduler": "^0.18.0",
+ "signal-exit": "^3.0.2",
+ "slice-ansi": "^3.0.0",
+ "string-length": "^3.1.0",
+ "widest-line": "^3.1.0",
+ "wrap-ansi": "^6.2.0",
+ "yoga-layout-prebuilt": "^1.9.3"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "3.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "bundled": true,
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "is-ci": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ci-info": "^2.0.0"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "jsesc": {
+ "version": "2.5.2",
+ "bundled": true,
+ "dev": true
+ },
+ "json5": {
+ "version": "2.2.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.21",
+ "bundled": true,
+ "dev": true
+ },
+ "lodash.throttle": {
+ "version": "4.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "log-update": {
+ "version": "3.4.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^3.2.0",
+ "cli-cursor": "^2.1.0",
+ "wrap-ansi": "^5.0.0"
+ },
+ "dependencies": {
+ "ansi-escapes": {
+ "version": "3.2.0",
+ "bundled": true,
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "4.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^2.0.0"
+ }
+ },
+ "emoji-regex": {
+ "version": "7.0.3",
+ "bundled": true,
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "mimic-fn": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ },
+ "wrap-ansi": {
+ "version": "5.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "string-width": "^3.0.0",
+ "strip-ansi": "^5.0.0"
+ }
+ }
+ }
+ },
+ "loose-envify": {
+ "version": "1.4.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "make-dir": {
+ "version": "3.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "semver": "^6.0.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "2.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.5",
+ "bundled": true,
+ "dev": true
+ },
+ "minipass": {
+ "version": "3.1.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "bundled": true,
+ "dev": true
+ },
+ "node-releases": {
+ "version": "1.1.71",
+ "bundled": true,
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "5.1.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^2.1.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "bundled": true,
+ "dev": true
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "pkg-dir": {
+ "version": "4.2.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "find-up": "^4.0.0"
+ }
+ },
+ "prop-types": {
+ "version": "15.7.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.8.1"
+ }
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "react-is": {
+ "version": "16.13.1",
+ "bundled": true,
+ "dev": true
+ },
+ "react-reconciler": {
+ "version": "0.24.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1",
+ "prop-types": "^15.6.2",
+ "scheduler": "^0.18.0"
+ }
+ },
+ "redeyed": {
+ "version": "2.1.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "esprima": "~4.0.0"
+ }
+ },
+ "resolve-from": {
+ "version": "3.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "3.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "bundled": true,
+ "dev": true
+ },
+ "scheduler": {
+ "version": "0.18.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1"
+ }
+ },
+ "semver": {
+ "version": "6.3.0",
+ "bundled": true,
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.3",
+ "bundled": true,
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "3.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "bundled": true,
+ "dev": true
+ },
+ "string-length": {
+ "version": "3.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "astral-regex": "^1.0.0",
+ "strip-ansi": "^5.2.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "astral-regex": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "string-width": {
+ "version": "4.2.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "6.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.0"
+ }
+ }
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "tap-parser": {
+ "version": "10.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "events-to-array": "^1.0.1",
+ "minipass": "^3.0.0",
+ "tap-yaml": "^1.0.0"
+ }
+ },
+ "tap-yaml": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "yaml": "^1.5.0"
+ }
+ },
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "treport": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "cardinal": "^2.1.1",
+ "chalk": "^3.0.0",
+ "import-jsx": "^4.0.0",
+ "ink": "^2.6.0",
+ "ms": "^2.1.2",
+ "string-length": "^3.1.0",
+ "tap-parser": "^10.0.1",
+ "unicode-length": "^2.0.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "3.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "bundled": true,
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "type-fest": {
+ "version": "0.21.3",
+ "bundled": true,
+ "dev": true
+ },
+ "unicode-length": {
+ "version": "2.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "punycode": "^2.0.0",
+ "strip-ansi": "^3.0.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ }
+ }
+ },
+ "widest-line": {
+ "version": "3.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "string-width": "^4.0.0"
+ }
+ },
+ "wrap-ansi": {
+ "version": "6.2.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "bundled": true,
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "6.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.0"
+ }
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "yaml": {
+ "version": "1.10.2",
+ "bundled": true,
+ "dev": true
+ },
+ "yoga-layout-prebuilt": {
+ "version": "1.10.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "@types/yoga-layout": "1.9.2"
+ }
+ }
+ }
+ },
+ "tap-mocha-reporter": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/tap-mocha-reporter/-/tap-mocha-reporter-5.0.1.tgz",
+ "integrity": "sha512-1knFWOwd4khx/7uSEnUeaP9IPW3w+sqTgJMhrwah6t46nZ8P25atOKAjSvVDsT67lOPu0nfdOqUwoyKn+3E5pA==",
+ "dev": true,
+ "requires": {
+ "color-support": "^1.1.0",
+ "debug": "^4.1.1",
+ "diff": "^4.0.1",
+ "escape-string-regexp": "^2.0.0",
+ "glob": "^7.0.5",
+ "tap-parser": "^10.0.0",
+ "tap-yaml": "^1.0.0",
+ "unicode-length": "^2.0.2"
+ }
+ },
+ "tap-parser": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-10.1.0.tgz",
+ "integrity": "sha512-FujQeciDaOiOvaIVGS1Rpb0v4R6XkOjvWCWowlz5oKuhPkEJ8U6pxgqt38xuzYhPt8dWEnfHn2jqpZdJEkW7pA==",
+ "dev": true,
+ "requires": {
+ "events-to-array": "^1.0.1",
+ "minipass": "^3.0.0",
+ "tap-yaml": "^1.0.0"
+ }
+ },
+ "tap-yaml": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/tap-yaml/-/tap-yaml-1.0.0.tgz",
+ "integrity": "sha512-Rxbx4EnrWkYk0/ztcm5u3/VznbyFJpyXO12dDBHKWiDVxy7O2Qw6MRrwO5H6Ww0U5YhRY/4C/VzWmFPhBQc4qQ==",
+ "dev": true,
+ "requires": {
+ "yaml": "^1.5.0"
+ }
+ },
+ "tcompare": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/tcompare/-/tcompare-5.0.4.tgz",
+ "integrity": "sha512-worXBcrmLoFu9oJYAKznjPE89APTEXk/XCazuDuSQfK1EqX3bpLPW3cY/RQucbcc7mW+yKW0duujsuFlU7dRCA==",
+ "dev": true,
+ "requires": {
+ "diff": "^4.0.2"
+ }
+ },
+ "test-exclude": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
+ "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
+ "dev": true,
+ "requires": {
+ "@istanbuljs/schema": "^0.1.2",
+ "glob": "^7.1.4",
+ "minimatch": "^3.0.4"
+ }
+ },
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "tough-cookie": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
+ "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
+ "dev": true,
+ "requires": {
+ "psl": "^1.1.28",
+ "punycode": "^2.1.1"
+ }
+ },
+ "trivial-deferred": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trivial-deferred/-/trivial-deferred-1.0.1.tgz",
+ "integrity": "sha1-N21NKdlR1jaKb3oK6FwvTV4GWPM=",
+ "dev": true
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "dev": true
+ },
+ "type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "dev": true
+ },
+ "typedarray-to-buffer": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
+ "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
+ "dev": true,
+ "requires": {
+ "is-typedarray": "^1.0.0"
+ }
+ },
+ "unicode-length": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/unicode-length/-/unicode-length-2.0.2.tgz",
+ "integrity": "sha512-Ph/j1VbS3/r77nhoY2WU0GWGjVYOHL3xpKp0y/Eq2e5r0mT/6b649vm7KFO6RdAdrZkYLdxphYVgvODxPB+Ebg==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.0.0",
+ "strip-ansi": "^3.0.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ }
+ }
+ },
+ "uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+ "dev": true
+ },
+ "v8-to-istanbul": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz",
+ "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==",
+ "dev": true,
+ "requires": {
+ "@types/istanbul-lib-coverage": "^2.0.1",
+ "convert-source-map": "^1.6.0",
+ "source-map": "^0.7.3"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
+ "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
+ "dev": true
+ }
+ }
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "write-file-atomic": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
+ "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
+ "dev": true,
+ "requires": {
+ "imurmurhash": "^0.1.4",
+ "is-typedarray": "^1.0.0",
+ "signal-exit": "^3.0.2",
+ "typedarray-to-buffer": "^3.1.5"
+ }
+ },
+ "y18n": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
+ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
+ "dev": true
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ },
+ "yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+ "dev": true
+ },
+ "yapool": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/yapool/-/yapool-1.0.0.tgz",
+ "integrity": "sha1-9pPymjFbUNmp2iZGp6ZkXJaYW2o=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "15.4.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
+ "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
+ "dev": true,
+ "requires": {
+ "cliui": "^6.0.0",
+ "decamelize": "^1.2.0",
+ "find-up": "^4.1.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^4.2.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^18.1.2"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "cliui": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
+ "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^6.2.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
+ "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.0"
+ }
+ },
+ "wrap-ansi": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "18.1.3",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+ "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ },
+ "yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..24325b7
--- /dev/null
+++ b/package.json
@@ -0,0 +1,41 @@
+{
+ "name": "@seriousme/openapi-schema-validator",
+ "version": "1.0.0",
+ "description": "Validate OpenApi specifications against their JSON schema",
+ "main": "index.js",
+ "type": "module",
+ "dependencies": {
+ "ajv": "^8.2.0",
+ "ajv-formats": "^2.0.2",
+ "js-yaml": "^4.1.0"
+ },
+ "scripts": {
+ "test": "c8 tap test/test-*.js",
+ "covtest": "c8 --reporter=lcov --checkcoverage --lines 100 --functions 100 --branches 100 npm test",
+ "preversion": "npm test",
+ "postversion": "git push && git push --tags"
+ },
+ "author": "Hans Klunder",
+ "license": "MIT",
+ "devDependencies": {
+ "c8": "^7.7.2",
+ "tap": "^15.0.6"
+ },
+ "directories": {
+ "test": "test"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/seriousme/openapi-schema-validator.git"
+ },
+ "keywords": [
+ "openapi",
+ "json",
+ "schema",
+ "validation"
+ ],
+ "bugs": {
+ "url": "https://github.com/seriousme/openapi-schema-validator/issues"
+ },
+ "homepage": "https://github.com/seriousme/openapi-schema-validator#readme"
+}
diff --git a/resolve.js b/resolve.js
new file mode 100644
index 0000000..da573a6
--- /dev/null
+++ b/resolve.js
@@ -0,0 +1,116 @@
+import { load, dump } from "js-yaml";
+
+function escapeJsonPointer(str) {
+ return str.replace(/~/g, "~0").replace(/\//g, "~1");
+}
+
+function unescapeJsonPointer(str) {
+ return str.replace(/~1/g, "/").replace(/~0/g, "~");
+}
+
+const isObject = obj => (typeof obj === "object" && obj !== null);
+const pointerWords = new Set(["$ref", "$id", "$anchor", "$dynamicRef", "$dynamicAnchor", "$schema"]);
+
+const filtered = raw => Object.fromEntries(
+ Object.entries(raw).filter(
+ ([key, _]) => (!pointerWords.has(key))
+ )
+);
+
+
+function resolveUri(uri, anchors) {
+ const [prefix, path] = uri.split("#", 2)
+ const err = new Error(`Can't resolve ${uri}`)
+ if (path[0] !== "/") {
+ if (anchors[uri]) {
+ return anchors[uri];
+ }
+ throw err;
+ }
+
+ if (!anchors[prefix]) {
+ throw err;
+ }
+ const paths = path.split("/").slice(1);
+ try {
+ const result = paths.reduce((o, n) => o[unescapeJsonPointer(n)], anchors[prefix]);
+ return result;
+ } catch (_) {
+ throw err;
+ }
+}
+
+
+export function resolve(tree) {
+ if (!isObject(tree)) {
+ return undefined
+ }
+
+ const pointers = {};
+ pointerWords.forEach(word => pointers[word] = []);
+
+ function parse(obj, path, id) {
+ if (!isObject(obj)) {
+ return
+ }
+ if (obj.$id) {
+ id = obj.$id;
+ }
+ for (const prop in obj) {
+ if (pointerWords.has(prop)) {
+ pointers[prop].push({ ref: obj[prop], obj, prop, path, id });
+ }
+ parse(obj[prop], `${path}/${escapeJsonPointer(prop)}`, id)
+ }
+ }
+ // find all refs
+ parse(tree, "#", "");
+
+ // resolve them
+ const anchors = { "": tree };
+ const dynamicAnchors = {};
+ pointers.$id.forEach(item => {
+ const { ref, obj, path } = item;
+ if (anchors[ref]) {
+ throw new Error(`$id : '${ref}' defined more than once at ${path}`);
+ }
+ anchors[ref] = obj
+ });
+
+ pointers.$anchor.forEach(item => {
+ const { ref, obj, prop, path, id } = item;
+ const fullRef = `${id}#${ref}`;
+ if (anchors[fullRef]) {
+ throw new Error(`$anchor : '${ref}' defined more than once at '${path}'`);
+ }
+ anchors[fullRef] = obj
+ });
+
+ pointers.$dynamicAnchor.forEach(item => {
+ const { ref, obj, prop, path } = item;
+ if (dynamicAnchors[`#${ref}`]) {
+ throw new Error(`$dynamicAnchor : '${ref}' defined more than once at '${path}'`);
+ }
+ dynamicAnchors[`#${ref}`] = obj;
+ });
+
+ pointers.$ref.forEach(item => {
+ const { ref, obj, prop, path, id } = item;
+ delete obj[prop]
+ const fullRef = ref[0] !== "#" ? ref : `${id}${ref}`;
+ const res = filtered(resolveUri(fullRef, anchors))
+ Object.assign(obj, filtered(resolveUri(fullRef, anchors)));
+ });
+
+ pointers.$dynamicRef.forEach(item => {
+ const { ref, obj, prop, path, id } = item;
+ if (!dynamicAnchors[ref]){
+ throw new Error(`Can't resolve $dynamicAnchor : '${ref}'`);
+ }
+ delete obj[prop]
+ Object.assign(obj, filtered(dynamicAnchors[ref]));
+ });
+
+ return tree;
+}
+
diff --git a/schemas.orig/v1.2/README.md b/schemas.orig/v1.2/README.md
new file mode 100644
index 0000000..b443664
--- /dev/null
+++ b/schemas.orig/v1.2/README.md
@@ -0,0 +1,5 @@
+# Swagger Specification JSON Schemas
+
+The work on the JSON Schema for the Swagger Specification was donated to the community by [Francis Galiegue](https://github.com/fge)!
+
+Keep in mind that due to some JSON Schema limitations, not all constraints can be described. The missing constraints will be listed here in the future.
diff --git a/schemas.orig/v1.2/apiDeclaration.json b/schemas.orig/v1.2/apiDeclaration.json
new file mode 100644
index 0000000..4823b20
--- /dev/null
+++ b/schemas.orig/v1.2/apiDeclaration.json
@@ -0,0 +1,61 @@
+{
+ "id": "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/master/schemas/v1.2/apiDeclaration.json#",
+ "$schema": "http://json-schema.org/draft-04/schema#",
+ "type": "object",
+ "required": [ "swaggerVersion", "basePath", "apis" ],
+ "properties": {
+ "swaggerVersion": { "enum": [ "1.2" ] },
+ "apiVersion": { "type": "string" },
+ "basePath": {
+ "type": "string",
+ "format": "uri",
+ "pattern": "^https?://"
+ },
+ "resourcePath": {
+ "type": "string",
+ "format": "uri",
+ "pattern": "^/"
+ },
+ "apis": {
+ "type": "array",
+ "items": { "$ref": "#/definitions/apiObject" }
+ },
+ "models": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "modelsObject.json#"
+ }
+ },
+ "produces": { "$ref": "#/definitions/mimeTypeArray" },
+ "consumes": { "$ref": "#/definitions/mimeTypeArray" },
+ "authorizations": { "$ref": "authorizationObject.json#" }
+ },
+ "additionalProperties": false,
+ "definitions": {
+ "apiObject": {
+ "type": "object",
+ "required": [ "path", "operations" ],
+ "properties": {
+ "path": {
+ "type": "string",
+ "format": "uri-template",
+ "pattern": "^/"
+ },
+ "description": { "type": "string" },
+ "operations": {
+ "type": "array",
+ "items": { "$ref": "operationObject.json#" }
+ }
+ },
+ "additionalProperties": false
+ },
+ "mimeTypeArray": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "mime-type"
+ },
+ "uniqueItems": true
+ }
+ }
+}
diff --git a/schemas.orig/v1.2/authorizationObject.json b/schemas.orig/v1.2/authorizationObject.json
new file mode 100644
index 0000000..8264970
--- /dev/null
+++ b/schemas.orig/v1.2/authorizationObject.json
@@ -0,0 +1,59 @@
+{
+ "id": "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/master/schemas/v1.2/authorizationObject.json#",
+ "$schema": "http://json-schema.org/draft-04/schema#",
+ "type": "object",
+ "additionalProperties": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/basicAuth"
+ },
+ {
+ "$ref": "#/definitions/apiKey"
+ },
+ {
+ "$ref": "#/definitions/oauth2"
+ }
+ ]
+ },
+ "definitions": {
+ "basicAuth": {
+ "required": [ "type" ],
+ "properties": {
+ "type": { "enum": [ "basicAuth" ] }
+ },
+ "additionalProperties": false
+ },
+ "apiKey": {
+ "required": [ "type", "passAs", "keyname" ],
+ "properties": {
+ "type": { "enum": [ "apiKey" ] },
+ "passAs": { "enum": [ "header", "query" ] },
+ "keyname": { "type": "string" }
+ },
+ "additionalProperties": false
+ },
+ "oauth2": {
+ "type": "object",
+ "required": [ "type", "grantTypes" ],
+ "properties": {
+ "type": { "enum": [ "oauth2" ] },
+ "scopes": {
+ "type": "array",
+ "items": { "$ref": "#/definitions/oauth2Scope" }
+ },
+ "grantTypes": { "$ref": "oauth2GrantType.json#" }
+ },
+ "additionalProperties": false
+ },
+ "oauth2Scope": {
+ "type": "object",
+ "required": [ "scope" ],
+ "properties": {
+ "scope": { "type": "string" },
+ "description": { "type": "string" }
+ },
+ "additionalProperties": false
+ }
+ }
+}
+
diff --git a/schemas.orig/v1.2/dataType.json b/schemas.orig/v1.2/dataType.json
new file mode 100644
index 0000000..3e58c3b
--- /dev/null
+++ b/schemas.orig/v1.2/dataType.json
@@ -0,0 +1,132 @@
+{
+ "id": "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/master/schemas/v1.2/dataType.json#",
+ "$schema": "http://json-schema.org/draft-04/schema#",
+ "description": "Data type as described by the specification (version 1.2)",
+ "type": "object",
+ "oneOf": [
+ { "$ref": "#/definitions/refType" },
+ { "$ref": "#/definitions/voidType" },
+ { "$ref": "#/definitions/primitiveType" },
+ { "$ref": "#/definitions/modelType" },
+ { "$ref": "#/definitions/arrayType" }
+ ],
+ "definitions": {
+ "refType": {
+ "required": [ "$ref" ],
+ "properties": {
+ "$ref": { "type": "string" }
+ },
+ "additionalProperties": false
+ },
+ "voidType": {
+ "enum": [ { "type": "void" } ]
+ },
+ "modelType": {
+ "required": [ "type" ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "not": {
+ "enum": [ "boolean", "integer", "number", "string", "array" ]
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "primitiveType": {
+ "required": [ "type" ],
+ "properties": {
+ "type": {
+ "enum": [ "boolean", "integer", "number", "string" ]
+ },
+ "format": { "type": "string" },
+ "defaultValue": {
+ "not": { "type": [ "array", "object", "null" ] }
+ },
+ "enum": {
+ "type": "array",
+ "items": { "type": "string" },
+ "minItems": 1,
+ "uniqueItems": true
+ },
+ "minimum": { "type": "string" },
+ "maximum": { "type": "string" }
+ },
+ "additionalProperties": false,
+ "dependencies": {
+ "format": {
+ "oneOf": [
+ {
+ "properties": {
+ "type": { "enum": [ "integer" ] },
+ "format": { "enum": [ "int32", "int64" ] }
+ }
+ },
+ {
+ "properties": {
+ "type": { "enum": [ "number" ] },
+ "format": { "enum": [ "float", "double" ] }
+ }
+ },
+ {
+ "properties": {
+ "type": { "enum": [ "string" ] },
+ "format": {
+ "enum": [ "byte", "date", "date-time" ]
+ }
+ }
+ }
+ ]
+ },
+ "enum": {
+ "properties": {
+ "type": { "enum": [ "string" ] }
+ }
+ },
+ "minimum": {
+ "properties": {
+ "type": { "enum": [ "integer", "number" ] }
+ }
+ },
+ "maximum": {
+ "properties": {
+ "type": { "enum": [ "integer", "number" ] }
+ }
+ }
+ }
+ },
+ "arrayType": {
+ "required": [ "type", "items" ],
+ "properties": {
+ "type": { "enum": [ "array" ] },
+ "items": {
+ "type": "array",
+ "items": { "$ref": "#/definitions/itemsObject" }
+ },
+ "uniqueItems": { "type": "boolean" }
+ },
+ "additionalProperties": false
+ },
+ "itemsObject": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/refType"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/definitions/primitiveType"
+ },
+ {
+ "properties": {
+ "type": {},
+ "format": {}
+ },
+ "additionalProperties": false
+ }
+ ]
+ }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/schemas.orig/v1.2/dataTypeBase.json b/schemas.orig/v1.2/dataTypeBase.json
new file mode 100644
index 0000000..8320d6c
--- /dev/null
+++ b/schemas.orig/v1.2/dataTypeBase.json
@@ -0,0 +1,81 @@
+{
+ "id": "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/master/schemas/v1.2/dataTypeBase.json#",
+ "$schema": "http://json-schema.org/draft-04/schema#",
+ "description": "Data type fields (section 4.3.3)",
+ "type": "object",
+ "oneOf": [
+ { "required": [ "type" ] },
+ { "required": [ "$ref" ] }
+ ],
+ "properties": {
+ "type": { "type": "string" },
+ "$ref": { "type": "string" },
+ "format": { "type": "string" },
+ "defaultValue": {
+ "not": { "type": [ "array", "object", "null" ] }
+ },
+ "enum": {
+ "type": "array",
+ "items": { "type": "string" },
+ "uniqueItems": true,
+ "minItems": 1
+ },
+ "minimum": { "type": "string" },
+ "maximum": { "type": "string" },
+ "items": { "$ref": "#/definitions/itemsObject" },
+ "uniqueItems": { "type": "boolean" }
+ },
+ "dependencies": {
+ "format": {
+ "oneOf": [
+ {
+ "properties": {
+ "type": { "enum": [ "integer" ] },
+ "format": { "enum": [ "int32", "int64" ] }
+ }
+ },
+ {
+ "properties": {
+ "type": { "enum": [ "number" ] },
+ "format": { "enum": [ "float", "double" ] }
+ }
+ },
+ {
+ "properties": {
+ "type": { "enum": [ "string" ] },
+ "format": {
+ "enum": [ "byte", "date", "date-time" ]
+ }
+ }
+ }
+ ]
+ }
+ },
+ "definitions": {
+ "itemsObject": {
+ "oneOf": [
+ {
+ "type": "object",
+ "required": [ "$ref" ],
+ "properties": {
+ "$ref": { "type": "string" }
+ },
+ "additionalProperties": false
+ },
+ {
+ "allOf": [
+ { "$ref": "#" },
+ {
+ "required": [ "type" ],
+ "properties": {
+ "type": {},
+ "format": {}
+ },
+ "additionalProperties": false
+ }
+ ]
+ }
+ ]
+ }
+ }
+}
diff --git a/schemas.orig/v1.2/infoObject.json b/schemas.orig/v1.2/infoObject.json
new file mode 100644
index 0000000..f8819fe
--- /dev/null
+++ b/schemas.orig/v1.2/infoObject.json
@@ -0,0 +1,16 @@
+{
+ "id": "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/master/schemas/v1.2/infoObject.json#",
+ "$schema": "http://json-schema.org/draft-04/schema#",
+ "description": "info object (section 5.1.3)",
+ "type": "object",
+ "required": [ "title", "description" ],
+ "properties": {
+ "title": { "type": "string" },
+ "description": { "type": "string" },
+ "termsOfServiceUrl": { "type": "string", "format": "uri" },
+ "contact": { "type": "string", "format": "email" },
+ "license": { "type": "string" },
+ "licenseUrl": { "type": "string", "format": "uri" }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/schemas.orig/v1.2/modelsObject.json b/schemas.orig/v1.2/modelsObject.json
new file mode 100644
index 0000000..f591b39
--- /dev/null
+++ b/schemas.orig/v1.2/modelsObject.json
@@ -0,0 +1,36 @@
+{
+ "id": "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/master/schemas/v1.2/modelsObject.json#",
+ "$schema": "http://json-schema.org/draft-04/schema#",
+ "type": "object",
+ "required": [ "id", "properties" ],
+ "properties": {
+ "id": { "type": "string" },
+ "description": { "type": "string" },
+ "properties": {
+ "type": "object",
+ "additionalProperties": { "$ref": "#/definitions/propertyObject" }
+ },
+ "subTypes": {
+ "type": "array",
+ "items": { "type": "string" },
+ "uniqueItems": true
+ },
+ "discriminator": { "type": "string" }
+ },
+ "dependencies": {
+ "subTypes": [ "discriminator" ]
+ },
+ "definitions": {
+ "propertyObject": {
+ "allOf": [
+ {
+ "not": { "$ref": "#" }
+ },
+ {
+ "$ref": "dataTypeBase.json#"
+ }
+ ]
+ }
+ }
+}
+
diff --git a/schemas.orig/v1.2/oauth2GrantType.json b/schemas.orig/v1.2/oauth2GrantType.json
new file mode 100644
index 0000000..c9bac6c
--- /dev/null
+++ b/schemas.orig/v1.2/oauth2GrantType.json
@@ -0,0 +1,57 @@
+{
+ "id": "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/master/schemas/v1.2/oauth2GrantType.json#",
+ "$schema": "http://json-schema.org/draft-04/schema#",
+ "type": "object",
+ "minProperties": 1,
+ "properties": {
+ "implicit": { "$ref": "#/definitions/implicit" },
+ "authorization_code": { "$ref": "#/definitions/authorizationCode" }
+ },
+ "definitions": {
+ "implicit": {
+ "type": "object",
+ "required": [ "loginEndpoint" ],
+ "properties": {
+ "loginEndpoint": { "$ref": "#/definitions/loginEndpoint" },
+ "tokenName": { "type": "string" }
+ },
+ "additionalProperties": false
+ },
+ "authorizationCode": {
+ "type": "object",
+ "required": [ "tokenEndpoint", "tokenRequestEndpoint" ],
+ "properties": {
+ "tokenEndpoint": { "$ref": "#/definitions/tokenEndpoint" },
+ "tokenRequestEndpoint": { "$ref": "#/definitions/tokenRequestEndpoint" }
+ },
+ "additionalProperties": false
+ },
+ "loginEndpoint": {
+ "type": "object",
+ "required": [ "url" ],
+ "properties": {
+ "url": { "type": "string", "format": "uri" }
+ },
+ "additionalProperties": false
+ },
+ "tokenEndpoint": {
+ "type": "object",
+ "required": [ "url" ],
+ "properties": {
+ "url": { "type": "string", "format": "uri" },
+ "tokenName": { "type": "string" }
+ },
+ "additionalProperties": false
+ },
+ "tokenRequestEndpoint": {
+ "type": "object",
+ "required": [ "url" ],
+ "properties": {
+ "url": { "type": "string", "format": "uri" },
+ "clientIdName": { "type": "string" },
+ "clientSecretName": { "type": "string" }
+ },
+ "additionalProperties": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/schemas.orig/v1.2/operationObject.json b/schemas.orig/v1.2/operationObject.json
new file mode 100644
index 0000000..371a6cc
--- /dev/null
+++ b/schemas.orig/v1.2/operationObject.json
@@ -0,0 +1,65 @@
+{
+ "id": "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/master/schemas/v1.2/operationObject.json#",
+ "$schema": "http://json-schema.org/draft-04/schema#",
+ "type": "object",
+ "allOf": [
+ { "$ref": "dataTypeBase.json#" },
+ {
+ "required": [ "method", "nickname", "parameters" ],
+ "properties": {
+ "method": { "enum": [ "GET", "HEAD", "POST", "PUT", "PATCH", "DELETE", "OPTIONS" ] },
+ "summary": { "type": "string", "maxLength": 120 },
+ "notes": { "type": "string" },
+ "nickname": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_]+$"
+ },
+ "authorizations": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "$ref": "authorizationObject.json#/definitions/oauth2Scope"
+ }
+ }
+ },
+ "parameters": {
+ "type": "array",
+ "items": { "$ref": "parameterObject.json#" }
+ },
+ "responseMessages": {
+ "type": "array",
+ "items": { "$ref": "#/definitions/responseMessageObject"}
+ },
+ "produces": { "$ref": "#/definitions/mimeTypeArray" },
+ "consumes": { "$ref": "#/definitions/mimeTypeArray" },
+ "deprecated": { "enum": [ "true", "false" ] }
+ }
+ }
+ ],
+ "definitions": {
+ "responseMessageObject": {
+ "type": "object",
+ "required": [ "code", "message" ],
+ "properties": {
+ "code": { "$ref": "#/definitions/rfc2616section10" },
+ "message": { "type": "string" },
+ "responseModel": { "type": "string" }
+ }
+ },
+ "rfc2616section10": {
+ "type": "integer",
+ "minimum": 100,
+ "maximum": 600,
+ "exclusiveMaximum": true
+ },
+ "mimeTypeArray": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "mime-type"
+ },
+ "uniqueItems": true
+ }
+ }
+}
diff --git a/schemas.orig/v1.2/parameterObject.json b/schemas.orig/v1.2/parameterObject.json
new file mode 100644
index 0000000..d762eff
--- /dev/null
+++ b/schemas.orig/v1.2/parameterObject.json
@@ -0,0 +1,37 @@
+{
+ "id": "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/master/schemas/v1.2/parameterObject.json#",
+ "$schema": "http://json-schema.org/draft-04/schema#",
+ "type": "object",
+ "allOf": [
+ { "$ref": "dataTypeBase.json#" },
+ {
+ "required": [ "paramType", "name" ],
+ "properties": {
+ "paramType": {
+ "enum": [ "path", "query", "body", "header", "form" ]
+ },
+ "name": { "type": "string" },
+ "description": { "type": "string" },
+ "required": { "type": "boolean" },
+ "allowMultiple": { "type": "boolean" }
+ }
+ },
+ {
+ "description": "type File requires special paramType and consumes",
+ "oneOf": [
+ {
+ "properties": {
+ "type": { "not": { "enum": [ "File" ] } }
+ }
+ },
+ {
+ "properties": {
+ "type": { "enum": [ "File" ] },
+ "paramType": { "enum": [ "form" ] },
+ "consumes": { "enum": [ "multipart/form-data" ] }
+ }
+ }
+ ]
+ }
+ ]
+}
diff --git a/schemas.orig/v1.2/resourceListing.json b/schemas.orig/v1.2/resourceListing.json
new file mode 100644
index 0000000..b5dd17d
--- /dev/null
+++ b/schemas.orig/v1.2/resourceListing.json
@@ -0,0 +1,16 @@
+{
+ "id": "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/master/schemas/v1.2/resourceListing.json#",
+ "$schema": "http://json-schema.org/draft-04/schema#",
+ "type": "object",
+ "required": [ "swaggerVersion", "apis" ],
+ "properties": {
+ "swaggerVersion": { "enum": [ "1.2" ] },
+ "apis": {
+ "type": "array",
+ "items": { "$ref": "resourceObject.json#" }
+ },
+ "apiVersion": { "type": "string" },
+ "info": { "$ref": "infoObject.json#" },
+ "authorizations": { "$ref": "authorizationObject.json#" }
+ }
+}
diff --git a/schemas.orig/v1.2/resourceObject.json b/schemas.orig/v1.2/resourceObject.json
new file mode 100644
index 0000000..a88e83f
--- /dev/null
+++ b/schemas.orig/v1.2/resourceObject.json
@@ -0,0 +1,11 @@
+{
+ "id": "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/master/schemas/v1.2/resourceObject.json#",
+ "$schema": "http://json-schema.org/draft-04/schema#",
+ "type": "object",
+ "required": [ "path" ],
+ "properties": {
+ "path": { "type": "string", "format": "uri" },
+ "description": { "type": "string" }
+ },
+ "additionalProperties": false
+}
\ No newline at end of file
diff --git a/schemas.orig/v2.0/README.md b/schemas.orig/v2.0/README.md
new file mode 100644
index 0000000..47b0c8e
--- /dev/null
+++ b/schemas.orig/v2.0/README.md
@@ -0,0 +1,13 @@
+# OpenAPI Specification v2.0 JSON Schema
+
+This is the JSON Schema file for the OpenAPI Specification version 2.0. Download and install it via NPM.
+
+## Install via NPM
+
+```shell
+npm install --save swagger-schema-official
+```
+
+## License
+
+Apache-2.0
diff --git a/schemas.orig/v2.0/schema.json b/schemas.orig/v2.0/schema.json
new file mode 100644
index 0000000..a92e18f
--- /dev/null
+++ b/schemas.orig/v2.0/schema.json
@@ -0,0 +1,1607 @@
+{
+ "title": "A JSON Schema for Swagger 2.0 API.",
+ "id": "http://swagger.io/v2/schema.json#",
+ "$schema": "http://json-schema.org/draft-04/schema#",
+ "type": "object",
+ "required": [
+ "swagger",
+ "info",
+ "paths"
+ ],
+ "additionalProperties": false,
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ },
+ "properties": {
+ "swagger": {
+ "type": "string",
+ "enum": [
+ "2.0"
+ ],
+ "description": "The Swagger version of this document."
+ },
+ "info": {
+ "$ref": "#/definitions/info"
+ },
+ "host": {
+ "type": "string",
+ "pattern": "^[^{}/ :\\\\]+(?::\\d+)?$",
+ "description": "The host (name or ip) of the API. Example: 'swagger.io'"
+ },
+ "basePath": {
+ "type": "string",
+ "pattern": "^/",
+ "description": "The base path to the API. Example: '/api'."
+ },
+ "schemes": {
+ "$ref": "#/definitions/schemesList"
+ },
+ "consumes": {
+ "description": "A list of MIME types accepted by the API.",
+ "allOf": [
+ {
+ "$ref": "#/definitions/mediaTypeList"
+ }
+ ]
+ },
+ "produces": {
+ "description": "A list of MIME types the API can produce.",
+ "allOf": [
+ {
+ "$ref": "#/definitions/mediaTypeList"
+ }
+ ]
+ },
+ "paths": {
+ "$ref": "#/definitions/paths"
+ },
+ "definitions": {
+ "$ref": "#/definitions/definitions"
+ },
+ "parameters": {
+ "$ref": "#/definitions/parameterDefinitions"
+ },
+ "responses": {
+ "$ref": "#/definitions/responseDefinitions"
+ },
+ "security": {
+ "$ref": "#/definitions/security"
+ },
+ "securityDefinitions": {
+ "$ref": "#/definitions/securityDefinitions"
+ },
+ "tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/tag"
+ },
+ "uniqueItems": true
+ },
+ "externalDocs": {
+ "$ref": "#/definitions/externalDocs"
+ }
+ },
+ "definitions": {
+ "info": {
+ "type": "object",
+ "description": "General information about the API.",
+ "required": [
+ "version",
+ "title"
+ ],
+ "additionalProperties": false,
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ },
+ "properties": {
+ "title": {
+ "type": "string",
+ "description": "A unique and precise title of the API."
+ },
+ "version": {
+ "type": "string",
+ "description": "A semantic version number of the API."
+ },
+ "description": {
+ "type": "string",
+ "description": "A longer description of the API. Should be different from the title. GitHub Flavored Markdown is allowed."
+ },
+ "termsOfService": {
+ "type": "string",
+ "description": "The terms of service for the API."
+ },
+ "contact": {
+ "$ref": "#/definitions/contact"
+ },
+ "license": {
+ "$ref": "#/definitions/license"
+ }
+ }
+ },
+ "contact": {
+ "type": "object",
+ "description": "Contact information for the owners of the API.",
+ "additionalProperties": false,
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "The identifying name of the contact person/organization."
+ },
+ "url": {
+ "type": "string",
+ "description": "The URL pointing to the contact information.",
+ "format": "uri"
+ },
+ "email": {
+ "type": "string",
+ "description": "The email address of the contact person/organization.",
+ "format": "email"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ }
+ },
+ "license": {
+ "type": "object",
+ "required": [
+ "name"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "The name of the license type. It's encouraged to use an OSI compatible license."
+ },
+ "url": {
+ "type": "string",
+ "description": "The URL pointing to the license.",
+ "format": "uri"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ }
+ },
+ "paths": {
+ "type": "object",
+ "description": "Relative paths to the individual endpoints. They must be relative to the 'basePath'.",
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ },
+ "^/": {
+ "$ref": "#/definitions/pathItem"
+ }
+ },
+ "additionalProperties": false
+ },
+ "definitions": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/schema"
+ },
+ "description": "One or more JSON objects describing the schemas being consumed and produced by the API."
+ },
+ "parameterDefinitions": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/parameter"
+ },
+ "description": "One or more JSON representations for parameters"
+ },
+ "responseDefinitions": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/response"
+ },
+ "description": "One or more JSON representations for responses"
+ },
+ "externalDocs": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "information about external documentation",
+ "required": [
+ "url"
+ ],
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string",
+ "format": "uri"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ }
+ },
+ "examples": {
+ "type": "object",
+ "additionalProperties": true
+ },
+ "mimeType": {
+ "type": "string",
+ "description": "The MIME type of the HTTP message."
+ },
+ "operation": {
+ "type": "object",
+ "required": [
+ "responses"
+ ],
+ "additionalProperties": false,
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ },
+ "properties": {
+ "tags": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "uniqueItems": true
+ },
+ "summary": {
+ "type": "string",
+ "description": "A brief summary of the operation."
+ },
+ "description": {
+ "type": "string",
+ "description": "A longer description of the operation, GitHub Flavored Markdown is allowed."
+ },
+ "externalDocs": {
+ "$ref": "#/definitions/externalDocs"
+ },
+ "operationId": {
+ "type": "string",
+ "description": "A unique identifier of the operation."
+ },
+ "produces": {
+ "description": "A list of MIME types the API can produce.",
+ "allOf": [
+ {
+ "$ref": "#/definitions/mediaTypeList"
+ }
+ ]
+ },
+ "consumes": {
+ "description": "A list of MIME types the API can consume.",
+ "allOf": [
+ {
+ "$ref": "#/definitions/mediaTypeList"
+ }
+ ]
+ },
+ "parameters": {
+ "$ref": "#/definitions/parametersList"
+ },
+ "responses": {
+ "$ref": "#/definitions/responses"
+ },
+ "schemes": {
+ "$ref": "#/definitions/schemesList"
+ },
+ "deprecated": {
+ "type": "boolean",
+ "default": false
+ },
+ "security": {
+ "$ref": "#/definitions/security"
+ }
+ }
+ },
+ "pathItem": {
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ },
+ "properties": {
+ "$ref": {
+ "type": "string"
+ },
+ "get": {
+ "$ref": "#/definitions/operation"
+ },
+ "put": {
+ "$ref": "#/definitions/operation"
+ },
+ "post": {
+ "$ref": "#/definitions/operation"
+ },
+ "delete": {
+ "$ref": "#/definitions/operation"
+ },
+ "options": {
+ "$ref": "#/definitions/operation"
+ },
+ "head": {
+ "$ref": "#/definitions/operation"
+ },
+ "patch": {
+ "$ref": "#/definitions/operation"
+ },
+ "parameters": {
+ "$ref": "#/definitions/parametersList"
+ }
+ }
+ },
+ "responses": {
+ "type": "object",
+ "description": "Response objects names can either be any valid HTTP status code or 'default'.",
+ "minProperties": 1,
+ "additionalProperties": false,
+ "patternProperties": {
+ "^([0-9]{3})$|^(default)$": {
+ "$ref": "#/definitions/responseValue"
+ },
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ },
+ "not": {
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ }
+ }
+ },
+ "responseValue": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/response"
+ },
+ {
+ "$ref": "#/definitions/jsonReference"
+ }
+ ]
+ },
+ "response": {
+ "type": "object",
+ "required": [
+ "description"
+ ],
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "schema": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/schema"
+ },
+ {
+ "$ref": "#/definitions/fileSchema"
+ }
+ ]
+ },
+ "headers": {
+ "$ref": "#/definitions/headers"
+ },
+ "examples": {
+ "$ref": "#/definitions/examples"
+ }
+ },
+ "additionalProperties": false,
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ }
+ },
+ "headers": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/header"
+ }
+ },
+ "header": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "type"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "string",
+ "number",
+ "integer",
+ "boolean",
+ "array"
+ ]
+ },
+ "format": {
+ "type": "string"
+ },
+ "items": {
+ "$ref": "#/definitions/primitivesItems"
+ },
+ "collectionFormat": {
+ "$ref": "#/definitions/collectionFormat"
+ },
+ "default": {
+ "$ref": "#/definitions/default"
+ },
+ "maximum": {
+ "$ref": "#/definitions/maximum"
+ },
+ "exclusiveMaximum": {
+ "$ref": "#/definitions/exclusiveMaximum"
+ },
+ "minimum": {
+ "$ref": "#/definitions/minimum"
+ },
+ "exclusiveMinimum": {
+ "$ref": "#/definitions/exclusiveMinimum"
+ },
+ "maxLength": {
+ "$ref": "#/definitions/maxLength"
+ },
+ "minLength": {
+ "$ref": "#/definitions/minLength"
+ },
+ "pattern": {
+ "$ref": "#/definitions/pattern"
+ },
+ "maxItems": {
+ "$ref": "#/definitions/maxItems"
+ },
+ "minItems": {
+ "$ref": "#/definitions/minItems"
+ },
+ "uniqueItems": {
+ "$ref": "#/definitions/uniqueItems"
+ },
+ "enum": {
+ "$ref": "#/definitions/enum"
+ },
+ "multipleOf": {
+ "$ref": "#/definitions/multipleOf"
+ },
+ "description": {
+ "type": "string"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ }
+ },
+ "vendorExtension": {
+ "description": "Any property starting with x- is valid.",
+ "additionalProperties": true,
+ "additionalItems": true
+ },
+ "bodyParameter": {
+ "type": "object",
+ "required": [
+ "name",
+ "in",
+ "schema"
+ ],
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ },
+ "properties": {
+ "description": {
+ "type": "string",
+ "description": "A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed."
+ },
+ "name": {
+ "type": "string",
+ "description": "The name of the parameter."
+ },
+ "in": {
+ "type": "string",
+ "description": "Determines the location of the parameter.",
+ "enum": [
+ "body"
+ ]
+ },
+ "required": {
+ "type": "boolean",
+ "description": "Determines whether or not this parameter is required or optional.",
+ "default": false
+ },
+ "schema": {
+ "$ref": "#/definitions/schema"
+ }
+ },
+ "additionalProperties": false
+ },
+ "headerParameterSubSchema": {
+ "additionalProperties": false,
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ },
+ "properties": {
+ "required": {
+ "type": "boolean",
+ "description": "Determines whether or not this parameter is required or optional.",
+ "default": false
+ },
+ "in": {
+ "type": "string",
+ "description": "Determines the location of the parameter.",
+ "enum": [
+ "header"
+ ]
+ },
+ "description": {
+ "type": "string",
+ "description": "A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed."
+ },
+ "name": {
+ "type": "string",
+ "description": "The name of the parameter."
+ },
+ "type": {
+ "type": "string",
+ "enum": [
+ "string",
+ "number",
+ "boolean",
+ "integer",
+ "array"
+ ]
+ },
+ "format": {
+ "type": "string"
+ },
+ "items": {
+ "$ref": "#/definitions/primitivesItems"
+ },
+ "collectionFormat": {
+ "$ref": "#/definitions/collectionFormat"
+ },
+ "default": {
+ "$ref": "#/definitions/default"
+ },
+ "maximum": {
+ "$ref": "#/definitions/maximum"
+ },
+ "exclusiveMaximum": {
+ "$ref": "#/definitions/exclusiveMaximum"
+ },
+ "minimum": {
+ "$ref": "#/definitions/minimum"
+ },
+ "exclusiveMinimum": {
+ "$ref": "#/definitions/exclusiveMinimum"
+ },
+ "maxLength": {
+ "$ref": "#/definitions/maxLength"
+ },
+ "minLength": {
+ "$ref": "#/definitions/minLength"
+ },
+ "pattern": {
+ "$ref": "#/definitions/pattern"
+ },
+ "maxItems": {
+ "$ref": "#/definitions/maxItems"
+ },
+ "minItems": {
+ "$ref": "#/definitions/minItems"
+ },
+ "uniqueItems": {
+ "$ref": "#/definitions/uniqueItems"
+ },
+ "enum": {
+ "$ref": "#/definitions/enum"
+ },
+ "multipleOf": {
+ "$ref": "#/definitions/multipleOf"
+ }
+ }
+ },
+ "queryParameterSubSchema": {
+ "additionalProperties": false,
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ },
+ "properties": {
+ "required": {
+ "type": "boolean",
+ "description": "Determines whether or not this parameter is required or optional.",
+ "default": false
+ },
+ "in": {
+ "type": "string",
+ "description": "Determines the location of the parameter.",
+ "enum": [
+ "query"
+ ]
+ },
+ "description": {
+ "type": "string",
+ "description": "A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed."
+ },
+ "name": {
+ "type": "string",
+ "description": "The name of the parameter."
+ },
+ "allowEmptyValue": {
+ "type": "boolean",
+ "default": false,
+ "description": "allows sending a parameter by name only or with an empty value."
+ },
+ "type": {
+ "type": "string",
+ "enum": [
+ "string",
+ "number",
+ "boolean",
+ "integer",
+ "array"
+ ]
+ },
+ "format": {
+ "type": "string"
+ },
+ "items": {
+ "$ref": "#/definitions/primitivesItems"
+ },
+ "collectionFormat": {
+ "$ref": "#/definitions/collectionFormatWithMulti"
+ },
+ "default": {
+ "$ref": "#/definitions/default"
+ },
+ "maximum": {
+ "$ref": "#/definitions/maximum"
+ },
+ "exclusiveMaximum": {
+ "$ref": "#/definitions/exclusiveMaximum"
+ },
+ "minimum": {
+ "$ref": "#/definitions/minimum"
+ },
+ "exclusiveMinimum": {
+ "$ref": "#/definitions/exclusiveMinimum"
+ },
+ "maxLength": {
+ "$ref": "#/definitions/maxLength"
+ },
+ "minLength": {
+ "$ref": "#/definitions/minLength"
+ },
+ "pattern": {
+ "$ref": "#/definitions/pattern"
+ },
+ "maxItems": {
+ "$ref": "#/definitions/maxItems"
+ },
+ "minItems": {
+ "$ref": "#/definitions/minItems"
+ },
+ "uniqueItems": {
+ "$ref": "#/definitions/uniqueItems"
+ },
+ "enum": {
+ "$ref": "#/definitions/enum"
+ },
+ "multipleOf": {
+ "$ref": "#/definitions/multipleOf"
+ }
+ }
+ },
+ "formDataParameterSubSchema": {
+ "additionalProperties": false,
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ },
+ "properties": {
+ "required": {
+ "type": "boolean",
+ "description": "Determines whether or not this parameter is required or optional.",
+ "default": false
+ },
+ "in": {
+ "type": "string",
+ "description": "Determines the location of the parameter.",
+ "enum": [
+ "formData"
+ ]
+ },
+ "description": {
+ "type": "string",
+ "description": "A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed."
+ },
+ "name": {
+ "type": "string",
+ "description": "The name of the parameter."
+ },
+ "allowEmptyValue": {
+ "type": "boolean",
+ "default": false,
+ "description": "allows sending a parameter by name only or with an empty value."
+ },
+ "type": {
+ "type": "string",
+ "enum": [
+ "string",
+ "number",
+ "boolean",
+ "integer",
+ "array",
+ "file"
+ ]
+ },
+ "format": {
+ "type": "string"
+ },
+ "items": {
+ "$ref": "#/definitions/primitivesItems"
+ },
+ "collectionFormat": {
+ "$ref": "#/definitions/collectionFormatWithMulti"
+ },
+ "default": {
+ "$ref": "#/definitions/default"
+ },
+ "maximum": {
+ "$ref": "#/definitions/maximum"
+ },
+ "exclusiveMaximum": {
+ "$ref": "#/definitions/exclusiveMaximum"
+ },
+ "minimum": {
+ "$ref": "#/definitions/minimum"
+ },
+ "exclusiveMinimum": {
+ "$ref": "#/definitions/exclusiveMinimum"
+ },
+ "maxLength": {
+ "$ref": "#/definitions/maxLength"
+ },
+ "minLength": {
+ "$ref": "#/definitions/minLength"
+ },
+ "pattern": {
+ "$ref": "#/definitions/pattern"
+ },
+ "maxItems": {
+ "$ref": "#/definitions/maxItems"
+ },
+ "minItems": {
+ "$ref": "#/definitions/minItems"
+ },
+ "uniqueItems": {
+ "$ref": "#/definitions/uniqueItems"
+ },
+ "enum": {
+ "$ref": "#/definitions/enum"
+ },
+ "multipleOf": {
+ "$ref": "#/definitions/multipleOf"
+ }
+ }
+ },
+ "pathParameterSubSchema": {
+ "additionalProperties": false,
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ },
+ "required": [
+ "required"
+ ],
+ "properties": {
+ "required": {
+ "type": "boolean",
+ "enum": [
+ true
+ ],
+ "description": "Determines whether or not this parameter is required or optional."
+ },
+ "in": {
+ "type": "string",
+ "description": "Determines the location of the parameter.",
+ "enum": [
+ "path"
+ ]
+ },
+ "description": {
+ "type": "string",
+ "description": "A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed."
+ },
+ "name": {
+ "type": "string",
+ "description": "The name of the parameter."
+ },
+ "type": {
+ "type": "string",
+ "enum": [
+ "string",
+ "number",
+ "boolean",
+ "integer",
+ "array"
+ ]
+ },
+ "format": {
+ "type": "string"
+ },
+ "items": {
+ "$ref": "#/definitions/primitivesItems"
+ },
+ "collectionFormat": {
+ "$ref": "#/definitions/collectionFormat"
+ },
+ "default": {
+ "$ref": "#/definitions/default"
+ },
+ "maximum": {
+ "$ref": "#/definitions/maximum"
+ },
+ "exclusiveMaximum": {
+ "$ref": "#/definitions/exclusiveMaximum"
+ },
+ "minimum": {
+ "$ref": "#/definitions/minimum"
+ },
+ "exclusiveMinimum": {
+ "$ref": "#/definitions/exclusiveMinimum"
+ },
+ "maxLength": {
+ "$ref": "#/definitions/maxLength"
+ },
+ "minLength": {
+ "$ref": "#/definitions/minLength"
+ },
+ "pattern": {
+ "$ref": "#/definitions/pattern"
+ },
+ "maxItems": {
+ "$ref": "#/definitions/maxItems"
+ },
+ "minItems": {
+ "$ref": "#/definitions/minItems"
+ },
+ "uniqueItems": {
+ "$ref": "#/definitions/uniqueItems"
+ },
+ "enum": {
+ "$ref": "#/definitions/enum"
+ },
+ "multipleOf": {
+ "$ref": "#/definitions/multipleOf"
+ }
+ }
+ },
+ "nonBodyParameter": {
+ "type": "object",
+ "required": [
+ "name",
+ "in",
+ "type"
+ ],
+ "oneOf": [
+ {
+ "$ref": "#/definitions/headerParameterSubSchema"
+ },
+ {
+ "$ref": "#/definitions/formDataParameterSubSchema"
+ },
+ {
+ "$ref": "#/definitions/queryParameterSubSchema"
+ },
+ {
+ "$ref": "#/definitions/pathParameterSubSchema"
+ }
+ ]
+ },
+ "parameter": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/bodyParameter"
+ },
+ {
+ "$ref": "#/definitions/nonBodyParameter"
+ }
+ ]
+ },
+ "schema": {
+ "type": "object",
+ "description": "A deterministic version of a JSON Schema object.",
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ },
+ "properties": {
+ "$ref": {
+ "type": "string"
+ },
+ "format": {
+ "type": "string"
+ },
+ "title": {
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/title"
+ },
+ "description": {
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/description"
+ },
+ "default": {
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/default"
+ },
+ "multipleOf": {
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/multipleOf"
+ },
+ "maximum": {
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/maximum"
+ },
+ "exclusiveMaximum": {
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/exclusiveMaximum"
+ },
+ "minimum": {
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/minimum"
+ },
+ "exclusiveMinimum": {
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/exclusiveMinimum"
+ },
+ "maxLength": {
+ "$ref": "http://json-schema.org/draft-04/schema#/definitions/positiveInteger"
+ },
+ "minLength": {
+ "$ref": "http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0"
+ },
+ "pattern": {
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/pattern"
+ },
+ "maxItems": {
+ "$ref": "http://json-schema.org/draft-04/schema#/definitions/positiveInteger"
+ },
+ "minItems": {
+ "$ref": "http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0"
+ },
+ "uniqueItems": {
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/uniqueItems"
+ },
+ "maxProperties": {
+ "$ref": "http://json-schema.org/draft-04/schema#/definitions/positiveInteger"
+ },
+ "minProperties": {
+ "$ref": "http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0"
+ },
+ "required": {
+ "$ref": "http://json-schema.org/draft-04/schema#/definitions/stringArray"
+ },
+ "enum": {
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/enum"
+ },
+ "additionalProperties": {
+ "anyOf": [
+ {
+ "$ref": "#/definitions/schema"
+ },
+ {
+ "type": "boolean"
+ }
+ ],
+ "default": {}
+ },
+ "type": {
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/type"
+ },
+ "items": {
+ "anyOf": [
+ {
+ "$ref": "#/definitions/schema"
+ },
+ {
+ "type": "array",
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/schema"
+ }
+ }
+ ],
+ "default": {}
+ },
+ "allOf": {
+ "type": "array",
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/schema"
+ }
+ },
+ "properties": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/schema"
+ },
+ "default": {}
+ },
+ "discriminator": {
+ "type": "string"
+ },
+ "readOnly": {
+ "type": "boolean",
+ "default": false
+ },
+ "xml": {
+ "$ref": "#/definitions/xml"
+ },
+ "externalDocs": {
+ "$ref": "#/definitions/externalDocs"
+ },
+ "example": {}
+ },
+ "additionalProperties": false
+ },
+ "fileSchema": {
+ "type": "object",
+ "description": "A deterministic version of a JSON Schema object.",
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ },
+ "required": [
+ "type"
+ ],
+ "properties": {
+ "format": {
+ "type": "string"
+ },
+ "title": {
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/title"
+ },
+ "description": {
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/description"
+ },
+ "default": {
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/default"
+ },
+ "required": {
+ "$ref": "http://json-schema.org/draft-04/schema#/definitions/stringArray"
+ },
+ "type": {
+ "type": "string",
+ "enum": [
+ "file"
+ ]
+ },
+ "readOnly": {
+ "type": "boolean",
+ "default": false
+ },
+ "externalDocs": {
+ "$ref": "#/definitions/externalDocs"
+ },
+ "example": {}
+ },
+ "additionalProperties": false
+ },
+ "primitivesItems": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "string",
+ "number",
+ "integer",
+ "boolean",
+ "array"
+ ]
+ },
+ "format": {
+ "type": "string"
+ },
+ "items": {
+ "$ref": "#/definitions/primitivesItems"
+ },
+ "collectionFormat": {
+ "$ref": "#/definitions/collectionFormat"
+ },
+ "default": {
+ "$ref": "#/definitions/default"
+ },
+ "maximum": {
+ "$ref": "#/definitions/maximum"
+ },
+ "exclusiveMaximum": {
+ "$ref": "#/definitions/exclusiveMaximum"
+ },
+ "minimum": {
+ "$ref": "#/definitions/minimum"
+ },
+ "exclusiveMinimum": {
+ "$ref": "#/definitions/exclusiveMinimum"
+ },
+ "maxLength": {
+ "$ref": "#/definitions/maxLength"
+ },
+ "minLength": {
+ "$ref": "#/definitions/minLength"
+ },
+ "pattern": {
+ "$ref": "#/definitions/pattern"
+ },
+ "maxItems": {
+ "$ref": "#/definitions/maxItems"
+ },
+ "minItems": {
+ "$ref": "#/definitions/minItems"
+ },
+ "uniqueItems": {
+ "$ref": "#/definitions/uniqueItems"
+ },
+ "enum": {
+ "$ref": "#/definitions/enum"
+ },
+ "multipleOf": {
+ "$ref": "#/definitions/multipleOf"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ }
+ },
+ "security": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/securityRequirement"
+ },
+ "uniqueItems": true
+ },
+ "securityRequirement": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "uniqueItems": true
+ }
+ },
+ "xml": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "namespace": {
+ "type": "string"
+ },
+ "prefix": {
+ "type": "string"
+ },
+ "attribute": {
+ "type": "boolean",
+ "default": false
+ },
+ "wrapped": {
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ }
+ },
+ "tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "name"
+ ],
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "externalDocs": {
+ "$ref": "#/definitions/externalDocs"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ }
+ },
+ "securityDefinitions": {
+ "type": "object",
+ "additionalProperties": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/basicAuthenticationSecurity"
+ },
+ {
+ "$ref": "#/definitions/apiKeySecurity"
+ },
+ {
+ "$ref": "#/definitions/oauth2ImplicitSecurity"
+ },
+ {
+ "$ref": "#/definitions/oauth2PasswordSecurity"
+ },
+ {
+ "$ref": "#/definitions/oauth2ApplicationSecurity"
+ },
+ {
+ "$ref": "#/definitions/oauth2AccessCodeSecurity"
+ }
+ ]
+ }
+ },
+ "basicAuthenticationSecurity": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "type"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "basic"
+ ]
+ },
+ "description": {
+ "type": "string"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ }
+ },
+ "apiKeySecurity": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "type",
+ "name",
+ "in"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "apiKey"
+ ]
+ },
+ "name": {
+ "type": "string"
+ },
+ "in": {
+ "type": "string",
+ "enum": [
+ "header",
+ "query"
+ ]
+ },
+ "description": {
+ "type": "string"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ }
+ },
+ "oauth2ImplicitSecurity": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "type",
+ "flow",
+ "authorizationUrl"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "oauth2"
+ ]
+ },
+ "flow": {
+ "type": "string",
+ "enum": [
+ "implicit"
+ ]
+ },
+ "scopes": {
+ "$ref": "#/definitions/oauth2Scopes"
+ },
+ "authorizationUrl": {
+ "type": "string",
+ "format": "uri"
+ },
+ "description": {
+ "type": "string"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ }
+ },
+ "oauth2PasswordSecurity": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "type",
+ "flow",
+ "tokenUrl"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "oauth2"
+ ]
+ },
+ "flow": {
+ "type": "string",
+ "enum": [
+ "password"
+ ]
+ },
+ "scopes": {
+ "$ref": "#/definitions/oauth2Scopes"
+ },
+ "tokenUrl": {
+ "type": "string",
+ "format": "uri"
+ },
+ "description": {
+ "type": "string"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ }
+ },
+ "oauth2ApplicationSecurity": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "type",
+ "flow",
+ "tokenUrl"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "oauth2"
+ ]
+ },
+ "flow": {
+ "type": "string",
+ "enum": [
+ "application"
+ ]
+ },
+ "scopes": {
+ "$ref": "#/definitions/oauth2Scopes"
+ },
+ "tokenUrl": {
+ "type": "string",
+ "format": "uri"
+ },
+ "description": {
+ "type": "string"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ }
+ },
+ "oauth2AccessCodeSecurity": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "type",
+ "flow",
+ "authorizationUrl",
+ "tokenUrl"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "oauth2"
+ ]
+ },
+ "flow": {
+ "type": "string",
+ "enum": [
+ "accessCode"
+ ]
+ },
+ "scopes": {
+ "$ref": "#/definitions/oauth2Scopes"
+ },
+ "authorizationUrl": {
+ "type": "string",
+ "format": "uri"
+ },
+ "tokenUrl": {
+ "type": "string",
+ "format": "uri"
+ },
+ "description": {
+ "type": "string"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ }
+ },
+ "oauth2Scopes": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "mediaTypeList": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/mimeType"
+ },
+ "uniqueItems": true
+ },
+ "parametersList": {
+ "type": "array",
+ "description": "The parameters needed to send a valid API call.",
+ "additionalItems": false,
+ "items": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/parameter"
+ },
+ {
+ "$ref": "#/definitions/jsonReference"
+ }
+ ]
+ },
+ "uniqueItems": true
+ },
+ "schemesList": {
+ "type": "array",
+ "description": "The transfer protocol of the API.",
+ "items": {
+ "type": "string",
+ "enum": [
+ "http",
+ "https",
+ "ws",
+ "wss"
+ ]
+ },
+ "uniqueItems": true
+ },
+ "collectionFormat": {
+ "type": "string",
+ "enum": [
+ "csv",
+ "ssv",
+ "tsv",
+ "pipes"
+ ],
+ "default": "csv"
+ },
+ "collectionFormatWithMulti": {
+ "type": "string",
+ "enum": [
+ "csv",
+ "ssv",
+ "tsv",
+ "pipes",
+ "multi"
+ ],
+ "default": "csv"
+ },
+ "title": {
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/title"
+ },
+ "description": {
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/description"
+ },
+ "default": {
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/default"
+ },
+ "multipleOf": {
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/multipleOf"
+ },
+ "maximum": {
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/maximum"
+ },
+ "exclusiveMaximum": {
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/exclusiveMaximum"
+ },
+ "minimum": {
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/minimum"
+ },
+ "exclusiveMinimum": {
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/exclusiveMinimum"
+ },
+ "maxLength": {
+ "$ref": "http://json-schema.org/draft-04/schema#/definitions/positiveInteger"
+ },
+ "minLength": {
+ "$ref": "http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0"
+ },
+ "pattern": {
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/pattern"
+ },
+ "maxItems": {
+ "$ref": "http://json-schema.org/draft-04/schema#/definitions/positiveInteger"
+ },
+ "minItems": {
+ "$ref": "http://json-schema.org/draft-04/schema#/definitions/positiveIntegerDefault0"
+ },
+ "uniqueItems": {
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/uniqueItems"
+ },
+ "enum": {
+ "$ref": "http://json-schema.org/draft-04/schema#/properties/enum"
+ },
+ "jsonReference": {
+ "type": "object",
+ "required": [
+ "$ref"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "$ref": {
+ "type": "string"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/schemas.orig/v3.0/README.md b/schemas.orig/v3.0/README.md
new file mode 100644
index 0000000..8495627
--- /dev/null
+++ b/schemas.orig/v3.0/README.md
@@ -0,0 +1,16 @@
+OpenAPI 3.0.X JSON Schema
+---
+
+Here you can find the JSON Schema for validating OpenAPI definitions of versions 3.0.X.
+
+As a reminder, the JSON Schema is not the source of truth for the Specification. In cases of conflicts between the Specification itself and the JSON Schema, the Specification wins. Also, some Specification constraints cannot be represented with the JSON Schema so it's highly recommended to employ other methods to ensure compliance.
+
+The iteration version of the JSON Schema can be found in the `id` field. For example, the value of `id: https://spec.openapis.org/oas/3.0/schema/2019-04-02` means this iteration was created on April 2nd, 2019.
+
+To submit improvements to the schema, modify the schema.yaml file only.
+
+The TSC will then:
+- Run tests on the updated schema
+- Update the iteration version
+- Convert the schema.yaml to schema.json
+- Publish the new version
diff --git a/schemas.orig/v3.0/schema.json b/schemas.orig/v3.0/schema.json
new file mode 100644
index 0000000..7180840
--- /dev/null
+++ b/schemas.orig/v3.0/schema.json
@@ -0,0 +1,1654 @@
+{
+ "id": "https://spec.openapis.org/oas/3.0/schema/2019-04-02",
+ "$schema": "http://json-schema.org/draft-04/schema#",
+ "description": "Validation schema for OpenAPI Specification 3.0.X.",
+ "type": "object",
+ "required": [
+ "openapi",
+ "info",
+ "paths"
+ ],
+ "properties": {
+ "openapi": {
+ "type": "string",
+ "pattern": "^3\\.0\\.\\d(-.+)?$"
+ },
+ "info": {
+ "$ref": "#/definitions/Info"
+ },
+ "externalDocs": {
+ "$ref": "#/definitions/ExternalDocumentation"
+ },
+ "servers": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Server"
+ }
+ },
+ "security": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/SecurityRequirement"
+ }
+ },
+ "tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "uniqueItems": true
+ },
+ "paths": {
+ "$ref": "#/definitions/Paths"
+ },
+ "components": {
+ "$ref": "#/definitions/Components"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ }
+ },
+ "additionalProperties": false,
+ "definitions": {
+ "Reference": {
+ "type": "object",
+ "required": [
+ "$ref"
+ ],
+ "patternProperties": {
+ "^\\$ref$": {
+ "type": "string",
+ "format": "uri-reference"
+ }
+ }
+ },
+ "Info": {
+ "type": "object",
+ "required": [
+ "title",
+ "version"
+ ],
+ "properties": {
+ "title": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "termsOfService": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "contact": {
+ "$ref": "#/definitions/Contact"
+ },
+ "license": {
+ "$ref": "#/definitions/License"
+ },
+ "version": {
+ "type": "string"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ }
+ },
+ "additionalProperties": false
+ },
+ "Contact": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "email": {
+ "type": "string",
+ "format": "email"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ }
+ },
+ "additionalProperties": false
+ },
+ "License": {
+ "type": "object",
+ "required": [
+ "name"
+ ],
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string",
+ "format": "uri-reference"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ }
+ },
+ "additionalProperties": false
+ },
+ "Server": {
+ "type": "object",
+ "required": [
+ "url"
+ ],
+ "properties": {
+ "url": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "variables": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/ServerVariable"
+ }
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ }
+ },
+ "additionalProperties": false
+ },
+ "ServerVariable": {
+ "type": "object",
+ "required": [
+ "default"
+ ],
+ "properties": {
+ "enum": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "default": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ }
+ },
+ "additionalProperties": false
+ },
+ "Components": {
+ "type": "object",
+ "properties": {
+ "schemas": {
+ "type": "object",
+ "patternProperties": {
+ "^[a-zA-Z0-9\\.\\-_]+$": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Schema"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ }
+ }
+ },
+ "responses": {
+ "type": "object",
+ "patternProperties": {
+ "^[a-zA-Z0-9\\.\\-_]+$": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Reference"
+ },
+ {
+ "$ref": "#/definitions/Response"
+ }
+ ]
+ }
+ }
+ },
+ "parameters": {
+ "type": "object",
+ "patternProperties": {
+ "^[a-zA-Z0-9\\.\\-_]+$": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Reference"
+ },
+ {
+ "$ref": "#/definitions/Parameter"
+ }
+ ]
+ }
+ }
+ },
+ "examples": {
+ "type": "object",
+ "patternProperties": {
+ "^[a-zA-Z0-9\\.\\-_]+$": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Reference"
+ },
+ {
+ "$ref": "#/definitions/Example"
+ }
+ ]
+ }
+ }
+ },
+ "requestBodies": {
+ "type": "object",
+ "patternProperties": {
+ "^[a-zA-Z0-9\\.\\-_]+$": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Reference"
+ },
+ {
+ "$ref": "#/definitions/RequestBody"
+ }
+ ]
+ }
+ }
+ },
+ "headers": {
+ "type": "object",
+ "patternProperties": {
+ "^[a-zA-Z0-9\\.\\-_]+$": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Reference"
+ },
+ {
+ "$ref": "#/definitions/Header"
+ }
+ ]
+ }
+ }
+ },
+ "securitySchemes": {
+ "type": "object",
+ "patternProperties": {
+ "^[a-zA-Z0-9\\.\\-_]+$": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Reference"
+ },
+ {
+ "$ref": "#/definitions/SecurityScheme"
+ }
+ ]
+ }
+ }
+ },
+ "links": {
+ "type": "object",
+ "patternProperties": {
+ "^[a-zA-Z0-9\\.\\-_]+$": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Reference"
+ },
+ {
+ "$ref": "#/definitions/Link"
+ }
+ ]
+ }
+ }
+ },
+ "callbacks": {
+ "type": "object",
+ "patternProperties": {
+ "^[a-zA-Z0-9\\.\\-_]+$": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Reference"
+ },
+ {
+ "$ref": "#/definitions/Callback"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ }
+ },
+ "additionalProperties": false
+ },
+ "Schema": {
+ "type": "object",
+ "properties": {
+ "title": {
+ "type": "string"
+ },
+ "multipleOf": {
+ "type": "number",
+ "minimum": 0,
+ "exclusiveMinimum": true
+ },
+ "maximum": {
+ "type": "number"
+ },
+ "exclusiveMaximum": {
+ "type": "boolean",
+ "default": false
+ },
+ "minimum": {
+ "type": "number"
+ },
+ "exclusiveMinimum": {
+ "type": "boolean",
+ "default": false
+ },
+ "maxLength": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "minLength": {
+ "type": "integer",
+ "minimum": 0,
+ "default": 0
+ },
+ "pattern": {
+ "type": "string",
+ "format": "regex"
+ },
+ "maxItems": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "minItems": {
+ "type": "integer",
+ "minimum": 0,
+ "default": 0
+ },
+ "uniqueItems": {
+ "type": "boolean",
+ "default": false
+ },
+ "maxProperties": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "minProperties": {
+ "type": "integer",
+ "minimum": 0,
+ "default": 0
+ },
+ "required": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "minItems": 1,
+ "uniqueItems": true
+ },
+ "enum": {
+ "type": "array",
+ "items": {
+ },
+ "minItems": 1,
+ "uniqueItems": false
+ },
+ "type": {
+ "type": "string",
+ "enum": [
+ "array",
+ "boolean",
+ "integer",
+ "number",
+ "object",
+ "string"
+ ]
+ },
+ "not": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Schema"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ },
+ "allOf": {
+ "type": "array",
+ "items": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Schema"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ }
+ },
+ "oneOf": {
+ "type": "array",
+ "items": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Schema"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ }
+ },
+ "anyOf": {
+ "type": "array",
+ "items": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Schema"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ }
+ },
+ "items": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Schema"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ },
+ "properties": {
+ "type": "object",
+ "additionalProperties": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Schema"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ }
+ },
+ "additionalProperties": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Schema"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ },
+ {
+ "type": "boolean"
+ }
+ ],
+ "default": true
+ },
+ "description": {
+ "type": "string"
+ },
+ "format": {
+ "type": "string"
+ },
+ "default": {
+ },
+ "nullable": {
+ "type": "boolean",
+ "default": false
+ },
+ "discriminator": {
+ "$ref": "#/definitions/Discriminator"
+ },
+ "readOnly": {
+ "type": "boolean",
+ "default": false
+ },
+ "writeOnly": {
+ "type": "boolean",
+ "default": false
+ },
+ "example": {
+ },
+ "externalDocs": {
+ "$ref": "#/definitions/ExternalDocumentation"
+ },
+ "deprecated": {
+ "type": "boolean",
+ "default": false
+ },
+ "xml": {
+ "$ref": "#/definitions/XML"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ }
+ },
+ "additionalProperties": false
+ },
+ "Discriminator": {
+ "type": "object",
+ "required": [
+ "propertyName"
+ ],
+ "properties": {
+ "propertyName": {
+ "type": "string"
+ },
+ "mapping": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "XML": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "namespace": {
+ "type": "string",
+ "format": "uri"
+ },
+ "prefix": {
+ "type": "string"
+ },
+ "attribute": {
+ "type": "boolean",
+ "default": false
+ },
+ "wrapped": {
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ }
+ },
+ "additionalProperties": false
+ },
+ "Response": {
+ "type": "object",
+ "required": [
+ "description"
+ ],
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "headers": {
+ "type": "object",
+ "additionalProperties": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Header"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ }
+ },
+ "content": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/MediaType"
+ }
+ },
+ "links": {
+ "type": "object",
+ "additionalProperties": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Link"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ }
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ }
+ },
+ "additionalProperties": false
+ },
+ "MediaType": {
+ "type": "object",
+ "properties": {
+ "schema": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Schema"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ },
+ "example": {
+ },
+ "examples": {
+ "type": "object",
+ "additionalProperties": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Example"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ }
+ },
+ "encoding": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/Encoding"
+ }
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ }
+ },
+ "additionalProperties": false,
+ "allOf": [
+ {
+ "$ref": "#/definitions/ExampleXORExamples"
+ }
+ ]
+ },
+ "Example": {
+ "type": "object",
+ "properties": {
+ "summary": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "value": {
+ },
+ "externalValue": {
+ "type": "string",
+ "format": "uri-reference"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ }
+ },
+ "additionalProperties": false
+ },
+ "Header": {
+ "type": "object",
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "required": {
+ "type": "boolean",
+ "default": false
+ },
+ "deprecated": {
+ "type": "boolean",
+ "default": false
+ },
+ "allowEmptyValue": {
+ "type": "boolean",
+ "default": false
+ },
+ "style": {
+ "type": "string",
+ "enum": [
+ "simple"
+ ],
+ "default": "simple"
+ },
+ "explode": {
+ "type": "boolean"
+ },
+ "allowReserved": {
+ "type": "boolean",
+ "default": false
+ },
+ "schema": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Schema"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ },
+ "content": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/MediaType"
+ },
+ "minProperties": 1,
+ "maxProperties": 1
+ },
+ "example": {
+ },
+ "examples": {
+ "type": "object",
+ "additionalProperties": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Example"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ }
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ }
+ },
+ "additionalProperties": false,
+ "allOf": [
+ {
+ "$ref": "#/definitions/ExampleXORExamples"
+ },
+ {
+ "$ref": "#/definitions/SchemaXORContent"
+ }
+ ]
+ },
+ "Paths": {
+ "type": "object",
+ "patternProperties": {
+ "^\\/": {
+ "$ref": "#/definitions/PathItem"
+ },
+ "^x-": {
+ }
+ },
+ "additionalProperties": false
+ },
+ "PathItem": {
+ "type": "object",
+ "properties": {
+ "$ref": {
+ "type": "string"
+ },
+ "summary": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "servers": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Server"
+ }
+ },
+ "parameters": {
+ "type": "array",
+ "items": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Parameter"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ },
+ "uniqueItems": true
+ }
+ },
+ "patternProperties": {
+ "^(get|put|post|delete|options|head|patch|trace)$": {
+ "$ref": "#/definitions/Operation"
+ },
+ "^x-": {
+ }
+ },
+ "additionalProperties": false
+ },
+ "Operation": {
+ "type": "object",
+ "required": [
+ "responses"
+ ],
+ "properties": {
+ "tags": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "summary": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "externalDocs": {
+ "$ref": "#/definitions/ExternalDocumentation"
+ },
+ "operationId": {
+ "type": "string"
+ },
+ "parameters": {
+ "type": "array",
+ "items": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Parameter"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ },
+ "uniqueItems": true
+ },
+ "requestBody": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/RequestBody"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ },
+ "responses": {
+ "$ref": "#/definitions/Responses"
+ },
+ "callbacks": {
+ "type": "object",
+ "additionalProperties": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Callback"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ }
+ },
+ "deprecated": {
+ "type": "boolean",
+ "default": false
+ },
+ "security": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/SecurityRequirement"
+ }
+ },
+ "servers": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Server"
+ }
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ }
+ },
+ "additionalProperties": false
+ },
+ "Responses": {
+ "type": "object",
+ "properties": {
+ "default": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Response"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ }
+ },
+ "patternProperties": {
+ "^[1-5](?:\\d{2}|XX)$": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Response"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ },
+ "^x-": {
+ }
+ },
+ "minProperties": 1,
+ "additionalProperties": false
+ },
+ "SecurityRequirement": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "Tag": {
+ "type": "object",
+ "required": [
+ "name"
+ ],
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "externalDocs": {
+ "$ref": "#/definitions/ExternalDocumentation"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ }
+ },
+ "additionalProperties": false
+ },
+ "ExternalDocumentation": {
+ "type": "object",
+ "required": [
+ "url"
+ ],
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string",
+ "format": "uri-reference"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ }
+ },
+ "additionalProperties": false
+ },
+ "ExampleXORExamples": {
+ "description": "Example and examples are mutually exclusive",
+ "not": {
+ "required": [
+ "example",
+ "examples"
+ ]
+ }
+ },
+ "SchemaXORContent": {
+ "description": "Schema and content are mutually exclusive, at least one is required",
+ "not": {
+ "required": [
+ "schema",
+ "content"
+ ]
+ },
+ "oneOf": [
+ {
+ "required": [
+ "schema"
+ ]
+ },
+ {
+ "required": [
+ "content"
+ ],
+ "description": "Some properties are not allowed if content is present",
+ "allOf": [
+ {
+ "not": {
+ "required": [
+ "style"
+ ]
+ }
+ },
+ {
+ "not": {
+ "required": [
+ "explode"
+ ]
+ }
+ },
+ {
+ "not": {
+ "required": [
+ "allowReserved"
+ ]
+ }
+ },
+ {
+ "not": {
+ "required": [
+ "example"
+ ]
+ }
+ },
+ {
+ "not": {
+ "required": [
+ "examples"
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "Parameter": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "in": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "required": {
+ "type": "boolean",
+ "default": false
+ },
+ "deprecated": {
+ "type": "boolean",
+ "default": false
+ },
+ "allowEmptyValue": {
+ "type": "boolean",
+ "default": false
+ },
+ "style": {
+ "type": "string"
+ },
+ "explode": {
+ "type": "boolean"
+ },
+ "allowReserved": {
+ "type": "boolean",
+ "default": false
+ },
+ "schema": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Schema"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ },
+ "content": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/MediaType"
+ },
+ "minProperties": 1,
+ "maxProperties": 1
+ },
+ "example": {
+ },
+ "examples": {
+ "type": "object",
+ "additionalProperties": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Example"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ }
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "name",
+ "in"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/definitions/ExampleXORExamples"
+ },
+ {
+ "$ref": "#/definitions/SchemaXORContent"
+ },
+ {
+ "$ref": "#/definitions/ParameterLocation"
+ }
+ ]
+ },
+ "ParameterLocation": {
+ "description": "Parameter location",
+ "oneOf": [
+ {
+ "description": "Parameter in path",
+ "required": [
+ "required"
+ ],
+ "properties": {
+ "in": {
+ "enum": [
+ "path"
+ ]
+ },
+ "style": {
+ "enum": [
+ "matrix",
+ "label",
+ "simple"
+ ],
+ "default": "simple"
+ },
+ "required": {
+ "enum": [
+ true
+ ]
+ }
+ }
+ },
+ {
+ "description": "Parameter in query",
+ "properties": {
+ "in": {
+ "enum": [
+ "query"
+ ]
+ },
+ "style": {
+ "enum": [
+ "form",
+ "spaceDelimited",
+ "pipeDelimited",
+ "deepObject"
+ ],
+ "default": "form"
+ }
+ }
+ },
+ {
+ "description": "Parameter in header",
+ "properties": {
+ "in": {
+ "enum": [
+ "header"
+ ]
+ },
+ "style": {
+ "enum": [
+ "simple"
+ ],
+ "default": "simple"
+ }
+ }
+ },
+ {
+ "description": "Parameter in cookie",
+ "properties": {
+ "in": {
+ "enum": [
+ "cookie"
+ ]
+ },
+ "style": {
+ "enum": [
+ "form"
+ ],
+ "default": "form"
+ }
+ }
+ }
+ ]
+ },
+ "RequestBody": {
+ "type": "object",
+ "required": [
+ "content"
+ ],
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "content": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/MediaType"
+ }
+ },
+ "required": {
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ }
+ },
+ "additionalProperties": false
+ },
+ "SecurityScheme": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/APIKeySecurityScheme"
+ },
+ {
+ "$ref": "#/definitions/HTTPSecurityScheme"
+ },
+ {
+ "$ref": "#/definitions/OAuth2SecurityScheme"
+ },
+ {
+ "$ref": "#/definitions/OpenIdConnectSecurityScheme"
+ }
+ ]
+ },
+ "APIKeySecurityScheme": {
+ "type": "object",
+ "required": [
+ "type",
+ "name",
+ "in"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "apiKey"
+ ]
+ },
+ "name": {
+ "type": "string"
+ },
+ "in": {
+ "type": "string",
+ "enum": [
+ "header",
+ "query",
+ "cookie"
+ ]
+ },
+ "description": {
+ "type": "string"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ }
+ },
+ "additionalProperties": false
+ },
+ "HTTPSecurityScheme": {
+ "type": "object",
+ "required": [
+ "scheme",
+ "type"
+ ],
+ "properties": {
+ "scheme": {
+ "type": "string"
+ },
+ "bearerFormat": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "enum": [
+ "http"
+ ]
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ }
+ },
+ "additionalProperties": false,
+ "oneOf": [
+ {
+ "description": "Bearer",
+ "properties": {
+ "scheme": {
+ "enum": [
+ "bearer"
+ ]
+ }
+ }
+ },
+ {
+ "description": "Non Bearer",
+ "not": {
+ "required": [
+ "bearerFormat"
+ ]
+ },
+ "properties": {
+ "scheme": {
+ "not": {
+ "enum": [
+ "bearer"
+ ]
+ }
+ }
+ }
+ }
+ ]
+ },
+ "OAuth2SecurityScheme": {
+ "type": "object",
+ "required": [
+ "type",
+ "flows"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "oauth2"
+ ]
+ },
+ "flows": {
+ "$ref": "#/definitions/OAuthFlows"
+ },
+ "description": {
+ "type": "string"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ }
+ },
+ "additionalProperties": false
+ },
+ "OpenIdConnectSecurityScheme": {
+ "type": "object",
+ "required": [
+ "type",
+ "openIdConnectUrl"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "openIdConnect"
+ ]
+ },
+ "openIdConnectUrl": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "description": {
+ "type": "string"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ }
+ },
+ "additionalProperties": false
+ },
+ "OAuthFlows": {
+ "type": "object",
+ "properties": {
+ "implicit": {
+ "$ref": "#/definitions/ImplicitOAuthFlow"
+ },
+ "password": {
+ "$ref": "#/definitions/PasswordOAuthFlow"
+ },
+ "clientCredentials": {
+ "$ref": "#/definitions/ClientCredentialsFlow"
+ },
+ "authorizationCode": {
+ "$ref": "#/definitions/AuthorizationCodeOAuthFlow"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ }
+ },
+ "additionalProperties": false
+ },
+ "ImplicitOAuthFlow": {
+ "type": "object",
+ "required": [
+ "authorizationUrl",
+ "scopes"
+ ],
+ "properties": {
+ "authorizationUrl": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "refreshUrl": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "scopes": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ }
+ },
+ "additionalProperties": false
+ },
+ "PasswordOAuthFlow": {
+ "type": "object",
+ "required": [
+ "tokenUrl"
+ ],
+ "properties": {
+ "tokenUrl": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "refreshUrl": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "scopes": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ }
+ },
+ "additionalProperties": false
+ },
+ "ClientCredentialsFlow": {
+ "type": "object",
+ "required": [
+ "tokenUrl"
+ ],
+ "properties": {
+ "tokenUrl": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "refreshUrl": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "scopes": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ }
+ },
+ "additionalProperties": false
+ },
+ "AuthorizationCodeOAuthFlow": {
+ "type": "object",
+ "required": [
+ "authorizationUrl",
+ "tokenUrl"
+ ],
+ "properties": {
+ "authorizationUrl": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "tokenUrl": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "refreshUrl": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "scopes": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ }
+ },
+ "additionalProperties": false
+ },
+ "Link": {
+ "type": "object",
+ "properties": {
+ "operationId": {
+ "type": "string"
+ },
+ "operationRef": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "parameters": {
+ "type": "object",
+ "additionalProperties": {
+ }
+ },
+ "requestBody": {
+ },
+ "description": {
+ "type": "string"
+ },
+ "server": {
+ "$ref": "#/definitions/Server"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ }
+ },
+ "additionalProperties": false,
+ "not": {
+ "description": "Operation Id and Operation Ref are mutually exclusive",
+ "required": [
+ "operationId",
+ "operationRef"
+ ]
+ }
+ },
+ "Callback": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/PathItem"
+ },
+ "patternProperties": {
+ "^x-": {
+ }
+ }
+ },
+ "Encoding": {
+ "type": "object",
+ "properties": {
+ "contentType": {
+ "type": "string"
+ },
+ "headers": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/Header"
+ }
+ },
+ "style": {
+ "type": "string",
+ "enum": [
+ "form",
+ "spaceDelimited",
+ "pipeDelimited",
+ "deepObject"
+ ]
+ },
+ "explode": {
+ "type": "boolean"
+ },
+ "allowReserved": {
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "additionalProperties": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/schemas.orig/v3.0/schema.yaml b/schemas.orig/v3.0/schema.yaml
new file mode 100644
index 0000000..13e47ff
--- /dev/null
+++ b/schemas.orig/v3.0/schema.yaml
@@ -0,0 +1,1003 @@
+id: https://spec.openapis.org/oas/3.0/schema/2019-04-02
+$schema: http://json-schema.org/draft-04/schema#
+description: Validation schema for OpenAPI Specification 3.0.X.
+type: object
+required:
+ - openapi
+ - info
+ - paths
+properties:
+ openapi:
+ type: string
+ pattern: ^3\.0\.\d(-.+)?$
+ info:
+ $ref: '#/definitions/Info'
+ externalDocs:
+ $ref: '#/definitions/ExternalDocumentation'
+ servers:
+ type: array
+ items:
+ $ref: '#/definitions/Server'
+ security:
+ type: array
+ items:
+ $ref: '#/definitions/SecurityRequirement'
+ tags:
+ type: array
+ items:
+ $ref: '#/definitions/Tag'
+ uniqueItems: true
+ paths:
+ $ref: '#/definitions/Paths'
+ components:
+ $ref: '#/definitions/Components'
+patternProperties:
+ '^x-': {}
+additionalProperties: false
+definitions:
+ Reference:
+ type: object
+ required:
+ - $ref
+ patternProperties:
+ '^\$ref$':
+ type: string
+ format: uri-reference
+ Info:
+ type: object
+ required:
+ - title
+ - version
+ properties:
+ title:
+ type: string
+ description:
+ type: string
+ termsOfService:
+ type: string
+ format: uri-reference
+ contact:
+ $ref: '#/definitions/Contact'
+ license:
+ $ref: '#/definitions/License'
+ version:
+ type: string
+ patternProperties:
+ '^x-': {}
+ additionalProperties: false
+
+
+ Contact:
+ type: object
+ properties:
+ name:
+ type: string
+ url:
+ type: string
+ format: uri-reference
+ email:
+ type: string
+ format: email
+ patternProperties:
+ '^x-': {}
+ additionalProperties: false
+
+ License:
+ type: object
+ required:
+ - name
+ properties:
+ name:
+ type: string
+ url:
+ type: string
+ format: uri-reference
+ patternProperties:
+ '^x-': {}
+ additionalProperties: false
+
+ Server:
+ type: object
+ required:
+ - url
+ properties:
+ url:
+ type: string
+ description:
+ type: string
+ variables:
+ type: object
+ additionalProperties:
+ $ref: '#/definitions/ServerVariable'
+ patternProperties:
+ '^x-': {}
+ additionalProperties: false
+
+ ServerVariable:
+ type: object
+ required:
+ - default
+ properties:
+ enum:
+ type: array
+ items:
+ type: string
+ default:
+ type: string
+ description:
+ type: string
+ patternProperties:
+ '^x-': {}
+ additionalProperties: false
+
+ Components:
+ type: object
+ properties:
+ schemas:
+ type: object
+ patternProperties:
+ '^[a-zA-Z0-9\.\-_]+$':
+ oneOf:
+ - $ref: '#/definitions/Schema'
+ - $ref: '#/definitions/Reference'
+ responses:
+ type: object
+ patternProperties:
+ '^[a-zA-Z0-9\.\-_]+$':
+ oneOf:
+ - $ref: '#/definitions/Reference'
+ - $ref: '#/definitions/Response'
+ parameters:
+ type: object
+ patternProperties:
+ '^[a-zA-Z0-9\.\-_]+$':
+ oneOf:
+ - $ref: '#/definitions/Reference'
+ - $ref: '#/definitions/Parameter'
+ examples:
+ type: object
+ patternProperties:
+ '^[a-zA-Z0-9\.\-_]+$':
+ oneOf:
+ - $ref: '#/definitions/Reference'
+ - $ref: '#/definitions/Example'
+ requestBodies:
+ type: object
+ patternProperties:
+ '^[a-zA-Z0-9\.\-_]+$':
+ oneOf:
+ - $ref: '#/definitions/Reference'
+ - $ref: '#/definitions/RequestBody'
+ headers:
+ type: object
+ patternProperties:
+ '^[a-zA-Z0-9\.\-_]+$':
+ oneOf:
+ - $ref: '#/definitions/Reference'
+ - $ref: '#/definitions/Header'
+ securitySchemes:
+ type: object
+ patternProperties:
+ '^[a-zA-Z0-9\.\-_]+$':
+ oneOf:
+ - $ref: '#/definitions/Reference'
+ - $ref: '#/definitions/SecurityScheme'
+ links:
+ type: object
+ patternProperties:
+ '^[a-zA-Z0-9\.\-_]+$':
+ oneOf:
+ - $ref: '#/definitions/Reference'
+ - $ref: '#/definitions/Link'
+ callbacks:
+ type: object
+ patternProperties:
+ '^[a-zA-Z0-9\.\-_]+$':
+ oneOf:
+ - $ref: '#/definitions/Reference'
+ - $ref: '#/definitions/Callback'
+ patternProperties:
+ '^x-': {}
+ additionalProperties: false
+
+ Schema:
+ type: object
+ properties:
+ title:
+ type: string
+ multipleOf:
+ type: number
+ minimum: 0
+ exclusiveMinimum: true
+ maximum:
+ type: number
+ exclusiveMaximum:
+ type: boolean
+ default: false
+ minimum:
+ type: number
+ exclusiveMinimum:
+ type: boolean
+ default: false
+ maxLength:
+ type: integer
+ minimum: 0
+ minLength:
+ type: integer
+ minimum: 0
+ default: 0
+ pattern:
+ type: string
+ format: regex
+ maxItems:
+ type: integer
+ minimum: 0
+ minItems:
+ type: integer
+ minimum: 0
+ default: 0
+ uniqueItems:
+ type: boolean
+ default: false
+ maxProperties:
+ type: integer
+ minimum: 0
+ minProperties:
+ type: integer
+ minimum: 0
+ default: 0
+ required:
+ type: array
+ items:
+ type: string
+ minItems: 1
+ uniqueItems: true
+ enum:
+ type: array
+ items: {}
+ minItems: 1
+ uniqueItems: false
+ type:
+ type: string
+ enum:
+ - array
+ - boolean
+ - integer
+ - number
+ - object
+ - string
+ not:
+ oneOf:
+ - $ref: '#/definitions/Schema'
+ - $ref: '#/definitions/Reference'
+ allOf:
+ type: array
+ items:
+ oneOf:
+ - $ref: '#/definitions/Schema'
+ - $ref: '#/definitions/Reference'
+ oneOf:
+ type: array
+ items:
+ oneOf:
+ - $ref: '#/definitions/Schema'
+ - $ref: '#/definitions/Reference'
+ anyOf:
+ type: array
+ items:
+ oneOf:
+ - $ref: '#/definitions/Schema'
+ - $ref: '#/definitions/Reference'
+ items:
+ oneOf:
+ - $ref: '#/definitions/Schema'
+ - $ref: '#/definitions/Reference'
+ properties:
+ type: object
+ additionalProperties:
+ oneOf:
+ - $ref: '#/definitions/Schema'
+ - $ref: '#/definitions/Reference'
+ additionalProperties:
+ oneOf:
+ - $ref: '#/definitions/Schema'
+ - $ref: '#/definitions/Reference'
+ - type: boolean
+ default: true
+ description:
+ type: string
+ format:
+ type: string
+ default: {}
+ nullable:
+ type: boolean
+ default: false
+ discriminator:
+ $ref: '#/definitions/Discriminator'
+ readOnly:
+ type: boolean
+ default: false
+ writeOnly:
+ type: boolean
+ default: false
+ example: {}
+ externalDocs:
+ $ref: '#/definitions/ExternalDocumentation'
+ deprecated:
+ type: boolean
+ default: false
+ xml:
+ $ref: '#/definitions/XML'
+ patternProperties:
+ '^x-': {}
+ additionalProperties: false
+
+ Discriminator:
+ type: object
+ required:
+ - propertyName
+ properties:
+ propertyName:
+ type: string
+ mapping:
+ type: object
+ additionalProperties:
+ type: string
+
+ XML:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ format: uri
+ prefix:
+ type: string
+ attribute:
+ type: boolean
+ default: false
+ wrapped:
+ type: boolean
+ default: false
+ patternProperties:
+ '^x-': {}
+ additionalProperties: false
+
+ Response:
+ type: object
+ required:
+ - description
+ properties:
+ description:
+ type: string
+ headers:
+ type: object
+ additionalProperties:
+ oneOf:
+ - $ref: '#/definitions/Header'
+ - $ref: '#/definitions/Reference'
+ content:
+ type: object
+ additionalProperties:
+ $ref: '#/definitions/MediaType'
+ links:
+ type: object
+ additionalProperties:
+ oneOf:
+ - $ref: '#/definitions/Link'
+ - $ref: '#/definitions/Reference'
+ patternProperties:
+ '^x-': {}
+ additionalProperties: false
+
+ MediaType:
+ type: object
+ properties:
+ schema:
+ oneOf:
+ - $ref: '#/definitions/Schema'
+ - $ref: '#/definitions/Reference'
+ example: {}
+ examples:
+ type: object
+ additionalProperties:
+ oneOf:
+ - $ref: '#/definitions/Example'
+ - $ref: '#/definitions/Reference'
+ encoding:
+ type: object
+ additionalProperties:
+ $ref: '#/definitions/Encoding'
+ patternProperties:
+ '^x-': {}
+ additionalProperties: false
+ allOf:
+ - $ref: '#/definitions/ExampleXORExamples'
+
+ Example:
+ type: object
+ properties:
+ summary:
+ type: string
+ description:
+ type: string
+ value: {}
+ externalValue:
+ type: string
+ format: uri-reference
+ patternProperties:
+ '^x-': {}
+ additionalProperties: false
+
+ Header:
+ type: object
+ properties:
+ description:
+ type: string
+ required:
+ type: boolean
+ default: false
+ deprecated:
+ type: boolean
+ default: false
+ allowEmptyValue:
+ type: boolean
+ default: false
+ style:
+ type: string
+ enum:
+ - simple
+ default: simple
+ explode:
+ type: boolean
+ allowReserved:
+ type: boolean
+ default: false
+ schema:
+ oneOf:
+ - $ref: '#/definitions/Schema'
+ - $ref: '#/definitions/Reference'
+ content:
+ type: object
+ additionalProperties:
+ $ref: '#/definitions/MediaType'
+ minProperties: 1
+ maxProperties: 1
+ example: {}
+ examples:
+ type: object
+ additionalProperties:
+ oneOf:
+ - $ref: '#/definitions/Example'
+ - $ref: '#/definitions/Reference'
+ patternProperties:
+ '^x-': {}
+ additionalProperties: false
+ allOf:
+ - $ref: '#/definitions/ExampleXORExamples'
+ - $ref: '#/definitions/SchemaXORContent'
+
+ Paths:
+ type: object
+ patternProperties:
+ '^\/':
+ $ref: '#/definitions/PathItem'
+ '^x-': {}
+ additionalProperties: false
+
+ PathItem:
+ type: object
+ properties:
+ $ref:
+ type: string
+ summary:
+ type: string
+ description:
+ type: string
+ servers:
+ type: array
+ items:
+ $ref: '#/definitions/Server'
+ parameters:
+ type: array
+ items:
+ oneOf:
+ - $ref: '#/definitions/Parameter'
+ - $ref: '#/definitions/Reference'
+ uniqueItems: true
+ patternProperties:
+ '^(get|put|post|delete|options|head|patch|trace)$':
+ $ref: '#/definitions/Operation'
+ '^x-': {}
+ additionalProperties: false
+
+ Operation:
+ type: object
+ required:
+ - responses
+ properties:
+ tags:
+ type: array
+ items:
+ type: string
+ summary:
+ type: string
+ description:
+ type: string
+ externalDocs:
+ $ref: '#/definitions/ExternalDocumentation'
+ operationId:
+ type: string
+ parameters:
+ type: array
+ items:
+ oneOf:
+ - $ref: '#/definitions/Parameter'
+ - $ref: '#/definitions/Reference'
+ uniqueItems: true
+ requestBody:
+ oneOf:
+ - $ref: '#/definitions/RequestBody'
+ - $ref: '#/definitions/Reference'
+ responses:
+ $ref: '#/definitions/Responses'
+ callbacks:
+ type: object
+ additionalProperties:
+ oneOf:
+ - $ref: '#/definitions/Callback'
+ - $ref: '#/definitions/Reference'
+ deprecated:
+ type: boolean
+ default: false
+ security:
+ type: array
+ items:
+ $ref: '#/definitions/SecurityRequirement'
+ servers:
+ type: array
+ items:
+ $ref: '#/definitions/Server'
+ patternProperties:
+ '^x-': {}
+ additionalProperties: false
+
+ Responses:
+ type: object
+ properties:
+ default:
+ oneOf:
+ - $ref: '#/definitions/Response'
+ - $ref: '#/definitions/Reference'
+ patternProperties:
+ '^[1-5](?:\d{2}|XX)$':
+ oneOf:
+ - $ref: '#/definitions/Response'
+ - $ref: '#/definitions/Reference'
+ '^x-': {}
+ minProperties: 1
+ additionalProperties: false
+
+
+ SecurityRequirement:
+ type: object
+ additionalProperties:
+ type: array
+ items:
+ type: string
+
+ Tag:
+ type: object
+ required:
+ - name
+ properties:
+ name:
+ type: string
+ description:
+ type: string
+ externalDocs:
+ $ref: '#/definitions/ExternalDocumentation'
+ patternProperties:
+ '^x-': {}
+ additionalProperties: false
+
+ ExternalDocumentation:
+ type: object
+ required:
+ - url
+ properties:
+ description:
+ type: string
+ url:
+ type: string
+ format: uri-reference
+ patternProperties:
+ '^x-': {}
+ additionalProperties: false
+
+ ExampleXORExamples:
+ description: Example and examples are mutually exclusive
+ not:
+ required: [example, examples]
+
+ SchemaXORContent:
+ description: Schema and content are mutually exclusive, at least one is required
+ not:
+ required: [schema, content]
+ oneOf:
+ - required: [schema]
+ - required: [content]
+ description: Some properties are not allowed if content is present
+ allOf:
+ - not:
+ required: [style]
+ - not:
+ required: [explode]
+ - not:
+ required: [allowReserved]
+ - not:
+ required: [example]
+ - not:
+ required: [examples]
+
+ Parameter:
+ type: object
+ properties:
+ name:
+ type: string
+ in:
+ type: string
+ description:
+ type: string
+ required:
+ type: boolean
+ default: false
+ deprecated:
+ type: boolean
+ default: false
+ allowEmptyValue:
+ type: boolean
+ default: false
+ style:
+ type: string
+ explode:
+ type: boolean
+ allowReserved:
+ type: boolean
+ default: false
+ schema:
+ oneOf:
+ - $ref: '#/definitions/Schema'
+ - $ref: '#/definitions/Reference'
+ content:
+ type: object
+ additionalProperties:
+ $ref: '#/definitions/MediaType'
+ minProperties: 1
+ maxProperties: 1
+ example: {}
+ examples:
+ type: object
+ additionalProperties:
+ oneOf:
+ - $ref: '#/definitions/Example'
+ - $ref: '#/definitions/Reference'
+ patternProperties:
+ '^x-': {}
+ additionalProperties: false
+ required:
+ - name
+ - in
+ allOf:
+ - $ref: '#/definitions/ExampleXORExamples'
+ - $ref: '#/definitions/SchemaXORContent'
+ - $ref: '#/definitions/ParameterLocation'
+
+ ParameterLocation:
+ description: Parameter location
+ oneOf:
+ - description: Parameter in path
+ required:
+ - required
+ properties:
+ in:
+ enum: [path]
+ style:
+ enum: [matrix, label, simple]
+ default: simple
+ required:
+ enum: [true]
+
+ - description: Parameter in query
+ properties:
+ in:
+ enum: [query]
+ style:
+ enum: [form, spaceDelimited, pipeDelimited, deepObject]
+ default: form
+
+ - description: Parameter in header
+ properties:
+ in:
+ enum: [header]
+ style:
+ enum: [simple]
+ default: simple
+
+ - description: Parameter in cookie
+ properties:
+ in:
+ enum: [cookie]
+ style:
+ enum: [form]
+ default: form
+
+ RequestBody:
+ type: object
+ required:
+ - content
+ properties:
+ description:
+ type: string
+ content:
+ type: object
+ additionalProperties:
+ $ref: '#/definitions/MediaType'
+ required:
+ type: boolean
+ default: false
+ patternProperties:
+ '^x-': {}
+ additionalProperties: false
+
+ SecurityScheme:
+ oneOf:
+ - $ref: '#/definitions/APIKeySecurityScheme'
+ - $ref: '#/definitions/HTTPSecurityScheme'
+ - $ref: '#/definitions/OAuth2SecurityScheme'
+ - $ref: '#/definitions/OpenIdConnectSecurityScheme'
+
+ APIKeySecurityScheme:
+ type: object
+ required:
+ - type
+ - name
+ - in
+ properties:
+ type:
+ type: string
+ enum:
+ - apiKey
+ name:
+ type: string
+ in:
+ type: string
+ enum:
+ - header
+ - query
+ - cookie
+ description:
+ type: string
+ patternProperties:
+ '^x-': {}
+ additionalProperties: false
+
+ HTTPSecurityScheme:
+ type: object
+ required:
+ - scheme
+ - type
+ properties:
+ scheme:
+ type: string
+ bearerFormat:
+ type: string
+ description:
+ type: string
+ type:
+ type: string
+ enum:
+ - http
+ patternProperties:
+ '^x-': {}
+ additionalProperties: false
+ oneOf:
+ - description: Bearer
+ properties:
+ scheme:
+ enum: [bearer]
+
+ - description: Non Bearer
+ not:
+ required: [bearerFormat]
+ properties:
+ scheme:
+ not:
+ enum: [bearer]
+
+ OAuth2SecurityScheme:
+ type: object
+ required:
+ - type
+ - flows
+ properties:
+ type:
+ type: string
+ enum:
+ - oauth2
+ flows:
+ $ref: '#/definitions/OAuthFlows'
+ description:
+ type: string
+ patternProperties:
+ '^x-': {}
+ additionalProperties: false
+
+ OpenIdConnectSecurityScheme:
+ type: object
+ required:
+ - type
+ - openIdConnectUrl
+ properties:
+ type:
+ type: string
+ enum:
+ - openIdConnect
+ openIdConnectUrl:
+ type: string
+ format: uri-reference
+ description:
+ type: string
+ patternProperties:
+ '^x-': {}
+ additionalProperties: false
+
+ OAuthFlows:
+ type: object
+ properties:
+ implicit:
+ $ref: '#/definitions/ImplicitOAuthFlow'
+ password:
+ $ref: '#/definitions/PasswordOAuthFlow'
+ clientCredentials:
+ $ref: '#/definitions/ClientCredentialsFlow'
+ authorizationCode:
+ $ref: '#/definitions/AuthorizationCodeOAuthFlow'
+ patternProperties:
+ '^x-': {}
+ additionalProperties: false
+
+ ImplicitOAuthFlow:
+ type: object
+ required:
+ - authorizationUrl
+ - scopes
+ properties:
+ authorizationUrl:
+ type: string
+ format: uri-reference
+ refreshUrl:
+ type: string
+ format: uri-reference
+ scopes:
+ type: object
+ additionalProperties:
+ type: string
+ patternProperties:
+ '^x-': {}
+ additionalProperties: false
+
+ PasswordOAuthFlow:
+ type: object
+ required:
+ - tokenUrl
+ properties:
+ tokenUrl:
+ type: string
+ format: uri-reference
+ refreshUrl:
+ type: string
+ format: uri-reference
+ scopes:
+ type: object
+ additionalProperties:
+ type: string
+ patternProperties:
+ '^x-': {}
+ additionalProperties: false
+
+ ClientCredentialsFlow:
+ type: object
+ required:
+ - tokenUrl
+ properties:
+ tokenUrl:
+ type: string
+ format: uri-reference
+ refreshUrl:
+ type: string
+ format: uri-reference
+ scopes:
+ type: object
+ additionalProperties:
+ type: string
+ patternProperties:
+ '^x-': {}
+ additionalProperties: false
+
+ AuthorizationCodeOAuthFlow:
+ type: object
+ required:
+ - authorizationUrl
+ - tokenUrl
+ properties:
+ authorizationUrl:
+ type: string
+ format: uri-reference
+ tokenUrl:
+ type: string
+ format: uri-reference
+ refreshUrl:
+ type: string
+ format: uri-reference
+ scopes:
+ type: object
+ additionalProperties:
+ type: string
+ patternProperties:
+ '^x-': {}
+ additionalProperties: false
+
+ Link:
+ type: object
+ properties:
+ operationId:
+ type: string
+ operationRef:
+ type: string
+ format: uri-reference
+ parameters:
+ type: object
+ additionalProperties: {}
+ requestBody: {}
+ description:
+ type: string
+ server:
+ $ref: '#/definitions/Server'
+ patternProperties:
+ '^x-': {}
+ additionalProperties: false
+ not:
+ description: Operation Id and Operation Ref are mutually exclusive
+ required: [operationId, operationRef]
+
+ Callback:
+ type: object
+ additionalProperties:
+ $ref: '#/definitions/PathItem'
+ patternProperties:
+ '^x-': {}
+
+ Encoding:
+ type: object
+ properties:
+ contentType:
+ type: string
+ headers:
+ type: object
+ additionalProperties:
+ $ref: '#/definitions/Header'
+ style:
+ type: string
+ enum:
+ - form
+ - spaceDelimited
+ - pipeDelimited
+ - deepObject
+ explode:
+ type: boolean
+ allowReserved:
+ type: boolean
+ default: false
+ additionalProperties: false
diff --git a/schemas.orig/v3.1/README.md b/schemas.orig/v3.1/README.md
new file mode 100644
index 0000000..01da62b
--- /dev/null
+++ b/schemas.orig/v3.1/README.md
@@ -0,0 +1,41 @@
+# OpenAPI 3.1.X JSON Schema
+
+Here you can find the JSON Schema for validating OpenAPI definitions of versions
+3.1.X.
+
+As a reminder, the JSON Schema is not the source of truth for the Specification.
+In cases of conflicts between the Specification itself and the JSON Schema, the
+Specification wins. Also, some Specification constraints cannot be represented
+with the JSON Schema so it's highly recommended to employ other methods to
+ensure compliance.
+
+The iteration version of the JSON Schema can be found in the `$id` field. For
+example, the value of `$id: https://spec.openapis.org/oas/3.1/schema/2021-03-02`
+means this iteration was created on March 2nd, 2021.
+
+The `schema.yaml` schema doesn't validate the JSON Schemas in your OpenAPI
+document because 3.1 allows you to use any JSON Schema dialect you choose. We
+have also included `schema-base.yaml` that extends the main schema to validate
+that all schemas use the default OAS base vocabulary.
+
+## Contributing
+To submit improvements to the schema, modify the schema.yaml file only.
+
+The TSC will then:
+- Run tests on the updated schema
+- Update the iteration version
+- Convert the schema.yaml to schema.json
+- Publish the new version
+
+## Tests
+The test suite is included as a git submodule of https://github.com/Mermade/openapi3-examples.
+
+```bash
+npx mocha --recursive tests
+```
+
+You can also validate a document individually.
+
+```bash
+scripts/validate.js path/to/document/to/validate.yaml
+```
diff --git a/schemas.orig/v3.1/dialect/base.schema.json b/schemas.orig/v3.1/dialect/base.schema.json
new file mode 100644
index 0000000..d54b0d4
--- /dev/null
+++ b/schemas.orig/v3.1/dialect/base.schema.json
@@ -0,0 +1,21 @@
+{
+ "$id": "https://spec.openapis.org/oas/3.1/dialect/base",
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$vocabulary": {
+ "https://json-schema.org/draft/2020-12/vocab/core": true,
+ "https://json-schema.org/draft/2020-12/vocab/applicator": true,
+ "https://json-schema.org/draft/2020-12/vocab/unevaluated": true,
+ "https://json-schema.org/draft/2020-12/vocab/validation": true,
+ "https://json-schema.org/draft/2020-12/vocab/meta-data": true,
+ "https://json-schema.org/draft/2020-12/vocab/format-annotation": true,
+ "https://json-schema.org/draft/2020-12/vocab/content": true,
+ "https://spec.openapis.org/oas/3.1/vocab/base": false
+ },
+ "$dynamicAnchor": "meta",
+
+ "title": "OpenAPI 3.1 Schema Object Dialect",
+ "allOf": [
+ { "$ref": "https://json-schema.org/draft/2020-12/schema" },
+ { "$ref": "https://spec.openapis.org/oas/3.1/meta/base" }
+ ]
+}
diff --git a/schemas.orig/v3.1/meta/base.schema.json b/schemas.orig/v3.1/meta/base.schema.json
new file mode 100644
index 0000000..f3ee03f
--- /dev/null
+++ b/schemas.orig/v3.1/meta/base.schema.json
@@ -0,0 +1,79 @@
+{
+ "$id": "https://spec.openapis.org/oas/3.1/meta/base",
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$vocabulary": {
+ "https://spec.openapis.org/oas/3.1/vocab/base": true
+ },
+ "$dynamicAnchor": "meta",
+ "title": "OAS Base vocabulary",
+
+ "type": ["object", "boolean"],
+ "properties": {
+ "example": true,
+ "discriminator": { "$ref": "#/$defs/discriminator" },
+ "externalDocs": { "$ref": "#/$defs/external-docs" },
+ "xml": { "$ref": "#/$defs/xml" }
+ },
+ "$defs": {
+ "extensible": {
+ "patternProperties": {
+ "^x-": true
+ }
+ },
+ "discriminator": {
+ "$ref": "#/$defs/extensible",
+ "type": "object",
+ "properties": {
+ "propertyName": {
+ "type": "string"
+ },
+ "mapping": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ },
+ "required": ["propertyName"],
+ "unevaluatedProperties": false
+ },
+ "external-docs": {
+ "$ref": "#/$defs/extensible",
+ "type": "object",
+ "properties": {
+ "url": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "description": {
+ "type": "string"
+ }
+ },
+ "required": ["url"],
+ "unevaluatedProperties": false
+ },
+ "xml": {
+ "$ref": "#/$defs/extensible",
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "namespace": {
+ "type": "string",
+ "format": "uri"
+ },
+ "prefix": {
+ "type": "string"
+ },
+ "attribute": {
+ "type": "boolean"
+ },
+ "wrapped": {
+ "type": "boolean"
+ }
+ },
+ "unevaluatedProperties": false
+ }
+ }
+}
diff --git a/schemas.orig/v3.1/schema-base.json b/schemas.orig/v3.1/schema-base.json
new file mode 100644
index 0000000..658e943
--- /dev/null
+++ b/schemas.orig/v3.1/schema-base.json
@@ -0,0 +1,24 @@
+{
+ "$id": "https://spec.openapis.org/oas/3.1/schema-base/2021-04-15",
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$ref": "https://spec.openapis.org/oas/3.1/schema/2021-04-15",
+ "properties": {
+ "jsonSchemaDialect": {
+ "$ref": "#/$defs/dialect"
+ }
+ },
+ "$defs": {
+ "dialect": {
+ "const": "https://spec.openapis.org/oas/3.1/dialect/base"
+ },
+ "schema": {
+ "$dynamicAnchor": "meta",
+ "$ref\"": "https://spec.openapis.org/oas/3.1/dialect/base",
+ "properties": {
+ "$schema": {
+ "$ref": "#/$defs/dialect"
+ }
+ }
+ }
+ }
+}
diff --git a/schemas.orig/v3.1/schema-base.yaml b/schemas.orig/v3.1/schema-base.yaml
new file mode 100644
index 0000000..515ed08
--- /dev/null
+++ b/schemas.orig/v3.1/schema-base.yaml
@@ -0,0 +1,17 @@
+$id: 'https://spec.openapis.org/oas/3.1/schema-base/2021-04-15'
+$schema: 'https://json-schema.org/draft/2020-12/schema'
+
+$ref: 'https://spec.openapis.org/oas/3.1/schema/2021-04-15'
+properties:
+ jsonSchemaDialect:
+ $ref: '#/$defs/dialect'
+
+$defs:
+ dialect:
+ const: 'https://spec.openapis.org/oas/3.1/dialect/base'
+ schema:
+ $dynamicAnchor: meta
+ $ref": 'https://spec.openapis.org/oas/3.1/dialect/base'
+ properties:
+ $schema:
+ $ref: '#/$defs/dialect'
diff --git a/schemas.orig/v3.1/schema.json b/schemas.orig/v3.1/schema.json
new file mode 100644
index 0000000..a798834
--- /dev/null
+++ b/schemas.orig/v3.1/schema.json
@@ -0,0 +1,1343 @@
+{
+ "$id": "https://spec.openapis.org/oas/3.1/schema/2021-04-15",
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "type": "object",
+ "properties": {
+ "openapi": {
+ "type": "string",
+ "pattern": "^3\\.1\\.\\d+(-.+)?$"
+ },
+ "info": {
+ "$ref": "#/$defs/info"
+ },
+ "jsonSchemaDialect": {
+ "$ref": "#/$defs/uri",
+ "default": "https://spec.openapis.org/oas/3.1/dialect/base"
+ },
+ "servers": {
+ "type": "array",
+ "items": {
+ "$ref": "#/$defs/server"
+ }
+ },
+ "paths": {
+ "$ref": "#/$defs/paths"
+ },
+ "webhooks": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/path-item-or-reference"
+ }
+ },
+ "components": {
+ "$ref": "#/$defs/components"
+ },
+ "security": {
+ "type": "array",
+ "items": {
+ "$ref": "#/$defs/security-requirement"
+ }
+ },
+ "tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/$defs/tag"
+ }
+ },
+ "externalDocs": {
+ "$ref": "#/$defs/external-documentation"
+ }
+ },
+ "required": [
+ "openapi",
+ "info"
+ ],
+ "anyOf": [
+ {
+ "required": [
+ "paths"
+ ]
+ },
+ {
+ "required": [
+ "components"
+ ]
+ },
+ {
+ "required": [
+ "webhooks"
+ ]
+ }
+ ],
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false,
+ "$defs": {
+ "info": {
+ "type": "object",
+ "properties": {
+ "title": {
+ "type": "string"
+ },
+ "summary": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "termsOfService": {
+ "type": "string"
+ },
+ "contact": {
+ "$ref": "#/$defs/contact"
+ },
+ "license": {
+ "$ref": "#/$defs/license"
+ },
+ "version": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "title",
+ "version"
+ ],
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "contact": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ },
+ "email": {
+ "type": "string"
+ }
+ },
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "license": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "identifier": {
+ "type": "string"
+ },
+ "url": {
+ "$ref": "#/$defs/uri"
+ }
+ },
+ "required": [
+ "name"
+ ],
+ "oneOf": [
+ {
+ "required": [
+ "identifier"
+ ]
+ },
+ {
+ "required": [
+ "url"
+ ]
+ }
+ ],
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "server": {
+ "type": "object",
+ "properties": {
+ "url": {
+ "$ref": "#/$defs/uri"
+ },
+ "description": {
+ "type": "string"
+ },
+ "variables": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/server-variable"
+ }
+ }
+ },
+ "required": [
+ "url"
+ ],
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "server-variable": {
+ "type": "object",
+ "properties": {
+ "enum": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "minItems": 1
+ },
+ "default": {
+ "type": "string"
+ },
+ "descriptions": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "default"
+ ],
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "components": {
+ "type": "object",
+ "properties": {
+ "schemas": {
+ "type": "object",
+ "additionalProperties": {
+ "$dynamicRef": "#meta"
+ }
+ },
+ "responses": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/response-or-reference"
+ }
+ },
+ "parameters": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/parameter-or-reference"
+ }
+ },
+ "examples": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/example-or-reference"
+ }
+ },
+ "requestBodies": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/request-body-or-reference"
+ }
+ },
+ "headers": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/header-or-reference"
+ }
+ },
+ "securitySchemes": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/security-scheme-or-reference"
+ }
+ },
+ "links": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/link-or-reference"
+ }
+ },
+ "callbacks": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/callbacks-or-reference"
+ }
+ },
+ "pathItems": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/path-item-or-reference"
+ }
+ }
+ },
+ "patternProperties": {
+ "^(schemas|responses|parameters|examples|requestBodies|headers|securitySchemes|links|callbacks|pathItems)$": {
+ "$comment": "Enumerating all of the property names in the regex above is necessary for unevaluatedProperties to work as expected",
+ "propertyNames": {
+ "pattern": "^[a-zA-Z0-9._-]+$"
+ }
+ }
+ },
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "paths": {
+ "type": "object",
+ "patternProperties": {
+ "^/": {
+ "$ref": "#/$defs/path-item"
+ }
+ },
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "path-item": {
+ "type": "object",
+ "properties": {
+ "summary": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "servers": {
+ "type": "array",
+ "items": {
+ "$ref": "#/$defs/server"
+ }
+ },
+ "parameters": {
+ "type": "array",
+ "items": {
+ "$ref": "#/$defs/parameter-or-reference"
+ }
+ }
+ },
+ "patternProperties": {
+ "^(get|put|post|delete|options|head|patch|trace)$": {
+ "$ref": "#/$defs/operation"
+ }
+ },
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "path-item-or-reference": {
+ "if": {
+ "required": [
+ "$ref"
+ ]
+ },
+ "then": {
+ "$ref": "#/$defs/reference"
+ },
+ "else": {
+ "$ref": "#/$defs/path-item"
+ }
+ },
+ "operation": {
+ "type": "object",
+ "properties": {
+ "tags": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "summary": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "externalDocs": {
+ "$ref": "#/$defs/external-documentation"
+ },
+ "operationId": {
+ "type": "string"
+ },
+ "parameters": {
+ "type": "array",
+ "items": {
+ "$ref": "#/$defs/parameter-or-reference"
+ }
+ },
+ "requestBody": {
+ "$ref": "#/$defs/request-body-or-reference"
+ },
+ "responses": {
+ "$ref": "#/$defs/responses"
+ },
+ "callbacks": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/callbacks-or-reference"
+ }
+ },
+ "deprecated": {
+ "default": false,
+ "type": "boolean"
+ },
+ "security": {
+ "type": "array",
+ "items": {
+ "$ref": "#/$defs/security-requirement"
+ }
+ },
+ "servers": {
+ "type": "array",
+ "items": {
+ "$ref": "#/$defs/server"
+ }
+ }
+ },
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "external-documentation": {
+ "type": "object",
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "url": {
+ "$ref": "#/$defs/uri"
+ }
+ },
+ "required": [
+ "url"
+ ],
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "parameter": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "in": {
+ "enum": [
+ "query",
+ "header",
+ "path",
+ "cookie"
+ ]
+ },
+ "description": {
+ "type": "string"
+ },
+ "required": {
+ "default": false,
+ "type": "boolean"
+ },
+ "deprecated": {
+ "default": false,
+ "type": "boolean"
+ },
+ "allowEmptyValue": {
+ "default": false,
+ "type": "boolean"
+ },
+ "schema": {
+ "$dynamicRef": "#meta"
+ },
+ "content": {
+ "$ref": "#/$defs/content"
+ }
+ },
+ "required": [
+ "in"
+ ],
+ "oneOf": [
+ {
+ "required": [
+ "schema"
+ ]
+ },
+ {
+ "required": [
+ "content"
+ ]
+ }
+ ],
+ "dependentSchemas": {
+ "schema": {
+ "properties": {
+ "style": {
+ "type": "string"
+ },
+ "explode": {
+ "type": "boolean"
+ },
+ "allowReserved": {
+ "default": false,
+ "type": "boolean"
+ }
+ },
+ "allOf": [
+ {
+ "$ref": "#/$defs/examples"
+ },
+ {
+ "$ref": "#/$defs/parameter/dependentSchemas/schema/$defs/styles-for-path"
+ },
+ {
+ "$ref": "#/$defs/parameter/dependentSchemas/schema/$defs/styles-for-header"
+ },
+ {
+ "$ref": "#/$defs/parameter/dependentSchemas/schema/$defs/styles-for-query"
+ },
+ {
+ "$ref": "#/$defs/parameter/dependentSchemas/schema/$defs/styles-for-cookie"
+ },
+ {
+ "$ref": "#/$defs/parameter/dependentSchemas/schema/$defs/styles-for-form"
+ }
+ ],
+ "$defs": {
+ "styles-for-path": {
+ "if": {
+ "properties": {
+ "in": {
+ "const": "path"
+ }
+ },
+ "required": [
+ "in"
+ ]
+ },
+ "then": {
+ "properties": {
+ "style": {
+ "default": "simple",
+ "enum": [
+ "matrix",
+ "label",
+ "simple"
+ ]
+ },
+ "required": {
+ "const": true
+ }
+ },
+ "required": [
+ "required"
+ ]
+ }
+ },
+ "styles-for-header": {
+ "if": {
+ "properties": {
+ "in": {
+ "const": "header"
+ }
+ },
+ "required": [
+ "in"
+ ]
+ },
+ "then": {
+ "properties": {
+ "style": {
+ "default": "simple",
+ "enum": [
+ "simple"
+ ]
+ }
+ }
+ }
+ },
+ "styles-for-query": {
+ "if": {
+ "properties": {
+ "in": {
+ "const": "query"
+ }
+ },
+ "required": [
+ "in"
+ ]
+ },
+ "then": {
+ "properties": {
+ "style": {
+ "default": "form",
+ "enum": [
+ "form",
+ "spaceDelimited",
+ "pipeDelimited",
+ "deepObject"
+ ]
+ }
+ }
+ }
+ },
+ "styles-for-cookie": {
+ "if": {
+ "properties": {
+ "in": {
+ "const": "cookie"
+ }
+ },
+ "required": [
+ "in"
+ ]
+ },
+ "then": {
+ "properties": {
+ "style": {
+ "default": "form",
+ "enum": [
+ "form"
+ ]
+ }
+ }
+ }
+ },
+ "styles-for-form": {
+ "if": {
+ "properties": {
+ "style": {
+ "const": "form"
+ }
+ },
+ "required": [
+ "style"
+ ]
+ },
+ "then": {
+ "properties": {
+ "explode": {
+ "default": true
+ }
+ }
+ },
+ "else": {
+ "properties": {
+ "explode": {
+ "default": false
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "parameter-or-reference": {
+ "if": {
+ "required": [
+ "$ref"
+ ]
+ },
+ "then": {
+ "$ref": "#/$defs/reference"
+ },
+ "else": {
+ "$ref": "#/$defs/parameter"
+ }
+ },
+ "request-body": {
+ "type": "object",
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "content": {
+ "$ref": "#/$defs/content"
+ },
+ "required": {
+ "default": false,
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "content"
+ ],
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "request-body-or-reference": {
+ "if": {
+ "required": [
+ "$ref"
+ ]
+ },
+ "then": {
+ "$ref": "#/$defs/reference"
+ },
+ "else": {
+ "$ref": "#/$defs/request-body"
+ }
+ },
+ "content": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/media-type"
+ },
+ "propertyNames": {
+ "format": "media-range"
+ }
+ },
+ "media-type": {
+ "type": "object",
+ "properties": {
+ "schema": {
+ "$dynamicRef": "#meta"
+ },
+ "encoding": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/encoding"
+ }
+ }
+ },
+ "allOf": [
+ {
+ "$ref": "#/$defs/specification-extensions"
+ },
+ {
+ "$ref": "#/$defs/examples"
+ }
+ ],
+ "unevaluatedProperties": false
+ },
+ "encoding": {
+ "type": "object",
+ "properties": {
+ "contentType": {
+ "type": "string",
+ "format": "media-range"
+ },
+ "headers": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/header-or-reference"
+ }
+ },
+ "style": {
+ "default": "form",
+ "enum": [
+ "form",
+ "spaceDelimited",
+ "pipeDelimited",
+ "deepObject"
+ ]
+ },
+ "explode": {
+ "type": "boolean"
+ },
+ "allowReserved": {
+ "default": false,
+ "type": "boolean"
+ }
+ },
+ "allOf": [
+ {
+ "$ref": "#/$defs/specification-extensions"
+ },
+ {
+ "$ref": "#/$defs/encoding/$defs/explode-default"
+ }
+ ],
+ "unevaluatedProperties": false,
+ "$defs": {
+ "explode-default": {
+ "if": {
+ "properties": {
+ "style": {
+ "const": "form"
+ }
+ },
+ "required": [
+ "style"
+ ]
+ },
+ "then": {
+ "properties": {
+ "explode": {
+ "default": true
+ }
+ }
+ },
+ "else": {
+ "properties": {
+ "explode": {
+ "default": false
+ }
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "type": "object",
+ "properties": {
+ "default": {
+ "$ref": "#/$defs/response-or-reference"
+ }
+ },
+ "patternProperties": {
+ "^[1-5][0-9X]{2}$": {
+ "$ref": "#/$defs/response-or-reference"
+ }
+ },
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "response": {
+ "type": "object",
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "headers": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/header-or-reference"
+ }
+ },
+ "content": {
+ "$ref": "#/$defs/content"
+ },
+ "links": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/link-or-reference"
+ }
+ }
+ },
+ "required": [
+ "description"
+ ],
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "response-or-reference": {
+ "if": {
+ "required": [
+ "$ref"
+ ]
+ },
+ "then": {
+ "$ref": "#/$defs/reference"
+ },
+ "else": {
+ "$ref": "#/$defs/response"
+ }
+ },
+ "callbacks": {
+ "type": "object",
+ "$ref": "#/$defs/specification-extensions",
+ "additionalProperties": {
+ "$ref": "#/$defs/path-item-or-reference"
+ }
+ },
+ "callbacks-or-reference": {
+ "if": {
+ "required": [
+ "$ref"
+ ]
+ },
+ "then": {
+ "$ref": "#/$defs/reference"
+ },
+ "else": {
+ "$ref": "#/$defs/callbacks"
+ }
+ },
+ "example": {
+ "type": "object",
+ "properties": {
+ "summary": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "value": true,
+ "externalValue": {
+ "$ref": "#/$defs/uri"
+ }
+ },
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "example-or-reference": {
+ "if": {
+ "required": [
+ "$ref"
+ ]
+ },
+ "then": {
+ "$ref": "#/$defs/reference"
+ },
+ "else": {
+ "$ref": "#/$defs/example"
+ }
+ },
+ "link": {
+ "type": "object",
+ "properties": {
+ "operationRef": {
+ "$ref": "#/$defs/uri"
+ },
+ "operationId": true,
+ "parameters": {
+ "$ref": "#/$defs/map-of-strings"
+ },
+ "requestBody": true,
+ "description": {
+ "type": "string"
+ },
+ "body": {
+ "$ref": "#/$defs/server"
+ }
+ },
+ "oneOf": [
+ {
+ "required": [
+ "operationRef"
+ ]
+ },
+ {
+ "required": [
+ "operationId"
+ ]
+ }
+ ],
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "link-or-reference": {
+ "if": {
+ "required": [
+ "$ref"
+ ]
+ },
+ "then": {
+ "$ref": "#/$defs/reference"
+ },
+ "else": {
+ "$ref": "#/$defs/link"
+ }
+ },
+ "header": {
+ "type": "object",
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "required": {
+ "default": false,
+ "type": "boolean"
+ },
+ "deprecated": {
+ "default": false,
+ "type": "boolean"
+ },
+ "allowEmptyValue": {
+ "default": false,
+ "type": "boolean"
+ }
+ },
+ "dependentSchemas": {
+ "schema": {
+ "properties": {
+ "style": {
+ "default": "simple",
+ "enum": [
+ "simple"
+ ]
+ },
+ "explode": {
+ "default": false,
+ "type": "boolean"
+ },
+ "allowReserved": {
+ "default": false,
+ "type": "boolean"
+ },
+ "schema": {
+ "$dynamicRef": "#meta"
+ }
+ },
+ "$ref": "#/$defs/examples"
+ },
+ "content": {
+ "properties": {
+ "content": {
+ "$ref": "#/$defs/content"
+ }
+ }
+ }
+ },
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "header-or-reference": {
+ "if": {
+ "required": [
+ "$ref"
+ ]
+ },
+ "then": {
+ "$ref": "#/$defs/reference"
+ },
+ "else": {
+ "$ref": "#/$defs/header"
+ }
+ },
+ "tag": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "externalDocs": {
+ "$ref": "#/$defs/external-documentation"
+ }
+ },
+ "required": [
+ "name"
+ ],
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "reference": {
+ "type": "object",
+ "properties": {
+ "$ref": {
+ "$ref": "#/$defs/uri"
+ },
+ "summary": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ }
+ },
+ "unevaluatedProperties": false
+ },
+ "schema": {
+ "$dynamicAnchor": "meta",
+ "type": [
+ "object",
+ "boolean"
+ ]
+ },
+ "security-scheme": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "enum": [
+ "apiKey",
+ "http",
+ "mutualTLS",
+ "oauth2",
+ "openIdConnect"
+ ]
+ },
+ "description": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "type"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/$defs/specification-extensions"
+ },
+ {
+ "$ref": "#/$defs/security-scheme/$defs/type-apikey"
+ },
+ {
+ "$ref": "#/$defs/security-scheme/$defs/type-http"
+ },
+ {
+ "$ref": "#/$defs/security-scheme/$defs/type-http-bearer"
+ },
+ {
+ "$ref": "#/$defs/security-scheme/$defs/type-oauth2"
+ },
+ {
+ "$ref": "#/$defs/security-scheme/$defs/type-oidc"
+ }
+ ],
+ "unevaluatedProperties": false,
+ "$defs": {
+ "type-apikey": {
+ "if": {
+ "properties": {
+ "type": {
+ "const": "apiKey"
+ }
+ },
+ "required": [
+ "type"
+ ]
+ },
+ "then": {
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "in": {
+ "enum": [
+ "query",
+ "header",
+ "cookie"
+ ]
+ }
+ },
+ "required": [
+ "name",
+ "in"
+ ]
+ }
+ },
+ "type-http": {
+ "if": {
+ "properties": {
+ "type": {
+ "const": "http"
+ }
+ },
+ "required": [
+ "type"
+ ]
+ },
+ "then": {
+ "properties": {
+ "scheme": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "scheme"
+ ]
+ }
+ },
+ "type-http-bearer": {
+ "if": {
+ "properties": {
+ "type": {
+ "const": "http"
+ },
+ "scheme": {
+ "const": "bearer"
+ }
+ },
+ "required": [
+ "type",
+ "scheme"
+ ]
+ },
+ "then": {
+ "properties": {
+ "bearerFormat": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "scheme"
+ ]
+ }
+ },
+ "type-oauth2": {
+ "if": {
+ "properties": {
+ "type": {
+ "const": "oauth2"
+ }
+ },
+ "required": [
+ "type"
+ ]
+ },
+ "then": {
+ "properties": {
+ "flows": {
+ "$ref": "#/$defs/oauth-flows"
+ }
+ },
+ "required": [
+ "flows"
+ ]
+ }
+ },
+ "type-oidc": {
+ "if": {
+ "properties": {
+ "type": {
+ "const": "openIdConnect"
+ }
+ },
+ "required": [
+ "type"
+ ]
+ },
+ "then": {
+ "properties": {
+ "openIdConnectUrl": {
+ "$ref": "#/$defs/uri"
+ }
+ },
+ "required": [
+ "openIdConnectUrl"
+ ]
+ }
+ }
+ }
+ },
+ "security-scheme-or-reference": {
+ "if": {
+ "required": [
+ "$ref"
+ ]
+ },
+ "then": {
+ "$ref": "#/$defs/reference"
+ },
+ "else": {
+ "$ref": "#/$defs/security-scheme"
+ }
+ },
+ "oauth-flows": {
+ "type": "object",
+ "properties": {
+ "implicit": {
+ "$ref": "#/$defs/oauth-flows/$defs/implicit"
+ },
+ "password": {
+ "$ref": "#/$defs/oauth-flows/$defs/password"
+ },
+ "clientCredentials": {
+ "$ref": "#/$defs/oauth-flows/$defs/client-credentials"
+ },
+ "authorizationCode": {
+ "$ref": "#/$defs/oauth-flows/$defs/authorization-code"
+ }
+ },
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false,
+ "$defs": {
+ "implicit": {
+ "type": "object",
+ "properties": {
+ "authorizationUrl": {
+ "type": "string"
+ },
+ "refreshUrl": {
+ "type": "string"
+ },
+ "scopes": {
+ "$ref": "#/$defs/map-of-strings"
+ }
+ },
+ "required": [
+ "authorizationUrl",
+ "scopes"
+ ],
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "password": {
+ "type": "object",
+ "properties": {
+ "tokenUrl": {
+ "type": "string"
+ },
+ "refreshUrl": {
+ "type": "string"
+ },
+ "scopes": {
+ "$ref": "#/$defs/map-of-strings"
+ }
+ },
+ "required": [
+ "tokenUrl",
+ "scopes"
+ ],
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "client-credentials": {
+ "type": "object",
+ "properties": {
+ "tokenUrl": {
+ "type": "string"
+ },
+ "refreshUrl": {
+ "type": "string"
+ },
+ "scopes": {
+ "$ref": "#/$defs/map-of-strings"
+ }
+ },
+ "required": [
+ "tokenUrl",
+ "scopes"
+ ],
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "authorization-code": {
+ "type": "object",
+ "properties": {
+ "authorizationUrl": {
+ "type": "string"
+ },
+ "tokenUrl": {
+ "type": "string"
+ },
+ "refreshUrl": {
+ "type": "string"
+ },
+ "scopes": {
+ "$ref": "#/$defs/map-of-strings"
+ }
+ },
+ "required": [
+ "authorizationUrl",
+ "tokenUrl",
+ "scopes"
+ ],
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ }
+ }
+ },
+ "security-requirement": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "specification-extensions": {
+ "patternProperties": {
+ "^x-": true
+ }
+ },
+ "examples": {
+ "properties": {
+ "example": true,
+ "examples": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/example-or-reference"
+ }
+ }
+ }
+ },
+ "uri": {
+ "type": "string",
+ "format": "uri"
+ },
+ "map-of-strings": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ }
+}
diff --git a/schemas.orig/v3.1/schema.yaml b/schemas.orig/v3.1/schema.yaml
new file mode 100644
index 0000000..86cb44e
--- /dev/null
+++ b/schemas.orig/v3.1/schema.yaml
@@ -0,0 +1,913 @@
+$id: 'https://spec.openapis.org/oas/3.1/schema/2021-04-15'
+$schema: 'https://json-schema.org/draft/2020-12/schema'
+
+type: object
+properties:
+ openapi:
+ type: string
+ pattern: '^3\.1\.\d+(-.+)?$'
+ info:
+ $ref: '#/$defs/info'
+ jsonSchemaDialect:
+ $ref: '#/$defs/uri'
+ default: 'https://spec.openapis.org/oas/3.1/dialect/base'
+ servers:
+ type: array
+ items:
+ $ref: '#/$defs/server'
+ paths:
+ $ref: '#/$defs/paths'
+ webhooks:
+ type: object
+ additionalProperties:
+ $ref: '#/$defs/path-item-or-reference'
+ components:
+ $ref: '#/$defs/components'
+ security:
+ type: array
+ items:
+ $ref: '#/$defs/security-requirement'
+ tags:
+ type: array
+ items:
+ $ref: '#/$defs/tag'
+ externalDocs:
+ $ref: '#/$defs/external-documentation'
+required:
+ - openapi
+ - info
+anyOf:
+ - required:
+ - paths
+ - required:
+ - components
+ - required:
+ - webhooks
+$ref: '#/$defs/specification-extensions'
+unevaluatedProperties: false
+
+$defs:
+ info:
+ type: object
+ properties:
+ title:
+ type: string
+ summary:
+ type: string
+ description:
+ type: string
+ termsOfService:
+ type: string
+ contact:
+ $ref: '#/$defs/contact'
+ license:
+ $ref: '#/$defs/license'
+ version:
+ type: string
+ required:
+ - title
+ - version
+ $ref: '#/$defs/specification-extensions'
+ unevaluatedProperties: false
+
+ contact:
+ type: object
+ properties:
+ name:
+ type: string
+ url:
+ type: string
+ email:
+ type: string
+ $ref: '#/$defs/specification-extensions'
+ unevaluatedProperties: false
+
+ license:
+ type: object
+ properties:
+ name:
+ type: string
+ identifier:
+ type: string
+ url:
+ $ref: '#/$defs/uri'
+ required:
+ - name
+ oneOf:
+ - required:
+ - identifier
+ - required:
+ - url
+ $ref: '#/$defs/specification-extensions'
+ unevaluatedProperties: false
+
+ server:
+ type: object
+ properties:
+ url:
+ $ref: '#/$defs/uri'
+ description:
+ type: string
+ variables:
+ type: object
+ additionalProperties:
+ $ref: '#/$defs/server-variable'
+ required:
+ - url
+ $ref: '#/$defs/specification-extensions'
+ unevaluatedProperties: false
+
+ server-variable:
+ type: object
+ properties:
+ enum:
+ type: array
+ items:
+ type: string
+ minItems: 1
+ default:
+ type: string
+ descriptions:
+ type: string
+ required:
+ - default
+ $ref: '#/$defs/specification-extensions'
+ unevaluatedProperties: false
+
+ components:
+ type: object
+ properties:
+ schemas:
+ type: object
+ additionalProperties:
+ $dynamicRef: '#meta'
+ responses:
+ type: object
+ additionalProperties:
+ $ref: '#/$defs/response-or-reference'
+ parameters:
+ type: object
+ additionalProperties:
+ $ref: '#/$defs/parameter-or-reference'
+ examples:
+ type: object
+ additionalProperties:
+ $ref: '#/$defs/example-or-reference'
+ requestBodies:
+ type: object
+ additionalProperties:
+ $ref: '#/$defs/request-body-or-reference'
+ headers:
+ type: object
+ additionalProperties:
+ $ref: '#/$defs/header-or-reference'
+ securitySchemes:
+ type: object
+ additionalProperties:
+ $ref: '#/$defs/security-scheme-or-reference'
+ links:
+ type: object
+ additionalProperties:
+ $ref: '#/$defs/link-or-reference'
+ callbacks:
+ type: object
+ additionalProperties:
+ $ref: '#/$defs/callbacks-or-reference'
+ pathItems:
+ type: object
+ additionalProperties:
+ $ref: '#/$defs/path-item-or-reference'
+ patternProperties:
+ '^(schemas|responses|parameters|examples|requestBodies|headers|securitySchemes|links|callbacks|pathItems)$':
+ $comment: Enumerating all of the property names in the regex above is necessary for unevaluatedProperties to work as expected
+ propertyNames:
+ pattern: '^[a-zA-Z0-9._-]+$'
+ $ref: '#/$defs/specification-extensions'
+ unevaluatedProperties: false
+
+ paths:
+ type: object
+ patternProperties:
+ '^/':
+ $ref: '#/$defs/path-item'
+ $ref: '#/$defs/specification-extensions'
+ unevaluatedProperties: false
+
+ path-item:
+ type: object
+ properties:
+ summary:
+ type: string
+ description:
+ type: string
+ servers:
+ type: array
+ items:
+ $ref: '#/$defs/server'
+ parameters:
+ type: array
+ items:
+ $ref: '#/$defs/parameter-or-reference'
+ patternProperties:
+ '^(get|put|post|delete|options|head|patch|trace)$':
+ $ref: '#/$defs/operation'
+ $ref: '#/$defs/specification-extensions'
+ unevaluatedProperties: false
+
+ path-item-or-reference:
+ if:
+ required:
+ - $ref
+ then:
+ $ref: '#/$defs/reference'
+ else:
+ $ref: '#/$defs/path-item'
+
+ operation:
+ type: object
+ properties:
+ tags:
+ type: array
+ items:
+ type: string
+ summary:
+ type: string
+ description:
+ type: string
+ externalDocs:
+ $ref: '#/$defs/external-documentation'
+ operationId:
+ type: string
+ parameters:
+ type: array
+ items:
+ $ref: '#/$defs/parameter-or-reference'
+ requestBody:
+ $ref: '#/$defs/request-body-or-reference'
+ responses:
+ $ref: '#/$defs/responses'
+ callbacks:
+ type: object
+ additionalProperties:
+ $ref: '#/$defs/callbacks-or-reference'
+ deprecated:
+ default: false
+ type: boolean
+ security:
+ type: array
+ items:
+ $ref: '#/$defs/security-requirement'
+ servers:
+ type: array
+ items:
+ $ref: '#/$defs/server'
+ $ref: '#/$defs/specification-extensions'
+ unevaluatedProperties: false
+
+ external-documentation:
+ type: object
+ properties:
+ description:
+ type: string
+ url:
+ $ref: '#/$defs/uri'
+ required:
+ - url
+ $ref: '#/$defs/specification-extensions'
+ unevaluatedProperties: false
+
+ parameter:
+ type: object
+ properties:
+ name:
+ type: string
+ in:
+ enum:
+ - query
+ - header
+ - path
+ - cookie
+ description:
+ type: string
+ required:
+ default: false
+ type: boolean
+ deprecated:
+ default: false
+ type: boolean
+ allowEmptyValue:
+ default: false
+ type: boolean
+ schema:
+ $dynamicRef: '#meta'
+ content:
+ $ref: '#/$defs/content'
+ required:
+ - in
+ oneOf:
+ - required:
+ - schema
+ - required:
+ - content
+ dependentSchemas:
+ schema:
+ properties:
+ style:
+ type: string
+ explode:
+ type: boolean
+ allowReserved:
+ default: false
+ type: boolean
+ allOf:
+ - $ref: '#/$defs/examples'
+ - $ref: '#/$defs/parameter/dependentSchemas/schema/$defs/styles-for-path'
+ - $ref: '#/$defs/parameter/dependentSchemas/schema/$defs/styles-for-header'
+ - $ref: '#/$defs/parameter/dependentSchemas/schema/$defs/styles-for-query'
+ - $ref: '#/$defs/parameter/dependentSchemas/schema/$defs/styles-for-cookie'
+ - $ref: '#/$defs/parameter/dependentSchemas/schema/$defs/styles-for-form'
+
+ $defs:
+ styles-for-path:
+ if:
+ properties:
+ in:
+ const: path
+ required:
+ - in
+ then:
+ properties:
+ style:
+ default: simple
+ enum:
+ - matrix
+ - label
+ - simple
+ required:
+ const: true
+ required:
+ - required
+
+ styles-for-header:
+ if:
+ properties:
+ in:
+ const: header
+ required:
+ - in
+ then:
+ properties:
+ style:
+ default: simple
+ enum:
+ - simple
+
+ styles-for-query:
+ if:
+ properties:
+ in:
+ const: query
+ required:
+ - in
+ then:
+ properties:
+ style:
+ default: form
+ enum:
+ - form
+ - spaceDelimited
+ - pipeDelimited
+ - deepObject
+
+ styles-for-cookie:
+ if:
+ properties:
+ in:
+ const: cookie
+ required:
+ - in
+ then:
+ properties:
+ style:
+ default: form
+ enum:
+ - form
+
+ styles-for-form:
+ if:
+ properties:
+ style:
+ const: form
+ required:
+ - style
+ then:
+ properties:
+ explode:
+ default: true
+ else:
+ properties:
+ explode:
+ default: false
+
+ $ref: '#/$defs/specification-extensions'
+ unevaluatedProperties: false
+
+ parameter-or-reference:
+ if:
+ required:
+ - $ref
+ then:
+ $ref: '#/$defs/reference'
+ else:
+ $ref: '#/$defs/parameter'
+
+ request-body:
+ type: object
+ properties:
+ description:
+ type: string
+ content:
+ $ref: '#/$defs/content'
+ required:
+ default: false
+ type: boolean
+ required:
+ - content
+ $ref: '#/$defs/specification-extensions'
+ unevaluatedProperties: false
+
+ request-body-or-reference:
+ if:
+ required:
+ - $ref
+ then:
+ $ref: '#/$defs/reference'
+ else:
+ $ref: '#/$defs/request-body'
+
+ content:
+ type: object
+ additionalProperties:
+ $ref: '#/$defs/media-type'
+ propertyNames:
+ format: media-range
+
+ media-type:
+ type: object
+ properties:
+ schema:
+ $dynamicRef: '#meta'
+ encoding:
+ type: object
+ additionalProperties:
+ $ref: '#/$defs/encoding'
+ allOf:
+ - $ref: '#/$defs/specification-extensions'
+ - $ref: '#/$defs/examples'
+ unevaluatedProperties: false
+
+ encoding:
+ type: object
+ properties:
+ contentType:
+ type: string
+ format: media-range
+ headers:
+ type: object
+ additionalProperties:
+ $ref: '#/$defs/header-or-reference'
+ style:
+ default: form
+ enum:
+ - form
+ - spaceDelimited
+ - pipeDelimited
+ - deepObject
+ explode:
+ type: boolean
+ allowReserved:
+ default: false
+ type: boolean
+ allOf:
+ - $ref: '#/$defs/specification-extensions'
+ - $ref: '#/$defs/encoding/$defs/explode-default'
+ unevaluatedProperties: false
+
+ $defs:
+ explode-default:
+ if:
+ properties:
+ style:
+ const: form
+ required:
+ - style
+ then:
+ properties:
+ explode:
+ default: true
+ else:
+ properties:
+ explode:
+ default: false
+
+ responses:
+ type: object
+ properties:
+ default:
+ $ref: '#/$defs/response-or-reference'
+ patternProperties:
+ '^[1-5][0-9X]{2}$':
+ $ref: '#/$defs/response-or-reference'
+ $ref: '#/$defs/specification-extensions'
+ unevaluatedProperties: false
+
+ response:
+ type: object
+ properties:
+ description:
+ type: string
+ headers:
+ type: object
+ additionalProperties:
+ $ref: '#/$defs/header-or-reference'
+ content:
+ $ref: '#/$defs/content'
+ links:
+ type: object
+ additionalProperties:
+ $ref: '#/$defs/link-or-reference'
+ required:
+ - description
+ $ref: '#/$defs/specification-extensions'
+ unevaluatedProperties: false
+
+ response-or-reference:
+ if:
+ required:
+ - $ref
+ then:
+ $ref: '#/$defs/reference'
+ else:
+ $ref: '#/$defs/response'
+
+ callbacks:
+ type: object
+ $ref: '#/$defs/specification-extensions'
+ additionalProperties:
+ $ref: '#/$defs/path-item-or-reference'
+
+ callbacks-or-reference:
+ if:
+ required:
+ - $ref
+ then:
+ $ref: '#/$defs/reference'
+ else:
+ $ref: '#/$defs/callbacks'
+
+ example:
+ type: object
+ properties:
+ summary:
+ type: string
+ description:
+ type: string
+ value: true
+ externalValue:
+ $ref: '#/$defs/uri'
+ $ref: '#/$defs/specification-extensions'
+ unevaluatedProperties: false
+
+ example-or-reference:
+ if:
+ required:
+ - $ref
+ then:
+ $ref: '#/$defs/reference'
+ else:
+ $ref: '#/$defs/example'
+
+ link:
+ type: object
+ properties:
+ operationRef:
+ $ref: '#/$defs/uri'
+ operationId: true
+ parameters:
+ $ref: '#/$defs/map-of-strings'
+ requestBody: true
+ description:
+ type: string
+ body:
+ $ref: '#/$defs/server'
+ oneOf:
+ - required:
+ - operationRef
+ - required:
+ - operationId
+ $ref: '#/$defs/specification-extensions'
+ unevaluatedProperties: false
+
+ link-or-reference:
+ if:
+ required:
+ - $ref
+ then:
+ $ref: '#/$defs/reference'
+ else:
+ $ref: '#/$defs/link'
+
+ header:
+ type: object
+ properties:
+ description:
+ type: string
+ required:
+ default: false
+ type: boolean
+ deprecated:
+ default: false
+ type: boolean
+ allowEmptyValue:
+ default: false
+ type: boolean
+ dependentSchemas:
+ schema:
+ properties:
+ style:
+ default: simple
+ enum:
+ - simple
+ explode:
+ default: false
+ type: boolean
+ allowReserved:
+ default: false
+ type: boolean
+ schema:
+ $dynamicRef: '#meta'
+ $ref: '#/$defs/examples'
+ content:
+ properties:
+ content:
+ $ref: '#/$defs/content'
+ $ref: '#/$defs/specification-extensions'
+ unevaluatedProperties: false
+
+ header-or-reference:
+ if:
+ required:
+ - $ref
+ then:
+ $ref: '#/$defs/reference'
+ else:
+ $ref: '#/$defs/header'
+
+ tag:
+ type: object
+ properties:
+ name:
+ type: string
+ description:
+ type: string
+ externalDocs:
+ $ref: '#/$defs/external-documentation'
+ required:
+ - name
+ $ref: '#/$defs/specification-extensions'
+ unevaluatedProperties: false
+
+ reference:
+ type: object
+ properties:
+ $ref:
+ $ref: '#/$defs/uri'
+ summary:
+ type: string
+ description:
+ type: string
+ unevaluatedProperties: false
+
+ schema:
+ $dynamicAnchor: meta
+ type:
+ - object
+ - boolean
+
+ security-scheme:
+ type: object
+ properties:
+ type:
+ enum:
+ - apiKey
+ - http
+ - mutualTLS
+ - oauth2
+ - openIdConnect
+ description:
+ type: string
+ required:
+ - type
+ allOf:
+ - $ref: '#/$defs/specification-extensions'
+ - $ref: '#/$defs/security-scheme/$defs/type-apikey'
+ - $ref: '#/$defs/security-scheme/$defs/type-http'
+ - $ref: '#/$defs/security-scheme/$defs/type-http-bearer'
+ - $ref: '#/$defs/security-scheme/$defs/type-oauth2'
+ - $ref: '#/$defs/security-scheme/$defs/type-oidc'
+ unevaluatedProperties: false
+
+ $defs:
+ type-apikey:
+ if:
+ properties:
+ type:
+ const: apiKey
+ required:
+ - type
+ then:
+ properties:
+ name:
+ type: string
+ in:
+ enum:
+ - query
+ - header
+ - cookie
+ required:
+ - name
+ - in
+
+ type-http:
+ if:
+ properties:
+ type:
+ const: http
+ required:
+ - type
+ then:
+ properties:
+ scheme:
+ type: string
+ required:
+ - scheme
+
+ type-http-bearer:
+ if:
+ properties:
+ type:
+ const: http
+ scheme:
+ const: bearer
+ required:
+ - type
+ - scheme
+ then:
+ properties:
+ bearerFormat:
+ type: string
+ required:
+ - scheme
+
+ type-oauth2:
+ if:
+ properties:
+ type:
+ const: oauth2
+ required:
+ - type
+ then:
+ properties:
+ flows:
+ $ref: '#/$defs/oauth-flows'
+ required:
+ - flows
+
+ type-oidc:
+ if:
+ properties:
+ type:
+ const: openIdConnect
+ required:
+ - type
+ then:
+ properties:
+ openIdConnectUrl:
+ $ref: '#/$defs/uri'
+ required:
+ - openIdConnectUrl
+
+ security-scheme-or-reference:
+ if:
+ required:
+ - $ref
+ then:
+ $ref: '#/$defs/reference'
+ else:
+ $ref: '#/$defs/security-scheme'
+
+ oauth-flows:
+ type: object
+ properties:
+ implicit:
+ $ref: '#/$defs/oauth-flows/$defs/implicit'
+ password:
+ $ref: '#/$defs/oauth-flows/$defs/password'
+ clientCredentials:
+ $ref: '#/$defs/oauth-flows/$defs/client-credentials'
+ authorizationCode:
+ $ref: '#/$defs/oauth-flows/$defs/authorization-code'
+ $ref: '#/$defs/specification-extensions'
+ unevaluatedProperties: false
+
+ $defs:
+ implicit:
+ type: object
+ properties:
+ authorizationUrl:
+ type: string
+ refreshUrl:
+ type: string
+ scopes:
+ $ref: '#/$defs/map-of-strings'
+ required:
+ - authorizationUrl
+ - scopes
+ $ref: '#/$defs/specification-extensions'
+ unevaluatedProperties: false
+
+ password:
+ type: object
+ properties:
+ tokenUrl:
+ type: string
+ refreshUrl:
+ type: string
+ scopes:
+ $ref: '#/$defs/map-of-strings'
+ required:
+ - tokenUrl
+ - scopes
+ $ref: '#/$defs/specification-extensions'
+ unevaluatedProperties: false
+
+ client-credentials:
+ type: object
+ properties:
+ tokenUrl:
+ type: string
+ refreshUrl:
+ type: string
+ scopes:
+ $ref: '#/$defs/map-of-strings'
+ required:
+ - tokenUrl
+ - scopes
+ $ref: '#/$defs/specification-extensions'
+ unevaluatedProperties: false
+
+ authorization-code:
+ type: object
+ properties:
+ authorizationUrl:
+ type: string
+ tokenUrl:
+ type: string
+ refreshUrl:
+ type: string
+ scopes:
+ $ref: '#/$defs/map-of-strings'
+ required:
+ - authorizationUrl
+ - tokenUrl
+ - scopes
+ $ref: '#/$defs/specification-extensions'
+ unevaluatedProperties: false
+
+ security-requirement:
+ type: object
+ additionalProperties:
+ type: array
+ items:
+ type: string
+
+ specification-extensions:
+ patternProperties:
+ '^x-': true
+
+ examples:
+ properties:
+ example: true
+ examples:
+ type: object
+ additionalProperties:
+ $ref: '#/$defs/example-or-reference'
+
+ uri:
+ type: string
+ format: uri
+
+ map-of-strings:
+ type: object
+ additionalProperties:
+ type: string
diff --git a/schemas/v2.0/schema.json b/schemas/v2.0/schema.json
new file mode 100644
index 0000000..8376437
--- /dev/null
+++ b/schemas/v2.0/schema.json
@@ -0,0 +1,1569 @@
+{
+ "title": "A JSON Schema for Swagger 2.0 API.",
+ "$id": "http://swagger.io/v2/schema.json#",
+ "$schema": "http://json-schema.org/draft-07/schema",
+ "type": "object",
+ "required": [
+ "swagger",
+ "info",
+ "paths"
+ ],
+ "additionalProperties": false,
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ },
+ "properties": {
+ "swagger": {
+ "type": "string",
+ "const": "2.0",
+ "description": "The Swagger version of this document."
+ },
+ "info": {
+ "$ref": "#/definitions/info"
+ },
+ "host": {
+ "type": "string",
+ "pattern": "^[^{}/ :\\\\]+(?::\\d+)?$",
+ "description": "The host (name or ip) of the API. Example: 'swagger.io'"
+ },
+ "basePath": {
+ "type": "string",
+ "pattern": "^/",
+ "description": "The base path to the API. Example: '/api'."
+ },
+ "schemes": {
+ "$ref": "#/definitions/schemesList"
+ },
+ "consumes": {
+ "description": "A list of MIME types accepted by the API.",
+ "allOf": [
+ {
+ "$ref": "#/definitions/mediaTypeList"
+ }
+ ]
+ },
+ "produces": {
+ "description": "A list of MIME types the API can produce.",
+ "allOf": [
+ {
+ "$ref": "#/definitions/mediaTypeList"
+ }
+ ]
+ },
+ "paths": {
+ "$ref": "#/definitions/paths"
+ },
+ "definitions": {
+ "$ref": "#/definitions/definitions"
+ },
+ "parameters": {
+ "$ref": "#/definitions/parameterDefinitions"
+ },
+ "responses": {
+ "$ref": "#/definitions/responseDefinitions"
+ },
+ "security": {
+ "$ref": "#/definitions/security"
+ },
+ "securityDefinitions": {
+ "$ref": "#/definitions/securityDefinitions"
+ },
+ "tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/tag"
+ },
+ "uniqueItems": true
+ },
+ "externalDocs": {
+ "$ref": "#/definitions/externalDocs"
+ }
+ },
+ "definitions": {
+ "info": {
+ "type": "object",
+ "description": "General information about the API.",
+ "required": [
+ "version",
+ "title"
+ ],
+ "additionalProperties": false,
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ },
+ "properties": {
+ "title": {
+ "type": "string",
+ "description": "A unique and precise title of the API."
+ },
+ "version": {
+ "type": "string",
+ "description": "A semantic version number of the API."
+ },
+ "description": {
+ "type": "string",
+ "description": "A longer description of the API. Should be different from the title. GitHub Flavored Markdown is allowed."
+ },
+ "termsOfService": {
+ "type": "string",
+ "description": "The terms of service for the API."
+ },
+ "contact": {
+ "$ref": "#/definitions/contact"
+ },
+ "license": {
+ "$ref": "#/definitions/license"
+ }
+ }
+ },
+ "contact": {
+ "type": "object",
+ "description": "Contact information for the owners of the API.",
+ "additionalProperties": false,
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "The identifying name of the contact person/organization."
+ },
+ "url": {
+ "type": "string",
+ "description": "The URL pointing to the contact information.",
+ "format": "uri"
+ },
+ "email": {
+ "type": "string",
+ "description": "The email address of the contact person/organization.",
+ "format": "email"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ }
+ },
+ "license": {
+ "type": "object",
+ "required": [
+ "name"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "The name of the license type. It's encouraged to use an OSI compatible license."
+ },
+ "url": {
+ "type": "string",
+ "description": "The URL pointing to the license.",
+ "format": "uri"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ }
+ },
+ "paths": {
+ "type": "object",
+ "description": "Relative paths to the individual endpoints. They must be relative to the 'basePath'.",
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ },
+ "^/": {
+ "$ref": "#/definitions/pathItem"
+ }
+ },
+ "additionalProperties": false
+ },
+ "definitions": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/schema"
+ },
+ "description": "One or more JSON objects describing the schemas being consumed and produced by the API."
+ },
+ "parameterDefinitions": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/parameter"
+ },
+ "description": "One or more JSON representations for parameters"
+ },
+ "responseDefinitions": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/response"
+ },
+ "description": "One or more JSON representations for responses"
+ },
+ "externalDocs": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "information about external documentation",
+ "required": [
+ "url"
+ ],
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string",
+ "format": "uri"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ }
+ },
+ "examples": {
+ "type": "object",
+ "additionalProperties": true
+ },
+ "mimeType": {
+ "type": "string",
+ "description": "The MIME type of the HTTP message."
+ },
+ "operation": {
+ "type": "object",
+ "required": [
+ "responses"
+ ],
+ "additionalProperties": false,
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ },
+ "properties": {
+ "tags": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "uniqueItems": true
+ },
+ "summary": {
+ "type": "string",
+ "description": "A brief summary of the operation."
+ },
+ "description": {
+ "type": "string",
+ "description": "A longer description of the operation, GitHub Flavored Markdown is allowed."
+ },
+ "externalDocs": {
+ "$ref": "#/definitions/externalDocs"
+ },
+ "operationId": {
+ "type": "string",
+ "description": "A unique identifier of the operation."
+ },
+ "produces": {
+ "description": "A list of MIME types the API can produce.",
+ "allOf": [
+ {
+ "$ref": "#/definitions/mediaTypeList"
+ }
+ ]
+ },
+ "consumes": {
+ "description": "A list of MIME types the API can consume.",
+ "allOf": [
+ {
+ "$ref": "#/definitions/mediaTypeList"
+ }
+ ]
+ },
+ "parameters": {
+ "$ref": "#/definitions/parametersList"
+ },
+ "responses": {
+ "$ref": "#/definitions/responses"
+ },
+ "schemes": {
+ "$ref": "#/definitions/schemesList"
+ },
+ "deprecated": {
+ "type": "boolean",
+ "default": false
+ },
+ "security": {
+ "$ref": "#/definitions/security"
+ }
+ }
+ },
+ "pathItem": {
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ },
+ "properties": {
+ "$ref": {
+ "type": "string"
+ },
+ "get": {
+ "$ref": "#/definitions/operation"
+ },
+ "put": {
+ "$ref": "#/definitions/operation"
+ },
+ "post": {
+ "$ref": "#/definitions/operation"
+ },
+ "delete": {
+ "$ref": "#/definitions/operation"
+ },
+ "options": {
+ "$ref": "#/definitions/operation"
+ },
+ "head": {
+ "$ref": "#/definitions/operation"
+ },
+ "patch": {
+ "$ref": "#/definitions/operation"
+ },
+ "parameters": {
+ "$ref": "#/definitions/parametersList"
+ }
+ }
+ },
+ "responses": {
+ "type": "object",
+ "description": "Response objects names can either be any valid HTTP status code or 'default'.",
+ "minProperties": 1,
+ "additionalProperties": false,
+ "patternProperties": {
+ "^([0-9]{3})$|^(default)$": {
+ "$ref": "#/definitions/responseValue"
+ },
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ },
+ "not": {
+ "type": "object",
+ "additionalProperties": false,
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ }
+ }
+ },
+ "responseValue": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/response"
+ },
+ {
+ "$ref": "#/definitions/jsonReference"
+ }
+ ]
+ },
+ "response": {
+ "type": "object",
+ "required": [
+ "description"
+ ],
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "schema": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/schema"
+ },
+ {
+ "$ref": "#/definitions/fileSchema"
+ }
+ ]
+ },
+ "headers": {
+ "$ref": "#/definitions/headers"
+ },
+ "examples": {
+ "$ref": "#/definitions/examples"
+ }
+ },
+ "additionalProperties": false,
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ }
+ },
+ "headers": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/header"
+ }
+ },
+ "header": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "type"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "string",
+ "number",
+ "integer",
+ "boolean",
+ "array"
+ ]
+ },
+ "format": {
+ "type": "string"
+ },
+ "items": {
+ "$ref": "#/definitions/primitivesItems"
+ },
+ "collectionFormat": {
+ "$ref": "#/definitions/collectionFormat"
+ },
+ "default": {
+ "$ref": "#/definitions/default"
+ },
+ "maximum": {
+ "$ref": "#/definitions/maximum"
+ },
+ "exclusiveMaximum": {
+ "$ref": "#/definitions/exclusiveMaximum"
+ },
+ "minimum": {
+ "$ref": "#/definitions/minimum"
+ },
+ "exclusiveMinimum": {
+ "$ref": "#/definitions/exclusiveMinimum"
+ },
+ "maxLength": {
+ "$ref": "#/definitions/maxLength"
+ },
+ "minLength": {
+ "$ref": "#/definitions/minLength"
+ },
+ "pattern": {
+ "$ref": "#/definitions/pattern"
+ },
+ "maxItems": {
+ "$ref": "#/definitions/maxItems"
+ },
+ "minItems": {
+ "$ref": "#/definitions/minItems"
+ },
+ "uniqueItems": {
+ "$ref": "#/definitions/uniqueItems"
+ },
+ "enum": {
+ "$ref": "#/definitions/enum"
+ },
+ "multipleOf": {
+ "$ref": "#/definitions/multipleOf"
+ },
+ "description": {
+ "type": "string"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ }
+ },
+ "vendorExtension": {
+ "description": "Any property starting with x- is valid."
+ },
+ "bodyParameter": {
+ "type": "object",
+ "required": [
+ "name",
+ "in",
+ "schema"
+ ],
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ },
+ "properties": {
+ "description": {
+ "type": "string",
+ "description": "A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed."
+ },
+ "name": {
+ "type": "string",
+ "description": "The name of the parameter."
+ },
+ "in": {
+ "type": "string",
+ "description": "Determines the location of the parameter.",
+ "const": "body"
+ },
+ "required": {
+ "type": "boolean",
+ "description": "Determines whether or not this parameter is required or optional.",
+ "default": false
+ },
+ "schema": {
+ "$ref": "#/definitions/schema"
+ }
+ },
+ "additionalProperties": false
+ },
+ "headerParameterSubSchema": {
+ "additionalProperties": false,
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ },
+ "properties": {
+ "required": {
+ "type": "boolean",
+ "description": "Determines whether or not this parameter is required or optional.",
+ "default": false
+ },
+ "in": {
+ "type": "string",
+ "description": "Determines the location of the parameter.",
+ "const": "header"
+ },
+ "description": {
+ "type": "string",
+ "description": "A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed."
+ },
+ "name": {
+ "type": "string",
+ "description": "The name of the parameter."
+ },
+ "type": {
+ "type": "string",
+ "enum": [
+ "string",
+ "number",
+ "boolean",
+ "integer",
+ "array"
+ ]
+ },
+ "format": {
+ "type": "string"
+ },
+ "items": {
+ "$ref": "#/definitions/primitivesItems"
+ },
+ "collectionFormat": {
+ "$ref": "#/definitions/collectionFormat"
+ },
+ "default": {
+ "$ref": "#/definitions/default"
+ },
+ "maximum": {
+ "$ref": "#/definitions/maximum"
+ },
+ "exclusiveMaximum": {
+ "$ref": "#/definitions/exclusiveMaximum"
+ },
+ "minimum": {
+ "$ref": "#/definitions/minimum"
+ },
+ "exclusiveMinimum": {
+ "$ref": "#/definitions/exclusiveMinimum"
+ },
+ "maxLength": {
+ "$ref": "#/definitions/maxLength"
+ },
+ "minLength": {
+ "$ref": "#/definitions/minLength"
+ },
+ "pattern": {
+ "$ref": "#/definitions/pattern"
+ },
+ "maxItems": {
+ "$ref": "#/definitions/maxItems"
+ },
+ "minItems": {
+ "$ref": "#/definitions/minItems"
+ },
+ "uniqueItems": {
+ "$ref": "#/definitions/uniqueItems"
+ },
+ "enum": {
+ "$ref": "#/definitions/enum"
+ },
+ "multipleOf": {
+ "$ref": "#/definitions/multipleOf"
+ }
+ }
+ },
+ "queryParameterSubSchema": {
+ "additionalProperties": false,
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ },
+ "properties": {
+ "required": {
+ "type": "boolean",
+ "description": "Determines whether or not this parameter is required or optional.",
+ "default": false
+ },
+ "in": {
+ "type": "string",
+ "description": "Determines the location of the parameter.",
+ "const": "query"
+ },
+ "description": {
+ "type": "string",
+ "description": "A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed."
+ },
+ "name": {
+ "type": "string",
+ "description": "The name of the parameter."
+ },
+ "allowEmptyValue": {
+ "type": "boolean",
+ "default": false,
+ "description": "allows sending a parameter by name only or with an empty value."
+ },
+ "type": {
+ "type": "string",
+ "enum": [
+ "string",
+ "number",
+ "boolean",
+ "integer",
+ "array"
+ ]
+ },
+ "format": {
+ "type": "string"
+ },
+ "items": {
+ "$ref": "#/definitions/primitivesItems"
+ },
+ "collectionFormat": {
+ "$ref": "#/definitions/collectionFormatWithMulti"
+ },
+ "default": {
+ "$ref": "#/definitions/default"
+ },
+ "maximum": {
+ "$ref": "#/definitions/maximum"
+ },
+ "exclusiveMaximum": {
+ "$ref": "#/definitions/exclusiveMaximum"
+ },
+ "minimum": {
+ "$ref": "#/definitions/minimum"
+ },
+ "exclusiveMinimum": {
+ "$ref": "#/definitions/exclusiveMinimum"
+ },
+ "maxLength": {
+ "$ref": "#/definitions/maxLength"
+ },
+ "minLength": {
+ "$ref": "#/definitions/minLength"
+ },
+ "pattern": {
+ "$ref": "#/definitions/pattern"
+ },
+ "maxItems": {
+ "$ref": "#/definitions/maxItems"
+ },
+ "minItems": {
+ "$ref": "#/definitions/minItems"
+ },
+ "uniqueItems": {
+ "$ref": "#/definitions/uniqueItems"
+ },
+ "enum": {
+ "$ref": "#/definitions/enum"
+ },
+ "multipleOf": {
+ "$ref": "#/definitions/multipleOf"
+ }
+ }
+ },
+ "formDataParameterSubSchema": {
+ "additionalProperties": false,
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ },
+ "properties": {
+ "required": {
+ "type": "boolean",
+ "description": "Determines whether or not this parameter is required or optional.",
+ "default": false
+ },
+ "in": {
+ "type": "string",
+ "description": "Determines the location of the parameter.",
+ "const": "formData"
+ },
+ "description": {
+ "type": "string",
+ "description": "A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed."
+ },
+ "name": {
+ "type": "string",
+ "description": "The name of the parameter."
+ },
+ "allowEmptyValue": {
+ "type": "boolean",
+ "default": false,
+ "description": "allows sending a parameter by name only or with an empty value."
+ },
+ "type": {
+ "type": "string",
+ "enum": [
+ "string",
+ "number",
+ "boolean",
+ "integer",
+ "array",
+ "file"
+ ]
+ },
+ "format": {
+ "type": "string"
+ },
+ "items": {
+ "$ref": "#/definitions/primitivesItems"
+ },
+ "collectionFormat": {
+ "$ref": "#/definitions/collectionFormatWithMulti"
+ },
+ "default": {
+ "$ref": "#/definitions/default"
+ },
+ "maximum": {
+ "$ref": "#/definitions/maximum"
+ },
+ "exclusiveMaximum": {
+ "$ref": "#/definitions/exclusiveMaximum"
+ },
+ "minimum": {
+ "$ref": "#/definitions/minimum"
+ },
+ "exclusiveMinimum": {
+ "$ref": "#/definitions/exclusiveMinimum"
+ },
+ "maxLength": {
+ "$ref": "#/definitions/maxLength"
+ },
+ "minLength": {
+ "$ref": "#/definitions/minLength"
+ },
+ "pattern": {
+ "$ref": "#/definitions/pattern"
+ },
+ "maxItems": {
+ "$ref": "#/definitions/maxItems"
+ },
+ "minItems": {
+ "$ref": "#/definitions/minItems"
+ },
+ "uniqueItems": {
+ "$ref": "#/definitions/uniqueItems"
+ },
+ "enum": {
+ "$ref": "#/definitions/enum"
+ },
+ "multipleOf": {
+ "$ref": "#/definitions/multipleOf"
+ }
+ }
+ },
+ "pathParameterSubSchema": {
+ "additionalProperties": false,
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ },
+ "required": [
+ "required"
+ ],
+ "properties": {
+ "required": {
+ "type": "boolean",
+ "const": true,
+ "description": "Determines whether or not this parameter is required or optional."
+ },
+ "in": {
+ "type": "string",
+ "description": "Determines the location of the parameter.",
+ "const": "path"
+ },
+ "description": {
+ "type": "string",
+ "description": "A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed."
+ },
+ "name": {
+ "type": "string",
+ "description": "The name of the parameter."
+ },
+ "type": {
+ "type": "string",
+ "enum": [
+ "string",
+ "number",
+ "boolean",
+ "integer",
+ "array"
+ ]
+ },
+ "format": {
+ "type": "string"
+ },
+ "items": {
+ "$ref": "#/definitions/primitivesItems"
+ },
+ "collectionFormat": {
+ "$ref": "#/definitions/collectionFormat"
+ },
+ "default": {
+ "$ref": "#/definitions/default"
+ },
+ "maximum": {
+ "$ref": "#/definitions/maximum"
+ },
+ "exclusiveMaximum": {
+ "$ref": "#/definitions/exclusiveMaximum"
+ },
+ "minimum": {
+ "$ref": "#/definitions/minimum"
+ },
+ "exclusiveMinimum": {
+ "$ref": "#/definitions/exclusiveMinimum"
+ },
+ "maxLength": {
+ "$ref": "#/definitions/maxLength"
+ },
+ "minLength": {
+ "$ref": "#/definitions/minLength"
+ },
+ "pattern": {
+ "$ref": "#/definitions/pattern"
+ },
+ "maxItems": {
+ "$ref": "#/definitions/maxItems"
+ },
+ "minItems": {
+ "$ref": "#/definitions/minItems"
+ },
+ "uniqueItems": {
+ "$ref": "#/definitions/uniqueItems"
+ },
+ "enum": {
+ "$ref": "#/definitions/enum"
+ },
+ "multipleOf": {
+ "$ref": "#/definitions/multipleOf"
+ }
+ }
+ },
+ "nonBodyParameter": {
+ "type": "object",
+ "required": [
+ "name",
+ "in",
+ "type"
+ ],
+ "oneOf": [
+ {
+ "$ref": "#/definitions/headerParameterSubSchema"
+ },
+ {
+ "$ref": "#/definitions/formDataParameterSubSchema"
+ },
+ {
+ "$ref": "#/definitions/queryParameterSubSchema"
+ },
+ {
+ "$ref": "#/definitions/pathParameterSubSchema"
+ }
+ ]
+ },
+ "parameter": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/bodyParameter"
+ },
+ {
+ "$ref": "#/definitions/nonBodyParameter"
+ }
+ ]
+ },
+ "schema": {
+ "type": "object",
+ "description": "A deterministic version of a JSON Schema object.",
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ },
+ "properties": {
+ "$ref": {
+ "type": "string"
+ },
+ "format": {
+ "type": "string"
+ },
+ "title": {
+ "$ref": "http://json-schema.org/draft-07/schema#/properties/title"
+ },
+ "description": {
+ "$ref": "http://json-schema.org/draft-07/schema#/properties/description"
+ },
+ "default": {
+ "$ref": "http://json-schema.org/draft-07/schema#/properties/default"
+ },
+ "multipleOf": {
+ "$ref": "http://json-schema.org/draft-07/schema#/properties/multipleOf"
+ },
+ "maximum": {
+ "$ref": "http://json-schema.org/draft-07/schema#/properties/maximum"
+ },
+ "exclusiveMaximum": {
+ "$ref": "http://json-schema.org/draft-07/schema#/properties/exclusiveMaximum"
+ },
+ "minimum": {
+ "$ref": "http://json-schema.org/draft-07/schema#/properties/minimum"
+ },
+ "exclusiveMinimum": {
+ "$ref": "http://json-schema.org/draft-07/schema#/properties/exclusiveMinimum"
+ },
+ "maxLength": {
+ "$ref": "http://json-schema.org/draft-07/schema#/definitions/nonNegativeInteger"
+ },
+ "minLength": {
+ "$ref": "http://json-schema.org/draft-07/schema#/definitions/nonNegativeIntegerDefault0"
+ },
+ "pattern": {
+ "$ref": "http://json-schema.org/draft-07/schema#/properties/pattern"
+ },
+ "maxItems": {
+ "$ref": "http://json-schema.org/draft-07/schema#/definitions/nonNegativeInteger"
+ },
+ "minItems": {
+ "$ref": "http://json-schema.org/draft-07/schema#/definitions/nonNegativeIntegerDefault0"
+ },
+ "uniqueItems": {
+ "$ref": "http://json-schema.org/draft-07/schema#/properties/uniqueItems"
+ },
+ "maxProperties": {
+ "$ref": "http://json-schema.org/draft-07/schema#/definitions/nonNegativeInteger"
+ },
+ "minProperties": {
+ "$ref": "http://json-schema.org/draft-07/schema#/definitions/nonNegativeIntegerDefault0"
+ },
+ "required": {
+ "$ref": "http://json-schema.org/draft-07/schema#/definitions/stringArray"
+ },
+ "enum": {
+ "$ref": "http://json-schema.org/draft-07/schema#/properties/enum"
+ },
+ "additionalProperties": {
+ "anyOf": [
+ {
+ "$ref": "#/definitions/schema"
+ },
+ {
+ "type": "boolean"
+ }
+ ],
+ "default": {}
+ },
+ "type": {
+ "$ref": "http://json-schema.org/draft-07/schema#/properties/type"
+ },
+ "items": {
+ "anyOf": [
+ {
+ "$ref": "#/definitions/schema"
+ },
+ {
+ "type": "array",
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/schema"
+ }
+ }
+ ],
+ "default": {}
+ },
+ "allOf": {
+ "type": "array",
+ "minItems": 1,
+ "items": {
+ "$ref": "#/definitions/schema"
+ }
+ },
+ "properties": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/schema"
+ },
+ "default": {}
+ },
+ "discriminator": {
+ "type": "string"
+ },
+ "readOnly": {
+ "type": "boolean",
+ "default": false
+ },
+ "xml": {
+ "$ref": "#/definitions/xml"
+ },
+ "externalDocs": {
+ "$ref": "#/definitions/externalDocs"
+ },
+ "example": true
+ },
+ "additionalProperties": false
+ },
+ "fileSchema": {
+ "type": "object",
+ "description": "A deterministic version of a JSON Schema object.",
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ },
+ "required": [
+ "type"
+ ],
+ "properties": {
+ "format": {
+ "type": "string"
+ },
+ "title": {
+ "$ref": "http://json-schema.org/draft-07/schema#/properties/title"
+ },
+ "description": {
+ "$ref": "http://json-schema.org/draft-07/schema#/properties/description"
+ },
+ "default": {
+ "$ref": "http://json-schema.org/draft-07/schema#/properties/default"
+ },
+ "required": {
+ "$ref": "http://json-schema.org/draft-07/schema#/definitions/stringArray"
+ },
+ "type": {
+ "type": "string",
+ "const": "file"
+ },
+ "readOnly": {
+ "type": "boolean",
+ "default": false
+ },
+ "externalDocs": {
+ "$ref": "#/definitions/externalDocs"
+ },
+ "example": true
+ },
+ "additionalProperties": false
+ },
+ "primitivesItems": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "string",
+ "number",
+ "integer",
+ "boolean",
+ "array"
+ ]
+ },
+ "format": {
+ "type": "string"
+ },
+ "items": {
+ "$ref": "#/definitions/primitivesItems"
+ },
+ "collectionFormat": {
+ "$ref": "#/definitions/collectionFormat"
+ },
+ "default": {
+ "$ref": "#/definitions/default"
+ },
+ "maximum": {
+ "$ref": "#/definitions/maximum"
+ },
+ "exclusiveMaximum": {
+ "$ref": "#/definitions/exclusiveMaximum"
+ },
+ "minimum": {
+ "$ref": "#/definitions/minimum"
+ },
+ "exclusiveMinimum": {
+ "$ref": "#/definitions/exclusiveMinimum"
+ },
+ "maxLength": {
+ "$ref": "#/definitions/maxLength"
+ },
+ "minLength": {
+ "$ref": "#/definitions/minLength"
+ },
+ "pattern": {
+ "$ref": "#/definitions/pattern"
+ },
+ "maxItems": {
+ "$ref": "#/definitions/maxItems"
+ },
+ "minItems": {
+ "$ref": "#/definitions/minItems"
+ },
+ "uniqueItems": {
+ "$ref": "#/definitions/uniqueItems"
+ },
+ "enum": {
+ "$ref": "#/definitions/enum"
+ },
+ "multipleOf": {
+ "$ref": "#/definitions/multipleOf"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ }
+ },
+ "security": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/securityRequirement"
+ },
+ "uniqueItems": true
+ },
+ "securityRequirement": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "uniqueItems": true
+ }
+ },
+ "xml": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "namespace": {
+ "type": "string"
+ },
+ "prefix": {
+ "type": "string"
+ },
+ "attribute": {
+ "type": "boolean",
+ "default": false
+ },
+ "wrapped": {
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ }
+ },
+ "tag": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "name"
+ ],
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "externalDocs": {
+ "$ref": "#/definitions/externalDocs"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ }
+ },
+ "securityDefinitions": {
+ "type": "object",
+ "additionalProperties": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/basicAuthenticationSecurity"
+ },
+ {
+ "$ref": "#/definitions/apiKeySecurity"
+ },
+ {
+ "$ref": "#/definitions/oauth2ImplicitSecurity"
+ },
+ {
+ "$ref": "#/definitions/oauth2PasswordSecurity"
+ },
+ {
+ "$ref": "#/definitions/oauth2ApplicationSecurity"
+ },
+ {
+ "$ref": "#/definitions/oauth2AccessCodeSecurity"
+ }
+ ]
+ }
+ },
+ "basicAuthenticationSecurity": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "type"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "basic"
+ },
+ "description": {
+ "type": "string"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ }
+ },
+ "apiKeySecurity": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "type",
+ "name",
+ "in"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "apiKey"
+ },
+ "name": {
+ "type": "string"
+ },
+ "in": {
+ "type": "string",
+ "enum": [
+ "header",
+ "query"
+ ]
+ },
+ "description": {
+ "type": "string"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ }
+ },
+ "oauth2ImplicitSecurity": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "type",
+ "flow",
+ "authorizationUrl"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "oauth2"
+ },
+ "flow": {
+ "type": "string",
+ "const": "implicit"
+ },
+ "scopes": {
+ "$ref": "#/definitions/oauth2Scopes"
+ },
+ "authorizationUrl": {
+ "type": "string",
+ "format": "uri"
+ },
+ "description": {
+ "type": "string"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ }
+ },
+ "oauth2PasswordSecurity": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "type",
+ "flow",
+ "tokenUrl"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "oauth2"
+ },
+ "flow": {
+ "type": "string",
+ "const": "password"
+ },
+ "scopes": {
+ "$ref": "#/definitions/oauth2Scopes"
+ },
+ "tokenUrl": {
+ "type": "string",
+ "format": "uri"
+ },
+ "description": {
+ "type": "string"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ }
+ },
+ "oauth2ApplicationSecurity": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "type",
+ "flow",
+ "tokenUrl"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "oauth2"
+ },
+ "flow": {
+ "type": "string",
+ "const": "application"
+ },
+ "scopes": {
+ "$ref": "#/definitions/oauth2Scopes"
+ },
+ "tokenUrl": {
+ "type": "string",
+ "format": "uri"
+ },
+ "description": {
+ "type": "string"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ }
+ },
+ "oauth2AccessCodeSecurity": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "type",
+ "flow",
+ "authorizationUrl",
+ "tokenUrl"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "oauth2"
+ },
+ "flow": {
+ "type": "string",
+ "const": "accessCode"
+ },
+ "scopes": {
+ "$ref": "#/definitions/oauth2Scopes"
+ },
+ "authorizationUrl": {
+ "type": "string",
+ "format": "uri"
+ },
+ "tokenUrl": {
+ "type": "string",
+ "format": "uri"
+ },
+ "description": {
+ "type": "string"
+ }
+ },
+ "patternProperties": {
+ "^x-": {
+ "$ref": "#/definitions/vendorExtension"
+ }
+ }
+ },
+ "oauth2Scopes": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "mediaTypeList": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/mimeType"
+ },
+ "uniqueItems": true
+ },
+ "parametersList": {
+ "type": "array",
+ "description": "The parameters needed to send a valid API call.",
+ "additionalItems": false,
+ "items": [{
+ "oneOf": [
+ {
+ "$ref": "#/definitions/parameter"
+ },
+ {
+ "$ref": "#/definitions/jsonReference"
+ }
+ ]
+ }],
+ "uniqueItems": true
+ },
+ "schemesList": {
+ "type": "array",
+ "description": "The transfer protocol of the API.",
+ "items": {
+ "type": "string",
+ "enum": [
+ "http",
+ "https",
+ "ws",
+ "wss"
+ ]
+ },
+ "uniqueItems": true
+ },
+ "collectionFormat": {
+ "type": "string",
+ "enum": [
+ "csv",
+ "ssv",
+ "tsv",
+ "pipes"
+ ],
+ "default": "csv"
+ },
+ "collectionFormatWithMulti": {
+ "type": "string",
+ "enum": [
+ "csv",
+ "ssv",
+ "tsv",
+ "pipes",
+ "multi"
+ ],
+ "default": "csv"
+ },
+ "title": {
+ "$ref": "http://json-schema.org/draft-07/schema#/properties/title"
+ },
+ "description": {
+ "$ref": "http://json-schema.org/draft-07/schema#/properties/description"
+ },
+ "default": {
+ "$ref": "http://json-schema.org/draft-07/schema#/properties/default"
+ },
+ "multipleOf": {
+ "$ref": "http://json-schema.org/draft-07/schema#/properties/multipleOf"
+ },
+ "maximum": {
+ "$ref": "http://json-schema.org/draft-07/schema#/properties/maximum"
+ },
+ "exclusiveMaximum": {
+ "$ref": "http://json-schema.org/draft-07/schema#/properties/exclusiveMaximum"
+ },
+ "minimum": {
+ "$ref": "http://json-schema.org/draft-07/schema#/properties/minimum"
+ },
+ "exclusiveMinimum": {
+ "$ref": "http://json-schema.org/draft-07/schema#/properties/exclusiveMinimum"
+ },
+ "maxLength": {
+ "$ref": "http://json-schema.org/draft-07/schema#/definitions/nonNegativeInteger"
+ },
+ "minLength": {
+ "$ref": "http://json-schema.org/draft-07/schema#/definitions/nonNegativeIntegerDefault0"
+ },
+ "pattern": {
+ "$ref": "http://json-schema.org/draft-07/schema#/properties/pattern"
+ },
+ "maxItems": {
+ "$ref": "http://json-schema.org/draft-07/schema#/definitions/nonNegativeInteger"
+ },
+ "minItems": {
+ "$ref": "http://json-schema.org/draft-07/schema#/definitions/nonNegativeIntegerDefault0"
+ },
+ "uniqueItems": {
+ "$ref": "http://json-schema.org/draft-07/schema#/properties/uniqueItems"
+ },
+ "enum": {
+ "$ref": "http://json-schema.org/draft-07/schema#/properties/enum"
+ },
+ "jsonReference": {
+ "type": "object",
+ "required": [
+ "$ref"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "$ref": {
+ "type": "string"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/schemas/v3.0/schema.json b/schemas/v3.0/schema.json
new file mode 100644
index 0000000..395bdd1
--- /dev/null
+++ b/schemas/v3.0/schema.json
@@ -0,0 +1,1584 @@
+{
+ "$id": "https://spec.openapis.org/oas/3.0/schema/2019-04-02",
+ "$schema": "http://json-schema.org/draft-07/schema",
+ "description": "Validation schema for OpenAPI Specification 3.0.X.",
+ "type": "object",
+ "required": [
+ "openapi",
+ "info",
+ "paths"
+ ],
+ "properties": {
+ "openapi": {
+ "type": "string",
+ "pattern": "^3\\.0\\.\\d(-.+)?$"
+ },
+ "info": {
+ "$ref": "#/definitions/Info"
+ },
+ "externalDocs": {
+ "$ref": "#/definitions/ExternalDocumentation"
+ },
+ "servers": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Server"
+ }
+ },
+ "security": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/SecurityRequirement"
+ }
+ },
+ "tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ },
+ "uniqueItems": true
+ },
+ "paths": {
+ "$ref": "#/definitions/Paths"
+ },
+ "components": {
+ "$ref": "#/definitions/Components"
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false,
+ "definitions": {
+ "Reference": {
+ "type": "object",
+ "required": [
+ "$ref"
+ ],
+ "patternProperties": {
+ "^\\$ref$": {
+ "type": "string",
+ "format": "uri-reference"
+ }
+ }
+ },
+ "Info": {
+ "type": "object",
+ "required": [
+ "title",
+ "version"
+ ],
+ "properties": {
+ "title": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "termsOfService": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "contact": {
+ "$ref": "#/definitions/Contact"
+ },
+ "license": {
+ "$ref": "#/definitions/License"
+ },
+ "version": {
+ "type": "string"
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "Contact": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "email": {
+ "type": "string",
+ "format": "email"
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "License": {
+ "type": "object",
+ "required": [
+ "name"
+ ],
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string",
+ "format": "uri-reference"
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "Server": {
+ "type": "object",
+ "required": [
+ "url"
+ ],
+ "properties": {
+ "url": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "variables": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/ServerVariable"
+ }
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "ServerVariable": {
+ "type": "object",
+ "required": [
+ "default"
+ ],
+ "properties": {
+ "enum": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "default": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "Components": {
+ "type": "object",
+ "properties": {
+ "schemas": {
+ "type": "object",
+ "patternProperties": {
+ "^[a-zA-Z0-9\\.\\-_]+$": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Schema"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ }
+ }
+ },
+ "responses": {
+ "type": "object",
+ "patternProperties": {
+ "^[a-zA-Z0-9\\.\\-_]+$": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Reference"
+ },
+ {
+ "$ref": "#/definitions/Response"
+ }
+ ]
+ }
+ }
+ },
+ "parameters": {
+ "type": "object",
+ "patternProperties": {
+ "^[a-zA-Z0-9\\.\\-_]+$": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Reference"
+ },
+ {
+ "$ref": "#/definitions/Parameter"
+ }
+ ]
+ }
+ }
+ },
+ "examples": {
+ "type": "object",
+ "patternProperties": {
+ "^[a-zA-Z0-9\\.\\-_]+$": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Reference"
+ },
+ {
+ "$ref": "#/definitions/Example"
+ }
+ ]
+ }
+ }
+ },
+ "requestBodies": {
+ "type": "object",
+ "patternProperties": {
+ "^[a-zA-Z0-9\\.\\-_]+$": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Reference"
+ },
+ {
+ "$ref": "#/definitions/RequestBody"
+ }
+ ]
+ }
+ }
+ },
+ "headers": {
+ "type": "object",
+ "patternProperties": {
+ "^[a-zA-Z0-9\\.\\-_]+$": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Reference"
+ },
+ {
+ "$ref": "#/definitions/Header"
+ }
+ ]
+ }
+ }
+ },
+ "securitySchemes": {
+ "type": "object",
+ "patternProperties": {
+ "^[a-zA-Z0-9\\.\\-_]+$": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Reference"
+ },
+ {
+ "$ref": "#/definitions/SecurityScheme"
+ }
+ ]
+ }
+ }
+ },
+ "links": {
+ "type": "object",
+ "patternProperties": {
+ "^[a-zA-Z0-9\\.\\-_]+$": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Reference"
+ },
+ {
+ "$ref": "#/definitions/Link"
+ }
+ ]
+ }
+ }
+ },
+ "callbacks": {
+ "type": "object",
+ "patternProperties": {
+ "^[a-zA-Z0-9\\.\\-_]+$": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Reference"
+ },
+ {
+ "$ref": "#/definitions/Callback"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "Schema": {
+ "type": "object",
+ "properties": {
+ "title": {
+ "type": "string"
+ },
+ "multipleOf": {
+ "type": "number",
+ "exclusiveMinimum": 0
+ },
+ "maximum": {
+ "type": "number"
+ },
+ "exclusiveMaximum": {
+ "type": "boolean",
+ "default": false
+ },
+ "minimum": {
+ "type": "number"
+ },
+ "exclusiveMinimum": {
+ "type": "boolean",
+ "default": false
+ },
+ "maxLength": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "minLength": {
+ "type": "integer",
+ "minimum": 0,
+ "default": 0
+ },
+ "pattern": {
+ "type": "string",
+ "format": "regex"
+ },
+ "maxItems": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "minItems": {
+ "type": "integer",
+ "minimum": 0,
+ "default": 0
+ },
+ "uniqueItems": {
+ "type": "boolean",
+ "default": false
+ },
+ "maxProperties": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "minProperties": {
+ "type": "integer",
+ "minimum": 0,
+ "default": 0
+ },
+ "required": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "minItems": 1,
+ "uniqueItems": true
+ },
+ "enum": {
+ "type": "array",
+ "items": true,
+ "minItems": 1,
+ "uniqueItems": false
+ },
+ "type": {
+ "type": "string",
+ "enum": [
+ "array",
+ "boolean",
+ "integer",
+ "number",
+ "object",
+ "string"
+ ]
+ },
+ "not": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Schema"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ },
+ "allOf": {
+ "type": "array",
+ "items": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Schema"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ }
+ },
+ "oneOf": {
+ "type": "array",
+ "items": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Schema"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ }
+ },
+ "anyOf": {
+ "type": "array",
+ "items": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Schema"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ }
+ },
+ "items": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Schema"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ },
+ "properties": {
+ "type": "object",
+ "additionalProperties": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Schema"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ }
+ },
+ "additionalProperties": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Schema"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ },
+ {
+ "type": "boolean"
+ }
+ ],
+ "default": true
+ },
+ "description": {
+ "type": "string"
+ },
+ "format": {
+ "type": "string"
+ },
+ "default": true,
+ "nullable": {
+ "type": "boolean",
+ "default": false
+ },
+ "discriminator": {
+ "$ref": "#/definitions/Discriminator"
+ },
+ "readOnly": {
+ "type": "boolean",
+ "default": false
+ },
+ "writeOnly": {
+ "type": "boolean",
+ "default": false
+ },
+ "example": true,
+ "externalDocs": {
+ "$ref": "#/definitions/ExternalDocumentation"
+ },
+ "deprecated": {
+ "type": "boolean",
+ "default": false
+ },
+ "xml": {
+ "$ref": "#/definitions/XML"
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "Discriminator": {
+ "type": "object",
+ "required": [
+ "propertyName"
+ ],
+ "properties": {
+ "propertyName": {
+ "type": "string"
+ },
+ "mapping": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "XML": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "namespace": {
+ "type": "string",
+ "format": "uri"
+ },
+ "prefix": {
+ "type": "string"
+ },
+ "attribute": {
+ "type": "boolean",
+ "default": false
+ },
+ "wrapped": {
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "Response": {
+ "type": "object",
+ "required": [
+ "description"
+ ],
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "headers": {
+ "type": "object",
+ "additionalProperties": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Header"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ }
+ },
+ "content": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/MediaType"
+ }
+ },
+ "links": {
+ "type": "object",
+ "additionalProperties": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Link"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ }
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "MediaType": {
+ "type": "object",
+ "properties": {
+ "schema": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Schema"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ },
+ "example": true,
+ "examples": {
+ "type": "object",
+ "additionalProperties": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Example"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ }
+ },
+ "encoding": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/Encoding"
+ }
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false,
+ "allOf": [
+ {
+ "$ref": "#/definitions/ExampleXORExamples"
+ }
+ ]
+ },
+ "Example": {
+ "type": "object",
+ "properties": {
+ "summary": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "value": true,
+ "externalValue": {
+ "type": "string",
+ "format": "uri-reference"
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "Header": {
+ "type": "object",
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "required": {
+ "type": "boolean",
+ "default": false
+ },
+ "deprecated": {
+ "type": "boolean",
+ "default": false
+ },
+ "allowEmptyValue": {
+ "type": "boolean",
+ "default": false
+ },
+ "style": {
+ "type": "string",
+ "const": "simple",
+ "default": "simple"
+ },
+ "explode": {
+ "type": "boolean"
+ },
+ "allowReserved": {
+ "type": "boolean",
+ "default": false
+ },
+ "schema": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Schema"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ },
+ "content": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/MediaType"
+ },
+ "minProperties": 1,
+ "maxProperties": 1
+ },
+ "example": true,
+ "examples": {
+ "type": "object",
+ "additionalProperties": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Example"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ }
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false,
+ "allOf": [
+ {
+ "$ref": "#/definitions/ExampleXORExamples"
+ },
+ {
+ "$ref": "#/definitions/SchemaXORContent"
+ }
+ ]
+ },
+ "Paths": {
+ "type": "object",
+ "patternProperties": {
+ "^\\/": {
+ "$ref": "#/definitions/PathItem"
+ },
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "PathItem": {
+ "type": "object",
+ "properties": {
+ "$ref": {
+ "type": "string"
+ },
+ "summary": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "servers": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Server"
+ }
+ },
+ "parameters": {
+ "type": "array",
+ "items": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Parameter"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ },
+ "uniqueItems": true
+ }
+ },
+ "patternProperties": {
+ "^(get|put|post|delete|options|head|patch|trace)$": {
+ "$ref": "#/definitions/Operation"
+ },
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "Operation": {
+ "type": "object",
+ "required": [
+ "responses"
+ ],
+ "properties": {
+ "tags": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "summary": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "externalDocs": {
+ "$ref": "#/definitions/ExternalDocumentation"
+ },
+ "operationId": {
+ "type": "string"
+ },
+ "parameters": {
+ "type": "array",
+ "items": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Parameter"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ },
+ "uniqueItems": true
+ },
+ "requestBody": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/RequestBody"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ },
+ "responses": {
+ "$ref": "#/definitions/Responses"
+ },
+ "callbacks": {
+ "type": "object",
+ "additionalProperties": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Callback"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ }
+ },
+ "deprecated": {
+ "type": "boolean",
+ "default": false
+ },
+ "security": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/SecurityRequirement"
+ }
+ },
+ "servers": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Server"
+ }
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "Responses": {
+ "type": "object",
+ "properties": {
+ "default": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Response"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ }
+ },
+ "patternProperties": {
+ "^[1-5](?:\\d{2}|XX)$": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Response"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ },
+ "^x-": true
+ },
+ "minProperties": 1,
+ "additionalProperties": false
+ },
+ "SecurityRequirement": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "Tag": {
+ "type": "object",
+ "required": [
+ "name"
+ ],
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "externalDocs": {
+ "$ref": "#/definitions/ExternalDocumentation"
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "ExternalDocumentation": {
+ "type": "object",
+ "required": [
+ "url"
+ ],
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string",
+ "format": "uri-reference"
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "ExampleXORExamples": {
+ "description": "Example and examples are mutually exclusive",
+ "not": {
+ "required": [
+ "example",
+ "examples"
+ ]
+ }
+ },
+ "SchemaXORContent": {
+ "description": "Schema and content are mutually exclusive, at least one is required",
+ "not": {
+ "required": [
+ "schema",
+ "content"
+ ]
+ },
+ "oneOf": [
+ {
+ "required": [
+ "schema"
+ ]
+ },
+ {
+ "required": [
+ "content"
+ ],
+ "description": "Some properties are not allowed if content is present",
+ "allOf": [
+ {
+ "not": {
+ "required": [
+ "style"
+ ]
+ }
+ },
+ {
+ "not": {
+ "required": [
+ "explode"
+ ]
+ }
+ },
+ {
+ "not": {
+ "required": [
+ "allowReserved"
+ ]
+ }
+ },
+ {
+ "not": {
+ "required": [
+ "example"
+ ]
+ }
+ },
+ {
+ "not": {
+ "required": [
+ "examples"
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "Parameter": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "in": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "required": {
+ "type": "boolean",
+ "default": false
+ },
+ "deprecated": {
+ "type": "boolean",
+ "default": false
+ },
+ "allowEmptyValue": {
+ "type": "boolean",
+ "default": false
+ },
+ "style": {
+ "type": "string"
+ },
+ "explode": {
+ "type": "boolean"
+ },
+ "allowReserved": {
+ "type": "boolean",
+ "default": false
+ },
+ "schema": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Schema"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ },
+ "content": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/MediaType"
+ },
+ "minProperties": 1,
+ "maxProperties": 1
+ },
+ "example": true,
+ "examples": {
+ "type": "object",
+ "additionalProperties": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/Example"
+ },
+ {
+ "$ref": "#/definitions/Reference"
+ }
+ ]
+ }
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false,
+ "required": [
+ "name",
+ "in"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/definitions/ExampleXORExamples"
+ },
+ {
+ "$ref": "#/definitions/SchemaXORContent"
+ },
+ {
+ "$ref": "#/definitions/ParameterLocation"
+ }
+ ]
+ },
+ "ParameterLocation": {
+ "description": "Parameter location",
+ "oneOf": [
+ {
+ "description": "Parameter in path",
+ "required": [
+ "required"
+ ],
+ "properties": {
+ "in": {
+ "const": "path"
+ },
+ "style": {
+ "enum": [
+ "matrix",
+ "label",
+ "simple"
+ ],
+ "default": "simple"
+ },
+ "required": {
+ "const": true
+ }
+ }
+ },
+ {
+ "description": "Parameter in query",
+ "properties": {
+ "in": {
+ "const": "query"
+ },
+ "style": {
+ "enum": [
+ "form",
+ "spaceDelimited",
+ "pipeDelimited",
+ "deepObject"
+ ],
+ "default": "form"
+ }
+ }
+ },
+ {
+ "description": "Parameter in header",
+ "properties": {
+ "in": {
+ "const": "header"
+ },
+ "style": {
+ "const": "simple",
+ "default": "simple"
+ }
+ }
+ },
+ {
+ "description": "Parameter in cookie",
+ "properties": {
+ "in": {
+ "const": "cookie"
+ },
+ "style": {
+ "const": "form",
+ "default": "form"
+ }
+ }
+ }
+ ]
+ },
+ "RequestBody": {
+ "type": "object",
+ "required": [
+ "content"
+ ],
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "content": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/MediaType"
+ }
+ },
+ "required": {
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "SecurityScheme": {
+ "oneOf": [
+ {
+ "$ref": "#/definitions/APIKeySecurityScheme"
+ },
+ {
+ "$ref": "#/definitions/HTTPSecurityScheme"
+ },
+ {
+ "$ref": "#/definitions/OAuth2SecurityScheme"
+ },
+ {
+ "$ref": "#/definitions/OpenIdConnectSecurityScheme"
+ }
+ ]
+ },
+ "APIKeySecurityScheme": {
+ "type": "object",
+ "required": [
+ "type",
+ "name",
+ "in"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "apiKey"
+ },
+ "name": {
+ "type": "string"
+ },
+ "in": {
+ "type": "string",
+ "enum": [
+ "header",
+ "query",
+ "cookie"
+ ]
+ },
+ "description": {
+ "type": "string"
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "HTTPSecurityScheme": {
+ "type": "object",
+ "required": [
+ "scheme",
+ "type"
+ ],
+ "properties": {
+ "scheme": {
+ "type": "string"
+ },
+ "bearerFormat": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "const": "http"
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false,
+ "oneOf": [
+ {
+ "description": "Bearer",
+ "properties": {
+ "scheme": {
+ "const": "bearer"
+ }
+ }
+ },
+ {
+ "description": "Non Bearer",
+ "not": {
+ "required": [
+ "bearerFormat"
+ ]
+ },
+ "properties": {
+ "scheme": {
+ "not": {
+ "const": "bearer"
+ }
+ }
+ }
+ }
+ ]
+ },
+ "OAuth2SecurityScheme": {
+ "type": "object",
+ "required": [
+ "type",
+ "flows"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "oauth2"
+ },
+ "flows": {
+ "$ref": "#/definitions/OAuthFlows"
+ },
+ "description": {
+ "type": "string"
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "OpenIdConnectSecurityScheme": {
+ "type": "object",
+ "required": [
+ "type",
+ "openIdConnectUrl"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "openIdConnect"
+ },
+ "openIdConnectUrl": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "description": {
+ "type": "string"
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "OAuthFlows": {
+ "type": "object",
+ "properties": {
+ "implicit": {
+ "$ref": "#/definitions/ImplicitOAuthFlow"
+ },
+ "password": {
+ "$ref": "#/definitions/PasswordOAuthFlow"
+ },
+ "clientCredentials": {
+ "$ref": "#/definitions/ClientCredentialsFlow"
+ },
+ "authorizationCode": {
+ "$ref": "#/definitions/AuthorizationCodeOAuthFlow"
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "ImplicitOAuthFlow": {
+ "type": "object",
+ "required": [
+ "authorizationUrl",
+ "scopes"
+ ],
+ "properties": {
+ "authorizationUrl": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "refreshUrl": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "scopes": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "PasswordOAuthFlow": {
+ "type": "object",
+ "required": [
+ "tokenUrl"
+ ],
+ "properties": {
+ "tokenUrl": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "refreshUrl": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "scopes": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "ClientCredentialsFlow": {
+ "type": "object",
+ "required": [
+ "tokenUrl"
+ ],
+ "properties": {
+ "tokenUrl": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "refreshUrl": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "scopes": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "AuthorizationCodeOAuthFlow": {
+ "type": "object",
+ "required": [
+ "authorizationUrl",
+ "tokenUrl"
+ ],
+ "properties": {
+ "authorizationUrl": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "tokenUrl": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "refreshUrl": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "scopes": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false
+ },
+ "Link": {
+ "type": "object",
+ "properties": {
+ "operationId": {
+ "type": "string"
+ },
+ "operationRef": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "parameters": {
+ "type": "object",
+ "additionalProperties": true
+ },
+ "requestBody": true,
+ "description": {
+ "type": "string"
+ },
+ "server": {
+ "$ref": "#/definitions/Server"
+ }
+ },
+ "patternProperties": {
+ "^x-": true
+ },
+ "additionalProperties": false,
+ "not": {
+ "description": "Operation Id and Operation Ref are mutually exclusive",
+ "required": [
+ "operationId",
+ "operationRef"
+ ]
+ }
+ },
+ "Callback": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/PathItem"
+ },
+ "patternProperties": {
+ "^x-": true
+ }
+ },
+ "Encoding": {
+ "type": "object",
+ "properties": {
+ "contentType": {
+ "type": "string"
+ },
+ "headers": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/definitions/Header"
+ }
+ },
+ "style": {
+ "type": "string",
+ "enum": [
+ "form",
+ "spaceDelimited",
+ "pipeDelimited",
+ "deepObject"
+ ]
+ },
+ "explode": {
+ "type": "boolean"
+ },
+ "allowReserved": {
+ "type": "boolean",
+ "default": false
+ }
+ },
+ "additionalProperties": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/schemas/v3.1/schema.json b/schemas/v3.1/schema.json
new file mode 100644
index 0000000..c9f144d
--- /dev/null
+++ b/schemas/v3.1/schema.json
@@ -0,0 +1,1343 @@
+{
+ "$id": "https://spec.openapis.org/oas/3.1/schema/2021-04-15",
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "type": "object",
+ "properties": {
+ "openapi": {
+ "type": "string",
+ "pattern": "^3\\.1\\.\\d+(-.+)?$"
+ },
+ "info": {
+ "$ref": "#/$defs/info"
+ },
+ "jsonSchemaDialect": {
+ "$ref": "#/$defs/uri",
+ "default": "https://spec.openapis.org/oas/3.1/dialect/base"
+ },
+ "servers": {
+ "type": "array",
+ "items": {
+ "$ref": "#/$defs/server"
+ }
+ },
+ "paths": {
+ "$ref": "#/$defs/paths"
+ },
+ "webhooks": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/path-item-or-reference"
+ }
+ },
+ "components": {
+ "$ref": "#/$defs/components"
+ },
+ "security": {
+ "type": "array",
+ "items": {
+ "$ref": "#/$defs/security-requirement"
+ }
+ },
+ "tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/$defs/tag"
+ }
+ },
+ "externalDocs": {
+ "$ref": "#/$defs/external-documentation"
+ }
+ },
+ "required": [
+ "openapi",
+ "info"
+ ],
+ "anyOf": [
+ {
+ "required": [
+ "paths"
+ ]
+ },
+ {
+ "required": [
+ "components"
+ ]
+ },
+ {
+ "required": [
+ "webhooks"
+ ]
+ }
+ ],
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false,
+ "$defs": {
+ "info": {
+ "type": "object",
+ "properties": {
+ "title": {
+ "type": "string"
+ },
+ "summary": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "termsOfService": {
+ "type": "string"
+ },
+ "contact": {
+ "$ref": "#/$defs/contact"
+ },
+ "license": {
+ "$ref": "#/$defs/license"
+ },
+ "version": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "title",
+ "version"
+ ],
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "contact": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ },
+ "email": {
+ "type": "string"
+ }
+ },
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "license": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "identifier": {
+ "type": "string"
+ },
+ "url": {
+ "$ref": "#/$defs/uri"
+ }
+ },
+ "required": [
+ "name"
+ ],
+ "oneOf": [
+ {
+ "required": [
+ "identifier"
+ ]
+ },
+ {
+ "required": [
+ "url"
+ ]
+ }
+ ],
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "server": {
+ "type": "object",
+ "properties": {
+ "url": {
+ "$ref": "#/$defs/uri"
+ },
+ "description": {
+ "type": "string"
+ },
+ "variables": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/server-variable"
+ }
+ }
+ },
+ "required": [
+ "url"
+ ],
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "server-variable": {
+ "type": "object",
+ "properties": {
+ "enum": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "minItems": 1
+ },
+ "default": {
+ "type": "string"
+ },
+ "descriptions": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "default"
+ ],
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "components": {
+ "type": "object",
+ "properties": {
+ "schemas": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref":"#/$defs/schema"
+ }
+ },
+ "responses": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/response-or-reference"
+ }
+ },
+ "parameters": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/parameter-or-reference"
+ }
+ },
+ "examples": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/example-or-reference"
+ }
+ },
+ "requestBodies": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/request-body-or-reference"
+ }
+ },
+ "headers": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/header-or-reference"
+ }
+ },
+ "securitySchemes": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/security-scheme-or-reference"
+ }
+ },
+ "links": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/link-or-reference"
+ }
+ },
+ "callbacks": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/callbacks-or-reference"
+ }
+ },
+ "pathItems": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/path-item-or-reference"
+ }
+ }
+ },
+ "patternProperties": {
+ "^(schemas|responses|parameters|examples|requestBodies|headers|securitySchemes|links|callbacks|pathItems)$": {
+ "$comment": "Enumerating all of the property names in the regex above is necessary for unevaluatedProperties to work as expected",
+ "propertyNames": {
+ "pattern": "^[a-zA-Z0-9._-]+$"
+ }
+ }
+ },
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "paths": {
+ "type": "object",
+ "patternProperties": {
+ "^/": {
+ "$ref": "#/$defs/path-item"
+ }
+ },
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "path-item": {
+ "type": "object",
+ "properties": {
+ "summary": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "servers": {
+ "type": "array",
+ "items": {
+ "$ref": "#/$defs/server"
+ }
+ },
+ "parameters": {
+ "type": "array",
+ "items": {
+ "$ref": "#/$defs/parameter-or-reference"
+ }
+ }
+ },
+ "patternProperties": {
+ "^(get|put|post|delete|options|head|patch|trace)$": {
+ "$ref": "#/$defs/operation"
+ }
+ },
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "path-item-or-reference": {
+ "if": {
+ "required": [
+ "$ref"
+ ]
+ },
+ "then": {
+ "$ref": "#/$defs/reference"
+ },
+ "else": {
+ "$ref": "#/$defs/path-item"
+ }
+ },
+ "operation": {
+ "type": "object",
+ "properties": {
+ "tags": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "summary": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "externalDocs": {
+ "$ref": "#/$defs/external-documentation"
+ },
+ "operationId": {
+ "type": "string"
+ },
+ "parameters": {
+ "type": "array",
+ "items": {
+ "$ref": "#/$defs/parameter-or-reference"
+ }
+ },
+ "requestBody": {
+ "$ref": "#/$defs/request-body-or-reference"
+ },
+ "responses": {
+ "$ref": "#/$defs/responses"
+ },
+ "callbacks": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/callbacks-or-reference"
+ }
+ },
+ "deprecated": {
+ "default": false,
+ "type": "boolean"
+ },
+ "security": {
+ "type": "array",
+ "items": {
+ "$ref": "#/$defs/security-requirement"
+ }
+ },
+ "servers": {
+ "type": "array",
+ "items": {
+ "$ref": "#/$defs/server"
+ }
+ }
+ },
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "external-documentation": {
+ "type": "object",
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "url": {
+ "$ref": "#/$defs/uri"
+ }
+ },
+ "required": [
+ "url"
+ ],
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "parameter": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "in": {
+ "enum": [
+ "query",
+ "header",
+ "path",
+ "cookie"
+ ]
+ },
+ "description": {
+ "type": "string"
+ },
+ "required": {
+ "default": false,
+ "type": "boolean"
+ },
+ "deprecated": {
+ "default": false,
+ "type": "boolean"
+ },
+ "allowEmptyValue": {
+ "default": false,
+ "type": "boolean"
+ },
+ "schema": {
+ "$ref":"#/$defs/schema"
+ },
+ "content": {
+ "$ref": "#/$defs/content"
+ }
+ },
+ "required": [
+ "in"
+ ],
+ "oneOf": [
+ {
+ "required": [
+ "schema"
+ ]
+ },
+ {
+ "required": [
+ "content"
+ ]
+ }
+ ],
+ "dependentSchemas": {
+ "schema": {
+ "properties": {
+ "style": {
+ "type": "string"
+ },
+ "explode": {
+ "type": "boolean"
+ },
+ "allowReserved": {
+ "default": false,
+ "type": "boolean"
+ }
+ },
+ "allOf": [
+ {
+ "$ref": "#/$defs/examples"
+ },
+ {
+ "$ref": "#/$defs/parameter/dependentSchemas/schema/$defs/styles-for-path"
+ },
+ {
+ "$ref": "#/$defs/parameter/dependentSchemas/schema/$defs/styles-for-header"
+ },
+ {
+ "$ref": "#/$defs/parameter/dependentSchemas/schema/$defs/styles-for-query"
+ },
+ {
+ "$ref": "#/$defs/parameter/dependentSchemas/schema/$defs/styles-for-cookie"
+ },
+ {
+ "$ref": "#/$defs/parameter/dependentSchemas/schema/$defs/styles-for-form"
+ }
+ ],
+ "$defs": {
+ "styles-for-path": {
+ "if": {
+ "properties": {
+ "in": {
+ "const": "path"
+ }
+ },
+ "required": [
+ "in"
+ ]
+ },
+ "then": {
+ "properties": {
+ "style": {
+ "default": "simple",
+ "enum": [
+ "matrix",
+ "label",
+ "simple"
+ ]
+ },
+ "required": {
+ "const": true
+ }
+ },
+ "required": [
+ "required"
+ ]
+ }
+ },
+ "styles-for-header": {
+ "if": {
+ "properties": {
+ "in": {
+ "const": "header"
+ }
+ },
+ "required": [
+ "in"
+ ]
+ },
+ "then": {
+ "properties": {
+ "style": {
+ "default": "simple",
+ "enum": [
+ "simple"
+ ]
+ }
+ }
+ }
+ },
+ "styles-for-query": {
+ "if": {
+ "properties": {
+ "in": {
+ "const": "query"
+ }
+ },
+ "required": [
+ "in"
+ ]
+ },
+ "then": {
+ "properties": {
+ "style": {
+ "default": "form",
+ "enum": [
+ "form",
+ "spaceDelimited",
+ "pipeDelimited",
+ "deepObject"
+ ]
+ }
+ }
+ }
+ },
+ "styles-for-cookie": {
+ "if": {
+ "properties": {
+ "in": {
+ "const": "cookie"
+ }
+ },
+ "required": [
+ "in"
+ ]
+ },
+ "then": {
+ "properties": {
+ "style": {
+ "default": "form",
+ "enum": [
+ "form"
+ ]
+ }
+ }
+ }
+ },
+ "styles-for-form": {
+ "if": {
+ "properties": {
+ "style": {
+ "const": "form"
+ }
+ },
+ "required": [
+ "style"
+ ]
+ },
+ "then": {
+ "properties": {
+ "explode": {
+ "default": true
+ }
+ }
+ },
+ "else": {
+ "properties": {
+ "explode": {
+ "default": false
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "parameter-or-reference": {
+ "if": {
+ "required": [
+ "$ref"
+ ]
+ },
+ "then": {
+ "$ref": "#/$defs/reference"
+ },
+ "else": {
+ "$ref": "#/$defs/parameter"
+ }
+ },
+ "request-body": {
+ "type": "object",
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "content": {
+ "$ref": "#/$defs/content"
+ },
+ "required": {
+ "default": false,
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "content"
+ ],
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "request-body-or-reference": {
+ "if": {
+ "required": [
+ "$ref"
+ ]
+ },
+ "then": {
+ "$ref": "#/$defs/reference"
+ },
+ "else": {
+ "$ref": "#/$defs/request-body"
+ }
+ },
+ "content": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/media-type"
+ },
+ "propertyNames": {
+ "format": "media-range"
+ }
+ },
+ "media-type": {
+ "type": "object",
+ "properties": {
+ "schema": {
+ "$ref":"#/$defs/schema"
+ },
+ "encoding": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/encoding"
+ }
+ }
+ },
+ "allOf": [
+ {
+ "$ref": "#/$defs/specification-extensions"
+ },
+ {
+ "$ref": "#/$defs/examples"
+ }
+ ],
+ "unevaluatedProperties": false
+ },
+ "encoding": {
+ "type": "object",
+ "properties": {
+ "contentType": {
+ "type": "string",
+ "format": "media-range"
+ },
+ "headers": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/header-or-reference"
+ }
+ },
+ "style": {
+ "default": "form",
+ "enum": [
+ "form",
+ "spaceDelimited",
+ "pipeDelimited",
+ "deepObject"
+ ]
+ },
+ "explode": {
+ "type": "boolean"
+ },
+ "allowReserved": {
+ "default": false,
+ "type": "boolean"
+ }
+ },
+ "allOf": [
+ {
+ "$ref": "#/$defs/specification-extensions"
+ },
+ {
+ "$ref": "#/$defs/encoding/$defs/explode-default"
+ }
+ ],
+ "unevaluatedProperties": false,
+ "$defs": {
+ "explode-default": {
+ "if": {
+ "properties": {
+ "style": {
+ "const": "form"
+ }
+ },
+ "required": [
+ "style"
+ ]
+ },
+ "then": {
+ "properties": {
+ "explode": {
+ "default": true
+ }
+ }
+ },
+ "else": {
+ "properties": {
+ "explode": {
+ "default": false
+ }
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "type": "object",
+ "properties": {
+ "default": {
+ "$ref": "#/$defs/response-or-reference"
+ }
+ },
+ "patternProperties": {
+ "^[1-5][0-9X]{2}$": {
+ "$ref": "#/$defs/response-or-reference"
+ }
+ },
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "response": {
+ "type": "object",
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "headers": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/header-or-reference"
+ }
+ },
+ "content": {
+ "$ref": "#/$defs/content"
+ },
+ "links": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/link-or-reference"
+ }
+ }
+ },
+ "required": [
+ "description"
+ ],
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "response-or-reference": {
+ "if": {
+ "required": [
+ "$ref"
+ ]
+ },
+ "then": {
+ "$ref": "#/$defs/reference"
+ },
+ "else": {
+ "$ref": "#/$defs/response"
+ }
+ },
+ "callbacks": {
+ "type": "object",
+ "$ref": "#/$defs/specification-extensions",
+ "additionalProperties": {
+ "$ref": "#/$defs/path-item-or-reference"
+ }
+ },
+ "callbacks-or-reference": {
+ "if": {
+ "required": [
+ "$ref"
+ ]
+ },
+ "then": {
+ "$ref": "#/$defs/reference"
+ },
+ "else": {
+ "$ref": "#/$defs/callbacks"
+ }
+ },
+ "example": {
+ "type": "object",
+ "properties": {
+ "summary": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "value": true,
+ "externalValue": {
+ "$ref": "#/$defs/uri"
+ }
+ },
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "example-or-reference": {
+ "if": {
+ "required": [
+ "$ref"
+ ]
+ },
+ "then": {
+ "$ref": "#/$defs/reference"
+ },
+ "else": {
+ "$ref": "#/$defs/example"
+ }
+ },
+ "link": {
+ "type": "object",
+ "properties": {
+ "operationRef": {
+ "$ref": "#/$defs/uri"
+ },
+ "operationId": true,
+ "parameters": {
+ "$ref": "#/$defs/map-of-strings"
+ },
+ "requestBody": true,
+ "description": {
+ "type": "string"
+ },
+ "body": {
+ "$ref": "#/$defs/server"
+ }
+ },
+ "oneOf": [
+ {
+ "required": [
+ "operationRef"
+ ]
+ },
+ {
+ "required": [
+ "operationId"
+ ]
+ }
+ ],
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "link-or-reference": {
+ "if": {
+ "required": [
+ "$ref"
+ ]
+ },
+ "then": {
+ "$ref": "#/$defs/reference"
+ },
+ "else": {
+ "$ref": "#/$defs/link"
+ }
+ },
+ "header": {
+ "type": "object",
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "required": {
+ "default": false,
+ "type": "boolean"
+ },
+ "deprecated": {
+ "default": false,
+ "type": "boolean"
+ },
+ "allowEmptyValue": {
+ "default": false,
+ "type": "boolean"
+ }
+ },
+ "dependentSchemas": {
+ "schema": {
+ "properties": {
+ "style": {
+ "default": "simple",
+ "enum": [
+ "simple"
+ ]
+ },
+ "explode": {
+ "default": false,
+ "type": "boolean"
+ },
+ "allowReserved": {
+ "default": false,
+ "type": "boolean"
+ },
+ "schema": {
+ "$ref":"#/$defs/schema"
+ }
+ },
+ "$ref": "#/$defs/examples"
+ },
+ "content": {
+ "properties": {
+ "content": {
+ "$ref": "#/$defs/content"
+ }
+ }
+ }
+ },
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "header-or-reference": {
+ "if": {
+ "required": [
+ "$ref"
+ ]
+ },
+ "then": {
+ "$ref": "#/$defs/reference"
+ },
+ "else": {
+ "$ref": "#/$defs/header"
+ }
+ },
+ "tag": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "externalDocs": {
+ "$ref": "#/$defs/external-documentation"
+ }
+ },
+ "required": [
+ "name"
+ ],
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "reference": {
+ "type": "object",
+ "properties": {
+ "$ref": {
+ "$ref": "#/$defs/uri"
+ },
+ "summary": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ }
+ },
+ "unevaluatedProperties": false
+ },
+ "schema": {
+ "$dynamicAnchor": "meta",
+ "type": [
+ "object",
+ "boolean"
+ ]
+ },
+ "security-scheme": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "enum": [
+ "apiKey",
+ "http",
+ "mutualTLS",
+ "oauth2",
+ "openIdConnect"
+ ]
+ },
+ "description": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "type"
+ ],
+ "allOf": [
+ {
+ "$ref": "#/$defs/specification-extensions"
+ },
+ {
+ "$ref": "#/$defs/security-scheme/$defs/type-apikey"
+ },
+ {
+ "$ref": "#/$defs/security-scheme/$defs/type-http"
+ },
+ {
+ "$ref": "#/$defs/security-scheme/$defs/type-http-bearer"
+ },
+ {
+ "$ref": "#/$defs/security-scheme/$defs/type-oauth2"
+ },
+ {
+ "$ref": "#/$defs/security-scheme/$defs/type-oidc"
+ }
+ ],
+ "unevaluatedProperties": false,
+ "$defs": {
+ "type-apikey": {
+ "if": {
+ "properties": {
+ "type": {
+ "const": "apiKey"
+ }
+ },
+ "required": [
+ "type"
+ ]
+ },
+ "then": {
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "in": {
+ "enum": [
+ "query",
+ "header",
+ "cookie"
+ ]
+ }
+ },
+ "required": [
+ "name",
+ "in"
+ ]
+ }
+ },
+ "type-http": {
+ "if": {
+ "properties": {
+ "type": {
+ "const": "http"
+ }
+ },
+ "required": [
+ "type"
+ ]
+ },
+ "then": {
+ "properties": {
+ "scheme": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "scheme"
+ ]
+ }
+ },
+ "type-http-bearer": {
+ "if": {
+ "properties": {
+ "type": {
+ "const": "http"
+ },
+ "scheme": {
+ "const": "bearer"
+ }
+ },
+ "required": [
+ "type",
+ "scheme"
+ ]
+ },
+ "then": {
+ "properties": {
+ "bearerFormat": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "scheme"
+ ]
+ }
+ },
+ "type-oauth2": {
+ "if": {
+ "properties": {
+ "type": {
+ "const": "oauth2"
+ }
+ },
+ "required": [
+ "type"
+ ]
+ },
+ "then": {
+ "properties": {
+ "flows": {
+ "$ref": "#/$defs/oauth-flows"
+ }
+ },
+ "required": [
+ "flows"
+ ]
+ }
+ },
+ "type-oidc": {
+ "if": {
+ "properties": {
+ "type": {
+ "const": "openIdConnect"
+ }
+ },
+ "required": [
+ "type"
+ ]
+ },
+ "then": {
+ "properties": {
+ "openIdConnectUrl": {
+ "$ref": "#/$defs/uri"
+ }
+ },
+ "required": [
+ "openIdConnectUrl"
+ ]
+ }
+ }
+ }
+ },
+ "security-scheme-or-reference": {
+ "if": {
+ "required": [
+ "$ref"
+ ]
+ },
+ "then": {
+ "$ref": "#/$defs/reference"
+ },
+ "else": {
+ "$ref": "#/$defs/security-scheme"
+ }
+ },
+ "oauth-flows": {
+ "type": "object",
+ "properties": {
+ "implicit": {
+ "$ref": "#/$defs/oauth-flows/$defs/implicit"
+ },
+ "password": {
+ "$ref": "#/$defs/oauth-flows/$defs/password"
+ },
+ "clientCredentials": {
+ "$ref": "#/$defs/oauth-flows/$defs/client-credentials"
+ },
+ "authorizationCode": {
+ "$ref": "#/$defs/oauth-flows/$defs/authorization-code"
+ }
+ },
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false,
+ "$defs": {
+ "implicit": {
+ "type": "object",
+ "properties": {
+ "authorizationUrl": {
+ "type": "string"
+ },
+ "refreshUrl": {
+ "type": "string"
+ },
+ "scopes": {
+ "$ref": "#/$defs/map-of-strings"
+ }
+ },
+ "required": [
+ "authorizationUrl",
+ "scopes"
+ ],
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "password": {
+ "type": "object",
+ "properties": {
+ "tokenUrl": {
+ "type": "string"
+ },
+ "refreshUrl": {
+ "type": "string"
+ },
+ "scopes": {
+ "$ref": "#/$defs/map-of-strings"
+ }
+ },
+ "required": [
+ "tokenUrl",
+ "scopes"
+ ],
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "client-credentials": {
+ "type": "object",
+ "properties": {
+ "tokenUrl": {
+ "type": "string"
+ },
+ "refreshUrl": {
+ "type": "string"
+ },
+ "scopes": {
+ "$ref": "#/$defs/map-of-strings"
+ }
+ },
+ "required": [
+ "tokenUrl",
+ "scopes"
+ ],
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ },
+ "authorization-code": {
+ "type": "object",
+ "properties": {
+ "authorizationUrl": {
+ "type": "string"
+ },
+ "tokenUrl": {
+ "type": "string"
+ },
+ "refreshUrl": {
+ "type": "string"
+ },
+ "scopes": {
+ "$ref": "#/$defs/map-of-strings"
+ }
+ },
+ "required": [
+ "authorizationUrl",
+ "tokenUrl",
+ "scopes"
+ ],
+ "$ref": "#/$defs/specification-extensions",
+ "unevaluatedProperties": false
+ }
+ }
+ },
+ "security-requirement": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "specification-extensions": {
+ "patternProperties": {
+ "^x-": true
+ }
+ },
+ "examples": {
+ "properties": {
+ "example": true,
+ "examples": {
+ "type": "object",
+ "additionalProperties": {
+ "$ref": "#/$defs/example-or-reference"
+ }
+ }
+ }
+ },
+ "uri": {
+ "type": "string",
+ "format": "uri"
+ },
+ "map-of-strings": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ }
+}
diff --git a/test/test-resolve.js b/test/test-resolve.js
new file mode 100644
index 0000000..caba09e
--- /dev/null
+++ b/test/test-resolve.js
@@ -0,0 +1,185 @@
+import tap from "tap";
+const test = tap.test;
+
+import { createRequire } from 'module';
+import Validator from '../index.js';
+const validator = new Validator();
+const resolve = specification => validator.resolveRefs({specification})
+
+const importJSON = createRequire(import.meta.url);
+
+
+test(`non object returns undefined`, async t => {
+ const schema = "schema";
+ t.plan(1);
+ const res = resolve(schema);
+ t.equal(res, undefined);
+});
+
+test(`Local $refs`, async t => {
+ const schema = {
+ "$id": "http://www.example.com/",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+
+ "definitions": {
+ "address": {
+ "type": "object",
+ "properties": {
+ "street_address": { "type": "string" },
+ "city": { "type": "string" },
+ "state": { "type": "string" },
+ "subAddress": { "$ref": "http://www.example.com/#/definitions/address" }
+ }
+ },
+ "req": { "required": ["billing_address"] }
+ },
+ "type": "object",
+ "properties": {
+ "billing_address": { "$ref": "#/definitions/address" },
+ "shipping_address": { "$ref": "#/definitions/address" },
+ },
+ "$ref": "#/definitions/req"
+ }
+ t.plan(3);
+ const res = resolve(schema)
+ const ptr = res.properties.billing_address.properties
+ t.equal(ptr.city.type, "string", "followed $ref without neigbor properties");
+ const circular = ptr.subAddress.properties
+ t.equal(circular.city.type, "string", "followed circular $ref without neigbor properties");
+ t.equal(res.required[0], "billing_address", "followed $ref *with* neigbor properties");
+});
+
+test(`number in path`, async t => {
+ const schema = {
+ "$id": "http://www.example.com/",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+
+ "definitions": {
+ 2: {
+ "required": ["billing_address"],
+ }
+ },
+ "$ref": "#/definitions/2"
+ }
+ t.plan(1);
+ const res = resolve(schema)
+ t.equal(res.required[0], "billing_address", "followed $ref to $anchor");
+});
+
+test(`$ref to $anchor`, async t => {
+ const schema = {
+ "$id": "http://www.example.com/",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+
+ "definitions": {
+ "req": {
+ "required": ["billing_address"],
+ "$anchor": "myAnchor"
+ }
+ },
+ "$ref": "#myAnchor"
+ }
+ t.plan(1);
+ const res = resolve(schema)
+ t.equal(res.required[0], "billing_address", "followed $ref to $anchor");
+});
+
+test(`$dynamicRef to $dynamicAnchor`, async t => {
+ const schema = {
+ "$id": "http://www.example.com/",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+
+ "definitions": {
+ "req": {
+ "required": ["billing_address"],
+ "$dynamicAnchor": "myAnchor"
+ }
+ },
+ "$dynamicRef": "#myAnchor"
+ }
+ t.plan(1);
+ const res = resolve(schema)
+ t.equal(res.required[0], "billing_address", "followed $ref to $anchor");
+});
+
+test(`non-existing path throws error`, async t => {
+ const schema = {
+ "$id": "http://www.example.com/",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "$ref": "#/definitions/req"
+ }
+ t.plan(1);
+ t.throws(() => resolve(schema), "Error: Can't resolve http://www.example.com/#/definitions/req", "got expected error");
+});
+
+test(`non-existing uri throws error`, async t => {
+ const schema = {
+ "$id": "http://www.example.com/",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "definitions": {
+ "req": { "required": ["billing_address"] }
+ },
+ "$ref": "http://www.example.com/failed#/definitions/req"
+ }
+ t.plan(1);
+ t.throws(() => resolve(schema), new Error("Can't resolve http://www.example.com/failed#/definitions/req"), "got expected error");
+});
+
+test(`non-existing $anchor throws error`, async t => {
+ const schema = {
+ "$id": "http://www.example.com/",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "$ref": "#undefinedAnchor"
+ }
+ t.plan(1);
+ t.throws(() => resolve(schema), new Error("Can't resolve http://www.example.com/#undefinedAnchor"), "got expected error");
+});
+
+test(`non-existing $dynamicAnchor throws error`, async t => {
+ const schema = {
+ "$id": "http://www.example.com/",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "$dynamicRef": "#undefinedAnchor"
+ }
+ t.plan(1);
+ t.throws(() => resolve(schema), new Error("Can't resolve $dynamicAnchor : '#undefinedAnchor'"), "got expected error");
+});
+
+
+test(`non-unique $id throws error`, async t => {
+ const schema = {
+ "$id": "http://www.example.com/",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "definitions": {
+ "$id": "http://www.example.com/"
+ }
+ }
+ t.plan(1);
+ t.throws(() => resolve(schema), new Error("$id : 'http://www.example.com/' defined more than once at #/definitions"), "got expected error");
+});
+
+test(`non-unique $anchor throws error`, async t => {
+ const schema = {
+ "$id": "http://www.example.com/",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "definitions": {
+ "anchor A": { "$anchor": "#myAnchor" },
+ "anchor B": { "$anchor": "#myAnchor" }
+ }
+ }
+ t.plan(1);
+ t.throws(() => resolve(schema), new Error("$anchor : '#myAnchor' defined more than once at '#/definitions/anchor B'" ), "got expected error");
+});
+
+test(`non-unique $dynamicAnchor throws error`, async t => {
+ const schema = {
+ "$id": "http://www.example.com/",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "definitions": {
+ "anchor A": { "$dynamicAnchor": "#myAnchor" },
+ "anchor B": { "$dynamicAnchor": "#myAnchor" }
+ }
+ }
+ t.plan(1);
+ t.throws(() => resolve(schema), new Error("$dynamicAnchor : '#myAnchor' defined more than once at '#/definitions/anchor B'" ), "got expected error");
+});
diff --git a/test/test-validation.js b/test/test-validation.js
new file mode 100644
index 0000000..af671cd
--- /dev/null
+++ b/test/test-validation.js
@@ -0,0 +1,94 @@
+import tap from "tap";
+const test = tap.test;
+
+import { createRequire } from 'module';
+import Validator from '../index.js';
+import {readFile} from 'fs/promises';
+
+const localFile = ( fileName ) => (new URL(fileName,import.meta.url)).pathname
+const importJSON = createRequire(import.meta.url);
+const emptySpec = await importJSON(`./validation/empty.json`);
+const invalidSpec = await importJSON(`./validation/invalid-spec.json`);
+const yamlFileName = localFile(`./validation/petstore-openapi.v3.yaml`);
+
+async function testVersion(version) {
+ test(`version ${version} works`, async t => {
+ t.plan(2);
+ const petStoreSpec = await importJSON(`./v${version}/petstore.json`);
+ const validator = new Validator();
+
+ const res = await validator.validate(petStoreSpec)
+ t.equal(res.valid, true, "petstore spec is valid");
+ const ver = validator.version
+ t.equal(ver, version, "petstore spec version matches expected version");
+ });
+}
+
+test(`Validator.supportedVersions should be a Set`, t => {
+ t.plan(1)
+ t.type(Validator.supportedVersions, Set)
+})
+
+Validator.supportedVersions.forEach(testVersion);
+
+
+test(`empty specification should fail`, async t => {
+ t.plan(2)
+ const validator = new Validator();
+ const res = await validator.validate(emptySpec)
+ t.equal(res.valid, false, "empty spec is invalid");
+ t.equal(res.errors, "Cannot find supported swagger/openapi version in specification, version must be a string.",
+ "correct error message");
+});
+
+test(`defect specification should fail`, async t => {
+ t.plan(2)
+ const validator = new Validator();
+ const res = await validator.validate(invalidSpec)
+ t.equal(res.valid, false, "defect specification is invalid");
+ t.type(res.errors, Array, "got array with errors");
+});
+
+test(`yaml specification as string works`, async t => {
+ t.plan(2);
+ const yamlSpec = await readFile(yamlFileName,"utf-8");
+ const validator = new Validator();
+
+ const res = await validator.validate(yamlSpec)
+ t.equal(res.valid, true, "yaml spec as string is valid");
+ const ver = validator.version
+ t.equal(ver, "3.0" , "yaml spec version matches expected version");
+});
+
+test(`Invalid yaml specification as string gives an error`, async t => {
+ t.plan(2);
+ const yamlSpec = `
+ yaml : : :
+ yaml : : :
+ `;
+ const validator = new Validator();
+
+ const res = await validator.validate(yamlSpec)
+ t.equal(res.valid, false, "validation fails as expected");
+ t.equal(res.errors, "Cannot find JSON, YAML or filename in data" , "error message matches expection");
+});
+
+test(`yaml specification as filename works`, async t => {
+ t.plan(2);
+ const validator = new Validator();
+
+ const res = await validator.validate(yamlFileName)
+ t.equal(res.valid, true, "yaml spec as filename is valid");
+ const ver = validator.version
+ t.equal(ver, "3.0" , "yaml spec version matches expected version");
+});
+
+test(`Invalid filename returns an error`, async t => {
+ t.plan(2);
+ const validator = new Validator();
+
+ const res = await validator.validate("nonExistingFilename")
+ t.equal(res.valid, false, "validation fails as expected");
+ t.equal(res.errors, "Cannot find JSON, YAML or filename in data" , "error message matches expection");
+});
+
diff --git a/test/v2.0/petstore.json b/test/v2.0/petstore.json
new file mode 100644
index 0000000..415eb3f
--- /dev/null
+++ b/test/v2.0/petstore.json
@@ -0,0 +1,153 @@
+{
+ "swagger": "2.0",
+ "info": {
+ "version": "1.0.0",
+ "title": "Swagger Petstore",
+ "license": {
+ "name": "MIT"
+ }
+ },
+ "host": "petstore.swagger.io",
+ "basePath": "/v1",
+ "schemes": [
+ "http"
+ ],
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "paths": {
+ "/pets": {
+ "get": {
+ "summary": "List all pets",
+ "operationId": "listPets",
+ "tags": [
+ "pets"
+ ],
+ "parameters": [
+ {
+ "name": "limit",
+ "in": "query",
+ "description": "How many items to return at one time (max 100)",
+ "required": false,
+ "type": "integer",
+ "format": "int32"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "An paged array of pets",
+ "headers": {
+ "x-next": {
+ "type": "string",
+ "description": "A link to the next page of responses"
+ }
+ },
+ "schema": {
+ "$ref": "#/definitions/Pets"
+ }
+ },
+ "default": {
+ "description": "unexpected error",
+ "schema": {
+ "$ref": "#/definitions/Error"
+ }
+ }
+ }
+ },
+ "post": {
+ "summary": "Create a pet",
+ "operationId": "createPets",
+ "tags": [
+ "pets"
+ ],
+ "responses": {
+ "201": {
+ "description": "Null response"
+ },
+ "default": {
+ "description": "unexpected error",
+ "schema": {
+ "$ref": "#/definitions/Error"
+ }
+ }
+ }
+ }
+ },
+ "/pets/{petId}": {
+ "get": {
+ "summary": "Info for a specific pet",
+ "operationId": "showPetById",
+ "tags": [
+ "pets"
+ ],
+ "parameters": [
+ {
+ "name": "petId",
+ "in": "path",
+ "required": true,
+ "description": "The id of the pet to retrieve",
+ "type": "string"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Expected response to a valid request",
+ "schema": {
+ "$ref": "#/definitions/Pets"
+ }
+ },
+ "default": {
+ "description": "unexpected error",
+ "schema": {
+ "$ref": "#/definitions/Error"
+ }
+ }
+ }
+ }
+ }
+ },
+ "definitions": {
+ "Pet": {
+ "required": [
+ "id",
+ "name"
+ ],
+ "properties": {
+ "id": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "name": {
+ "type": "string"
+ },
+ "tag": {
+ "type": "string"
+ }
+ }
+ },
+ "Pets": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Pet"
+ }
+ },
+ "Error": {
+ "required": [
+ "code",
+ "message"
+ ],
+ "properties": {
+ "code": {
+ "type": "integer",
+ "format": "int32"
+ },
+ "message": {
+ "type": "string"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/v3.0/petstore.json b/test/v3.0/petstore.json
new file mode 100644
index 0000000..583b1e0
--- /dev/null
+++ b/test/v3.0/petstore.json
@@ -0,0 +1,177 @@
+{
+ "openapi": "3.0.0",
+ "info": {
+ "version": "1.0.0",
+ "title": "Swagger Petstore",
+ "license": {
+ "name": "MIT"
+ }
+ },
+ "servers": [
+ {
+ "url": "http://petstore.swagger.io/v1"
+ }
+ ],
+ "paths": {
+ "/pets": {
+ "get": {
+ "summary": "List all pets",
+ "operationId": "listPets",
+ "tags": [
+ "pets"
+ ],
+ "parameters": [
+ {
+ "name": "limit",
+ "in": "query",
+ "description": "How many items to return at one time (max 100)",
+ "required": false,
+ "schema": {
+ "type": "integer",
+ "format": "int32"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "A paged array of pets",
+ "headers": {
+ "x-next": {
+ "description": "A link to the next page of responses",
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Pets"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "unexpected error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Error"
+ }
+ }
+ }
+ }
+ }
+ },
+ "post": {
+ "summary": "Create a pet",
+ "operationId": "createPets",
+ "tags": [
+ "pets"
+ ],
+ "responses": {
+ "201": {
+ "description": "Null response"
+ },
+ "default": {
+ "description": "unexpected error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Error"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/pets/{petId}": {
+ "get": {
+ "summary": "Info for a specific pet",
+ "operationId": "showPetById",
+ "tags": [
+ "pets"
+ ],
+ "parameters": [
+ {
+ "name": "petId",
+ "in": "path",
+ "required": true,
+ "description": "The id of the pet to retrieve",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Expected response to a valid request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Pet"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "unexpected error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Error"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "components": {
+ "schemas": {
+ "Pet": {
+ "type": "object",
+ "required": [
+ "id",
+ "name"
+ ],
+ "properties": {
+ "id": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "name": {
+ "type": "string"
+ },
+ "tag": {
+ "type": "string"
+ }
+ }
+ },
+ "Pets": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Pet"
+ }
+ },
+ "Error": {
+ "type": "object",
+ "required": [
+ "code",
+ "message"
+ ],
+ "properties": {
+ "code": {
+ "type": "integer",
+ "format": "int32"
+ },
+ "message": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/v3.1/petstore.json b/test/v3.1/petstore.json
new file mode 100644
index 0000000..a8020f0
--- /dev/null
+++ b/test/v3.1/petstore.json
@@ -0,0 +1,178 @@
+{
+ "openapi": "3.1.0",
+ "info": {
+ "version": "1.0.0",
+ "title": "Swagger Petstore",
+ "license": {
+ "name": "MIT",
+ "url": "https://opensource.org/licenses/MIT"
+ }
+ },
+ "servers": [
+ {
+ "url": "http://petstore.swagger.io/v1"
+ }
+ ],
+ "paths": {
+ "/pets": {
+ "get": {
+ "summary": "List all pets",
+ "operationId": "listPets",
+ "tags": [
+ "pets"
+ ],
+ "parameters": [
+ {
+ "name": "limit",
+ "in": "query",
+ "description": "How many items to return at one time (max 100)",
+ "required": false,
+ "schema": {
+ "type": "integer",
+ "format": "int32"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "A paged array of pets",
+ "headers": {
+ "x-next": {
+ "description": "A link to the next page of responses",
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Pets"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "unexpected error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Error"
+ }
+ }
+ }
+ }
+ }
+ },
+ "post": {
+ "summary": "Create a pet",
+ "operationId": "createPets",
+ "tags": [
+ "pets"
+ ],
+ "responses": {
+ "201": {
+ "description": "Null response"
+ },
+ "default": {
+ "description": "unexpected error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Error"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/pets/{petId}": {
+ "get": {
+ "summary": "Info for a specific pet",
+ "operationId": "showPetById",
+ "tags": [
+ "pets"
+ ],
+ "parameters": [
+ {
+ "name": "petId",
+ "in": "path",
+ "required": true,
+ "description": "The id of the pet to retrieve",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Expected response to a valid request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Pet"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "unexpected error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Error"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "components": {
+ "schemas": {
+ "Pet": {
+ "type": "object",
+ "required": [
+ "id",
+ "name"
+ ],
+ "properties": {
+ "id": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "name": {
+ "type": "string"
+ },
+ "tag": {
+ "type": "string"
+ }
+ }
+ },
+ "Pets": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Pet"
+ }
+ },
+ "Error": {
+ "type": "object",
+ "required": [
+ "code",
+ "message"
+ ],
+ "properties": {
+ "code": {
+ "type": "integer",
+ "format": "int32"
+ },
+ "message": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/validation/dummy.json b/test/validation/dummy.json
new file mode 100644
index 0000000..170b96e
--- /dev/null
+++ b/test/validation/dummy.json
@@ -0,0 +1,3 @@
+{
+ dummy
+}
\ No newline at end of file
diff --git a/test/validation/empty.json b/test/validation/empty.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/test/validation/empty.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/test/validation/invalid-spec.json b/test/validation/invalid-spec.json
new file mode 100644
index 0000000..dbabab4
--- /dev/null
+++ b/test/validation/invalid-spec.json
@@ -0,0 +1,36 @@
+{
+ "openapi": "3.1.0",
+ "servers": [
+ {
+ "url": "http://localhost/v2"
+ }
+ ],
+ "security": [
+ {
+ "skipped": []
+ }
+ ],
+ "paths": {
+ "/pathParam/{id}": {
+ "get": {
+ "operationId": "getPathParam",
+ "summary": "Test path parameters",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "ok"
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/validation/petstore-openapi.v3.yaml b/test/validation/petstore-openapi.v3.yaml
new file mode 100644
index 0000000..cbd42d9
--- /dev/null
+++ b/test/validation/petstore-openapi.v3.yaml
@@ -0,0 +1,699 @@
+openapi: 3.0.0
+servers:
+ - url: 'http://petstore.swagger.io/v2'
+info:
+ description: >-
+ This is a sample server Petstore server. For this sample, you can use the api key
+ `special-key` to test the authorization filters.
+ version: 1.0.0
+ title: OpenAPI Petstore
+ license:
+ name: Apache-2.0
+ url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
+tags:
+ - name: pet
+ description: Everything about your Pets
+ - name: store
+ description: Access to Petstore orders
+ - name: user
+ description: Operations about user
+paths:
+ /pet:
+ post:
+ tags:
+ - pet
+ summary: Add a new pet to the store
+ description: ''
+ operationId: addPet
+ responses:
+ '405':
+ description: Invalid input
+ security:
+ - petstore_auth:
+ - 'write:pets'
+ - 'read:pets'
+ requestBody:
+ $ref: '#/components/requestBodies/Pet'
+ put:
+ tags:
+ - pet
+ summary: Update an existing pet
+ description: ''
+ operationId: updatePet
+ responses:
+ '400':
+ description: Invalid ID supplied
+ '404':
+ description: Pet not found
+ '405':
+ description: Validation exception
+ security:
+ - petstore_auth:
+ - 'write:pets'
+ - 'read:pets'
+ requestBody:
+ $ref: '#/components/requestBodies/Pet'
+ /pet/findByStatus:
+ get:
+ tags:
+ - pet
+ summary: Finds Pets by status
+ description: Multiple status values can be provided with comma separated strings
+ operationId: findPetsByStatus
+ parameters:
+ - name: status
+ in: query
+ description: Status values that need to be considered for filter
+ required: true
+ style: form
+ explode: false
+ schema:
+ type: array
+ items:
+ type: string
+ enum:
+ - available
+ - pending
+ - sold
+ default: available
+ responses:
+ '200':
+ description: successful operation
+ content:
+ application/xml:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/Pet'
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/Pet'
+ '400':
+ description: Invalid status value
+ security:
+ - petstore_auth:
+ - 'write:pets'
+ - 'read:pets'
+ /pet/findByTags:
+ get:
+ tags:
+ - pet
+ summary: Finds Pets by tags
+ description: >-
+ Multiple tags can be provided with comma separated strings. Use tag1,
+ tag2, tag3 for testing.
+ operationId: findPetsByTags
+ parameters:
+ - name: tags
+ in: query
+ description: Tags to filter by
+ required: true
+ style: form
+ explode: false
+ schema:
+ type: array
+ items:
+ type: string
+ responses:
+ '200':
+ description: successful operation
+ content:
+ application/xml:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/Pet'
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/Pet'
+ '400':
+ description: Invalid tag value
+ security:
+ - petstore_auth:
+ - 'write:pets'
+ - 'read:pets'
+ deprecated: true
+ '/pet/{petId}':
+ get:
+ tags:
+ - pet
+ summary: Find pet by ID
+ description: Returns a single pet
+ operationId: getPetById
+ parameters:
+ - name: petId
+ in: path
+ description: ID of pet to return
+ required: true
+ schema:
+ type: integer
+ format: int64
+ responses:
+ '200':
+ description: successful operation
+ content:
+ application/xml:
+ schema:
+ $ref: '#/components/schemas/Pet'
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Pet'
+ '400':
+ description: Invalid ID supplied
+ '404':
+ description: Pet not found
+ security:
+ - api_key: []
+ post:
+ tags:
+ - pet
+ summary: Updates a pet in the store with form data
+ description: ''
+ operationId: updatePetWithForm
+ parameters:
+ - name: petId
+ in: path
+ description: ID of pet that needs to be updated
+ required: true
+ schema:
+ type: integer
+ format: int64
+ responses:
+ '405':
+ description: Invalid input
+ security:
+ - petstore_auth:
+ - 'write:pets'
+ - 'read:pets'
+ requestBody:
+ content:
+ application/x-www-form-urlencoded:
+ schema:
+ type: object
+ properties:
+ name:
+ description: Updated name of the pet
+ type: string
+ status:
+ description: Updated status of the pet
+ type: string
+ delete:
+ tags:
+ - pet
+ summary: Deletes a pet
+ description: ''
+ operationId: deletePet
+ parameters:
+ - name: api_key
+ in: header
+ required: false
+ schema:
+ type: string
+ - name: petId
+ in: path
+ description: Pet id to delete
+ required: true
+ schema:
+ type: integer
+ format: int64
+ responses:
+ '400':
+ description: Invalid pet value
+ security:
+ - petstore_auth:
+ - 'write:pets'
+ - 'read:pets'
+ '/pet/{petId}/uploadImage':
+ post:
+ tags:
+ - pet
+ summary: uploads an image
+ description: ''
+ operationId: uploadFile
+ parameters:
+ - name: petId
+ in: path
+ description: ID of pet to update
+ required: true
+ schema:
+ type: integer
+ format: int64
+ responses:
+ '200':
+ description: successful operation
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ApiResponse'
+ security:
+ - petstore_auth:
+ - 'write:pets'
+ - 'read:pets'
+ requestBody:
+ content:
+ multipart/form-data:
+ schema:
+ type: object
+ properties:
+ additionalMetadata:
+ description: Additional data to pass to server
+ type: string
+ file:
+ description: file to upload
+ type: string
+ format: binary
+ /store/inventory:
+ get:
+ tags:
+ - store
+ summary: Returns pet inventories by status
+ description: Returns a map of status codes to quantities
+ operationId: getInventory
+ responses:
+ '200':
+ description: successful operation
+ content:
+ application/json:
+ schema:
+ type: object
+ additionalProperties:
+ type: integer
+ format: int32
+ security:
+ - api_key: []
+ /store/order:
+ post:
+ tags:
+ - store
+ summary: Place an order for a pet
+ description: ''
+ operationId: placeOrder
+ responses:
+ '200':
+ description: successful operation
+ content:
+ application/xml:
+ schema:
+ $ref: '#/components/schemas/Order'
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Order'
+ '400':
+ description: Invalid Order
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Order'
+ description: order placed for purchasing the pet
+ required: true
+ '/store/order/{orderId}':
+ get:
+ tags:
+ - store
+ summary: Find purchase order by ID
+ description: >-
+ For valid response try integer IDs with value <= 5 or > 10. Other values
+ will generated exceptions
+ operationId: getOrderById
+ parameters:
+ - name: orderId
+ in: path
+ description: ID of pet that needs to be fetched
+ required: true
+ schema:
+ type: integer
+ format: int64
+ minimum: 1
+ maximum: 5
+ responses:
+ '200':
+ description: successful operation
+ content:
+ application/xml:
+ schema:
+ $ref: '#/components/schemas/Order'
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Order'
+ '400':
+ description: Invalid ID supplied
+ '404':
+ description: Order not found
+ delete:
+ tags:
+ - store
+ summary: Delete purchase order by ID
+ description: >-
+ For valid response try integer IDs with value < 1000. Anything above
+ 1000 or nonintegers will generate API errors
+ operationId: deleteOrder
+ parameters:
+ - name: orderId
+ in: path
+ description: ID of the order that needs to be deleted
+ required: true
+ schema:
+ type: string
+ responses:
+ '400':
+ description: Invalid ID supplied
+ '404':
+ description: Order not found
+ /user:
+ post:
+ tags:
+ - user
+ summary: Create user
+ description: This can only be done by the logged in user.
+ operationId: createUser
+ responses:
+ default:
+ description: successful operation
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/User'
+ description: Created user object
+ required: true
+ /user/createWithArray:
+ post:
+ tags:
+ - user
+ summary: Creates list of users with given input array
+ description: ''
+ operationId: createUsersWithArrayInput
+ responses:
+ default:
+ description: successful operation
+ requestBody:
+ $ref: '#/components/requestBodies/UserArray'
+ /user/createWithList:
+ post:
+ tags:
+ - user
+ summary: Creates list of users with given input array
+ description: ''
+ operationId: createUsersWithListInput
+ responses:
+ default:
+ description: successful operation
+ requestBody:
+ $ref: '#/components/requestBodies/UserArray'
+ /user/login:
+ get:
+ tags:
+ - user
+ summary: Logs user into the system
+ description: ''
+ operationId: loginUser
+ parameters:
+ - name: username
+ in: query
+ description: The user name for login
+ required: true
+ schema:
+ type: string
+ - name: password
+ in: query
+ description: The password for login in clear text
+ required: true
+ schema:
+ type: string
+ responses:
+ '200':
+ description: successful operation
+ headers:
+ X-Rate-Limit:
+ description: calls per hour allowed by the user
+ schema:
+ type: integer
+ format: int32
+ X-Expires-After:
+ description: date in UTC when toekn expires
+ schema:
+ type: string
+ format: date-time
+ content:
+ application/xml:
+ schema:
+ type: string
+ application/json:
+ schema:
+ type: string
+ '400':
+ description: Invalid username/password supplied
+ /user/logout:
+ get:
+ tags:
+ - user
+ summary: Logs out current logged in user session
+ description: ''
+ operationId: logoutUser
+ responses:
+ default:
+ description: successful operation
+ '/user/{username}':
+ get:
+ tags:
+ - user
+ summary: Get user by user name
+ description: ''
+ operationId: getUserByName
+ parameters:
+ - name: username
+ in: path
+ description: The name that needs to be fetched. Use user1 for testing.
+ required: true
+ schema:
+ type: string
+ responses:
+ '200':
+ description: successful operation
+ content:
+ application/xml:
+ schema:
+ $ref: '#/components/schemas/User'
+ application/json:
+ schema:
+ $ref: '#/components/schemas/User'
+ '400':
+ description: Invalid username supplied
+ '404':
+ description: User not found
+ put:
+ tags:
+ - user
+ summary: Updated user
+ description: This can only be done by the logged in user.
+ operationId: updateUser
+ parameters:
+ - name: username
+ in: path
+ description: name that need to be deleted
+ required: true
+ schema:
+ type: string
+ responses:
+ '400':
+ description: Invalid user supplied
+ '404':
+ description: User not found
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/User'
+ description: Updated user object
+ required: true
+ delete:
+ tags:
+ - user
+ summary: Delete user
+ description: This can only be done by the logged in user.
+ operationId: deleteUser
+ parameters:
+ - name: username
+ in: path
+ description: The name that needs to be deleted
+ required: true
+ schema:
+ type: string
+ responses:
+ '400':
+ description: Invalid username supplied
+ '404':
+ description: User not found
+externalDocs:
+ description: Find out more about Swagger
+ url: 'http://swagger.io'
+components:
+ requestBodies:
+ UserArray:
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ $ref: '#/components/schemas/User'
+ description: List of user object
+ required: true
+ Pet:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Pet'
+ application/xml:
+ schema:
+ $ref: '#/components/schemas/Pet'
+ description: Pet object that needs to be added to the store
+ required: true
+ securitySchemes:
+ petstore_auth:
+ type: oauth2
+ flows:
+ implicit:
+ authorizationUrl: 'http://petstore.swagger.io/api/oauth/dialog'
+ scopes:
+ 'write:pets': modify pets in your account
+ 'read:pets': read your pets
+ api_key:
+ type: apiKey
+ name: api_key
+ in: header
+ schemas:
+ Order:
+ title: Pet Order
+ description: An order for a pets from the pet store
+ type: object
+ properties:
+ id:
+ type: integer
+ format: int64
+ petId:
+ type: integer
+ format: int64
+ quantity:
+ type: integer
+ format: int32
+ shipDate:
+ type: string
+ format: date-time
+ status:
+ type: string
+ description: Order Status
+ enum:
+ - placed
+ - approved
+ - delivered
+ complete:
+ type: boolean
+ default: false
+ xml:
+ name: Order
+ Category:
+ title: Pet category
+ description: A category for a pet
+ type: object
+ properties:
+ id:
+ type: integer
+ format: int64
+ name:
+ type: string
+ xml:
+ name: Category
+ User:
+ title: a User
+ description: A User who is purchasing from the pet store
+ type: object
+ properties:
+ id:
+ type: integer
+ format: int64
+ username:
+ type: string
+ firstName:
+ type: string
+ lastName:
+ type: string
+ email:
+ type: string
+ password:
+ type: string
+ phone:
+ type: string
+ userStatus:
+ type: integer
+ format: int32
+ description: User Status
+ xml:
+ name: User
+ Tag:
+ title: Pet Tag
+ description: A tag for a pet
+ type: object
+ properties:
+ id:
+ type: integer
+ format: int64
+ name:
+ type: string
+ xml:
+ name: Tag
+ Pet:
+ title: a Pet
+ description: A pet for sale in the pet store
+ type: object
+ required:
+ - name
+ - photoUrls
+ properties:
+ id:
+ type: integer
+ format: int64
+ category:
+ $ref: '#/components/schemas/Category'
+ name:
+ type: string
+ example: doggie
+ photoUrls:
+ type: array
+ xml:
+ name: photoUrl
+ wrapped: true
+ items:
+ type: string
+ tags:
+ type: array
+ xml:
+ name: tag
+ wrapped: true
+ items:
+ $ref: '#/components/schemas/Tag'
+ status:
+ type: string
+ description: pet status in the store
+ enum:
+ - available
+ - pending
+ - sold
+ xml:
+ name: Pet
+ ApiResponse:
+ title: An uploaded response
+ description: Describes the result of uploading an image resource
+ type: object
+ properties:
+ code:
+ type: integer
+ format: int32
+ type:
+ type: string
+ message:
+ type: string