From 0681c958a256dcb3b64ba2f4d967d35242cd8ac6 Mon Sep 17 00:00:00 2001 From: Paul Frazee Date: Tue, 13 Sep 2022 18:17:48 -0500 Subject: [PATCH] Add docs generator and improve http-routes.md generation (#175) --- docs/package.json | 10 + docs/scripts/gen.js | 37 + docs/scripts/http-routes-templates/README.md | 64 + .../http-routes-templates/authentication.def | 5 + .../authentication_none.def | 3 + .../http-routes-templates/callbacks.def | 38 + .../http-routes-templates/code_csharp.dot | 133 ++ .../scripts/http-routes-templates/code_go.dot | 23 + .../http-routes-templates/code_http.dot | 7 + .../http-routes-templates/code_java.dot | 13 + .../http-routes-templates/code_javascript.dot | 16 + .../http-routes-templates/code_jquery.dot | 14 + .../http-routes-templates/code_nodejs.dot | 17 + .../http-routes-templates/code_php.dot | 28 + .../http-routes-templates/code_python.dot | 10 + .../http-routes-templates/code_ruby.dot | 14 + .../http-routes-templates/code_shell.dot | 4 + docs/scripts/http-routes-templates/debug.def | 1 + .../http-routes-templates/discovery.def | 11 + docs/scripts/http-routes-templates/footer.def | 2 + docs/scripts/http-routes-templates/header.dot | 0 docs/scripts/http-routes-templates/links.def | 18 + docs/scripts/http-routes-templates/main.dot | 137 ++ .../http-routes-templates/operation.dot | 54 + .../http-routes-templates/parameters.def | 40 + .../http-routes-templates/responses.def | 81 ++ .../http-routes-templates/security.def | 31 + .../http-routes-templates/translations.dot | 19 + docs/specs/http-routes.md | 960 ++++++++++--- docs/specs/http-routes.yml | 20 +- docs/yarn.lock | 1275 +++++++++++++++++ 31 files changed, 2895 insertions(+), 190 deletions(-) create mode 100644 docs/package.json create mode 100644 docs/scripts/gen.js create mode 100644 docs/scripts/http-routes-templates/README.md create mode 100644 docs/scripts/http-routes-templates/authentication.def create mode 100644 docs/scripts/http-routes-templates/authentication_none.def create mode 100644 docs/scripts/http-routes-templates/callbacks.def create mode 100644 docs/scripts/http-routes-templates/code_csharp.dot create mode 100644 docs/scripts/http-routes-templates/code_go.dot create mode 100644 docs/scripts/http-routes-templates/code_http.dot create mode 100644 docs/scripts/http-routes-templates/code_java.dot create mode 100644 docs/scripts/http-routes-templates/code_javascript.dot create mode 100644 docs/scripts/http-routes-templates/code_jquery.dot create mode 100644 docs/scripts/http-routes-templates/code_nodejs.dot create mode 100644 docs/scripts/http-routes-templates/code_php.dot create mode 100644 docs/scripts/http-routes-templates/code_python.dot create mode 100644 docs/scripts/http-routes-templates/code_ruby.dot create mode 100644 docs/scripts/http-routes-templates/code_shell.dot create mode 100644 docs/scripts/http-routes-templates/debug.def create mode 100644 docs/scripts/http-routes-templates/discovery.def create mode 100644 docs/scripts/http-routes-templates/footer.def create mode 100644 docs/scripts/http-routes-templates/header.dot create mode 100644 docs/scripts/http-routes-templates/links.def create mode 100644 docs/scripts/http-routes-templates/main.dot create mode 100644 docs/scripts/http-routes-templates/operation.dot create mode 100644 docs/scripts/http-routes-templates/parameters.def create mode 100644 docs/scripts/http-routes-templates/responses.def create mode 100644 docs/scripts/http-routes-templates/security.def create mode 100644 docs/scripts/http-routes-templates/translations.dot create mode 100644 docs/yarn.lock diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 00000000000..51a302075cd --- /dev/null +++ b/docs/package.json @@ -0,0 +1,10 @@ +{ + "private": true, + "scripts": { + "build": "node scripts/gen.js" + }, + "dependencies": { + "widdershins": "^4.0.1", + "yaml": "^2.1.1" + } +} diff --git a/docs/scripts/gen.js b/docs/scripts/gen.js new file mode 100644 index 00000000000..47f6edc5523 --- /dev/null +++ b/docs/scripts/gen.js @@ -0,0 +1,37 @@ +const widdershins = require('widdershins') +const yaml = require('yaml') +const fs = require('fs') +const path = require('path') + +async function httpRoutes() { + console.log('Converting http-routes.yml to .md') + const yamlStr = fs.readFileSync( + path.join(__dirname, '..', 'specs', 'http-routes.yml'), + 'utf8', + ) + const md = await widdershins.convert(yaml.parse(yamlStr), { + search: false, + language_tabs: [], + sample: false, + user_templates: path.join(__dirname, 'http-routes-templates'), + }) + fs.writeFileSync( + path.join(__dirname, '..', 'specs', 'http-routes.md'), + stripFrontMatter(md), + ) +} +httpRoutes() +// widdershins --search false --language_tabs false -o docs/specs/http-routes.md --raw docs/specs/http-routes.yml + +function stripFrontMatter(md) { + const lines = md.split('\n') + let numDashLines = 0 + let i = 0 + while (numDashLines < 2) { + if (lines[i].trim() === '---') { + numDashLines++ + } + i++ + } + return lines.slice(i).join('\n') +} diff --git a/docs/scripts/http-routes-templates/README.md b/docs/scripts/http-routes-templates/README.md new file mode 100644 index 00000000000..4ce7c52801a --- /dev/null +++ b/docs/scripts/http-routes-templates/README.md @@ -0,0 +1,64 @@ +## Swagger / OpenAPI 2 and OpenAPI 3 template parameters + +Note that properties of OpenAPI objects will be in OpenAPI 3.0 form, as +Swagger / OpenAPI 2.0 definitions are converted automatically. + +### Code templates + +* `method` - the HTTP method of the operation (in lower-case) +* `methodUpper` - the HTTP method of the operation (in upper-case) +* `url` - the full URL of the operation (including protocol and host) +* `consumes[]` - an array of MIME-types the operation consumes +* `produces[]` - an array of MIME-types the operation produces +* `operation` - the current operation object +* `operationId` - the current operation id +* `opName` - the operationId if set, otherwise the method + path +* `tags[]` - the full list of tags applying to the operation +* `security` - the security definitions applying to the operation +* `resource` - the current tag/path object +* `parameters[]` - an array of parameters for the operation (see below) +* `queryString` - an example queryString, urlEncoded +* `requiredQueryString` - an example queryString for `required:true` parameters +* `queryParameters[]` - a subset of `parameters` that are `in:query` +* `requiredParameters[]` - a subset of `queryParameters` that are `required:true` +* `headerParameters[]` - a subset of `parameters` that are `in:header` +* `allHeaders[]` - a concatenation of `headerParameters` and pseudo-parameters `Accept` and `Content-Type`, and optionally `Authorization` (the latter has an `isAuth` boolean property set true so it can be omitted in templates if desired + +### Parameter template + +* `parameters[]` - an array of [parameters](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#parameterObject), including the following pseudo-properties + * `shortDesc` - a truncated version of the parameter description + * `safeType` - a computed version of the parameter type, including Body and schema names + * `originalType` - the original type of the parameter + * `exampleValues` - an object containing examples for use in code-templates + * `json` - example values in JSON compatible syntax + * `object` - example values in raw object form (unquoted strings etc) + * `depth` - a zero-based indicator of the depth of expanded request body parameters +* `enums[]` - an array of (parameter)name/value pairs + +### Responses template + +* `responses[]` - an array of [responses](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#responseObject), including `status` and `meaning` properties + +### Authentication template + +* `authenticationStr` - a simple string of methods (and scopes where appropriate) +* `securityDefinitions[]` - an array of applicable [securityDefinitions](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#securityRequirementObject) + +### Schema Property template + +* `schemaProperties[]` - an array of + * `name` + * `type` + * `required` + * `description` +* `enums[]` - an array of (schema property)name/value pairs + +### Common to all templates + +* `openapi` - the top-level OpenAPI / Swagger document +* `header` - the front-matter of the Slate/Shins markdown document +* `host` - the (computed) host of the API +* `protocol` - the default/first protocol of the API +* `baseUrl` - the (computed) baseUrl of the API (including protocol and host) +* `widdershins` - the contents of widdershins `package.json` diff --git a/docs/scripts/http-routes-templates/authentication.def b/docs/scripts/http-routes-templates/authentication.def new file mode 100644 index 00000000000..6b039e532ea --- /dev/null +++ b/docs/scripts/http-routes-templates/authentication.def @@ -0,0 +1,5 @@ + + diff --git a/docs/scripts/http-routes-templates/authentication_none.def b/docs/scripts/http-routes-templates/authentication_none.def new file mode 100644 index 00000000000..ddb19cf276a --- /dev/null +++ b/docs/scripts/http-routes-templates/authentication_none.def @@ -0,0 +1,3 @@ + diff --git a/docs/scripts/http-routes-templates/callbacks.def b/docs/scripts/http-routes-templates/callbacks.def new file mode 100644 index 00000000000..77873e30954 --- /dev/null +++ b/docs/scripts/http-routes-templates/callbacks.def @@ -0,0 +1,38 @@ +{{? typeof data.operation.callbacks === 'object'}} + +### Callbacks + +{{ data.operationStack.push(data.operation); }} + +{{ for (var c of Object.keys(data.operation.callbacks)) { }} + +#### {{=c}} + +{{ var callback = data.operation.callbacks && data.operation.callbacks[c]; }} + +{{ for (var e in callback) { }} +{{ if (!e.startsWith('x-widdershins-')) { }} + +**{{=e}}** + +{{ var exp = callback[e]; }} + +{{ for (var m in exp) { }} + +{{ data.operation = exp[m]; }} +{{ data.method.operation = data.operation; }} + +{{= data.templates.operation(data) }} + +{{ } /* of methods */ }} + +{{ } /* of expressions */ }} + +{{ } /* of if */ }} + +{{ } /* of callbacks */ }} + +{{ data.operation = data.operationStack.pop(); }} +{{ data.method.operation = data.operation; }} + +{{?}} diff --git a/docs/scripts/http-routes-templates/code_csharp.dot b/docs/scripts/http-routes-templates/code_csharp.dot new file mode 100644 index 00000000000..39597ad5584 --- /dev/null +++ b/docs/scripts/http-routes-templates/code_csharp.dot @@ -0,0 +1,133 @@ +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Text; +using System.Threading.Tasks; +using Newtonsoft.Json; + +/// <> +/// Example of Http Client +/// <> +public class HttpExample +{ + private HttpClient Client { get; set; } + + /// <> + /// Setup http client + /// <> + public HttpExample() + { + Client = new HttpClient(); + } + {{? data.methodUpper == "GET"}} + /// Make a dummy request + public async Task MakeGetRequest() + { + string url = "{{=data.url}}"; + var result = await GetAsync(url); + } + + /// Performs a GET Request + public async Task GetAsync(string url) + { + //Start the request + HttpResponseMessage response = await Client.GetAsync(url); + + //Validate result + response.EnsureSuccessStatusCode(); + + }{{? }} + {{? data.methodUpper == "POST"}} + /// Make a dummy request + public async Task MakePostRequest() + { + string url = "{{=data.url}}"; + {{? data.bodyParameter.refName !== undefined }} + string json = @"{{=data.bodyParameter.exampleValues.json.replace(new RegExp('"', "g"), '""')}}"; + {{=data.bodyParameter.refName}} content = JsonConvert.DeserializeObject(json); + await PostAsync(content, url); + {{? }} + {{? data.bodyParameter.refName === undefined }} + await PostAsync(null, url); + {{? }} + } + + /// Performs a POST Request + public async Task PostAsync({{=data.bodyParameter.refName}} content, string url) + { + //Serialize Object + StringContent jsonContent = SerializeObject(content); + + //Execute POST request + HttpResponseMessage response = await Client.PostAsync(url, jsonContent); + }{{? }} + {{? data.methodUpper == "PUT"}} + /// Make a dummy request + public async Task MakePutRequest() + { + int id = 1; + string url = "{{=data.url}}"; + + {{? data.bodyParameter.refName !== undefined }} + string json = @"{{=data.bodyParameter.exampleValues.json.replace(new RegExp('"', "g"), '""')}}"; + {{=data.bodyParameter.refName}} content = JsonConvert.DeserializeObject(json); + var result = await PutAsync(id, content, url); + {{? }} + {{? data.bodyParameter.refName === undefined }} + var result = await PutAsync(id, null, url); + {{? }} + } + + /// Performs a PUT Request + public async Task PutAsync(int id, {{=data.bodyParameter.refName}} content, string url) + { + //Serialize Object + StringContent jsonContent = SerializeObject(content); + + //Execute PUT request + HttpResponseMessage response = await Client.PutAsync(url + $"/{id}", jsonContent); + + //Return response + return await DeserializeObject(response); + }{{? }} + {{? data.methodUpper == "DELETE"}} + /// Make a dummy request + public async Task MakeDeleteRequest() + { + int id = 1; + string url = "{{=data.url}}"; + + await DeleteAsync(id, url); + } + + /// Performs a DELETE Request + public async Task DeleteAsync(int id, string url) + { + //Execute DELETE request + HttpResponseMessage response = await Client.DeleteAsync(url + $"/{id}"); + + //Return response + await DeserializeObject(response); + }{{? }} + {{? data.methodUpper == "POST" || data.methodUpper == "PUT"}} + /// Serialize an object to Json + private StringContent SerializeObject({{=data.bodyParameter.refName}} content) + { + //Serialize Object + string jsonObject = JsonConvert.SerializeObject(content); + + //Create Json UTF8 String Content + return new StringContent(jsonObject, Encoding.UTF8, "application/json"); + } + {{? }} + /// Deserialize object from request response + private async Task DeserializeObject(HttpResponseMessage response) + { + //Read body + string responseBody = await response.Content.ReadAsStringAsync(); + + //Deserialize Body to object + var result = JsonConvert.DeserializeObject(responseBody); + } +} diff --git a/docs/scripts/http-routes-templates/code_go.dot b/docs/scripts/http-routes-templates/code_go.dot new file mode 100644 index 00000000000..08180f26e62 --- /dev/null +++ b/docs/scripts/http-routes-templates/code_go.dot @@ -0,0 +1,23 @@ +package main + +import ( + "bytes" + "net/http" +) + +func main() { + +{{?data.allHeaders.length}} + headers := map[string][]string{ + {{~data.allHeaders :p:index}}"{{=p.name}}": []string{"{{=p.exampleValues.object}}"},{{?index < data.allHeaders.length-1}} + {{?}}{{~}} + }{{?}} + + data := bytes.NewBuffer([]byte{jsonReq}) + req, err := http.NewRequest("{{=data.methodUpper}}", "{{=data.url}}", data) + req.Header = headers + + client := &http.Client{} + resp, err := client.Do(req) + // ... +} diff --git a/docs/scripts/http-routes-templates/code_http.dot b/docs/scripts/http-routes-templates/code_http.dot new file mode 100644 index 00000000000..74b0333cf9e --- /dev/null +++ b/docs/scripts/http-routes-templates/code_http.dot @@ -0,0 +1,7 @@ +{{=data.methodUpper}} {{=data.url}}{{=data.requiredQueryString}} HTTP/1.1 +{{? data.host}}Host: {{=data.host}}{{?}} +{{?data.consumes.length}}Content-Type: {{=data.consumes[0]}} +{{?}}{{?data.produces.length}}Accept: {{=data.produces[0]}}{{?}} +{{?data.headerParameters.length}}{{~ data.headerParameters :p:index}}{{=p.name}}: {{=p.exampleValues.object}} +{{~}} +{{?}} diff --git a/docs/scripts/http-routes-templates/code_java.dot b/docs/scripts/http-routes-templates/code_java.dot new file mode 100644 index 00000000000..8d61d00c6db --- /dev/null +++ b/docs/scripts/http-routes-templates/code_java.dot @@ -0,0 +1,13 @@ +URL obj = new URL("{{=data.url}}{{=data.requiredQueryString}}"); +HttpURLConnection con = (HttpURLConnection) obj.openConnection(); +con.setRequestMethod("{{=data.methodUpper}}"); +int responseCode = con.getResponseCode(); +BufferedReader in = new BufferedReader( + new InputStreamReader(con.getInputStream())); +String inputLine; +StringBuffer response = new StringBuffer(); +while ((inputLine = in.readLine()) != null) { + response.append(inputLine); +} +in.close(); +System.out.println(response.toString()); diff --git a/docs/scripts/http-routes-templates/code_javascript.dot b/docs/scripts/http-routes-templates/code_javascript.dot new file mode 100644 index 00000000000..31d6dcc4574 --- /dev/null +++ b/docs/scripts/http-routes-templates/code_javascript.dot @@ -0,0 +1,16 @@ +{{?data.bodyParameter.present}}const inputBody = '{{=data.bodyParameter.exampleValues.json}}';{{?}} +{{?data.allHeaders.length}}const headers = { +{{~data.allHeaders :p:index}} '{{=p.name}}':{{=p.exampleValues.json}}{{?index < data.allHeaders.length-1}},{{?}} +{{~}}}; +{{?}} +fetch('{{=data.url}}{{=data.requiredQueryString}}', +{ + method: '{{=data.methodUpper}}'{{?data.bodyParameter.present || data.allHeaders.length}},{{?}} +{{?data.bodyParameter.present}} body: inputBody{{?}}{{? data.bodyParameter.present && data.allHeaders.length}},{{?}} +{{?data.allHeaders.length}} headers: headers{{?}} +}) +.then(function(res) { + return res.json(); +}).then(function(body) { + console.log(body); +}); diff --git a/docs/scripts/http-routes-templates/code_jquery.dot b/docs/scripts/http-routes-templates/code_jquery.dot new file mode 100644 index 00000000000..06d26413365 --- /dev/null +++ b/docs/scripts/http-routes-templates/code_jquery.dot @@ -0,0 +1,14 @@ +{{?data.allHeaders.length}}var headers = { +{{~data.allHeaders :p:index}} '{{=p.name}}':{{=p.exampleValues.json}}{{?index < data.allHeaders.length-1}},{{?}} +{{~}} +}; +{{?}} +$.ajax({ + url: '{{=data.url}}', + method: '{{=data.method.verb}}', +{{?data.requiredQueryString}} data: '{{=data.requiredQueryString}}',{{?}} +{{?data.allHeaders.length}} headers: headers,{{?}} + success: function(data) { + console.log(JSON.stringify(data)); + } +}) diff --git a/docs/scripts/http-routes-templates/code_nodejs.dot b/docs/scripts/http-routes-templates/code_nodejs.dot new file mode 100644 index 00000000000..876d4bf1c1d --- /dev/null +++ b/docs/scripts/http-routes-templates/code_nodejs.dot @@ -0,0 +1,17 @@ +const fetch = require('node-fetch'); +{{?data.bodyParameter.present}}const inputBody = {{=data.bodyParameter.exampleValues.json}};{{?}} +{{?data.allHeaders.length}}const headers = { +{{~data.allHeaders :p:index}} '{{=p.name}}':{{=p.exampleValues.json}}{{?index < data.allHeaders.length-1}},{{?}} +{{~}}}; +{{?}} +fetch('{{=data.url}}{{=data.requiredQueryString}}', +{ + method: '{{=data.methodUpper}}'{{?data.bodyParameter.present || data.allHeaders.length}},{{?}} +{{?data.bodyParameter.present}} body: JSON.stringify(inputBody){{?}}{{? data.bodyParameter.present && data.allHeaders.length}},{{?}} +{{?data.allHeaders.length}} headers: headers{{?}} +}) +.then(function(res) { + return res.json(); +}).then(function(body) { + console.log(body); +}); diff --git a/docs/scripts/http-routes-templates/code_php.dot b/docs/scripts/http-routes-templates/code_php.dot new file mode 100644 index 00000000000..5802466b77c --- /dev/null +++ b/docs/scripts/http-routes-templates/code_php.dot @@ -0,0 +1,28 @@ + '{{=p.exampleValues.object}}', +{{?index < data.allHeaders.length-1}} {{?}}{{~}});{{?}} + +$client = new \GuzzleHttp\Client(); + +// Define array of request body. +$request_body = array(); + +try { + $response = $client->request('{{=data.methodUpper}}','{{=data.url}}', array( + 'headers' => $headers, + 'json' => $request_body, + ) + ); + print_r($response->getBody()->getContents()); + } + catch (\GuzzleHttp\Exception\BadResponseException $e) { + // handle exception or api errors. + print_r($e->getMessage()); + } + + // ... diff --git a/docs/scripts/http-routes-templates/code_python.dot b/docs/scripts/http-routes-templates/code_python.dot new file mode 100644 index 00000000000..5f3020650a1 --- /dev/null +++ b/docs/scripts/http-routes-templates/code_python.dot @@ -0,0 +1,10 @@ +import requests +{{?data.allHeaders.length}}headers = { +{{~data.allHeaders :p:index}} '{{=p.name}}': {{=p.exampleValues.json}}{{?index < data.allHeaders.length-1}},{{?}} +{{~}}} +{{?}} +r = requests.{{=data.method.verb}}('{{=data.url}}'{{? data.requiredParameters.length}}, params={ +{{~ data.requiredParameters :p:index}} '{{=p.name}}': {{=p.exampleValues.json}}{{? data.requiredParameters.length-1 != index }},{{?}}{{~}} +}{{?}}{{?data.allHeaders.length}}, headers = headers{{?}}) + +print(r.json()) diff --git a/docs/scripts/http-routes-templates/code_ruby.dot b/docs/scripts/http-routes-templates/code_ruby.dot new file mode 100644 index 00000000000..172219db1ea --- /dev/null +++ b/docs/scripts/http-routes-templates/code_ruby.dot @@ -0,0 +1,14 @@ +require 'rest-client' +require 'json' + +{{?data.allHeaders.length}}headers = { +{{~data.allHeaders :p:index}} '{{=p.name}}' => {{=p.exampleValues.json}}{{?index < data.allHeaders.length-1}},{{?}} +{{~}}}{{?}} + +result = RestClient.{{=data.method.verb}} '{{=data.url}}', + params: { + {{~ data.requiredParameters :p:index}}'{{=p.name}}' => '{{=p.safeType}}'{{? data.requiredParameters.length-1 != index }},{{?}} +{{~}}}{{? data.allHeaders.length}}, headers: headers +{{?}} + +p JSON.parse(result) diff --git a/docs/scripts/http-routes-templates/code_shell.dot b/docs/scripts/http-routes-templates/code_shell.dot new file mode 100644 index 00000000000..62811c0e4cb --- /dev/null +++ b/docs/scripts/http-routes-templates/code_shell.dot @@ -0,0 +1,4 @@ +# You can also use wget +curl -X {{=data.methodUpper}} {{=data.url}}{{=data.requiredQueryString}}{{?data.allHeaders.length}} \{{?}} +{{~data.allHeaders :p:index}} -H '{{=p.name}}: {{=p.exampleValues.object}}'{{?index < data.allHeaders.length-1}} \{{?}} +{{~}} diff --git a/docs/scripts/http-routes-templates/debug.def b/docs/scripts/http-routes-templates/debug.def new file mode 100644 index 00000000000..04fcf8f761b --- /dev/null +++ b/docs/scripts/http-routes-templates/debug.def @@ -0,0 +1 @@ +{{= data.utils.inspect(data) }} diff --git a/docs/scripts/http-routes-templates/discovery.def b/docs/scripts/http-routes-templates/discovery.def new file mode 100644 index 00000000000..4755a7b8a3d --- /dev/null +++ b/docs/scripts/http-routes-templates/discovery.def @@ -0,0 +1,11 @@ + diff --git a/docs/scripts/http-routes-templates/footer.def b/docs/scripts/http-routes-templates/footer.def new file mode 100644 index 00000000000..139597f9cb0 --- /dev/null +++ b/docs/scripts/http-routes-templates/footer.def @@ -0,0 +1,2 @@ + + diff --git a/docs/scripts/http-routes-templates/header.dot b/docs/scripts/http-routes-templates/header.dot new file mode 100644 index 00000000000..e69de29bb2d diff --git a/docs/scripts/http-routes-templates/links.def b/docs/scripts/http-routes-templates/links.def new file mode 100644 index 00000000000..990e1305d4d --- /dev/null +++ b/docs/scripts/http-routes-templates/links.def @@ -0,0 +1,18 @@ +{{? data.response.links }} + +#### Links + +{{ for (var l in data.response.links) { }} +{{ var link = data.response.links[l]; }} + +**{{=l}}** => {{?link.operationId}}{{=link.operationId}}{{??}}{{=link.operationRef}}{{?}} + +{{? link.parameters }} +|Parameter|Expression| +|---|---| +{{for (var p in link.parameters) { }}|{{=p}}|{{=link.parameters[p]}}|{{ } }} +{{?}} + +{{ } /* of links */ }} + +{{?}} diff --git a/docs/scripts/http-routes-templates/main.dot b/docs/scripts/http-routes-templates/main.dot new file mode 100644 index 00000000000..4f81b994bf6 --- /dev/null +++ b/docs/scripts/http-routes-templates/main.dot @@ -0,0 +1,137 @@ +{{= data.tags.section }} +

{{=data.api.info && data.api.info.title}} {{=data.version}}

+ +{{? data.api.info && data.api.info.description}}{{=data.api.info.description}}{{?}} + +{{? data.api.servers }} +Base URLs: +{{~data.api.servers :s}} +* {{=s.url}} +{{ for(var v in s.variables) { }} + * **{{=v}}** - {{=s.variables[v].description||''}} Default: {{=s.variables[v].default}} +{{? s.variables[v].enum}} +{{~ s.variables[v].enum :e}} + * {{= e}} +{{~}} +{{?}} +{{ } }} +{{~}} +{{?}} + +{{? data.api.info && data.api.info.termsOfService}}Terms of service{{?}} +{{? data.api.info && data.api.info.contact}}{{? data.api.info.contact.email}}Email: {{=data.api.info.contact.name || 'Support'}} {{?}}{{? data.api.info.contact.url}}Web: {{= data.api.info.contact.name || 'Support'}} {{?}}{{?}} +{{? data.api.info && data.api.info.license}}{{? data.api.info.license.url}}License: {{=data.api.info.license.name}}{{??}} License: {{=data.api.info.license.name}}{{?}}{{?}} +{{= data.tags.endSection }} + +{{? data.api.components && data.api.components.securitySchemes }} +{{#def.security}} +{{?}} + +{{ for (var r in data.resources) { }} +{{ data.resource = data.resources[r]; }} + +{{= data.tags.section }} +

{{= r}}

+ +{{? data.resource.description }}{{= data.resource.description}}{{?}} + +{{? data.resource.externalDocs}} +{{=data.resource.externalDocs.description||'External documentation'}} +{{?}} + +{{ for (var m in data.resource.methods) { }} +{{ data.operationUniqueName = m; }} +{{ data.method = data.resource.methods[m]; }} +{{ data.operationUniqueSlug = data.method.slug; }} +{{ data.operation = data.method.operation; }} +{{= data.templates.operation(data) }} +{{ } /* of methods */ }} + +{{= data.tags.endSection }} +{{ } /* of resources */ }} + +{{? data.api.components && data.api.components.schemas }} +{{= data.tags.section }} + +# Schemas + +{{ for (var s in data.components.schemas) { }} +{{ var origSchema = data.components.schemas[s]; }} +{{ var schema = data.api.components.schemas[s]; }} + +{{= data.tags.section }} +

{{=s}}

+{{ /* backwards compatibility */ }} + + + + + +{{? data.options.yaml }} +```yaml +{{=data.utils.yaml.stringify(data.utils.getSample(schema,data.options,{quiet:true},data.api))}} +{{??}} +```json +{{=data.utils.safejson(data.utils.getSample(schema,data.options,{quiet:true},data.api),null,2)}} +{{?}} +``` + +{{ var enums = []; }} +{{ var blocks = data.utils.schemaToArray(origSchema,-1,{trim:true,join:true},data); }} +{{ for (var block of blocks) { + for (var p of block.rows) { + if (p.schema && p.schema.enum) { + for (var e of p.schema.enum) { + enums.push({name:p.name,value:e}); + } + } + } + } +}} + +{{~ blocks :block}} +{{? block.title }}{{= block.title}}{{= '\n\n'}}{{?}} +{{? block.externalDocs}} +{{=block.externalDocs.description||'External documentation'}} +{{?}} + +{{? block===blocks[0] }} +{{= data.tags.section }} + +### Properties +{{?}} + +{{? block.rows.length}}|Name|Type|Required|Restrictions|Description| +|---|---|---|---|---|{{?}} +{{~ block.rows :p}}|{{=p.displayName}}|{{=p.safeType}}|{{=p.required}}|{{=p.restrictions||'none'}}|{{=p.description||'none'}}| +{{~}} +{{~}} +{{? (blocks[0].rows.length === 0) && (blocks.length === 1) }} +*None* +{{?}} + +{{? enums.length > 0 }} +{{= data.tags.section }} + +#### Enumerated Values + +|Property|Value| +|---|---| +{{~ enums :e}}|{{=e.name}}|{{=data.utils.toPrimitive(e.value)}}| +{{~}} + +{{= data.tags.endSection }} +{{?}} + +{{= data.tags.endSection }} +{{= data.tags.endSection }} + +{{ } /* of schemas */ }} + +{{?}} + +{{#def.footer}} + +{{? data.options.discovery}} +{{#def.discovery}} +{{?}} diff --git a/docs/scripts/http-routes-templates/operation.dot b/docs/scripts/http-routes-templates/operation.dot new file mode 100644 index 00000000000..2c85fbe7356 --- /dev/null +++ b/docs/scripts/http-routes-templates/operation.dot @@ -0,0 +1,54 @@ +{{= data.tags.section }} + +## {{= data.operationUniqueName}} + +{{? data.operation.operationId}} + +{{?}} + +{{ data.methodUpper = data.method.verb.toUpperCase(); }} +{{ data.url = data.utils.slashes(data.baseUrl + data.method.path); }} +{{ data.parameters = data.operation.parameters; }} +{{ data.enums = []; }} +{{ data.utils.fakeProdCons(data); }} +{{ data.utils.fakeBodyParameter(data); }} +{{ data.utils.mergePathParameters(data); }} +{{ data.utils.getParameters(data); }} + +{{? data.options.codeSamples || data.operation["x-code-samples"] }} +> Code samples + +{{= data.utils.getCodeSamples(data) }} +{{?}} + +`{{= data.methodUpper}} {{=data.method.path}}` + +{{? data.operation.summary && !data.options.tocSummary}}*{{= data.operation.summary }}*{{?}} + +{{? data.operation.description}}{{= data.operation.description }}{{?}} + +{{? data.operation.requestBody}} +> Body parameter + +{{? data.bodyParameter.exampleValues.description }} +> {{= data.bodyParameter.exampleValues.description }} +{{?}} + +{{= data.utils.getBodyParameterExamples(data) }} +{{?}} + +{{? data.parameters && data.parameters.length }} +{{#def.parameters}} +{{?}} + +{{#def.responses}} + +{{#def.callbacks}} + +{{ data.security = data.operation.security ? data.operation.security : data.api.security; }} +{{? data.security && data.security.length }} +{{#def.authentication}} +{{??}} +{{#def.authentication_none}} +{{?}} +{{= data.tags.endSection }} diff --git a/docs/scripts/http-routes-templates/parameters.def b/docs/scripts/http-routes-templates/parameters.def new file mode 100644 index 00000000000..a35c1587683 --- /dev/null +++ b/docs/scripts/http-routes-templates/parameters.def @@ -0,0 +1,40 @@ +{{= data.tags.section }} +

Parameters

+ +|Name|In|Type|Required|Description| +|---|---|---|---|---| +{{~ data.parameters :p}}|{{=p.name}}|{{=p.in}}|{{=p.safeType}}|{{=p.required}}|{{=p.shortDesc || 'none'}}| +{{~}} + +{{? data.longDescs }} +#### Detailed descriptions +{{~ data.parameters :p}}{{? p.shortDesc !== p.description}} +**{{=p.name}}**: {{=p.description}}{{?}} +{{~}} +{{?}} + +{{~ data.parameters :p}} + +{{? p.schema && p.schema.enum }} +{{~ p.schema.enum :e}} +{{ var entry = {}; entry.name = p.name; entry.value = e; data.enums.push(entry); }} +{{~}} +{{?}} + +{{? p.schema && p.schema.items && p.schema.items.enum }} +{{~ p.schema.items.enum :e}} +{{ var entry = {}; entry.name = p.name; entry.value = e; data.enums.push(entry); }} +{{~}} +{{?}} + +{{~}} + +{{? data.enums && data.enums.length }} +#### Enumerated Values + +|Parameter|Value| +|---|---| +{{~ data.enums :e}}|{{=e.name}}|{{=data.utils.toPrimitive(e.value)}}| +{{~}} +{{?}} +{{= data.tags.endSection }} diff --git a/docs/scripts/http-routes-templates/responses.def b/docs/scripts/http-routes-templates/responses.def new file mode 100644 index 00000000000..c2da29148d6 --- /dev/null +++ b/docs/scripts/http-routes-templates/responses.def @@ -0,0 +1,81 @@ +{{ data.responses = data.utils.getResponses(data); }} +{{ data.responseSchemas = false; }} +{{~ data.responses :response }} +{{ if (response.content) data.responseSchemas = true; }} +{{~}} + +{{= data.tags.section }} +

Responses

+ +|Status|Meaning|Description|Schema| +|---|---|---|---| +{{~ data.responses :r}}|{{=r.status}}|{{=r.meaning}}|{{=r.description || 'none'}}|{{=r.schema}}| +{{~}} + +{{ data.responseSchemas = false; }} +{{~ data.responses :response }} +{{ if (response.content && !response.$ref && !data.utils.isPrimitive(response.type)) data.responseSchemas = true; }} +{{~}} +{{? data.responseSchemas }} +

Response Schema

+{{~ data.responses :response}} +{{? response.content && !response.$ref && !data.utils.isPrimitive(response.type)}} +{{? Object.keys(response.content).length }} +{{ var responseKey = Object.keys(response.content)[0]; }} +{{ var responseSchema = response.content[responseKey].schema; }} +{{ var enums = []; }} +{{ var blocks = data.utils.schemaToArray(responseSchema,0,{trim:true,join:true},data); }} +{{ for (var block of blocks) { + for (var p of block.rows) { + if (p.schema && p.schema.enum) { + for (var e of p.schema.enum) { + enums.push({name:p.name,value:e}); + } + } + } + } +}} + +{{? blocks[0].rows.length || blocks[0].title }} +Status Code **{{=response.status}}** + +{{~ blocks :block}} +{{? block.title }}*{{=block.title}}* +{{?}} +|Name|Type|Required|Restrictions|Description| +|---|---|---|---|---| +{{~block.rows :p}}|{{=p.displayName}}|{{=p.safeType}}|{{=p.required}}|{{=p.restrictions||'none'}}|{{=p.description||'none'}}| +{{~}} +{{~}} +{{?}} + +{{? enums.length > 0 }} +#### Enumerated Values + +|Property|Value| +|---|---| +{{~ enums :e}}|{{=e.name}}|{{=data.utils.toPrimitive(e.value)}}| +{{~}} + +{{?}} +{{?}} + +{{ data.response = response; }} +{{#def.links}} + +{{?}} +{{~}} +{{?}} + +{{ data.responseHeaders = data.utils.getResponseHeaders(data); }} +{{? data.responseHeaders.length }} + +### Response Headers + +|Status|Header|Type|Format|Description| +|---|---|---|---|---| +{{~ data.responseHeaders :h}}|{{=h.status}}|{{=h.header}}|{{=h.type}}|{{=h.format||''}}|{{=h.description||'none'}}| +{{~}} + +{{?}} +{{= data.tags.endSection }} diff --git a/docs/scripts/http-routes-templates/security.def b/docs/scripts/http-routes-templates/security.def new file mode 100644 index 00000000000..2e83581d9b8 --- /dev/null +++ b/docs/scripts/http-routes-templates/security.def @@ -0,0 +1,31 @@ +{{= data.tags.section }} + +# Authentication + +{{ for (var s in data.api.components.securitySchemes) { }} +{{ var sd = data.api.components.securitySchemes[s]; }} +{{? sd.type == 'apiKey' }} +* API Key ({{=s}}) + - Parameter Name: **{{=sd.name}}**, in: {{=sd.in}}. {{=sd.description || ''}} +{{?}} +{{? sd.type == 'http'}} +- HTTP Authentication, scheme: {{=sd.scheme}}{{? sd.description }}
{{=sd.description}}{{?}} +{{?}} +{{? sd.type == 'oauth2'}} +- oAuth2 authentication. {{=sd.description || ''}} +{{ for (var f in sd.flows) { }} +{{ var flow = sd.flows[f]; }} + - Flow: {{=f}} +{{? flow.authorizationUrl}} - Authorization URL = [{{=flow.authorizationUrl}}]({{=flow.authorizationUrl}}){{?}} +{{? flow.tokenUrl}} - Token URL = [{{=flow.tokenUrl}}]({{=flow.tokenUrl}}){{?}} +{{? flow.scopes && Object.keys(flow.scopes).length}} +|Scope|Scope Description| +|---|---| +{{ for (var sc in flow.scopes) { }}|{{=sc}}|{{=data.utils.join(flow.scopes[sc])}}| +{{ } /* of scopes */ }} +{{?}} +{{ } /* of flows */ }} +{{?}} +{{ } /* of securitySchemes */ }} + +{{= data.tags.endSection }} diff --git a/docs/scripts/http-routes-templates/translations.dot b/docs/scripts/http-routes-templates/translations.dot new file mode 100644 index 00000000000..b58e9125597 --- /dev/null +++ b/docs/scripts/http-routes-templates/translations.dot @@ -0,0 +1,19 @@ +{{ +data.translations.defaultTag = 'Default'; +data.translations.response = 'Response'; +data.translations.responseDefault = 'Default'; +data.translations.responseUnknown = 'Unknown'; +data.translations.schemaInline = 'Inline'; +data.translations.schemaNone = 'None'; +data.translations.externalDocs = 'External documentation'; +data.translations.secDefNone = 'None'; +data.translations.secDefScopes = 'Scopes'; +data.translations.anonymous = 'anonymous'; +data.translations.continued = 'continued'; +data.translations.indent = '»'; +data.translations.readOnly = 'read-only'; +data.translations.writeOnly = 'write-only'; +data.tags = {}; +data.tags.section = data.options.respec ? '
' : ''; +data.tags.endSection = data.options.respec ? '
' : ''; +}} diff --git a/docs/specs/http-routes.md b/docs/specs/http-routes.md index a0a1dbbd78b..43a9fc613ce 100644 --- a/docs/specs/http-routes.md +++ b/docs/specs/http-routes.md @@ -1,278 +1,860 @@ -# ADX HTTP Routes -**Version: 0.0.0** +

ADX HTTP Routes v0.0.0

ADX exchanges data using HTTP/S. This document enumerates the routes and their expected behaviors. -[Learn more about ADX](https://github.com/bluesky-social/adx/) +Base URLs: -## /.well-known/adx-did +* http://localhost:2583 -### GET -Provides the DID of the repo indicated by the Host parameter. + License: MIT -#### Responses +

protocol

-| Code | Description | -| ---- | ----------- | -| 200 | Successful operation | text/plain: string | +Server-to-server protocol operations. -## /.adx/v1/data/root +## resolveName -### GET -Gets the current root CID of a repo. + -#### Parameters +`GET /.well-known/adx-did` -| Name | Located in | Description | Required | Schema | -| ---- | ---------- | ----------- | -------- | ---- | -| did | query | The DID of the repo to request. | Yes | string | +*Provides the DID of the repo indicated by the Host parameter.* -#### Responses +

Responses

-| Code | Description | -| ---- | ----------- | -| 200 | Successful operation | application/json: object | +|Status|Meaning|Description|Schema| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|Successful operation|string| -## /.adx/v1/data/repo + -### GET -Gets the repo state as a CAR file. +## getRepoRoot -#### Parameters + -| Name | Located in | Description | Required | Schema | -| ---- | ---------- | ----------- | -------- | ---- | -| did | query | The DID of the repo to request. | Yes | string | -| from | query | The CID of a previous commit. | No | string | +`GET /.adx/v1/data/root` -#### Responses +*Gets the current root CID of a repo.* -| Code | Description | -| ---- | ----------- | -| 200 | Successful operation | application/octet-stream: binary | +

Parameters

-## /.adx/v1/data/repo/{did} +|Name|In|Type|Required|Description| +|---|---|---|---|---| +|did|query|string|true|The DID of the repo to request.| -### POST -Writes commits to a repo. +

Responses

-#### Parameters +|Status|Meaning|Description|Schema| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|Successful operation|[RepoRoot](#schemareporoot)| -| Name | Located in | Description | Required | Schema | -| ---- | ---------- | ----------- | -------- | ---- | -| did | path | The DID of the repo to modify. | Yes | string | + -#### Responses +## getRepoState -| Code | Description | -| ---- | ----------- | -| 200 | Successful operation | + -## /.adx/v1/account +`GET /.adx/v1/data/repo` -### GET -Get information about the account. +*Gets the repo state as a CAR file.* -### POST -Create an account. +

Parameters

-### DELETE -Delete an account. +|Name|In|Type|Required|Description| +|---|---|---|---|---| +|did|query|string|true|The DID of the repo to request.| +|from|query|string|false|The CID of a previous commit.| -## /.adx/v1/session +

Responses

-### GET -Get information about the current session. +|Status|Meaning|Description|Schema| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|Successful operation|string| -### POST -Create an session. + -### DELETE -Delete the current session. +## writeRepoState -## /.adx/v1/api/repo/{did} + -### GET -Get information about the repo, including the list of collections. +`POST /.adx/v1/data/repo/{did}` -#### Parameters +*Writes commits to a repo.* -| Name | Located in | Description | Required | Schema | -| ---- | ---------- | ----------- | -------- | ---- | -| did | path | The DID of the repo to request. | Yes | string | +> Body parameter -#### Responses +```yaml +type: string +format: binary -| Code | Description | -| ---- | ----------- | -| 200 | Successful operation | +``` -### POST -Apply a batch transaction of creates, puts, and deletes. +

Parameters

-#### Parameters +|Name|In|Type|Required|Description| +|---|---|---|---|---| +|did|path|string|true|The DID of the repo to modify.| +|body|body|string(binary)|true|A CAR file.| -| Name | Located in | Description | Required | Schema | -| ---- | ---------- | ----------- | -------- | ---- | -| did | path | The DID of the repo to modify. | Yes | string | -| validate | query | Validate the record? Defaults to true. | No | string | +

Responses

-#### Responses +|Status|Meaning|Description|Schema| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|Successful operation|None| -| Code | Description | -| ---- | ----------- | -| 200 | Successful operation | + -## /.adx/v1/api/repo/{did}/c/{namespace}/{dataset} +

account

-### GET -Get information about the repo, including the list of collections. +Account management API. -#### Parameters +## getAccount -| Name | Located in | Description | Required | Schema | -| ---- | ---------- | ----------- | -------- | ---- | -| did | path | The DID of the repo to request. | Yes | string | -| namespace | path | The namespace of the collection to request. | Yes | string | -| dataset | path | The name of the collection to request. | Yes | string | -| limit | query | The number of records to return. Defaults to 50. TODO- max number? | No | number | -| before | query | A TID to filter the range of records returned. | No | string | -| after | query | A TID to filter the range of records returned. | No | string | + -#### Responses +`GET /.adx/v1/account` -| Code | Description | -| ---- | ----------- | -| 200 | Successful operation | +*Get information about the account.* -### POST -Create a new record. +

Responses

-#### Parameters +|Status|Meaning|Description|Schema| +|---|---|---|---| -| Name | Located in | Description | Required | Schema | -| ---- | ---------- | ----------- | -------- | ---- | -| did | path | The DID of the repo to modify. | Yes | string | -| namespace | path | The namespace of the collection to write to. | Yes | string | -| dataset | path | The name of the collection to write to. | Yes | string | -| validate | query | Validate the record? Defaults to true. | No | string | + -#### Responses +## updateAccount -| Code | Description | -| ---- | ----------- | -| 200 | Successful operation | + -## /.adx/v1/api/repo/{did}/c/{namespace}/{dataset}/r/{tid} +`POST /.adx/v1/account` -### GET -Get information about the repo, including the list of collections. +*Create an account.* -#### Parameters +

Responses

-| Name | Located in | Description | Required | Schema | -| ---- | ---------- | ----------- | -------- | ---- | -| did | path | The DID of the repo to request. | Yes | string | -| namespace | path | The namespace of the collection to request. | Yes | string | -| dataset | path | The name of the collection to request. | Yes | string | -| tid | path | The TID of the record to request. | Yes | string | +|Status|Meaning|Description|Schema| +|---|---|---|---| -#### Responses + -| Code | Description | -| ---- | ----------- | -| 200 | Successful operation | +## deleteAccount -### PUT -Write a record. + -#### Parameters +`DELETE /.adx/v1/account` -| Name | Located in | Description | Required | Schema | -| ---- | ---------- | ----------- | -------- | ---- | -| did | path | The DID of the repo to modify. | Yes | string | -| namespace | path | The namespace of the collection to write to. | Yes | string | -| dataset | path | The name of the collection to write to. | Yes | string | -| tid | path | The TID of the record to write to. | Yes | string | -| validate | query | Validate the record? Defaults to true. | No | string | +*Delete an account.* -#### Responses +

Responses

-| Code | Description | -| ---- | ----------- | -| 200 | Successful operation | +|Status|Meaning|Description|Schema| +|---|---|---|---| -### DELETE -Delete a record. + -#### Parameters +

session

-| Name | Located in | Description | Required | Schema | -| ---- | ---------- | ----------- | -------- | ---- | -| did | path | The DID of the repo to modify. | Yes | string | -| namespace | path | The namespace of the collection to write to. | Yes | string | -| dataset | path | The name of the collection to write to. | Yes | string | -| tid | path | The TID of the record to write to. | Yes | string | +Session management API. -#### Responses +## getSession -| Code | Description | -| ---- | ----------- | -| 200 | Successful operation | + -## /.adx/v1/api/view/{viewId} +`GET /.adx/v1/session` -### GET -Fetch a view. +*Get information about the current session.* -#### Parameters +

Responses

-| Name | Located in | Description | Required | Schema | -| ---- | ---------- | ----------- | -------- | ---- | -| viewId | path | The ID of the view to request. | Yes | string | +|Status|Meaning|Description|Schema| +|---|---|---|---| -#### Responses + -| Code | Description | -| ---- | ----------- | -| 200 | Successful operation | +## createSession -### Models + -#### RepoRoot +`POST /.adx/v1/session` -| Name | Type | Description | Required | -| ---- | ---- | ----------- | -------- | -| root | string | | Yes | +*Create an session.* -#### BatchWrite +

Responses

-| Name | Type | Description | Required | -| ---- | ---- | ----------- | -------- | -| writes | [ ] | | Yes | +|Status|Meaning|Description|Schema| +|---|---|---|---| -#### BatchWriteCreate + -| Name | Type | Description | Required | -| ---- | ---- | ----------- | -------- | -| action | string | _Enum:_ `"create"` | Yes | -| collection | string | | Yes | -| value | | | Yes | +## deleteSession -#### BatchWriteUpdate + -| Name | Type | Description | Required | -| ---- | ---- | ----------- | -------- | -| action | string | _Enum:_ `"update"` | Yes | -| collection | string | | Yes | -| tid | string | | Yes | -| value | | | Yes | +`DELETE /.adx/v1/session` -#### BatchWriteDelete +*Delete the current session.* + +

Responses

+ +|Status|Meaning|Description|Schema| +|---|---|---|---| + + + +

repo

+ +Repository API. + +## describeRepo + + + +`GET /.adx/v1/api/repo/{did}` + +*Get information about the repo, including the list of collections.* + +

Parameters

+ +|Name|In|Type|Required|Description| +|---|---|---|---|---| +|did|path|string|true|The DID of the repo to request.| + +

Responses

+ +|Status|Meaning|Description|Schema| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|Successful operation|None| + + + +## batchWriteRepo + + + +`POST /.adx/v1/api/repo/{did}` + +*Apply a batch transaction of creates, puts, and deletes.* + +> Body parameter + +```json +{ + "type": "object", + "required": [ + "writes" + ], + "properties": { + "writes": { + "type": "array", + "items": { + "oneOf": [ + { + "type": "object", + "required": [ + "action", + "collection", + "value" + ], + "properties": { + "action": { + "type": "string", + "enum": [ + "create" + ] + }, + "collection": { + "type": "string" + }, + "value": {} + } + }, + { + "type": "object", + "required": [ + "action", + "collection", + "tid", + "value" + ], + "properties": { + "action": { + "type": "string", + "enum": [ + "update" + ] + }, + "collection": { + "type": "string" + }, + "tid": { + "type": "string" + }, + "value": {} + } + }, + { + "type": "object", + "required": [ + "action", + "collection", + "tid" + ], + "properties": { + "action": { + "type": "string", + "enum": [ + "delete" + ] + }, + "collection": { + "type": "string" + }, + "tid": { + "type": "string" + } + } + } + ] + } + } + } +} +``` + +

Parameters

+ +|Name|In|Type|Required|Description| +|---|---|---|---|---| +|did|path|string|true|The DID of the repo to modify.| +|validate|query|string|false|Validate the record? Defaults to true.| +|body|body|[BatchWrite](#schemabatchwrite)|true|The modifications to apply.| + +#### Enumerated Values + +|Parameter|Value| +|---|---| +|validate|t| +|validate|true| +|validate|f| +|validate|false| + +

Responses

+ +|Status|Meaning|Description|Schema| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|Successful operation|None| + + + +## listRecords + + + +`GET /.adx/v1/api/repo/{did}/c/{namespace}/{dataset}` + +*Get information about the repo, including the list of collections.* + +

Parameters

+ +|Name|In|Type|Required|Description| +|---|---|---|---|---| +|did|path|string|true|The DID of the repo to request.| +|namespace|path|string|true|The namespace of the collection to request.| +|dataset|path|string|true|The name of the collection to request.| +|limit|query|number|false|The number of records to return. Defaults to 50. TODO- max number?| +|before|query|string|false|A TID to filter the range of records returned.| +|after|query|string|false|A TID to filter the range of records returned.| + +

Responses

+ +|Status|Meaning|Description|Schema| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|Successful operation|None| + + + +## createRecord + + + +`POST /.adx/v1/api/repo/{did}/c/{namespace}/{dataset}` + +*Create a new record.* + +> Body parameter + +```json +{} +``` + +

Parameters

+ +|Name|In|Type|Required|Description| +|---|---|---|---|---| +|did|path|string|true|The DID of the repo to modify.| +|namespace|path|string|true|The namespace of the collection to write to.| +|dataset|path|string|true|The name of the collection to write to.| +|validate|query|string|false|Validate the record? Defaults to true.| +|body|body|any|true|The record to create.| + +#### Enumerated Values + +|Parameter|Value| +|---|---| +|validate|t| +|validate|true| +|validate|f| +|validate|false| + +

Responses

+ +|Status|Meaning|Description|Schema| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|Successful operation|None| + + + +## getRecord + + + +`GET /.adx/v1/api/repo/{did}/c/{namespace}/{dataset}/r/{tid}` + +*Get information about the repo, including the list of collections.* + +

Parameters

+ +|Name|In|Type|Required|Description| +|---|---|---|---|---| +|did|path|string|true|The DID of the repo to request.| +|namespace|path|string|true|The namespace of the collection to request.| +|dataset|path|string|true|The name of the collection to request.| +|tid|path|string|true|The TID of the record to request.| + +

Responses

+ +|Status|Meaning|Description|Schema| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|Successful operation|None| + + + +## putRecord + + + +`PUT /.adx/v1/api/repo/{did}/c/{namespace}/{dataset}/r/{tid}` + +*Write a record.* + +> Body parameter + +```json +{} +``` + +

Parameters

+ +|Name|In|Type|Required|Description| +|---|---|---|---|---| +|did|path|string|true|The DID of the repo to modify.| +|namespace|path|string|true|The namespace of the collection to write to.| +|dataset|path|string|true|The name of the collection to write to.| +|tid|path|string|true|The TID of the record to write to.| +|validate|query|string|false|Validate the record? Defaults to true.| +|body|body|any|true|The record to write.| + +#### Enumerated Values + +|Parameter|Value| +|---|---| +|validate|t| +|validate|true| +|validate|f| +|validate|false| + +

Responses

+ +|Status|Meaning|Description|Schema| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|Successful operation|None| + + + +## deleteRecord + + + +`DELETE /.adx/v1/api/repo/{did}/c/{namespace}/{dataset}/r/{tid}` + +*Delete a record.* + +

Parameters

+ +|Name|In|Type|Required|Description| +|---|---|---|---|---| +|did|path|string|true|The DID of the repo to modify.| +|namespace|path|string|true|The namespace of the collection to write to.| +|dataset|path|string|true|The name of the collection to write to.| +|tid|path|string|true|The TID of the record to write to.| + +

Responses

+ +|Status|Meaning|Description|Schema| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|Successful operation|None| + + + +

view

+ +View API. + +## getView + + + +`GET /.adx/v1/api/view/{viewId}` + +*Fetch a view.* + +

Parameters

+ +|Name|In|Type|Required|Description| +|---|---|---|---|---| +|viewId|path|string|true|The ID of the view to request.| + +

Responses

+ +|Status|Meaning|Description|Schema| +|---|---|---|---| +|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|Successful operation|None| + + + +# Schemas + +

RepoRoot

+ + + + + + +```json +{ + "type": "object", + "required": [ + "root" + ], + "properties": { + "root": { + "type": "string" + } + } +} + +``` + +### Properties + +|Name|Type|Required|Restrictions|Description| +|---|---|---|---|---| +|root|string|true|none|none| + +

BatchWrite

+ + + + + + +```json +{ + "type": "object", + "required": [ + "writes" + ], + "properties": { + "writes": { + "type": "array", + "items": { + "oneOf": [ + { + "type": "object", + "required": [ + "action", + "collection", + "value" + ], + "properties": { + "action": { + "type": "string", + "enum": [ + "create" + ] + }, + "collection": { + "type": "string" + }, + "value": {} + } + }, + { + "type": "object", + "required": [ + "action", + "collection", + "tid", + "value" + ], + "properties": { + "action": { + "type": "string", + "enum": [ + "update" + ] + }, + "collection": { + "type": "string" + }, + "tid": { + "type": "string" + }, + "value": {} + } + }, + { + "type": "object", + "required": [ + "action", + "collection", + "tid" + ], + "properties": { + "action": { + "type": "string", + "enum": [ + "delete" + ] + }, + "collection": { + "type": "string" + }, + "tid": { + "type": "string" + } + } + } + ] + } + } + } +} + +``` + +### Properties + +|Name|Type|Required|Restrictions|Description| +|---|---|---|---|---| +|writes|[oneOf]|true|none|none| + +oneOf + +|Name|Type|Required|Restrictions|Description| +|---|---|---|---|---| +|» *anonymous*|[BatchWriteCreate](#schemabatchwritecreate)|false|none|none| + +xor + +|Name|Type|Required|Restrictions|Description| +|---|---|---|---|---| +|» *anonymous*|[BatchWriteUpdate](#schemabatchwriteupdate)|false|none|none| + +xor + +|Name|Type|Required|Restrictions|Description| +|---|---|---|---|---| +|» *anonymous*|[BatchWriteDelete](#schemabatchwritedelete)|false|none|none| + +

BatchWriteCreate

+ + + + + + +```json +{ + "type": "object", + "required": [ + "action", + "collection", + "value" + ], + "properties": { + "action": { + "type": "string", + "enum": [ + "create" + ] + }, + "collection": { + "type": "string" + }, + "value": {} + } +} + +``` + +### Properties + +|Name|Type|Required|Restrictions|Description| +|---|---|---|---|---| +|action|string|true|none|none| +|collection|string|true|none|none| +|value|any|true|none|none| + +#### Enumerated Values + +|Property|Value| +|---|---| +|action|create| + +

BatchWriteUpdate

+ + + + + + +```json +{ + "type": "object", + "required": [ + "action", + "collection", + "tid", + "value" + ], + "properties": { + "action": { + "type": "string", + "enum": [ + "update" + ] + }, + "collection": { + "type": "string" + }, + "tid": { + "type": "string" + }, + "value": {} + } +} + +``` + +### Properties + +|Name|Type|Required|Restrictions|Description| +|---|---|---|---|---| +|action|string|true|none|none| +|collection|string|true|none|none| +|tid|string|true|none|none| +|value|any|true|none|none| + +#### Enumerated Values + +|Property|Value| +|---|---| +|action|update| + +

BatchWriteDelete

+ + + + + + +```json +{ + "type": "object", + "required": [ + "action", + "collection", + "tid" + ], + "properties": { + "action": { + "type": "string", + "enum": [ + "delete" + ] + }, + "collection": { + "type": "string" + }, + "tid": { + "type": "string" + } + } +} + +``` + +### Properties + +|Name|Type|Required|Restrictions|Description| +|---|---|---|---|---| +|action|string|true|none|none| +|collection|string|true|none|none| +|tid|string|true|none|none| + +#### Enumerated Values + +|Property|Value| +|---|---| +|action|delete| -| Name | Type | Description | Required | -| ---- | ---- | ----------- | -------- | -| action | string | _Enum:_ `"delete"` | Yes | -| collection | string | | Yes | -| tid | string | | Yes | diff --git a/docs/specs/http-routes.yml b/docs/specs/http-routes.yml index 3f46b36b72b..42c2838b8be 100644 --- a/docs/specs/http-routes.yml +++ b/docs/specs/http-routes.yml @@ -25,6 +25,7 @@ tags: paths: /.well-known/adx-did: get: + operationId: resolveName tags: - protocol summary: Provides the DID of the repo indicated by the Host parameter. @@ -37,6 +38,7 @@ paths: type: string /.adx/v1/data/root: get: + operationId: getRepoRoot tags: - protocol summary: Gets the current root CID of a repo. @@ -56,6 +58,7 @@ paths: $ref: '#/components/schemas/RepoRoot' /.adx/v1/data/repo: get: + operationId: getRepoState tags: - protocol summary: Gets the repo state as a CAR file. @@ -82,6 +85,7 @@ paths: format: binary /.adx/v1/data/repo/{did}: post: + operationId: writeRepoState tags: - protocol summary: Writes commits to a repo. @@ -105,32 +109,39 @@ paths: description: Successful operation /.adx/v1/account: get: + operationId: getAccount tags: - account summary: Get information about the account. post: + operationId: updateAccount tags: - account summary: Create an account. delete: + operationId: deleteAccount tags: - account summary: Delete an account. /.adx/v1/session: get: + operationId: getSession tags: - session summary: Get information about the current session. post: + operationId: createSession tags: - session summary: Create an session. delete: + operationId: deleteSession tags: - session summary: Delete the current session. /.adx/v1/api/repo/{did}: get: + operationId: describeRepo tags: - repo summary: Get information about the repo, including the list of collections. @@ -145,6 +156,7 @@ paths: '200': description: Successful operation post: + operationId: batchWriteRepo tags: - repo summary: Apply a batch transaction of creates, puts, and deletes. @@ -178,6 +190,7 @@ paths: description: Successful operation /.adx/v1/api/repo/{did}/c/{namespace}/{dataset}: get: + operationId: listRecords tags: - repo summary: Get information about the repo, including the list of collections. @@ -222,6 +235,7 @@ paths: '200': description: Successful operation post: + operationId: createRecord tags: - repo summary: Create a new record. @@ -266,6 +280,7 @@ paths: description: Successful operation /.adx/v1/api/repo/{did}/c/{namespace}/{dataset}/r/{tid}: get: + operationId: getRecord tags: - repo summary: Get information about the repo, including the list of collections. @@ -298,6 +313,7 @@ paths: '200': description: Successful operation put: + operationId: putRecord tags: - repo summary: Write a record. @@ -347,6 +363,7 @@ paths: '200': description: Successful operation delete: + operationId: deleteRecord tags: - repo summary: Delete a record. @@ -380,6 +397,7 @@ paths: description: Successful operation /.adx/v1/api/view/{viewId}: get: + operationId: getView tags: - view summary: Fetch a view. @@ -444,4 +462,4 @@ components: collection: type: string tid: - type: string \ No newline at end of file + type: string diff --git a/docs/yarn.lock b/docs/yarn.lock new file mode 100644 index 00000000000..e710a449943 --- /dev/null +++ b/docs/yarn.lock @@ -0,0 +1,1275 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/helper-validator-identifier@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" + integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/runtime@^7.0.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.19.0.tgz#22b11c037b094d27a8a2504ea4dcff00f50e2259" + integrity sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA== + dependencies: + regenerator-runtime "^0.13.4" + +"@exodus/schemasafe@^1.0.0-rc.2": + version "1.0.0-rc.7" + resolved "https://registry.yarnpkg.com/@exodus/schemasafe/-/schemasafe-1.0.0-rc.7.tgz#aded6839c2369883dafa46608a135c82b42ed76b" + integrity sha512-+1mBLsa+vvlV0lwEAP1hwgmOPkjMnoJ8hyCMfCCJga0sVDwDzrPJjnxZwdDaUmOh/vbFHQGBTk+FxsVjoI/CjQ== + +"@types/json-schema@^7.0.7": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +ajv@^5.5.2: + version "5.5.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + integrity sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw== + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + +ajv@^6.12.3: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== + +ansi-regex@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" + integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +better-ajv-errors@^0.6.1, better-ajv-errors@^0.6.7: + version "0.6.7" + resolved "https://registry.yarnpkg.com/better-ajv-errors/-/better-ajv-errors-0.6.7.tgz#b5344af1ce10f434fe02fc4390a5a9c811e470d1" + integrity sha512-PYgt/sCzR4aGpyNy5+ViSQ77ognMnWq7745zM+/flYO4/Yisdtp9wDQW2IKCyVYPUxQt3E/b5GBSwfhd1LPdlg== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/runtime" "^7.0.0" + chalk "^2.4.1" + core-js "^3.2.1" + json-to-ast "^2.0.3" + jsonpointer "^4.0.1" + leven "^3.1.0" + +call-me-maybe@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" + integrity sha512-wCyFsDQkKPwwF8BDwOiWNx/9K45L/hvggQiDbve+viMNMQnWhrlYIuBk09offfwCRtCO9P6XwUttufzU11WCVw== + +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +chalk@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.0, chalk@^2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +cliui@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +code-error-fragment@0.0.230: + version "0.0.230" + resolved "https://registry.yarnpkg.com/code-error-fragment/-/code-error-fragment-0.0.230.tgz#d736d75c832445342eca1d1fedbf17d9618b14d7" + integrity sha512-cadkfKp6932H8UkhzE/gcUqhRMNf8jHzkAN7+5Myabswaghu4xABTgPHDCjW+dBAJxj/SpkTYokpzDqY4pCzQw== + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.9.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +core-js@^3.2.1: + version "3.25.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.25.1.tgz#5818e09de0db8956e16bf10e2a7141e931b7c69c" + integrity sha512-sr0FY4lnO1hkQ4gLDr24K0DGnweGO1QwSj5BpfQjpSJPdqWalja4cTps29Y/PJVG/P7FYlPDkH3hO+Tr0CvDgQ== + +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +debug@^2.2.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +dot@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/dot/-/dot-1.1.3.tgz#351360e00a748bce9a1f8f27c00c394a7e4e1e9f" + integrity sha512-/nt74Rm+PcfnirXGEdhZleTwGC2LMnuKTeeTIlI82xb5loBBoXNYzr2ezCroPSMtilK8EZIfcNZwOcHN+ib1Lg== + +duplexer@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +entities@~2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" + integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== + +es6-promise@^3.2.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" + integrity sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg== + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +event-stream@3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" + integrity sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g== + dependencies: + duplexer "~0.1.1" + from "~0" + map-stream "~0.1.0" + pause-stream "0.0.11" + split "0.3" + stream-combiner "~0.0.4" + through "~2.3.1" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +fast-deep-equal@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" + integrity sha512-fueX787WZKCV0Is4/T2cyAdM4+x1S3MXXOAhavE1ys/W42SHAPacLTQhucja22QBYrfGw50M2sRiXPtTGv9Ymw== + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-safe-stringify@^2.0.7: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" + integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +foreach@^2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.6.tgz#87bcc8a1a0e74000ff2bf9802110708cfb02eb6e" + integrity sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg== + +form-data@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.0.tgz#31b7e39c85f1355b7139ee0c647cf0de7f83c682" + integrity sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +from@~0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" + integrity sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g== + +fs-readfile-promise@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fs-readfile-promise/-/fs-readfile-promise-2.0.1.tgz#80023823981f9ffffe01609e8be668f69ae49e70" + integrity sha512-7+P9eOOMnkIOmtxrBWTzWOBQlE7Nz/cBx9EYTX5hm8DzmZ/Fj9YWeUY2O9G+Q8YblScd1hyEkcmNcZMDj5U8Ug== + dependencies: + graceful-fs "^4.1.2" + +fs-writefile-promise@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/fs-writefile-promise/-/fs-writefile-promise-1.0.3.tgz#e02f9b58ffc255ed822adc7a01114f445d48d063" + integrity sha512-yI+wDwj0FsgX7tyIQJR+EP60R64evMSixtGb9AzGWjJVKlF5tCet95KomfqGBg/aIAG1Dhd6wjCOQe5HbX/qLA== + dependencies: + mkdirp-promise "^1.0.0" + pinkie-promise "^1.0.0" + +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== + +get-caller-file@^2.0.1, get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +graceful-fs@^4.1.2: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== + +har-validator@^5.0.0: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== + dependencies: + ansi-regex "^2.0.0" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +highlightjs@^9.12.0: + version "9.16.2" + resolved "https://registry.yarnpkg.com/highlightjs/-/highlightjs-9.16.2.tgz#07ea6cc7c93340fc440734fb7abf28558f1f0fe1" + integrity sha512-FK1vmMj8BbEipEy8DLIvp71t5UsC7n2D6En/UfM/91PCwmOpj6f2iu0Y0coRC62KSRHHC+dquM2xMULV/X7NFg== + +http2-client@^1.2.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/http2-client/-/http2-client-1.3.5.tgz#20c9dc909e3cc98284dd20af2432c524086df181" + integrity sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA== + +httpsnippet@^1.19.0: + version "1.25.0" + resolved "https://registry.yarnpkg.com/httpsnippet/-/httpsnippet-1.25.0.tgz#c7efaef9e3b980c6ba03652a45efcb0b8480a1d0" + integrity sha512-jobE6S923cLuf5BPG6Jf+oLBRkPzv2RPp0dwOHcWwj/t9FwV/t9hyZ46kpT3Q5DHn9iFNmGhrcmmFUBqyjoTQg== + dependencies: + chalk "^1.1.1" + commander "^2.9.0" + debug "^2.2.0" + event-stream "3.3.4" + form-data "3.0.0" + fs-readfile-promise "^2.0.1" + fs-writefile-promise "^1.0.3" + har-validator "^5.0.0" + pinkie-promise "^2.0.0" + stringify-object "^3.3.0" + +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== + +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +jgexml@latest: + version "0.4.4" + resolved "https://registry.yarnpkg.com/jgexml/-/jgexml-0.4.4.tgz#428c6afc753c8cd9c29d6860262d1f4a44febef8" + integrity sha512-j0AzSWT7LXy3s3i1cdv5NZxUtscocwiBxgOLiEBfitCehm8STdXVrcOlbAWsJFLCq1elZYpQlGqA9k8Z+n9iJA== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +json-pointer@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/json-pointer/-/json-pointer-0.6.2.tgz#f97bd7550be5e9ea901f8c9264c9d436a22a93cd" + integrity sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw== + dependencies: + foreach "^2.0.4" + +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + integrity sha512-4JD/Ivzg7PoW8NzdrBSr3UFwC9mHgvI7Z6z3QGBsSHgKaRTUDmyZAAKJo2UbG1kUVfS9WS8bi36N49U1xw43DA== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-to-ast@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/json-to-ast/-/json-to-ast-2.1.0.tgz#041a9fcd03c0845036acb670d29f425cea4faaf9" + integrity sha512-W9Lq347r8tA1DfMvAGn9QNcgYm4Wm7Yc+k8e6vezpMnRT+NHbtlxgNBXRVjXe9YM6eTn6+p/MKOlV/aABJcSnQ== + dependencies: + code-error-fragment "0.0.230" + grapheme-splitter "^1.0.4" + +jsonpointer@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.1.0.tgz#501fb89986a2389765ba09e6053299ceb4f2c2cc" + integrity sha512-CXcRvMyTlnR53xMcKnuMzfCA5i/nfblTnnr74CZb6C4vG39eu6w51t7nKmU5MfLfbTgGItliNyjO/ciNPDqClg== + +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== + dependencies: + invert-kv "^2.0.0" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +linkify-it@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.2.0.tgz#e3b54697e78bf915c70a38acd78fd09e0058b1cf" + integrity sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw== + dependencies: + uc.micro "^1.0.1" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + +map-stream@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" + integrity sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g== + +markdown-it-emoji@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/markdown-it-emoji/-/markdown-it-emoji-1.4.0.tgz#9bee0e9a990a963ba96df6980c4fddb05dfb4dcc" + integrity sha512-QCz3Hkd+r5gDYtS2xsFXmBYrgw6KuWcJZLCEkdfAuwzZbShCmCfta+hwAMq4NX/4xPzkSHduMKgMkkPUJxSXNg== + +markdown-it@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-10.0.0.tgz#abfc64f141b1722d663402044e43927f1f50a8dc" + integrity sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg== + dependencies: + argparse "^1.0.7" + entities "~2.0.0" + linkify-it "^2.0.0" + mdurl "^1.0.1" + uc.micro "^1.0.5" + +mdurl@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== + +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mimic-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mkdirp-promise@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-1.1.0.tgz#2c84893ed676e0d98fb18fb9a6212fd1b2b9a819" + integrity sha512-xzB0UZFcW1UGS2xkXeDh39jzTP282lb3Vwp4QzCQYmkTn4ysaV5dBdbkOXmhkcE1TQlZebQlgTceaWvDr3oFgw== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-fetch-h2@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/node-fetch-h2/-/node-fetch-h2-2.3.0.tgz#c6188325f9bd3d834020bf0f2d6dc17ced2241ac" + integrity sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg== + dependencies: + http2-client "^1.2.5" + +node-fetch@^2.0.0: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-readfiles@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/node-readfiles/-/node-readfiles-0.2.0.tgz#dbbd4af12134e2e635c245ef93ffcf6f60673a5d" + integrity sha512-SU00ZarexNlE4Rjdm83vglt5Y9yiQ+XI1XpflWlb7q7UTN1JUItm69xMeiQCTxtTfnzt+83T8Cx+vI2ED++VDA== + dependencies: + es6-promise "^3.2.1" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== + dependencies: + path-key "^2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== + +oas-kit-common@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/oas-kit-common/-/oas-kit-common-1.0.8.tgz#6d8cacf6e9097967a4c7ea8bcbcbd77018e1f535" + integrity sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ== + dependencies: + fast-safe-stringify "^2.0.7" + +oas-linter@^3.1.3: + version "3.2.2" + resolved "https://registry.yarnpkg.com/oas-linter/-/oas-linter-3.2.2.tgz#ab6a33736313490659035ca6802dc4b35d48aa1e" + integrity sha512-KEGjPDVoU5K6swgo9hJVA/qYGlwfbFx+Kg2QB/kd7rzV5N8N5Mg6PlsoCMohVnQmo+pzJap/F610qTodKzecGQ== + dependencies: + "@exodus/schemasafe" "^1.0.0-rc.2" + should "^13.2.1" + yaml "^1.10.0" + +oas-resolver@^2.3.1, oas-resolver@^2.4.3: + version "2.5.6" + resolved "https://registry.yarnpkg.com/oas-resolver/-/oas-resolver-2.5.6.tgz#10430569cb7daca56115c915e611ebc5515c561b" + integrity sha512-Yx5PWQNZomfEhPPOphFbZKi9W93CocQj18NlD2Pa4GWZzdZpSJvYwoiuurRI7m3SpcChrnO08hkuQDL3FGsVFQ== + dependencies: + node-fetch-h2 "^2.3.0" + oas-kit-common "^1.0.8" + reftools "^1.1.9" + yaml "^1.10.0" + yargs "^17.0.1" + +oas-schema-walker@^1.1.3, oas-schema-walker@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/oas-schema-walker/-/oas-schema-walker-1.1.5.tgz#74c3cd47b70ff8e0b19adada14455b5d3ac38a22" + integrity sha512-2yucenq1a9YPmeNExoUa9Qwrt9RFkjqaMAA1X+U7sbb0AqBeTIdMHky9SQQ6iN94bO5NW0W4TRYXerG+BdAvAQ== + +oas-validator@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/oas-validator/-/oas-validator-4.0.8.tgz#4f1a4d6bd9e030ad07db03fd7a7bc3a91aabcc7d" + integrity sha512-bIt8erTyclF7bkaySTtQ9sppqyVc+mAlPi7vPzCLVHJsL9nrivQjc/jHLX/o+eGbxHd6a6YBwuY/Vxa6wGsiuw== + dependencies: + ajv "^5.5.2" + better-ajv-errors "^0.6.7" + call-me-maybe "^1.0.1" + oas-kit-common "^1.0.8" + oas-linter "^3.1.3" + oas-resolver "^2.4.3" + oas-schema-walker "^1.1.5" + reftools "^1.1.5" + should "^13.2.1" + yaml "^1.8.3" + +once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +openapi-sampler@^1.0.0-beta.15: + version "1.3.0" + resolved "https://registry.yarnpkg.com/openapi-sampler/-/openapi-sampler-1.3.0.tgz#5b99ceb4156b00d2aa3f860e52ccb768a5695793" + integrity sha512-2QfjK1oM9Sv0q82Ae1RrUe3yfFmAyjF548+6eAeb+h/cL1Uj51TW4UezraBEvwEdzoBgfo4AaTLVFGTKj+yYDw== + dependencies: + "@types/json-schema" "^7.0.7" + json-pointer "0.6.2" + +os-locale@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== + +pause-stream@0.0.11: + version "0.0.11" + resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" + integrity sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A== + dependencies: + through "~2.3" + +pinkie-promise@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-1.0.0.tgz#d1da67f5482563bb7cf57f286ae2822ecfbf3670" + integrity sha512-5mvtVNse2Ml9zpFKkWBpGsTPwm3DKhs+c95prO/F6E7d6DN0FPqxs6LONpLNpyD7Iheb7QN4BbUoKJgo+DnkQA== + dependencies: + pinkie "^1.0.0" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== + dependencies: + pinkie "^2.0.0" + +pinkie@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-1.0.0.tgz#5a47f28ba1015d0201bda7bf0f358e47bec8c7e4" + integrity sha512-VFVaU1ysKakao68ktZm76PIdOhvEfoNNRaGkyLln9Os7r0/MCxqHjHyBM7dT3pgTiBybqiPtpqKfpENwdBp50Q== + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +reftools@^1.1.0, reftools@^1.1.5, reftools@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/reftools/-/reftools-1.1.9.tgz#e16e19f662ccd4648605312c06d34e5da3a2b77e" + integrity sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w== + +regenerator-runtime@^0.13.4: + version "0.13.9" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug== + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +semver@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== + +should-equal@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/should-equal/-/should-equal-2.0.0.tgz#6072cf83047360867e68e98b09d71143d04ee0c3" + integrity sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA== + dependencies: + should-type "^1.4.0" + +should-format@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/should-format/-/should-format-3.0.3.tgz#9bfc8f74fa39205c53d38c34d717303e277124f1" + integrity sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q== + dependencies: + should-type "^1.3.0" + should-type-adaptors "^1.0.1" + +should-type-adaptors@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz#401e7f33b5533033944d5cd8bf2b65027792e27a" + integrity sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA== + dependencies: + should-type "^1.3.0" + should-util "^1.0.0" + +should-type@^1.3.0, should-type@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/should-type/-/should-type-1.4.0.tgz#0756d8ce846dfd09843a6947719dfa0d4cff5cf3" + integrity sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ== + +should-util@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/should-util/-/should-util-1.0.1.tgz#fb0d71338f532a3a149213639e2d32cbea8bcb28" + integrity sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g== + +should@^13.2.1: + version "13.2.3" + resolved "https://registry.yarnpkg.com/should/-/should-13.2.3.tgz#96d8e5acf3e97b49d89b51feaa5ae8d07ef58f10" + integrity sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ== + dependencies: + should-equal "^2.0.0" + should-format "^3.0.3" + should-type "^1.4.0" + should-type-adaptors "^1.0.1" + should-util "^1.0.0" + +signal-exit@^3.0.0: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +split@0.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" + integrity sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA== + dependencies: + through "2" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +stream-combiner@~0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" + integrity sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw== + dependencies: + duplexer "~0.1.1" + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^2.0.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +stringify-object@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +swagger2openapi@^6.0.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/swagger2openapi/-/swagger2openapi-6.2.3.tgz#4a8059f89d851aee4c9ab178f9b7190debd904e2" + integrity sha512-cUUktzLpK69UwpMbcTzjMw2ns9RZChfxh56AHv6+hTx3StPOX2foZjPgds3HlJcINbxosYYBn/D3cG8nwcCWwQ== + dependencies: + better-ajv-errors "^0.6.1" + call-me-maybe "^1.0.1" + node-fetch-h2 "^2.3.0" + node-readfiles "^0.2.0" + oas-kit-common "^1.0.8" + oas-resolver "^2.4.3" + oas-schema-walker "^1.1.5" + oas-validator "^4.0.8" + reftools "^1.1.5" + yaml "^1.8.3" + yargs "^15.3.1" + +through@2, through@~2.3, through@~2.3.1: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +uc.micro@^1.0.1, uc.micro@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" + integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +urijs@^1.19.0: + version "1.19.11" + resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.19.11.tgz#204b0d6b605ae80bea54bea39280cdb7c9f923cc" + integrity sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ== + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +widdershins@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/widdershins/-/widdershins-4.0.1.tgz#5ec5dd24ac9e2f6f5c002b67a08656b1de630c41" + integrity sha512-y7TGynno+J/EqRPtUrpEuEjJUc1N2ajfP7R4sHU7Qg8I/VFHGavBxL7ZTeOAVmd1fhmY2wJIbpX2LMDWf37vVA== + dependencies: + dot "^1.1.3" + fast-safe-stringify "^2.0.7" + highlightjs "^9.12.0" + httpsnippet "^1.19.0" + jgexml latest + markdown-it "^10.0.0" + markdown-it-emoji "^1.4.0" + node-fetch "^2.0.0" + oas-resolver "^2.3.1" + oas-schema-walker "^1.1.3" + openapi-sampler "^1.0.0-beta.15" + reftools "^1.1.0" + swagger2openapi "^6.0.1" + urijs "^1.19.0" + yaml "^1.8.3" + yargs "^12.0.5" + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw== + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yaml@^1.10.0, yaml@^1.8.3: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yaml@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.1.1.tgz#1e06fb4ca46e60d9da07e4f786ea370ed3c3cfec" + integrity sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw== + +yargs-parser@^11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" + integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^21.0.0: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^12.0.5: + version "12.0.5" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" + integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== + dependencies: + cliui "^4.0.0" + decamelize "^1.2.0" + find-up "^3.0.0" + get-caller-file "^1.0.1" + os-locale "^3.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1 || ^4.0.0" + yargs-parser "^11.1.1" + +yargs@^15.3.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + 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" + +yargs@^17.0.1: + version "17.5.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" + integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.0.0"