diff --git a/.github/workflows/npmpublish.yml b/.github/workflows/npmpublish.yml new file mode 100644 index 000000000..b9bc79849 --- /dev/null +++ b/.github/workflows/npmpublish.yml @@ -0,0 +1,53 @@ +name: Publish HttpSnippet Package + +on: + push: + branches: + - master + paths-ignore: + - "package.json" + - "**.md" + +env: + NODE_VERSION: 16 + +jobs: + publish-package: + runs-on: ubuntu-latest + steps: + - name: Checkout Repository + uses: actions/checkout@v3 + with: + token: ${{ secrets.ACTIONS_ACCESS_KEY }} + fetch-depth: 0 + + - name: Install Node.JS + uses: actions/setup-node@v3 + with: + node-version: ${{ env.NODE_VERSION }} + cache: 'yarn' + registry-url: "https://npm.pkg.github.com" + scope: "@rapidapi" + + - name: Install root dependencies + run: yarn --no-progress --non-interactive --frozen-lockfile + + - name: Checkout GitHub Actions + uses: actions/checkout@v3 + with: + repository: RapidAPI/rapidapi-github-actions + ref: master + token: ${{ secrets.ACTIONS_ACCESS_KEY }} + path: .github/actions + + - name: Create GitHub Release + uses: ./.github/actions/create-github-release + with: + github_head_ref: ${{ (github.head_ref) }} + github_base_ref: ${{ (github.base_ref) }} + ACTIONS_ACCESS_KEY: ${{ (secrets.ACTIONS_ACCESS_KEY) }} + + - name: Publish HttpSnippet Package + run: yarn publish + env: + NODE_AUTH_TOKEN: ${{ secrets.ACTIONS_ACCESS_KEY }} diff --git a/.jshintrc b/.jshintrc deleted file mode 100644 index 086f6bacb..000000000 --- a/.jshintrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "asi": true, - "node": true -} diff --git a/.mocharc.json b/.mocharc.json new file mode 100644 index 000000000..e5ca4a010 --- /dev/null +++ b/.mocharc.json @@ -0,0 +1,10 @@ +{ + "diff": true, + "extension": ["js", "cjs", "mjs"], + "package": "./package.json", + "reporter": "spec", + "slow": "75", + "timeout": "2000", + "ui": "bdd", + "spec": "**/*.spec.js" +} diff --git a/.npmignore b/.npmignore index 59e4f4a9a..2908abdd3 100644 --- a/.npmignore +++ b/.npmignore @@ -1,3 +1,2 @@ -.jshintrc .editorconfig test diff --git a/.travis.yml b/.travis.yml index ac51452f7..c7e2c8e1c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,11 +3,10 @@ language: node_js node_js: - node - lts/* - - 8 before_install: - sudo apt-get update -qq - - sudo apt-get install -qq --yes python3 php5-curl php5-cli + - sudo apt-get install -qq php7.0 php7.0-curl php7.0-cli after_script: - npm run codeclimate diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 000000000..4c1e0c383 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,25 @@ +## [2.0.18](https://github.com/RapidAPI/httpsnippet/compare/v2.0.17...v2.0.18) (2025-12-30) + + +### Bug Fixes + +* update form data ([#10](https://github.com/RapidAPI/httpsnippet/issues/10)) ([55a5c2a](https://github.com/RapidAPI/httpsnippet/commit/55a5c2a9b5f544acb4472508a5ebf54d15a7d9c7)) + + + +## [2.0.17](https://github.com/RapidAPI/httpsnippet/compare/v2.0.16...v2.0.17) (2023-03-22) + + + +## [2.0.16](https://github.com/RapidAPI/httpsnippet/compare/v2.0.15...v2.0.16) (2022-03-30) + + + +## [2.0.15](https://github.com/RapidAPI/httpsnippet/compare/v2.0.14...v2.0.15) (2022-03-28) + + + +## [2.0.14](https://github.com/RapidAPI/httpsnippet/compare/v2.0.13...v2.0.14) (2022-03-28) + + + diff --git a/Dockerfile b/Dockerfile new file mode 100755 index 000000000..934d83d97 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,9 @@ +# specify the node base image with your desired version node: +FROM node:8 + +ADD . /src +WORKDIR /src + +RUN apt-get update -qq +RUN apt-get install -qq php7.0 php7.0-curl php7.0-cli +RUN apt-get install -qq --yes python3 diff --git a/README.md b/README.md index c56795c7d..acb7dd9c3 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ npm install --save httpsnippet ``` - Usage: httpsnippet [options] + Usage: httpsnippet [options] Options: @@ -32,6 +32,7 @@ npm install --save httpsnippet -t, --target target output -c, --client [client] target client library -o, --output write output to directory + -x, --extra [{"optionKey": "optionValue"}] provide extra options for the target/client ``` @@ -63,13 +64,20 @@ snippets/ └── endpoint-3.js ``` +provide extra options: + +```shell +httpsnippet example.json --target http --output ./snippets -x '{"autoHost": false, "autoContentLength": false}' +``` + + ## API ### HTTPSnippet(source) #### source -*Required* +*Required* Type: `object` Name of [conversion target](https://github.com/Mashape/httpsnippet/wiki/Targets) @@ -87,7 +95,7 @@ var snippet = new HTTPSnippet({ #### target -*Required* +*Required* Type: `string` Name of [conversion target](https://github.com/Mashape/httpsnippet/wiki/Targets) @@ -119,7 +127,7 @@ console.log(snippet.convert('node', { #### target -*Required* +*Required* Type: `string` Name of [conversion target](https://github.com/Mashape/httpsnippet/wiki/Targets) @@ -153,6 +161,39 @@ console.log(snippet.convert('shell', 'curl', { console.log(snippet.convert('node', 'unirest')); ``` +### addTarget(target) +#### target + +*Required* +Type: `object` + +Representation of a [conversion target](https://github.com/Kong/httpsnippet/wiki/Creating-Targets). Can use this to use targets that are not officially supported. + +```js +const customLanguageTarget = require('httpsnippet-for-my-lang'); +HTTPSnippet.addTarget(customLanguageTarget); +``` + +### addTargetClient(target, client) +### target + +*Required* +Type: `string` + +Name of [conversion target](https://github.com/Mashape/httpsnippet/wiki/Targets) + +### client + +*Required* +Type: `object` + +Representation of a [conversion target client](https://github.com/Kong/httpsnippet/wiki/Creating-Targets). Can use this to use target clients that are not officially supported. + +```js +const customClient = require('httpsnippet-for-my-node-http-client'); +HTTPSnippet.addTargetClient('node', customClient); +``` + ## Documentation At the heart of this module is the [HAR Format](http://www.softwareishard.com/blog/har-12-spec/#request) as the HTTP request description format, please review some of the sample JSON HAR Request objects in [test fixtures](/test/fixtures/requests), or read the [HAR Docs](http://www.softwareishard.com/blog/har-12-spec/#request) for more details. @@ -196,7 +237,7 @@ For more information on SemVer, please visit . [license-url]: https://github.com/Kong/httpsnippet/blob/master/LICENSE [travis-url]: https://travis-ci.org/Kong/httpsnippet -[travis-image]: https://img.shields.io/travis/Kong/httpsnippet.svg?style=flat-square +[travis-image]: https://api.travis-ci.org/Kong/httpsnippet.svg?branch=master [npm-url]: https://www.npmjs.com/package/httpsnippet [npm-license]: https://img.shields.io/npm/l/httpsnippet.svg?style=flat-square diff --git a/bin/httpsnippet b/bin/httpsnippet index fa2383a61..49410f8e4 100755 --- a/bin/httpsnippet +++ b/bin/httpsnippet @@ -2,14 +2,14 @@ 'use strict' -var chalk = require('chalk') -var cmd = require('commander') -var fs = require('fs') -var readFile = require('fs-readfile-promise') -var writeFile = require('fs-writefile-promise') -var HTTPSnippet = require('..') -var path = require('path') -var pkg = require('../package.json') +const chalk = require('chalk') +const cmd = require('commander') +const fs = require('fs') +const readFile = require('fs-readfile-promise') +const writeFile = require('fs-writefile-promise') +const HTTPSnippet = require('..') +const path = require('path') +const pkg = require('../package.json') cmd .version(pkg.version) @@ -17,14 +17,26 @@ cmd .option('-t, --target ', 'target output') .option('-c, --client [client]', 'target client library') .option('-o, --output ', 'write output to directory') + .option('-x, --extra [{"optionKey": "optionValue"}]', 'provide extra options for the target/client') .parse(process.argv) if (!cmd.args.length || !cmd.target) { cmd.help() } +let extraOptions +if (cmd.extra) { + try { + extraOptions = JSON.parse(cmd.extra) + } catch (e) { + console.error('%s failed to parse options %s (should be JSON)', chalk.red('✖'), chalk.cyan.bold(cmd.extra)) + process.exit() + } +} + +let dir if (cmd.output) { - var dir = path.resolve(cmd.output) + dir = path.resolve(cmd.output) if (!fs.existsSync(dir)) { fs.mkdirSync(dir) @@ -32,7 +44,7 @@ if (cmd.output) { } cmd.args.forEach(function (fileName) { - var file = path.basename(fileName) + const file = path.basename(fileName) readFile(fileName) .then(JSON.parse) @@ -52,19 +64,24 @@ cmd.args.forEach(function (fileName) { }) .then(function (snippet) { - return snippet.convert(cmd.target, cmd.client) + return snippet.convert(cmd.target, cmd.client, extraOptions) }) .then(function (output) { + if (!output) { + const targetNames = HTTPSnippet.availableTargets().map(function (t) { return t.key }).join(', ') + return console.error('%s %s is not a valid target. Valid targets: %s', chalk.red('✖'), chalk.red(cmd.target), chalk.cyan(targetNames)) + } + // print if (!cmd.output) { return console.log('%s %s > %s [%s] :\n%s', chalk.green('✓'), chalk.cyan.bold(file), chalk.yellow(cmd.target), chalk.yellow(cmd.client ? cmd.client : 'default'), output) } // write to file - var name = path.basename(file, path.extname(file)) + const name = path.basename(file, path.extname(file)) - var filename = path.format({ + const filename = path.format({ dir: dir, base: name + HTTPSnippet.extname(cmd.target) }) diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..3c42307f9 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,5 @@ +version: '3' +services: + httpsnippet: + build: . + command: [npm, test] diff --git a/package-lock.json b/package-lock.json index b4e382277..b95daf5ad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,3428 +1,5093 @@ { - "name": "httpsnippet", - "version": "1.19.1", - "lockfileVersion": 1, + "name": "@rapidapi/httpsnippet", + "version": "2.0.17", + "lockfileVersion": 3, "requires": true, - "dependencies": { - "abbrev": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", - "dev": true + "packages": { + "": { + "name": "@rapidapi/httpsnippet", + "version": "2.0.17", + "license": "MIT", + "dependencies": { + "chalk": "^1.1.1", + "commander": "^2.9.0", + "debug": "^2.2.0", + "event-stream": "3.3.4", + "form-data": "^3.0.4", + "fs-readfile-promise": "^2.0.1", + "fs-writefile-promise": "^1.0.3", + "har-validator": "^5.0.0", + "lodash": "^4.17.15", + "pinkie-promise": "^2.0.0", + "stringify-object": "^3.3.0" + }, + "bin": { + "httpsnippet": "bin/httpsnippet" + }, + "devDependencies": { + "codeclimate-test-reporter": "^0.5.1", + "echint": "^4.0.2", + "glob": "^6.0.1", + "istanbul": "^0.4.0", + "mocha": "^8.2.1", + "require-directory": "^2.1.1", + "should": "^13.2.3", + "standard": "^16.0.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } }, - "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "node_modules/@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", "dev": true }, - "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "node_modules/@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "requires": { - "acorn": "3.3.0" + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz", + "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "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" }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "ajv": { + "node_modules/@eslint/eslintrc/node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, + "node_modules/@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "node_modules/abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", + "dev": true + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { "version": "6.10.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", - "requires": { - "fast-deep-equal": "2.0.1", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.4.1", - "uri-js": "4.2.2" + "dependencies": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "ajv-keywords": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", - "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", - "dev": true - }, - "amdefine": { + "node_modules/amdefine": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", "dev": true, - "optional": true - }, - "ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", - "dev": true + "optional": true, + "engines": { + "node": ">=0.4.2" + } }, - "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", - "dev": true + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "ansi-regex": { + "node_modules/ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "engines": { + "node": ">=0.10.0" + } }, - "ansi-styles": { + "node_modules/ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } }, - "argparse": { + "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "requires": { - "sprintf-js": "1.0.3" + "dependencies": { + "sprintf-js": "~1.0.2" } }, - "array.prototype.find": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.0.4.tgz", - "integrity": "sha1-VWpcU2LAhkgyPdrrnenRS8GGTJA=", + "node_modules/array-includes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.2.tgz", + "integrity": "sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "get-intrinsic": "^1.0.1", + "is-string": "^1.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", + "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", + "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", "dev": true, - "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.13.0" + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "asn1": { + "node_modules/asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "dev": true, - "requires": { - "safer-buffer": "2.1.2" + "dependencies": { + "safer-buffer": "~2.1.0" } }, - "assert-plus": { + "node_modules/assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8" + } }, - "async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", - "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", - "requires": { - "lodash": "4.17.11" + "node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true, + "engines": { + "node": ">=4" } }, - "asynckit": { + "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, - "aws-sign2": { + "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true + "dev": true, + "engines": { + "node": "*" + } }, - "aws4": { + "node_modules/aws4": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", "dev": true }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - } - }, - "balanced-match": { + "node_modules/balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, - "bcrypt-pbkdf": { + "node_modules/bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "dev": true, - "requires": { - "tweetnacl": "0.14.5" + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" } }, - "brace-expansion": { + "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "requires": { - "balanced-match": "1.0.0", + "dependencies": { + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "browser-stdout": { + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, - "requires": { - "callsites": "0.2.0" + "engines": { + "node": ">=6" } }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true - }, - "camelcase": { + "node_modules/camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "caseless": { + "node_modules/caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, - "chalk": { + "node_modules/chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "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" + }, + "engines": { + "node": ">=0.10.0" } }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true - }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "node_modules/chokidar": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", + "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", "dev": true, - "requires": { - "restore-cursor": "1.0.1" + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.1.2" } }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true + "node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } }, - "cliui": { + "node_modules/cliui/node_modules/ansi-regex": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true, - "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - } + "engines": { + "node": ">=6" } }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true + "node_modules/cliui/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true + "node_modules/cliui/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } }, - "codeclimate-test-reporter": { + "node_modules/codeclimate-test-reporter": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/codeclimate-test-reporter/-/codeclimate-test-reporter-0.5.1.tgz", "integrity": "sha512-XCzmc8dH+R4orK11BCg5pBbXc35abxq9sept4YvUFRkFl9zb9MIVRrCKENe6U1TKAMTgvGJmrYyHn0y2lerpmg==", + "deprecated": "codeclimate-test-reporter has been deprecated in favor of our new unified test-reporter. Please visit https://docs.codeclimate.com/docs/configuring-test-coverage for details on setting up the new test-reporter.", "dev": true, - "requires": { - "async": "1.5.2", + "dependencies": { + "async": "~1.5.2", "commander": "2.9.0", "lcov-parse": "0.0.10", - "request": "2.88.0" + "request": "~2.88.0" }, + "bin": { + "codeclimate-test-reporter": "bin/codeclimate.js" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/codeclimate-test-reporter/node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "node_modules/codeclimate-test-reporter/node_modules/commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "dev": true, "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true, - "requires": { - "graceful-readlink": "1.0.1" - } - } + "graceful-readlink": ">= 1.0.0" + }, + "engines": { + "node": ">= 0.6.x" } }, - "color-convert": { + "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "requires": { + "dependencies": { "color-name": "1.1.3" } }, - "color-name": { + "node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, - "combined-stream": { + "node_modules/combined-stream": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", - "requires": { - "delayed-stream": "1.0.0" + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "commander": { + "node_modules/commander": { "version": "2.20.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==" }, - "concat-map": { + "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "1.1.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "typedarray": "0.0.6" - } - }, - "contains-path": { + "node_modules/contains-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "core-util-is": { + "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, - "requires": { - "nice-try": "1.0.5", - "path-key": "2.0.1", - "semver": "5.7.0", - "shebang-command": "1.2.0", - "which": "1.3.1" - }, "dependencies": { - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "dev": true - } + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "requires": { - "es5-ext": "0.10.49" + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "dashdash": { + "node_modules/dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, - "requires": { - "assert-plus": "1.0.0" + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" } }, - "debug": { + "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "requires": { + "dependencies": { "ms": "2.0.0" } }, - "debug-log": { + "node_modules/debug-log": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "decamelize": { + "node_modules/decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "deep-extend": { + "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true + "dev": true, + "engines": { + "node": ">=4.0.0" + } }, - "deep-is": { + "node_modules/deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, - "define-properties": { + "node_modules/define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, - "requires": { - "object-keys": "1.1.1" - } - }, - "deglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.1.tgz", - "integrity": "sha512-2kjwuGGonL7gWE1XU4Fv79+vVzpoQCl0V+boMwWtOQJV2AGDabCwez++nB1Nli/8BabAfZQ/UuHPlp6AymKdWw==", - "dev": true, - "requires": { - "find-root": "1.1.0", - "glob": "7.1.3", - "ignore": "3.3.10", - "pkg-config": "1.1.1", - "run-parallel": "1.1.9", - "uniq": "1.0.1" - }, - "dependencies": { - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" } }, - "delayed-stream": { + "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "engines": { + "node": ">=0.4.0" + } }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "requires": { - "esutils": "2.0.2" + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" } }, - "dotenv": { + "node_modules/dotenv": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz", "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==", - "dev": true - }, - "duplexer": { + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexer": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" }, - "ecc-jsbn": { + "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "dev": true, - "requires": { - "jsbn": "0.1.1", - "safer-buffer": "2.1.2" + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, - "echint": { + "node_modules/echint": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/echint/-/echint-4.0.2.tgz", "integrity": "sha512-iUEHrTxUqpZ0V6ayTmjyf9/f3Iz/Pp3EGKhmfFpnZQ4tjTk3ZyO9bO2qGwgr3coSknzXdieYrcCe3JDsiI/Uvw==", + "deprecated": "no longer maintained", "dev": true, - "requires": { - "chalk": "2.4.2", - "commander": "2.20.0", - "dotenv": "7.0.0", - "glob": "7.1.3", + "dependencies": { + "chalk": "^2.4.2", + "commander": "^2.19.0", + "dotenv": "^7.0.0", + "glob": "^7.1.3", "lintspaces": "0.6.3", - "minimatch": "3.0.4", - "pkg-config": "1.1.1" + "minimatch": "^3.0.4", + "pkg-config": "^1.1.1" + }, + "bin": { + "echint": "lib/bin.js" }, + "engines": { + "node": ">=4" + } + }, + "node_modules/echint/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.3" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" - } - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha1-OWCDLT8VdBCDQtr9OmezMsCWnfE=", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/echint/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/echint/node_modules/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha1-OWCDLT8VdBCDQtr9OmezMsCWnfE=", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" } }, - "editorconfig": { + "node_modules/echint/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/echint/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/editorconfig": { "version": "0.15.3", "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==", "dev": true, - "requires": { - "commander": "2.20.0", - "lru-cache": "4.1.5", - "semver": "5.7.0", - "sigmund": "1.0.1" - }, "dependencies": { - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "dev": true - } + "commander": "^2.19.0", + "lru-cache": "^4.1.5", + "semver": "^5.6.0", + "sigmund": "^1.0.1" + }, + "bin": { + "editorconfig": "bin/editorconfig" } }, - "emoji-regex": { + "node_modules/editorconfig/node_modules/semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/enquirer/node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, - "requires": { - "once": "1.4.0" + "engines": { + "node": ">=6" } }, - "error-ex": { + "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "requires": { - "is-arrayish": "0.2.1" + "dependencies": { + "is-arrayish": "^0.2.1" } }, - "es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "node_modules/es-abstract": { + "version": "1.18.0-next.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.2.tgz", + "integrity": "sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw==", "dev": true, - "requires": { - "es-to-primitive": "1.2.0", - "function-bind": "1.1.1", - "has": "1.0.3", - "is-callable": "1.1.4", - "is-regex": "1.0.4", - "object-keys": "1.1.1" + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.1", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.3", + "string.prototype.trimstart": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "node_modules/es-abstract/node_modules/object-inspect": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", "dev": true, - "requires": { - "is-callable": "1.1.4", - "is-date-object": "1.0.1", - "is-symbol": "1.0.2" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "es5-ext": { - "version": "0.10.49", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.49.tgz", - "integrity": "sha512-3NMEhi57E31qdzmYp2jwRArIUsj1HI/RxbQ4bgnSB+AIKIxsAmTiK83bYMifIcpWvEc3P1X30DhUKOqEtF/kvg==", + "node_modules/es-abstract/node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, - "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1", - "next-tick": "1.0.0" + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "node_modules/es-abstract/node_modules/string.prototype.trimend": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", + "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.49", - "es6-symbol": "3.1.1" + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "node_modules/es-abstract/node_modules/string.prototype.trimstart": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", + "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.49", - "es6-iterator": "2.0.3", - "es6-set": "0.1.5", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.49", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" } }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.49" + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" } }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.49", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "escape-string-regexp": { + "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } }, - "escodegen": { + "node_modules/escodegen": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", "dev": true, - "requires": { - "esprima": "2.7.3", - "estraverse": "1.9.3", - "esutils": "2.0.2", - "optionator": "0.8.2", - "source-map": "0.2.0" + "dependencies": { + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=0.12.0" + }, + "optionalDependencies": { + "source-map": "~0.2.0" } }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "node_modules/eslint": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.13.0.tgz", + "integrity": "sha512-uCORMuOO8tUzJmsdRtrvcGq5qposf7Rw0LwkTJkoDbOycVQtQjmnhZSuLQnozLE4TmAzlMVV45eCHmQ1OpDKUQ==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, - "requires": { - "es6-map": "0.1.5", - "es6-weak-map": "2.0.2", - "esrecurse": "4.2.1", - "estraverse": "4.2.0" - }, "dependencies": { - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - } + "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.2.1", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.0", + "esquery": "^1.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "eslint": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", - "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "chalk": "1.1.3", - "concat-stream": "1.6.2", - "debug": "2.6.9", - "doctrine": "2.1.0", - "escope": "3.6.0", - "espree": "3.5.4", - "esquery": "1.0.1", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "file-entry-cache": "2.0.0", - "glob": "7.1.3", - "globals": "9.18.0", - "ignore": "3.3.10", - "imurmurhash": "0.1.4", - "inquirer": "0.12.0", - "is-my-json-valid": "2.19.0", - "is-resolvable": "1.1.0", - "js-yaml": "3.13.1", - "json-stable-stringify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.11", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "optionator": "0.8.2", - "path-is-inside": "1.0.2", - "pluralize": "1.2.1", - "progress": "1.1.8", - "require-uncached": "1.0.3", - "shelljs": "0.7.8", - "strip-bom": "3.0.0", - "strip-json-comments": "2.0.1", - "table": "3.8.3", - "text-table": "0.2.0", - "user-home": "2.0.0" - }, - "dependencies": { - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true + "node_modules/eslint-config-standard": { + "version": "16.0.2", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.2.tgz", + "integrity": "sha512-fx3f1rJDsl9bY7qzyX8SAtP8GBSk6MfXFaTfaGgk12aAYW4gJSyRm7dM790L6cbXv63fvjY4XeSzXnb4WM+SKw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peerDependencies": { + "eslint": "^7.12.1", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^4.2.1" + } + }, + "node_modules/eslint-config-standard-jsx": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-10.0.0.tgz", + "integrity": "sha512-hLeA2f5e06W1xyr/93/QJulN/rLbUVUmqTlexv9PRKHFwEC9ffJcH2LvJhMoEqYQBEYafedgGZXH2W8NUpt5lA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true + { + "type": "consulting", + "url": "https://feross.org/support" } + ], + "peerDependencies": { + "eslint": "^7.12.1", + "eslint-plugin-react": "^7.21.5" } }, - "eslint-config-standard": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz", - "integrity": "sha1-wGHk0GbzedwXzVYsZOgZtN1FRZE=", - "dev": true - }, - "eslint-config-standard-jsx": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-4.0.2.tgz", - "integrity": "sha512-F8fRh2WFnTek7dZH9ZaE0PCBwdVGkwVWZmizla/DDNOmg7Tx6B/IlK5+oYpiX29jpu73LszeJj5i1axEZv6VMw==", - "dev": true - }, - "eslint-import-resolver-node": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz", - "integrity": "sha1-Wt2BBujJKNssuiMrzZ76hG49oWw=", + "node_modules/eslint-import-resolver-node": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", + "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", "dev": true, - "requires": { - "debug": "2.6.9", - "object-assign": "4.1.1", - "resolve": "1.1.7" + "dependencies": { + "debug": "^2.6.9", + "resolve": "^1.13.1" } }, - "eslint-module-utils": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.0.tgz", - "integrity": "sha512-14tltLm38Eu3zS+mt0KvILC3q8jyIAH518MlG+HO0p+yK885Lb1UHTY/UgR91eOyGdmxAPb+OLoW4znqIT6Ndw==", + "node_modules/eslint-import-resolver-node/node_modules/resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", "dev": true, - "requires": { - "debug": "2.6.9", - "pkg-dir": "2.0.0" + "dependencies": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "eslint-plugin-import": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.2.0.tgz", - "integrity": "sha1-crowb60wXWfEgWNIpGmaQimsi04=", + "node_modules/eslint-module-utils": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", + "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", "dev": true, - "requires": { - "builtin-modules": "1.1.1", - "contains-path": "0.1.0", - "debug": "2.6.9", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "0.2.3", - "eslint-module-utils": "2.4.0", - "has": "1.0.3", - "lodash.cond": "4.5.2", - "minimatch": "3.0.4", - "pkg-up": "1.0.0" - }, - "dependencies": { - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" - } - } + "dependencies": { + "debug": "^2.6.9", + "pkg-dir": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "eslint-plugin-node": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-4.2.3.tgz", - "integrity": "sha512-vIUQPuwbVYdz/CYnlTLsJrRy7iXHQjdEe5wz0XhhdTym3IInM/zZLlPf9nZ2mThsH0QcsieCOWs2vOeCy/22LQ==", + "node_modules/eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", "dev": true, - "requires": { - "ignore": "3.3.10", - "minimatch": "3.0.4", - "object-assign": "4.1.1", - "resolve": "1.1.7", - "semver": "5.3.0" + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" } }, - "eslint-plugin-promise": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.5.0.tgz", - "integrity": "sha1-ePu2/+BHIBYnVp6FpsU3OvKmj8o=", - "dev": true - }, - "eslint-plugin-react": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz", - "integrity": "sha1-xUNb6wZ3ThLH2y9qut3L+QDNP3g=", + "node_modules/eslint-plugin-import": { + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", + "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==", "dev": true, - "requires": { - "array.prototype.find": "2.0.4", + "dependencies": { + "array-includes": "^3.1.1", + "array.prototype.flat": "^1.2.3", + "contains-path": "^0.1.0", + "debug": "^2.6.9", "doctrine": "1.5.0", - "has": "1.0.3", - "jsx-ast-utils": "1.4.1", - "object.assign": "4.1.0" - }, - "dependencies": { - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" - } - } + "eslint-import-resolver-node": "^0.3.4", + "eslint-module-utils": "^2.6.0", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.1", + "read-pkg-up": "^2.0.0", + "resolve": "^1.17.0", + "tsconfig-paths": "^3.9.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0" } }, - "eslint-plugin-standard": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz", - "integrity": "sha1-NNDJFbRe3G8BA5PH7vOCOwhWXPI=", - "dev": true - }, - "espree": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", "dev": true, - "requires": { - "acorn": "5.7.3", - "acorn-jsx": "3.0.1" + "dependencies": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "esquery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "node_modules/eslint-plugin-import/node_modules/resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", "dev": true, - "requires": { - "estraverse": "4.2.0" - }, "dependencies": { - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - } + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "node_modules/eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", "dev": true, - "requires": { - "estraverse": "4.2.0" - }, "dependencies": { - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - } + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" } }, - "estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true + "node_modules/eslint-plugin-node/node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true, + "engines": { + "node": ">= 4" + } }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "node_modules/eslint-plugin-node/node_modules/resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.49" + "dependencies": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", - "requires": { - "duplexer": "0.1.1", - "from": "0.1.7", - "map-stream": "0.1.0", - "pause-stream": "0.0.11", - "split": "0.3.3", - "stream-combiner": "0.0.4", - "through": "2.3.8" + "node_modules/eslint-plugin-node/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" } }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "node_modules/eslint-plugin-promise": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz", + "integrity": "sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw==", "dev": true, - "requires": { - "cross-spawn": "6.0.5", - "get-stream": "4.1.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "engines": { + "node": ">=6" } }, - "exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", - "dev": true + "node_modules/eslint-plugin-react": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.21.5.tgz", + "integrity": "sha512-8MaEggC2et0wSF6bUeywF7qQ46ER81irOdWS4QWxnnlAEsnzeBevk1sWh7fhpCghPpXb+8Ks7hvaft6L/xsR6g==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.1", + "array.prototype.flatmap": "^1.2.3", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "object.entries": "^1.1.2", + "object.fromentries": "^2.0.2", + "object.values": "^1.1.1", + "prop-types": "^15.7.2", + "resolve": "^1.18.1", + "string.prototype.matchall": "^4.0.2" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7" + } }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dev": true, + "dependencies": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, - "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" + "engines": { + "node": ">=4" } }, - "file-entry-cache": { + "node_modules/eslint-visitor-keys": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", "dev": true, - "requires": { - "flat-cache": "1.3.4", - "object-assign": "4.1.1" + "engines": { + "node": ">=10" } }, - "find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", - "dev": true + "node_modules/eslint/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": { - "locate-path": "2.0.0" + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "flat": { + "node_modules/eslint/node_modules/chalk": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", - "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, - "requires": { - "is-buffer": "2.0.3" + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "flat-cache": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", - "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "requires": { - "circular-json": "0.3.3", - "graceful-fs": "4.1.15", - "rimraf": "2.6.3", - "write": "0.2.1" + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "form-data": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.1.tgz", - "integrity": "sha1-rjFduaSQf6BlUCMEpm13M0de43w=", - "requires": { - "async": "2.6.2", - "combined-stream": "1.0.7", - "mime-types": "2.1.24" + "node_modules/eslint/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "from": { + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/eslint/node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/esquery": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/event-stream": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", + "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" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "dependencies": { + "flat-cache": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "dev": true + }, + "node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "dependencies": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.4.tgz", + "integrity": "sha512-f0cRzm6dkyVYV3nPoooP8XlccPQukegwhAnpoLcXy+X+A8KfpGOoXwDr9FLZd3wzgLaBGQBE3lY93Zm/i1JvIQ==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.35" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/form-data/node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/from": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=" }, - "fs-readfile-promise": { + "node_modules/fs-readfile-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fs-readfile-promise/-/fs-readfile-promise-2.0.1.tgz", "integrity": "sha1-gAI4I5gfn//+AWCei+Zo9prknnA=", - "requires": { - "graceful-fs": "4.1.15" + "dependencies": { + "graceful-fs": "^4.1.2" } }, - "fs-writefile-promise": { + "node_modules/fs-writefile-promise": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/fs-writefile-promise/-/fs-writefile-promise-1.0.3.tgz", "integrity": "sha1-4C+bWP/CVe2CKtx6ARFPRF1I0GM=", - "requires": { - "mkdirp-promise": "1.1.0", - "pinkie-promise": "1.0.0" - }, - "dependencies": { - "pinkie-promise": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-1.0.0.tgz", - "integrity": "sha1-0dpn9UglY7t89X8oauKCLs+/NnA=", - "requires": { - "pinkie": "1.0.0" - } - } + "dependencies": { + "mkdirp-promise": "^1.0.0", + "pinkie-promise": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/fs-writefile-promise/node_modules/pinkie-promise": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-1.0.0.tgz", + "integrity": "sha1-0dpn9UglY7t89X8oauKCLs+/NnA=", + "dependencies": { + "pinkie": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "fs.realpath": { + "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "generate-function": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", - "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "node_modules/fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", "dev": true, - "requires": { - "is-property": "1.0.2" + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true, - "requires": { - "is-property": "1.0.2" + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "get-caller-file": { + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "get-own-enumerable-property-symbols": { + "node_modules/get-own-enumerable-property-symbols": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz", "integrity": "sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg==" }, - "get-stdin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", - "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", - "dev": true + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "node_modules/get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", "dev": true, - "requires": { - "pump": "3.0.0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "getpass": { + "node_modules/getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, - "requires": { - "assert-plus": "1.0.0" + "dependencies": { + "assert-plus": "^1.0.0" } }, - "glob": { + "node_modules/glob": { "version": "6.0.4", "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" } }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } }, - "graceful-fs": { + "node_modules/globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "dependencies": { + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { "version": "4.1.15", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" }, - "graceful-readlink": { + "node_modules/graceful-readlink": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", "dev": true }, - "growl": { + "node_modules/growl": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true + "dev": true, + "engines": { + "node": ">=4.x" + } }, - "handlebars": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", - "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", "dev": true, - "requires": { - "neo-async": "2.6.0", - "optimist": "0.6.1", - "source-map": "0.6.1", - "uglify-js": "3.5.8" - }, "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, - "har-schema": { + "node_modules/handlebars/node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/handlebars/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "engines": { + "node": ">=4" + } }, - "har-validator": { + "node_modules/har-validator": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", "integrity": "sha1-HvievT5JllV2de7ZiTEQ3DUPoIA=", - "requires": { - "ajv": "6.10.0", - "har-schema": "2.0.0" + "deprecated": "this library is no longer supported", + "dependencies": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" } }, - "has": { + "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, - "requires": { - "function-bind": "1.1.1" + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" } }, - "has-ansi": { + "node_modules/has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "requires": { - "ansi-regex": "2.1.1" + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "has-flag": { + "node_modules/has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } }, - "he": { + "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, - "http-signature": { + "node_modules/http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, - "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.16.1" + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" } }, - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", - "dev": true + "node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "imurmurhash": { + "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.19" + } }, - "inflight": { + "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" } }, - "inherits": { + "node_modules/inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "inquirer": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", - "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", - "dev": true, - "requires": { - "ansi-escapes": "1.4.0", - "ansi-regex": "2.1.1", - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "cli-width": "2.2.0", - "figures": "1.7.0", - "lodash": "4.17.11", - "readline2": "1.0.1", - "run-async": "0.1.0", - "rx-lite": "3.1.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "through": "2.3.8" - } - }, - "interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } }, - "is-arrayish": { + "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, - "is-buffer": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", - "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==", - "dev": true + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "dev": true + "node_modules/is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "is-date-object": { + "node_modules/is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4" + } }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true, - "requires": { - "number-is-nan": "1.0.1" + "engines": { + "node": ">=0.10.0" } }, - "is-my-ip-valid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", - "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", - "dev": true + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } }, - "is-my-json-valid": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.19.0.tgz", - "integrity": "sha512-mG0f/unGX1HZ5ep4uhRaPOS8EkAY8/j6mDRMJrutq4CqhoJWYp7qAlonIPy3TV7p3ju4TK9fo/PbnoksWmsp5Q==", + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, - "requires": { - "generate-function": "2.3.1", - "generate-object-property": "1.2.0", - "is-my-ip-valid": "1.0.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-obj": { + "node_modules/is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "engines": { + "node": ">=0.10.0" + } }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", - "dev": true + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "node_modules/is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", "dev": true, - "requires": { - "has": "1.0.3" + "dependencies": { + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-regexp": { + "node_modules/is-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=" - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "engines": { + "node": ">=0.10.0" + } }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true + "node_modules/is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "is-symbol": { + "node_modules/is-symbol": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", "dev": true, - "requires": { - "has-symbols": "1.0.0" + "dependencies": { + "has-symbols": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" } }, - "is-typedarray": { + "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, - "isarray": { + "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, - "isexe": { + "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "isstream": { + "node_modules/isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, - "istanbul": { + "node_modules/istanbul": { "version": "0.4.5", "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", + "deprecated": "This module is no longer maintained, try this instead:\n npm i nyc\nVisit https://istanbul.js.org/integrations for other alternatives.", "dev": true, - "requires": { - "abbrev": "1.0.9", - "async": "1.5.2", - "escodegen": "1.8.1", - "esprima": "2.7.3", - "glob": "5.0.15", - "handlebars": "4.1.2", - "js-yaml": "3.13.1", - "mkdirp": "0.5.1", - "nopt": "3.0.6", - "once": "1.4.0", - "resolve": "1.1.7", - "supports-color": "3.2.3", - "which": "1.3.1", - "wordwrap": "1.0.0" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } + "dependencies": { + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "istanbul": "lib/cli.js" } }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "node_modules/istanbul/node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "node_modules/istanbul/node_modules/glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/istanbul/node_modules/supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "dependencies": { + "has-flag": "^1.0.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, - "js-yaml": { + "node_modules/js-yaml": { "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, - "requires": { - "argparse": "1.0.10", - "esprima": "4.0.1" - }, "dependencies": { - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - } + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/js-yaml/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" } }, - "jsbn": { + "node_modules/jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "dev": true }, - "json-parse-better-errors": { + "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, - "json-schema": { + "node_modules/json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", "dev": true }, - "json-schema-traverse": { + "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, - "json-stable-stringify": { + "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "requires": { - "jsonify": "0.0.0" - } + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true }, - "json-stringify-safe": { + "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "dev": true }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", - "dev": true + "node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } }, - "jsprim": { + "node_modules/jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "dev": true, - "requires": { + "engines": [ + "node >=0.6.0" + ], + "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", "json-schema": "0.2.3", "verror": "1.10.0" } }, - "jsx-ast-utils": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz", - "integrity": "sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE=", - "dev": true + "node_modules/jsx-ast-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", + "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.2", + "object.assign": "^4.1.2" + }, + "engines": { + "node": ">=4.0" + } }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "node_modules/jsx-ast-utils/node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, - "requires": { - "invert-kv": "2.0.0" + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "lcov-parse": { + "node_modules/lcov-parse": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", "dev": true }, - "levn": { + "node_modules/levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, - "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" } }, - "lintspaces": { + "node_modules/lintspaces": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/lintspaces/-/lintspaces-0.6.3.tgz", "integrity": "sha512-nUwq/jK+gUhpILtV9Ms2cuF16LB9a8nnecowSQD5LRNX3+h1Bl1zIvPZNQgJYeK9xxuoR+HuWnjagQsvyJbS4w==", "dev": true, - "requires": { - "deep-extend": "0.6.0", - "editorconfig": "0.15.3", - "rc": "1.2.8" + "dependencies": { + "deep-extend": "^0.6.0", + "editorconfig": "^0.15.0", + "rc": "^1.2.8" + }, + "engines": { + "node": ">=5" } }, - "load-json-file": { + "node_modules/load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "requires": { - "graceful-fs": "4.1.15", - "parse-json": "4.0.0", - "pify": "3.0.0", - "strip-bom": "3.0.0" + "engines": { + "node": ">=8" } }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - }, - "lodash.cond": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz", - "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=", - "dev": true - }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, - "requires": { - "chalk": "2.4.2" - }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.3" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" } }, - "lru-cache": { + "node_modules/lru-cache": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, - "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" - } - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "1.0.0" + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, - "map-stream": { + "node_modules/map-stream": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=" }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "dev": true, - "requires": { - "map-age-cleaner": "0.1.3", - "mimic-fn": "2.1.0", - "p-is-promise": "2.1.0" - } - }, - "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" - }, - "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", - "requires": { - "mime-db": "1.40.0" + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" } }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimatch": { + "node_modules/minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, - "requires": { - "brace-expansion": "1.1.11" + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "minimist": { + "node_modules/minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, - "mkdirp": { + "node_modules/mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { + "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", + "dependencies": { "minimist": "0.0.8" }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } + "bin": { + "mkdirp": "bin/cmd.js" } }, - "mkdirp-promise": { + "node_modules/mkdirp-promise": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-1.1.0.tgz", - "integrity": "sha1-LISJPtZ24NmPsY+5piEv0bK5qBk=" + "integrity": "sha1-LISJPtZ24NmPsY+5piEv0bK5qBk=", + "deprecated": "This package is broken and no longer maintained. 'mkdirp' itself supports promises now, please switch to that.", + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "mkdirp": ">=0.5.0" + } }, - "mocha": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.1.4.tgz", - "integrity": "sha512-PN8CIy4RXsIoxoFJzS4QNnCH4psUCPWc4/rPrst/ecSJJbLBkubMiyGCP2Kj/9YnWbotFqAoeXyXMucj7gwCFg==", + "node_modules/mkdirp/node_modules/minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "node_modules/mocha": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.2.1.tgz", + "integrity": "sha512-cuLBVfyFfFqbNR0uUKbDGXKGk+UDFe6aR4os78XIrMQpZl/nv7JYHcvP5MFIAb374b2zFXsdgEGwmzMtP0Xg8w==", "dev": true, - "requires": { - "ansi-colors": "3.2.3", + "dependencies": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", - "debug": "3.2.6", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", + "chokidar": "3.4.3", + "debug": "4.2.0", + "diff": "4.0.2", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.6", "growl": "1.10.5", "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "2.2.0", + "js-yaml": "3.14.0", + "log-symbols": "4.0.0", "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "ms": "2.1.1", - "node-environment-flags": "1.0.5", - "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", + "ms": "2.1.2", + "nanoid": "3.1.12", + "serialize-javascript": "5.0.1", + "strip-json-comments": "3.1.1", + "supports-color": "7.2.0", + "which": "2.0.2", "wide-align": "1.1.3", - "yargs": "13.2.2", - "yargs-parser": "13.0.0", - "yargs-unparser": "1.5.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "2.1.1" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "3.0.0" - } - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", - "dev": true, - "requires": { - "p-try": "2.2.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, + "workerpool": "6.0.2", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 10.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { "supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } + "optional": true } } }, - "ms": { + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mocha/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/mocha/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mocha/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "mute-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", - "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", - "dev": true + "node_modules/nanoid": { + "version": "3.1.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.12.tgz", + "integrity": "sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || >=13.7" + } }, - "natural-compare": { + "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "neo-async": { + "node_modules/neo-async": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", "dev": true }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-environment-flags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", - "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", + "node_modules/nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "dev": true, - "requires": { - "object.getownpropertydescriptors": "2.0.3", - "semver": "5.7.0" + "dependencies": { + "abbrev": "1" }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, "dependencies": { - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "dev": true - } + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "node_modules/normalize-package-data/node_modules/resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", "dev": true, - "requires": { - "abbrev": "1.0.9" + "dependencies": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, - "requires": { - "path-key": "2.0.1" + "bin": { + "semver": "bin/semver" } }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "oauth-sign": { + "node_modules/oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true + "dev": true, + "engines": { + "node": "*" + } }, - "object-assign": { + "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "object-keys": { + "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4" + } }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "node_modules/object.entries": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz", + "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==", "dev": true, - "requires": { - "define-properties": "1.1.3", - "function-bind": "1.1.1", - "has-symbols": "1.0.0", - "object-keys": "1.1.1" + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "has": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" } }, - "object.getownpropertydescriptors": { + "node_modules/object.fromentries": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.3.tgz", + "integrity": "sha512-IDUSMXs6LOSJBWE++L0lzIbSqHl9KDCfff2x/JSEIDtEUavUnyMYC2ZGay/04Zq4UT8lvd4xNhU4/YHKibAOlw==", "dev": true, - "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.13.0" + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "has": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "node_modules/object.values": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz", + "integrity": "sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==", "dev": true, - "requires": { - "wrappy": "1.0.2" + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "has": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, - "requires": { - "minimist": "0.0.10", - "wordwrap": "0.0.3" - }, "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", - "dev": true - }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - } + "wrappy": "1" } }, - "optionator": { + "node_modules/optionator": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, - "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "1.0.0", - "lcid": "2.0.0", - "mem": "4.3.0" + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "dev": true - }, - "p-limit": { + "node_modules/p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, - "requires": { - "p-try": "1.0.0" + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" } }, - "p-locate": { + "node_modules/p-locate": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, - "requires": { - "p-limit": "1.3.0" + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" } }, - "p-try": { + "node_modules/p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, - "requires": { - "error-ex": "1.3.2", - "json-parse-better-errors": "1.0.2" + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "path-exists": { + "node_modules/path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "path-is-absolute": { + "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "pause-stream": { + "node_modules/path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "dependencies": { + "pify": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pause-stream": { "version": "0.0.11", "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", - "requires": { - "through": "2.3.8" + "dependencies": { + "through": "~2.3" } }, - "performance-now": { + "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "dev": true }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true + "node_modules/picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "pinkie": { + "node_modules/pinkie": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-1.0.0.tgz", - "integrity": "sha1-Wkfyi6EBXQIBvae/DzWOR77Ix+Q=" + "integrity": "sha1-Wkfyi6EBXQIBvae/DzWOR77Ix+Q=", + "engines": { + "node": ">=0.10.0" + } }, - "pinkie-promise": { + "node_modules/pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "2.0.4" + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "license": "MIT", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise/node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-conf": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-3.1.0.tgz", + "integrity": "sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0", + "load-json-file": "^5.2.0" }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, "dependencies": { - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - } + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "pkg-conf": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", - "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=", + "node_modules/pkg-conf/node_modules/load-json-file": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", + "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.15", + "parse-json": "^4.0.0", + "pify": "^4.0.1", + "strip-bom": "^3.0.0", + "type-fest": "^0.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-conf/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-conf/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", "dev": true, - "requires": { - "find-up": "2.1.0", - "load-json-file": "4.0.0" + "engines": { + "node": ">=6" } }, - "pkg-config": { + "node_modules/pkg-config": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz", "integrity": "sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q=", "dev": true, - "requires": { - "debug-log": "1.0.1", - "find-root": "1.1.0", - "xtend": "4.0.1" + "dependencies": { + "debug-log": "^1.0.0", + "find-root": "^1.0.0", + "xtend": "^4.0.1" + }, + "engines": { + "node": ">=0.10" } }, - "pkg-dir": { + "node_modules/pkg-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, - "requires": { - "find-up": "2.1.0" - } - }, - "pkg-up": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-1.0.0.tgz", - "integrity": "sha1-Pgj7RhUlxEIWJKM7n35tCvWwWiY=", - "dev": true, - "requires": { - "find-up": "1.1.2" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "2.0.1" - } - } + "dependencies": { + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" } }, - "pluralize": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", - "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", - "dev": true - }, - "prelude-ls": { + "node_modules/prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8.0" + } }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } }, - "progress": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", - "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", - "dev": true + "node_modules/prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } }, - "pseudomap": { + "node_modules/pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", "dev": true }, - "psl": { + "node_modules/psl": { "version": "1.1.31", "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", "dev": true }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" - } - }, - "punycode": { + "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } }, - "qs": { + "node_modules/qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } }, - "rc": { + "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, - "requires": { - "deep-extend": "0.6.0", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" } }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "dependencies": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "readline2": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", - "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", + "node_modules/read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "mute-stream": "0.0.5" + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "node_modules/regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", "dev": true, - "requires": { - "resolve": "1.1.7" + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, - "request": { + "node_modules/request": { "version": "2.88.0", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", "dev": true, - "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.8.0", - "caseless": "0.12.0", - "combined-stream": "1.0.7", - "extend": "3.0.2", - "forever-agent": "0.6.1", - "form-data": "2.3.3", - "har-validator": "5.1.3", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.24", - "oauth-sign": "0.9.0", - "performance-now": "2.1.0", - "qs": "6.5.2", - "safe-buffer": "5.1.2", - "tough-cookie": "2.4.3", - "tunnel-agent": "0.6.0", - "uuid": "3.3.2" - }, - "dependencies": { - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.7", - "mime-types": "2.1.24" - } - } + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 4" } }, - "require-directory": { + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "require-main-filename": { + "node_modules/require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "0.1.0", - "resolve-from": "1.0.1" - } - }, - "resolve": { + "node_modules/resolve": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", "dev": true }, - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" + "engines": { + "node": ">=4" } }, - "rimraf": { + "node_modules/rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, - "requires": { - "glob": "7.1.3" - }, - "dependencies": { - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" } }, - "run-async": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", - "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", + "node_modules/rimraf/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "requires": { - "once": "1.4.0" + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", - "dev": true - }, - "rx-lite": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", - "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", - "dev": true - }, - "safe-buffer": { + "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "safer-buffer": { + "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "node_modules/semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "set-blocking": { + "node_modules/serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "requires": { - "shebang-regex": "1.0.0" + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shelljs": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", - "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", - "dev": true, - "requires": { - "glob": "7.1.3", - "interpret": "1.2.0", - "rechoir": "0.6.2" - }, - "dependencies": { - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" } }, - "should": { + "node_modules/should": { "version": "13.2.3", "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", "dev": true, - "requires": { - "should-equal": "2.0.0", - "should-format": "3.0.3", - "should-type": "1.4.0", - "should-type-adaptors": "1.1.0", - "should-util": "1.0.0" + "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" } }, - "should-equal": { + "node_modules/should-equal": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", "dev": true, - "requires": { - "should-type": "1.4.0" + "dependencies": { + "should-type": "^1.4.0" } }, - "should-format": { + "node_modules/should-format": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", "integrity": "sha1-m/yPdPo5IFxT04w01xcwPidxJPE=", "dev": true, - "requires": { - "should-type": "1.4.0", - "should-type-adaptors": "1.1.0" + "dependencies": { + "should-type": "^1.3.0", + "should-type-adaptors": "^1.0.1" } }, - "should-type": { + "node_modules/should-type": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", "integrity": "sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM=", "dev": true }, - "should-type-adaptors": { + "node_modules/should-type-adaptors": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", "dev": true, - "requires": { - "should-type": "1.4.0", - "should-util": "1.0.0" + "dependencies": { + "should-type": "^1.3.0", + "should-util": "^1.0.0" } }, - "should-util": { + "node_modules/should-util": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.0.tgz", "integrity": "sha1-yYzaN0qmsZDfi6h8mInCtNtiAGM=", "dev": true }, - "sigmund": { + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel/node_modules/object-inspect": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sigmund": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", "dev": true }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true + "node_modules/slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=6" + } }, - "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", - "dev": true + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } }, - "source-map": { + "node_modules/source-map": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", "dev": true, "optional": true, - "requires": { - "amdefine": "1.0.1" + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "split": { + "node_modules/spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "dev": true + }, + "node_modules/split": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", - "requires": { - "through": "2.3.8" + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" } }, - "sprintf-js": { + "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "node_modules/sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/standard": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/standard/-/standard-16.0.3.tgz", + "integrity": "sha512-70F7NH0hSkNXosXRltjSv6KpTAOkUkSfyu3ynyM5dtRUiLtR+yX9EGZ7RKwuGUqCJiX/cnkceVM6HTZ4JpaqDg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "eslint": "~7.13.0", + "eslint-config-standard": "16.0.2", + "eslint-config-standard-jsx": "10.0.0", + "eslint-plugin-import": "~2.22.1", + "eslint-plugin-node": "~11.1.0", + "eslint-plugin-promise": "~4.2.1", + "eslint-plugin-react": "~7.21.5", + "standard-engine": "^14.0.1" + }, + "bin": { + "standard": "bin/cmd.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/standard-engine": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-14.0.1.tgz", + "integrity": "sha512-7FEzDwmHDOGva7r9ifOzD3BGdTbA7ujJ50afLVdW/tK14zQEptJjbFuUfn50irqdHDcTbNh0DTIoMPynMCXb0Q==", "dev": true, - "requires": { - "asn1": "0.2.4", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.2", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.2", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "safer-buffer": "2.1.2", - "tweetnacl": "0.14.5" - } - }, - "standard": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/standard/-/standard-10.0.3.tgz", - "integrity": "sha1-eGm8v0Ir3uqraJof+x/qlnfdUOo=", - "dev": true, - "requires": { - "eslint": "3.19.0", - "eslint-config-standard": "10.2.1", - "eslint-config-standard-jsx": "4.0.2", - "eslint-plugin-import": "2.2.0", - "eslint-plugin-node": "4.2.3", - "eslint-plugin-promise": "3.5.0", - "eslint-plugin-react": "6.10.3", - "eslint-plugin-standard": "3.0.1", - "standard-engine": "7.0.0" - } - }, - "standard-engine": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-7.0.0.tgz", - "integrity": "sha1-67d7nI/CyBZf+jU72Rug3/Qa9pA=", - "dev": true, - "requires": { - "deglob": "2.1.1", - "get-stdin": "5.0.1", - "minimist": "1.2.0", - "pkg-conf": "2.1.0" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "get-stdin": "^8.0.0", + "minimist": "^1.2.5", + "pkg-conf": "^3.1.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8.10" } }, - "stream-combiner": { + "node_modules/standard-engine/node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/stream-combiner": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", - "requires": { - "duplexer": "0.1.1" + "dependencies": { + "duplexer": "~0.1.1" } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, - "requires": { - "safe-buffer": "5.1.2" + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" } }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "node_modules/string-width/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.3.tgz", + "integrity": "sha512-OBxYDA2ifZQ2e13cP82dWFMaCV9CGF8GzmN4fljBVw5O5wep0lu4gacm1OL6MjROoUnB8VbkWRThqkV2YFLNxw==", "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "has-symbols": "^1.0.1", + "internal-slot": "^1.0.2", + "regexp.prototype.flags": "^1.3.0", + "side-channel": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "stringify-object": { + "node_modules/stringify-object": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "requires": { - "get-own-enumerable-property-symbols": "3.0.0", - "is-obj": "1.0.1", - "is-regexp": "1.0.0" + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" } }, - "strip-ansi": { + "node_modules/strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "strip-bom": { + "node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "strip-json-comments": { + "node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "supports-color": { + "node_modules/supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - }, - "table": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", - "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", - "dev": true, - "requires": { - "ajv": "4.11.8", - "ajv-keywords": "1.5.1", - "chalk": "1.1.3", - "lodash": "4.17.11", - "slice-ansi": "0.0.4", - "string-width": "2.1.1" - }, - "dependencies": { - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - } + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "dependencies": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" } }, - "text-table": { + "node_modules/table/node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/table/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/table/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/table/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, - "through": { + "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, - "tough-cookie": { + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tough-cookie": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", "dev": true, - "requires": { - "psl": "1.1.31", - "punycode": "1.4.1" + "dependencies": { + "psl": "^1.1.24", + "punycode": "^1.4.1" }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tough-cookie/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "node_modules/tsconfig-paths": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", + "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "dev": true, "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" } }, - "tunnel-agent": { + "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, - "requires": { - "safe-buffer": "5.1.2" + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" } }, - "tweetnacl": { + "node_modules/tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true }, - "type-check": { + "node_modules/type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, - "requires": { - "prelude-ls": "1.1.2" + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" } }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true + "node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "uglify-js": { + "node_modules/uglify-js": { "version": "3.5.8", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.8.tgz", "integrity": "sha512-GFSjB1nZIzoIq70qvDRtWRORHX3vFkAnyK/rDExc0BN7r9+/S+Voz3t/fwJuVfjppAMz+ceR2poE7tkhvnVwQQ==", "dev": true, "optional": true, - "requires": { - "commander": "2.20.0", - "source-map": "0.6.1" - }, "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - } + "commander": "~2.20.0", + "source-map": "~0.6.1" + }, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" } }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true + "node_modules/uglify-js/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } }, - "uri-js": { + "node_modules/uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "requires": { - "punycode": "2.1.1" + "dependencies": { + "punycode": "^2.1.0" } }, - "user-home": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", - "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", + "node_modules/uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "dev": true, - "requires": { - "os-homedir": "1.0.2" + "bin": { + "uuid": "bin/uuid" } }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "node_modules/v8-compile-cache": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", + "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", "dev": true }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } }, - "verror": { + "node_modules/verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, - "requires": { - "assert-plus": "1.0.0", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", "core-util-is": "1.0.2", - "extsprintf": "1.3.0" + "extsprintf": "^1.2.0" } }, - "which": { + "node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "requires": { - "isexe": "2.0.0" + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, - "which-module": { + "node_modules/which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, - "wide-align": { + "node_modules/wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, - "requires": { - "string-width": "1.0.2" + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "wordwrap": { + "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", "dev": true }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "node_modules/workerpool": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.2.tgz", + "integrity": "sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" } }, - "wrappy": { + "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "node_modules/write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "dependencies": { + "mkdirp": "^0.5.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", "dev": true, - "requires": { - "mkdirp": "0.5.1" + "engines": { + "node": ">=8" } }, - "xtend": { + "node_modules/xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4" + } }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "node_modules/y18n": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", "dev": true }, - "yallist": { + "node_modules/yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", "dev": true }, - "yargs": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.2.tgz", - "integrity": "sha512-WyEoxgyTD3w5XRpAQNYUB9ycVH/PQrToaTXdYXRdOXvEy1l19br+VJsc0vcO8PTGg5ro/l/GY7F/JMEBmI0BxA==", - "dev": true, - "requires": { - "cliui": "4.1.0", - "find-up": "3.0.0", - "get-caller-file": "2.0.5", - "os-locale": "3.1.0", - "require-directory": "2.1.1", - "require-main-filename": "2.0.0", - "set-blocking": "2.0.0", - "string-width": "3.1.0", - "which-module": "2.0.0", - "y18n": "4.0.0", - "yargs-parser": "13.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "3.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" - } - }, - "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", - "dev": true, - "requires": { - "p-try": "2.2.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "7.0.3", - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "5.2.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "4.1.0" - } - } + "node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.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": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } }, - "yargs-parser": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.0.0.tgz", - "integrity": "sha512-w2LXjoL8oRdRQN+hOyppuXs+V/fVAYtpcrRxZuF7Kt/Oc+Jr2uAcVntaUTNT6w5ihoWfFDpNY8CPx1QskxZ/pw==", + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, - "requires": { - "camelcase": "5.3.1", - "decamelize": "1.2.0" + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" } }, - "yargs-unparser": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.5.0.tgz", - "integrity": "sha512-HK25qidFTCVuj/D1VfNiEndpLIeJN78aqgR23nL3y4N0U/91cOAzqfHlF8n2BvoNDcZmJKin3ddNSvOxSr8flw==", + "node_modules/yargs-unparser/node_modules/camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs-unparser/node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, - "requires": { - "flat": "4.1.0", - "lodash": "4.17.11", - "yargs": "12.0.5" + "engines": { + "node": ">=10" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "3.0.0" - } - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" - } - }, - "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", - "dev": true, - "requires": { - "p-try": "2.2.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - }, - "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", - "dev": true, - "requires": { - "cliui": "4.1.0", - "decamelize": "1.2.0", - "find-up": "3.0.0", - "get-caller-file": "1.0.3", - "os-locale": "3.1.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "4.0.0", - "yargs-parser": "11.1.1" - } - }, - "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", - "dev": true, - "requires": { - "camelcase": "5.3.1", - "decamelize": "1.2.0" - } - } + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } } } diff --git a/package.json b/package.json index 6aab1f122..5cd1ec31f 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,15 @@ { - "version": "1.19.1", - "name": "httpsnippet", + "version": "2.0.18", + "name": "@rapidapi/httpsnippet", "description": "HTTP Request snippet generator for *most* languages", "author": "Ahmad Nassri (https://www.mashape.com/)", "homepage": "https://github.com/Mashape/httpsnippet", "license": "MIT", "main": "src/index.js", "bin": "bin/httpsnippet", + "publishConfig": { + "registry": "https://npm.pkg.github.com/" + }, "keywords": [ "api", "clojure", @@ -16,9 +19,11 @@ "har", "http", "httpie", + "httr", "java", "javascript", "jquery", + "kotlin", "objc", "objective-c", "ocaml", @@ -36,25 +41,25 @@ "xmlhttprequest" ], "engines": { - "node": ">=4" + "node": ">=10" }, "files": [ "bin", "src" ], - "repository": "Mashape/httpsnippet", + "repository": "RapidAPI/httpsnippet", "bugs": { - "url": "https://github.com/Mashape/httpsnippet/issues" + "url": "https://github.com/RapidAPI/httpsnippet/issues" }, "scripts": { "quick": "mocha --no-timeouts --fgrep 'Request Validation' --invert", - "pretest": "standard && echint", "test": "mocha --no-timeouts", "posttest": "exit 0 && npm run coverage", "coverage": "istanbul cover --dir coverage _mocha -- --fgrep 'Request Validation' --invert -R dot", "codeclimate": "codeclimate < coverage/lcov.info" }, "standard": { + "env": "mocha", "ignore": [ "**/test/fixtures/**" ] @@ -71,20 +76,21 @@ "echint": "^4.0.2", "glob": "^6.0.1", "istanbul": "^0.4.0", - "mocha": "^6.1.4", + "mocha": "^8.2.1", "require-directory": "^2.1.1", "should": "^13.2.3", - "standard": "^10.0.2" + "standard": "^16.0.3" }, "dependencies": { "chalk": "^1.1.1", "commander": "^2.9.0", "debug": "^2.2.0", "event-stream": "3.3.4", - "form-data": "^1.0.0-rc3", + "form-data": "^3.0.4", "fs-readfile-promise": "^2.0.1", "fs-writefile-promise": "^1.0.3", "har-validator": "^5.0.0", + "lodash": "^4.17.15", "pinkie-promise": "^2.0.0", "stringify-object": "^3.3.0" } diff --git a/src/helpers/code-builder.js b/src/helpers/code-builder.js index 335ea34c0..59f6146c2 100644 --- a/src/helpers/code-builder.js +++ b/src/helpers/code-builder.js @@ -1,6 +1,7 @@ -'use strict' +"use strict"; -var util = require('util') +const { cloneDeep } = require("lodash"); +const util = require("util"); /** * Helper object to format and aggragate lines of code. @@ -11,11 +12,11 @@ var util = require('util') * @param {string} indentation Desired indentation character for aggregated lines of code * @param {string} join Desired character to join each line of code */ -var CodeBuilder = function (indentation, join) { - this.code = [] - this.indentation = indentation - this.lineJoin = join || '\n' -} +const CodeBuilder = function (indentation, join) { + this.code = []; + this.indentation = indentation; + this.lineJoin = join || "\n"; +}; /** * Add given indentation level to given string and format the string (variadic) @@ -37,26 +38,26 @@ var CodeBuilder = function (indentation, join) { * // returns: 'console.log("\t\thello world")' */ CodeBuilder.prototype.buildLine = function (indentationLevel, line) { - var lineIndentation = '' - var slice = 2 - if (Object.prototype.toString.call(indentationLevel) === '[object String]') { - slice = 1 - line = indentationLevel - indentationLevel = 0 + let lineIndentation = ""; + let slice = 2; + if (Object.prototype.toString.call(indentationLevel) === "[object String]") { + slice = 1; + line = indentationLevel; + indentationLevel = 0; } else if (indentationLevel === null) { - return null + return null; } while (indentationLevel) { - lineIndentation += this.indentation - indentationLevel-- + lineIndentation += this.indentation; + indentationLevel--; } - var format = Array.prototype.slice.call(arguments, slice, arguments.length) - format.unshift(lineIndentation + line) + const format = Array.prototype.slice.call(arguments, slice, arguments.length); + format.unshift(lineIndentation + line); - return util.format.apply(this, format) -} + return util.format.apply(this, format); +}; /** * Invoke buildLine() and add the line at the top of current lines @@ -65,10 +66,10 @@ CodeBuilder.prototype.buildLine = function (indentationLevel, line) { * @return {this} */ CodeBuilder.prototype.unshift = function () { - this.code.unshift(this.buildLine.apply(this, arguments)) + this.code.unshift(this.buildLine.apply(this, arguments)); - return this -} + return this; +}; /** * Invoke buildLine() and add the line at the bottom of current lines @@ -77,27 +78,35 @@ CodeBuilder.prototype.unshift = function () { * @return {this} */ CodeBuilder.prototype.push = function () { - this.code.push(this.buildLine.apply(this, arguments)) + this.code.push(this.buildLine.apply(this, arguments)); - return this -} + return this; +}; /** * Add an empty line at the end of current lines * @return {this} */ CodeBuilder.prototype.blank = function () { - this.code.push(null) + this.code.push(null); - return this -} + return this; +}; /** * Concatenate all current lines using the given lineJoin * @return {string} */ CodeBuilder.prototype.join = function () { - return this.code.join(this.lineJoin) -} + return this.code.join(this.lineJoin); +}; -module.exports = CodeBuilder +CodeBuilder.prototype.clone = function () { + return cloneDeep(this); +}; + +CodeBuilder.prototype.getLength = function () { + return this.code.length; +}; + +module.exports = CodeBuilder; diff --git a/src/helpers/form-data.js b/src/helpers/form-data.js new file mode 100644 index 000000000..73689f7b2 --- /dev/null +++ b/src/helpers/form-data.js @@ -0,0 +1,105 @@ +/** + * @license https://raw.githubusercontent.com/node-fetch/node-fetch/master/LICENSE.md + * + * The MIT License (MIT) + * + * Copyright (c) 2016 - 2020 Node Fetch Team + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Extracted from https://github.com/node-fetch/node-fetch/blob/64c5c296a0250b852010746c76144cb9e14698d9/src/utils/form-data.js + */ + +const carriage = '\r\n' +const dashes = '-'.repeat(2) + +const NAME = Symbol.toStringTag + +const isBlob = object => { + return ( + typeof object === 'object' && + typeof object.arrayBuffer === 'function' && + typeof object.type === 'string' && + typeof object.stream === 'function' && + typeof object.constructor === 'function' && + /^(Blob|File)$/.test(object[NAME]) + ) +} + +/** + * @param {string} boundary + */ +const getFooter = boundary => `${dashes}${boundary}${dashes}${carriage.repeat(2)}` + +/** + * @param {string} boundary + * @param {string} name + * @param {*} field + * + * @return {string} + */ +function getHeader (boundary, name, field) { + let header = '' + + header += `${dashes}${boundary}${carriage}` + header += `Content-Disposition: form-data; name="${name}"` + + if (isBlob(field)) { + header += `; filename="${field.name}"${carriage}` + header += `Content-Type: ${field.type || 'application/octet-stream'}` + } + + return `${header}${carriage.repeat(2)}` +} + +/** + * @return {string} + */ +module.exports.getBoundary = () => { + // This generates a 50 character boundary similar to those used by Firefox. + // They are optimized for boyer-moore parsing. + let boundary = '--------------------------' + for (let i = 0; i < 24; i++) { + boundary += Math.floor(Math.random() * 10).toString(16) + } + + return boundary +} + +/** + * @param {FormData} form + * @param {string} boundary + */ +module.exports.formDataIterator = function * (form, boundary) { + for (const [name, value] of form) { + yield getHeader(boundary, name, value) + + if (isBlob(value)) { + yield * value.stream() + } else { + yield value + } + + yield carriage + } + + yield getFooter(boundary) +} + +module.exports.isBlob = isBlob diff --git a/src/helpers/general.js b/src/helpers/general.js new file mode 100644 index 000000000..804ea2d13 --- /dev/null +++ b/src/helpers/general.js @@ -0,0 +1,30 @@ +const { omit, isObject } = require("lodash"); + +module.exports = { + /** + * + * @param {Object} originalObject - The object from which the property needs to be removed + * @param {string} propertyName - The name of the property to remove(case insensitive) + * @returns the object without the property that was asked to remove + */ + removeProperty: (originalObject, propertyName) => { + if (!isObject(originalObject)) { + throw new Error("originalObject must be an object."); + } + const key = Object.keys(originalObject).find( + (key) => key.toLowerCase() === propertyName.toLowerCase() + ); + if (key) { + return omit(originalObject, key); + } else { + return originalObject; + } + }, + + checkIfRequestContainsFile: (request) => { + return ( + request.postData.mimeType === "multipart/form-data" && + request.postData.params.some((param) => param.fileName) + ); + }, +}; diff --git a/src/helpers/headers.js b/src/helpers/headers.js new file mode 100644 index 000000000..c37701adf --- /dev/null +++ b/src/helpers/headers.js @@ -0,0 +1,39 @@ +module.exports = { + /** + * Given a headers object retrieve the contents of a header out of it via a case-insensitive key. + * + * @param {object} headers + * @param {string} name + * @return {string} + */ + getHeader: (headers, name) => { + return headers[Object.keys(headers).find(k => k.toLowerCase() === name.toLowerCase())] + }, + + /** + * Given a headers object retrieve a specific header out of it via a case-insensitive key. + * + * @param {object} headers + * @param {string} name + * @return {string} + */ + getHeaderName: (headers, name) => { + // eslint-disable-next-line array-callback-return + return Object.keys(headers).find(k => { + if (k.toLowerCase() === name.toLowerCase()) { + return k + } + }) + }, + + /** + * Determine if a given case-insensitive header exists within a header object. + * + * @param {object} headers + * @param {string} name + * @return {(integer|boolean)} + */ + hasHeader: (headers, name) => { + return Boolean(Object.keys(headers).find(k => k.toLowerCase() === name.toLowerCase())) + } +} diff --git a/src/helpers/helpers.spec.js b/src/helpers/helpers.spec.js new file mode 100644 index 000000000..f92751f87 --- /dev/null +++ b/src/helpers/helpers.spec.js @@ -0,0 +1,114 @@ +const { omit } = require("lodash"); +const should = require("should"); +const CodeBuilder = require("./code-builder"); + +const { removeProperty } = require("./general"); +const { constructAppendedParamsCode } = require("./params"); + +describe("Test helpers methods", () => { + describe("Test RemoveProperty helper", () => { + it("RemoveProperty called with invalid params", () => { + (function () { + removeProperty("str", "property"); + }.should.throw(new Error("originalObject must be an object."))); + }); + + it("returned object stayed the same if a non existing property name sent", () => { + const obj = { a: 1, b: 2 }; + const result = removeProperty(obj, "c"); + + result.should.equal(obj); + }); + + it("insensitive case property removed from object successfully", () => { + const obj = { a: 1, b: 2 }; + const result = removeProperty(obj, "B"); + + result.should.deepEqual(omit(obj, "b")); + }); + }); + + describe("Test constructAppendedParamsCode helper", () => { + const fakeParams = [ + { name: "a", value: "1" }, + { name: "b", value: "2" }, + ]; + + it("called with invalid code argument", () => { + (function () { + constructAppendedParamsCode({}, []); + }.should.throw( + new Error("code argument must be an instance of CodeBuilder") + )); + }); + + it("called with invalid params argument", () => { + (function () { + constructAppendedParamsCode(new CodeBuilder(), {}); + }.should.throw(new Error("params argument must be an array"))); + }); + + describe("called with multiple options variations", () => { + const fakeParamsWithFile = [ + ...fakeParams, + { name: "a", fileName: "fakeFileName" }, + ]; + const lastIndex = params.length - 1; + + it("called with file param and false isBrowser option", () => { + const result = constructAppendedParamsCode( + new CodeBuilder(), + fakeParamsWithFile, + { + isBrowser: false, + } + ); + + result.should.be.an.instanceof(CodeBuilder); + result + .join() + .should.containEql( + `fs.createReadStream("/PATH/TO/${fakeParamsWithFile[lastIndex].fileName}")` + ); + }); + + it("called with file param and true isBrowser option", () => { + const result = constructAppendedParamsCode( + new CodeBuilder(), + fakeParamsWithFile, + { + isBrowser: true, + } + ); + + result.should.be.an.instanceof(CodeBuilder); + result + .join() + .should.containEql( + `yourAppInput.files[0], ${JSON.stringify( + params[lastIndex].fileName + )}` + ); + }); + + it("called with dataVarName option", () => { + const result = constructAppendedParamsCode(new CodeBuilder(), params, { + dataVarName: "dataObject", + }); + + result.should.be.an.instanceof(CodeBuilder); + result.join().should.containEql("dataObject.append"); + }); + }); + + it("returned new code object with two params", () => { + const result = constructAppendedParamsCode(new CodeBuilder(), fakeParams); + + result.should.be.an.instanceof(CodeBuilder); + result.getLength().should.equal(2); + result + .join() + .should.equal('data.append("a", "1");\ndata.append("b", "2");'); + }); + }); +}); diff --git a/src/helpers/params.js b/src/helpers/params.js new file mode 100644 index 000000000..86bfa8a61 --- /dev/null +++ b/src/helpers/params.js @@ -0,0 +1,52 @@ +const { isArray } = require("lodash"); + +const CodeBuilder = require("./code-builder"); + +const defaultConstructParamsCodeOptions = { + isBrowser: false, + dataVarName: "data", +}; + +module.exports = { + /** + * + * @param {CodeBuilder} code - Original codeBuilder instance + * @param {[Object]} params - List of params objects + * * @param {Objects} options + * @param {boolean} options.isBrowser - Boolean indicating if browser or other environment(e.g. node) + * @param {string} options.dataVarName - The data object name + * @returns New code instance with params appended to the supplied data object + */ + constructAppendedParamsCode: ( + code, + params = [], + options = defaultConstructParamsCodeOptions + ) => { + if (!(code instanceof CodeBuilder)) { + throw new Error("code argument must be an instance of CodeBuilder"); + } else if (!isArray(params)) { + throw new Error("params argument must be an array"); + } + + const { isBrowser = false, dataVarName = "data" } = options; + const newCode = code.clone(); + + params.forEach(function (param) { + let value = + param.value !== undefined ? JSON.stringify(param.value.toString()) : ""; + if (param.fileName) { + value = isBrowser + ? `yourAppInput.files[0], ${JSON.stringify(param.fileName)}` + : `fs.createReadStream("/PATH/TO/${param.fileName}")`; + } + newCode.push( + "%s.append(%s, %s);", + dataVarName, + JSON.stringify(param.name), + value + ); + }); + + return newCode; + }, +}; diff --git a/src/helpers/reducer.js b/src/helpers/reducer.js index a2ff87e58..30c854980 100644 --- a/src/helpers/reducer.js +++ b/src/helpers/reducer.js @@ -13,7 +13,7 @@ module.exports = function (obj, pair) { } // convert to array - var arr = [ + const arr = [ obj[pair.name], pair.value ] diff --git a/src/helpers/shell.js b/src/helpers/shell.js index a638aa6f7..e20783831 100644 --- a/src/helpers/shell.js +++ b/src/helpers/shell.js @@ -1,6 +1,6 @@ 'use strict' -var util = require('util') +const util = require('util') module.exports = { /** @@ -9,7 +9,7 @@ module.exports = { * http://wiki.bash-hackers.org/syntax/quoting#strong_quoting */ quote: function (value) { - var safe = /^[a-z0-9-_/.@%^=:]+$/i + const safe = /^[a-z0-9-_/.@%^=:]+$/i // Unless `value` is a simple shell-safe string, quote it. if (!safe.test(value)) { diff --git a/src/index.js b/src/index.js index 45dbea091..806b02134 100644 --- a/src/index.js +++ b/src/index.js @@ -1,20 +1,23 @@ +/* eslint-env browser */ + 'use strict' -var debug = require('debug')('httpsnippet') -var es = require('event-stream') -var MultiPartForm = require('form-data') -var qs = require('querystring') -var reducer = require('./helpers/reducer') -var targets = require('./targets') -var url = require('url') -var validate = require('har-validator/lib/async') - -// constructor -var HTTPSnippet = function (data) { - var entries - var self = this - var input = Object.assign({}, data) - var boundary +const debug = require('debug')('httpsnippet') +const es = require('event-stream') +const MultiPartForm = require('form-data') +const qs = require('querystring') +const url = require('url') +const validate = require('har-validator/lib/async') +const get = require('lodash').get + +const targets = require('./targets') +const helpers = require('./helpers/headers') +const reducer = require('./helpers/reducer') +const { formDataIterator, isBlob } = require('./helpers/form-data.js') +const HTTPSnippet = function (data) { + let entries + const self = this + const input = Object.assign({}, data) // prep the main container self.requests = [] @@ -35,6 +38,9 @@ var HTTPSnippet = function (data) { entry.request.headers = entry.request.headers || [] entry.request.cookies = entry.request.cookies || [] entry.request.postData = entry.request.postData || {} + // if (entry.request.postData.mimeType) { + // entry.request.postData.mimeType = entry.request.postData.mimeType + // } entry.request.postData.mimeType = entry.request.postData.mimeType || 'application/octet-stream' entry.request.bodySize = 0 @@ -91,9 +97,14 @@ HTTPSnippet.prototype.prepare = function (request) { // construct headers objects if (request.headers && request.headers.length) { - // loweCase header keys + const http2VersionRegex = /^HTTP\/2/ request.headersObj = request.headers.reduce(function (headers, header) { - headers[header.name.toLowerCase()] = header.value + let headerName = header.name + if (request.httpVersion.match(http2VersionRegex)) { + headerName = headerName.toLowerCase() + } + + headers[headerName] = header.value return headers }, {}) } @@ -107,14 +118,19 @@ HTTPSnippet.prototype.prepare = function (request) { } // construct Cookie header - var cookies = request.cookies.map(function (cookie) { + const cookies = request.cookies.map(function (cookie) { return encodeURIComponent(cookie.name) + '=' + encodeURIComponent(cookie.value) }) if (cookies.length) { request.allHeaders.cookie = cookies.join('; ') } - + let contentType + const headers = get(request, 'headers') + if (headers && headers.length > 0) { + const contentHeader = headers.find(header => header.name === 'Content-Type' || header.name === 'content-type') + contentType = get(contentHeader, 'value') + } switch (request.postData.mimeType) { case 'multipart/mixed': case 'multipart/related': @@ -122,27 +138,85 @@ HTTPSnippet.prototype.prepare = function (request) { case 'multipart/alternative': // reset values request.postData.text = '' - request.postData.mimeType = 'multipart/form-data' + // request.postData.mimeType = 'multipart/form-data' if (request.postData.params) { - var form = new MultiPartForm() + const form = new MultiPartForm() + + /*************** + request.postData.params.forEach((param) => { + form.append(param.name, param.value || '') + }) + + // form.pipe(es.map(function (data, cb) { + // request.postData.text += data + // })) + + // request.postData.boundary = this.getBoundary() + // request.headersObj['content-type'] = 'multipart/form-data; boundary=' + this.getBoundary() + ***************/ + request.headersObj['content-type'] = contentType || request.postData.mimeType || 'application/octet-stream' + // The `form-data` module returns one of two things: a native FormData object, or its own polyfill. Since the + // polyfill does not support the full API of the native FormData object, when this library is running in a + // browser environment it'll fail on two things: + // + // - The API for `form.append()` has three arguments and the third should only be present when the second is a + // Blob or USVString. + // - `FormData.pipe()` isn't a function. + // + // Since the native FormData object is iterable, we easily detect what version of `form-data` we're working + // with here to allow `multipart/form-data` requests to be compiled under both browser and Node environments. + // + // This hack is pretty awful but it's the only way we can use this library in the browser as if we code this + // against just the native FormData object, we can't polyfill that back into Node because Blob and File objects, + // which something like `formdata-polyfill` requires, don't exist there. + const isNativeFormData = (typeof form[Symbol.iterator] === 'function') // easter egg - this._boundary = '---011000010111000001101001' + const boundary = '---011000010111000001101001' + if (!isNativeFormData) { + form._boundary = boundary + } request.postData.params.forEach(function (param) { - form.append(param.name, param.value || '', { - filename: param.fileName || null, - contentType: param.contentType || null - }) + const name = param.name + const value = param.value || '' + const filename = param.fileName || null + + if (isNativeFormData) { + if (isBlob(value)) { + form.append(name, value, filename) + } else { + form.append(name, value) + } + } else { + form.append(name, value, { + filename: filename, + contentType: param.contentType || null + }) + } }) - // form.pipe(es.map(function (data, cb) { - // request.postData.text += data - // })) + if (isNativeFormData) { + for (const data of formDataIterator(form, boundary)) { + request.postData.text += data + } + } else { + // eslint-disable-next-line array-callback-return + form.pipe(es.map(function (data, cb) { + request.postData.text += data + })) + } + + request.postData.boundary = boundary + + // Since headers are case-sensitive we need to see if there's an existing `Content-Type` header that we can + // override. + const contentTypeHeader = helpers.hasHeader(request.headersObj, 'content-type') + ? helpers.getHeaderName(request.headersObj, 'content-type') + : 'content-type' - request.postData.boundary = this.getBoundary() - request.headersObj['content-type'] = 'multipart/form-data; boundary=' + this.getBoundary() + request.headersObj[contentTypeHeader] = 'multipart/form-data; boundary=' + boundary } break @@ -181,6 +255,7 @@ HTTPSnippet.prototype.prepare = function (request) { request.allHeaders = Object.assign(request.allHeaders, request.headersObj) // deconstruct the uri + // eslint-disable-next-line node/no-deprecated-api request.uriObj = url.parse(request.url, true, true) // merge all possible queryString values @@ -213,10 +288,9 @@ HTTPSnippet.prototype.convert = function (target, client, opts) { opts = client } - var func = this._matchTarget(target, client) - + const func = this._matchTarget(target, client) if (func) { - var results = this.requests.map(function (request) { + const results = this.requests.map(function (request) { return func(request, opts) }) @@ -228,6 +302,7 @@ HTTPSnippet.prototype.convert = function (target, client, opts) { HTTPSnippet.prototype._matchTarget = function (target, client) { // does it exist? + // eslint-disable-next-line no-prototype-builtins if (!targets.hasOwnProperty(target)) { return false } @@ -244,15 +319,44 @@ HTTPSnippet.prototype._matchTarget = function (target, client) { // exports module.exports = HTTPSnippet +module.exports.addTarget = function (target) { + if (!('info' in target)) { + throw new Error('The supplied custom target must contain an `info` object.') + } else if (!('key' in target.info) || !('title' in target.info) || !('extname' in target.info) || !('default' in target.info)) { + throw new Error('The supplied custom target must have an `info` object with a `key`, `title`, `extname`, and `default` property.') + // eslint-disable-next-line no-prototype-builtins + } else if (targets.hasOwnProperty(target.info.key)) { + throw new Error('The supplied custom target already exists.') + } else if (Object.keys(target).length === 1) { + throw new Error('A custom target must have a client defined on it.') + } + + targets[target.info.key] = target +} + +module.exports.addTargetClient = function (target, client) { + // eslint-disable-next-line no-prototype-builtins + if (!targets.hasOwnProperty(target)) { + throw new Error(`Sorry, but no ${target} target exists to add clients to.`) + } else if (!('info' in client)) { + throw new Error('The supplied custom target client must contain an `info` object.') + } else if (!('key' in client.info) || !('title' in client.info)) { + throw new Error('The supplied custom target client must have an `info` object with a `key` and `title` property.') + // eslint-disable-next-line no-prototype-builtins + } else if (targets[target].hasOwnProperty(client.info.key)) { + throw new Error('The supplied custom target client already exists, please use a different key') + } + + targets[target][client.info.key] = client +} + module.exports.availableTargets = function () { return Object.keys(targets).map(function (key) { - var target = Object.assign({}, targets[key].info) - var clients = Object.keys(targets[key]) - + const target = Object.assign({}, targets[key].info) + const clients = Object.keys(targets[key]) .filter(function (prop) { return !~['info', 'index'].indexOf(prop) }) - .map(function (client) { return targets[key][client].info }) diff --git a/src/targets/c/libcurl.js b/src/targets/c/libcurl.js index aad328e28..1609074cf 100644 --- a/src/targets/c/libcurl.js +++ b/src/targets/c/libcurl.js @@ -1,22 +1,22 @@ 'use strict' -var CodeBuilder = require('../../helpers/code-builder') +const CodeBuilder = require('../../helpers/code-builder') module.exports = function (source, options) { - var code = new CodeBuilder() + const code = new CodeBuilder() code.push('CURL *hnd = curl_easy_init();') - .blank() - .push('curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "%s");', source.method.toUpperCase()) - .push('curl_easy_setopt(hnd, CURLOPT_URL, "%s");', source.fullUrl) + .blank() + .push('curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "%s");', source.method.toUpperCase()) + .push('curl_easy_setopt(hnd, CURLOPT_URL, "%s");', source.fullUrl) // Add headers, including the cookies - var headers = Object.keys(source.headersObj) + const headers = Object.keys(source.headersObj) // construct headers if (headers.length) { code.blank() - .push('struct curl_slist *headers = NULL;') + .push('struct curl_slist *headers = NULL;') headers.forEach(function (key) { code.push('headers = curl_slist_append(headers, "%s: %s");', key, source.headersObj[key]) @@ -28,16 +28,16 @@ module.exports = function (source, options) { // construct cookies if (source.allHeaders.cookie) { code.blank() - .push('curl_easy_setopt(hnd, CURLOPT_COOKIE, "%s");', source.allHeaders.cookie) + .push('curl_easy_setopt(hnd, CURLOPT_COOKIE, "%s");', source.allHeaders.cookie) } if (source.postData.text) { code.blank() - .push('curl_easy_setopt(hnd, CURLOPT_POSTFIELDS, %s);', JSON.stringify(source.postData.text)) + .push('curl_easy_setopt(hnd, CURLOPT_POSTFIELDS, %s);', JSON.stringify(source.postData.text)) } code.blank() - .push('CURLcode ret = curl_easy_perform(hnd);') + .push('CURLcode ret = curl_easy_perform(hnd);') return code.join() } diff --git a/src/targets/clojure/clj_http.js b/src/targets/clojure/clj_http.js index ec13d5364..dd9286443 100644 --- a/src/targets/clojure/clj_http.js +++ b/src/targets/clojure/clj_http.js @@ -10,9 +10,10 @@ 'use strict' -var CodeBuilder = require('../../helpers/code-builder') +const CodeBuilder = require('../../helpers/code-builder') +const helpers = require('../../helpers/headers') -var Keyword = function (name) { +const Keyword = function (name) { this.name = name } @@ -20,7 +21,7 @@ Keyword.prototype.toString = function () { return ':' + this.name } -var File = function (path) { +const File = function (path) { this.path = path } @@ -28,38 +29,36 @@ File.prototype.toString = function () { return '(clojure.java.io/file "' + this.path + '")' } -var jsType = function (x) { +const jsType = function (x) { return (typeof x !== 'undefined') - ? x.constructor.name.toLowerCase() - : null + ? x.constructor.name.toLowerCase() + : null } -var objEmpty = function (x) { +const objEmpty = function (x) { return (jsType(x) === 'object') - ? Object.keys(x).length === 0 - : false + ? Object.keys(x).length === 0 + : false } -var filterEmpty = function (m) { +const filterEmpty = function (m) { Object.keys(m) - .filter(function (x) { return objEmpty(m[x]) }) - .forEach(function (x) { delete m[x] }) + .filter(function (x) { return objEmpty(m[x]) }) + .forEach(function (x) { delete m[x] }) return m } -var padBlock = function (x, s) { - var padding = Array.apply(null, Array(x)) - .map(function (_) { - return ' ' - }) - .join('') +const padBlock = function (x, s) { + const padding = Array.apply(null, Array(x)) + .map(function (_) { + return ' ' + }) + .join('') return s.replace(/\n/g, '\n' + padding) } -var jsToEdn = function (js) { +const jsToEdn = function (js) { switch (jsType(js)) { - default: // 'number' 'boolean' - return js.toString() case 'string': return '"' + js.replace(/"/g, '\\"') + '"' case 'file': @@ -70,65 +69,75 @@ var jsToEdn = function (js) { return 'nil' case 'regexp': return '#"' + js.source + '"' - case 'object': // simple vertical format - var obj = Object.keys(js) - .reduce(function (acc, key) { - var val = padBlock(key.length + 2, jsToEdn(js[key])) - return acc + ':' + key + ' ' + val + '\n ' - }, '') - .trim() + case 'object': { // simple vertical format + const obj = Object.keys(js) + .reduce(function (acc, key) { + const val = padBlock(key.length + 2, jsToEdn(js[key])) + return acc + ':' + key + ' ' + val + '\n ' + }, '') + .trim() return '{' + padBlock(1, obj) + '}' - case 'array': // simple horizontal format - var arr = js.reduce(function (acc, val) { + } + case 'array': { // simple horizontal format + const arr = js.reduce(function (acc, val) { return acc + ' ' + jsToEdn(val) }, '').trim() return '[' + padBlock(1, arr) + ']' + } + default: // 'number' 'boolean' + return js.toString() } } module.exports = function (source, options) { - var code = new CodeBuilder(options) - var methods = ['get', 'post', 'put', 'delete', 'patch', 'head', 'options'] + const code = new CodeBuilder(options) + const methods = ['get', 'post', 'put', 'delete', 'patch', 'head', 'options'] if (methods.indexOf(source.method.toLowerCase()) === -1) { return code.push('Method not supported').join() } - var params = {headers: source.allHeaders, - 'query-params': source.queryObj} + const params = { + headers: source.allHeaders, + 'query-params': source.queryObj + } switch (source.postData.mimeType) { case 'application/json': params['content-type'] = new Keyword('json') params['form-params'] = source.postData.jsonObj - delete params.headers['content-type'] + delete params.headers[helpers.getHeaderName(params.headers, 'content-type')] break case 'application/x-www-form-urlencoded': params['form-params'] = source.postData.paramsObj - delete params.headers['content-type'] + delete params.headers[helpers.getHeaderName(params.headers, 'content-type')] break case 'text/plain': params.body = source.postData.text - delete params.headers['content-type'] + delete params.headers[helpers.getHeaderName(params.headers, 'content-type')] break case 'multipart/form-data': params.multipart = source.postData.params.map(function (x) { if (x.fileName && !x.value) { - return {name: x.name, - content: new File(x.fileName)} + return { + name: x.name, + content: new File(x.fileName) + } } else { - return {name: x.name, - content: x.value} + return { + name: x.name, + content: x.value + } } }) - delete params.headers['content-type'] + delete params.headers[helpers.getHeaderName(params.headers, 'content-type')] break } - switch (params.headers.accept) { + switch (helpers.getHeader(params.headers, 'accept')) { case 'application/json': params.accept = new Keyword('json') - delete params.headers.accept + delete params.headers[helpers.getHeaderName(params.headers, 'accept')] break } diff --git a/src/targets/csharp/httpclient.js b/src/targets/csharp/httpclient.js new file mode 100644 index 000000000..8523a00ed --- /dev/null +++ b/src/targets/csharp/httpclient.js @@ -0,0 +1,157 @@ +'use strict' + +const CodeBuilder = require('../../helpers/code-builder') +const helpers = require('../../helpers/headers') + +function getDecompressionMethods (source) { + const acceptEncoding = helpers.getHeader(source.allHeaders, 'accept-encoding') + if (!acceptEncoding) { + return [] // no decompression + } + + const supportedMethods = { + gzip: 'DecompressionMethods.GZip', + deflate: 'DecompressionMethods.Deflate' + } + const methods = [] + acceptEncoding.split(',').forEach(function (encoding) { + const match = /\s*([^;\s]+)/.exec(encoding) + if (match) { + const method = supportedMethods[match[1]] + if (method) { + methods.push(method) + } + } + }) + + return methods +} + +module.exports = function (source, options) { + const opts = Object.assign({ + indent: ' ' + }, options) + + const code = new CodeBuilder(opts.indent) + + let clienthandler = '' + const cookies = !!source.allHeaders.cookie + const decompressionMethods = getDecompressionMethods(source) + if (cookies || decompressionMethods.length) { + clienthandler = 'clientHandler' + code.push('var clientHandler = new HttpClientHandler') + code.push('{') + if (cookies) { + // enable setting the cookie header + code.push(1, 'UseCookies = false,') + } + if (decompressionMethods.length) { + // enable decompression for supported methods + code.push(1, 'AutomaticDecompression = %s,', decompressionMethods.join(' | ')) + } + code.push('};') + } + + code.push('var client = new HttpClient(%s);', clienthandler) + + code.push('var request = new HttpRequestMessage') + code.push('{') + + const methods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS', 'TRACE'] + let method = source.method.toUpperCase() + if (method && (methods.indexOf(method) !== -1)) { + // buildin method + method = `HttpMethod.${method[0]}${method.substring(1).toLowerCase()}` + } else { + // custom method + method = `new HttpMethod("${method}")` + } + code.push(1, 'Method = %s,', method) + + code.push(1, 'RequestUri = new Uri("%s"),', source.fullUrl) + + const headers = Object.keys(source.allHeaders).filter(function (header) { + switch (header.toLowerCase()) { + case 'content-type': + case 'content-length': + case 'accept-encoding': + // skip these headers + return false + default: + return true + } + }) + if (headers.length) { + code.push(1, 'Headers =') + code.push(1, '{') + headers.forEach(function (key) { + code.push(2, '{ "%s", "%s" },', key, source.allHeaders[key]) + }) + code.push(1, '},') + } + + if (source.postData.text) { + const contentType = source.postData.mimeType + switch (contentType) { + case 'application/x-www-form-urlencoded': + code.push(1, 'Content = new FormUrlEncodedContent(new Dictionary') + code.push(1, '{') + source.postData.params.forEach(function (param) { + code.push(2, '{ "%s", "%s" },', param.name, param.value) + }) + code.push(1, '}),') + break + case 'multipart/form-data': + code.push(1, 'Content = new MultipartFormDataContent') + code.push(1, '{') + source.postData.params.forEach(function (param) { + code.push(2, 'new StringContent(%s)', JSON.stringify(param.value || '')) + code.push(2, '{') + code.push(3, 'Headers =') + code.push(3, '{') + if (param.contentType) { + code.push(4, 'ContentType = new MediaTypeHeaderValue("%s"),', param.contentType) + } + code.push(4, 'ContentDisposition = new ContentDispositionHeaderValue("form-data")') + code.push(4, '{') + code.push(5, 'Name = "%s",', param.name) + if (param.fileName) { + code.push(5, 'FileName = "%s",', param.fileName) + } + code.push(4, '}') + code.push(3, '}') + code.push(2, '},') + }) + + code.push(1, '},') + break + default: + code.push(1, 'Content = new StringContent(%s)', JSON.stringify(source.postData.text || '')) + code.push(1, '{') + code.push(2, 'Headers =') + code.push(2, '{') + code.push(3, 'ContentType = new MediaTypeHeaderValue("%s")', contentType) + code.push(2, '}') + code.push(1, '}') + break + } + } + code.push('};') + + // send and read response + code.push('using (var response = await client.SendAsync(request))') + code.push('{') + code.push(1, 'response.EnsureSuccessStatusCode();') + code.push(1, 'var body = await response.Content.ReadAsStringAsync();') + code.push(1, 'Console.WriteLine(body);') + code.push('}') + + return code.join() +} + +module.exports.info = { + key: 'httpclient', + title: 'HttpClient', + link: 'https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient', + description: '.NET Standard HTTP Client' +} diff --git a/src/targets/csharp/index.js b/src/targets/csharp/index.js index 226dd69f4..f266f466e 100644 --- a/src/targets/csharp/index.js +++ b/src/targets/csharp/index.js @@ -8,5 +8,6 @@ module.exports = { default: 'restsharp' }, - restsharp: require('./restsharp') + restsharp: require('./restsharp'), + httpclient: require('./httpclient') } diff --git a/src/targets/csharp/restsharp.js b/src/targets/csharp/restsharp.js index 0b8fc2735..d724c368b 100644 --- a/src/targets/csharp/restsharp.js +++ b/src/targets/csharp/restsharp.js @@ -1,10 +1,11 @@ 'use strict' -var CodeBuilder = require('../../helpers/code-builder') +const CodeBuilder = require('../../helpers/code-builder') +const helpers = require('../../helpers/headers') module.exports = function (source, options) { - var code = new CodeBuilder() - var methods = [ 'GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS' ] + const code = new CodeBuilder() + const methods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS'] if (methods.indexOf(source.method.toUpperCase()) === -1) { return 'Method not supported' @@ -14,7 +15,7 @@ module.exports = function (source, options) { } // Add headers, including the cookies - var headers = Object.keys(source.headersObj) + const headers = Object.keys(source.headersObj) // construct headers if (headers.length) { @@ -31,7 +32,11 @@ module.exports = function (source, options) { } if (source.postData.text) { - code.push('request.AddParameter("%s", %s, ParameterType.RequestBody);', source.allHeaders['content-type'], JSON.stringify(source.postData.text)) + code.push( + 'request.AddParameter("%s", %s, ParameterType.RequestBody);', + helpers.getHeader(source.allHeaders, 'content-type'), + JSON.stringify(source.postData.text) + ) } code.push('IRestResponse response = client.Execute(request);') diff --git a/src/targets/go/native.js b/src/targets/go/native.js index 536b4b49d..fe36c93b5 100644 --- a/src/targets/go/native.js +++ b/src/targets/go/native.js @@ -10,25 +10,25 @@ 'use strict' -var CodeBuilder = require('../../helpers/code-builder') +const CodeBuilder = require('../../helpers/code-builder') module.exports = function (source, options) { // Let's Go! - var code = new CodeBuilder('\t') + const code = new CodeBuilder('\t') // Define Options - var opts = Object.assign({ + const opts = Object.assign({ showBoilerplate: true, checkErrors: false, printBody: true, timeout: -1 }, options) - var errorPlaceholder = opts.checkErrors ? 'err' : '_' + const errorPlaceholder = opts.checkErrors ? 'err' : '_' - var indent = opts.showBoilerplate ? 1 : 0 + const indent = opts.showBoilerplate ? 1 : 0 - var errorCheck = function () { + const errorCheck = function () { if (opts.checkErrors) { code.push(indent, 'if err != nil {') .push(indent + 1, 'panic(err)') @@ -64,7 +64,7 @@ module.exports = function (source, options) { } // Create client - var client + let client if (opts.timeout > 0) { client = 'client' code.push(indent, 'client := http.Client{') diff --git a/src/targets/http/http1.1.js b/src/targets/http/http1.1.js index 61968d369..58b5918b5 100644 --- a/src/targets/http/http1.1.js +++ b/src/targets/http/http1.1.js @@ -11,9 +11,9 @@ 'use strict' -var CRLF = '\r\n' -var CodeBuilder = require('../../helpers/code-builder') -var util = require('util') +const CRLF = '\r\n' +const CodeBuilder = require('../../helpers/code-builder') +const util = require('util') /** * Request follows the request message format in accordance to RFC 7230, Section 3. @@ -21,7 +21,7 @@ var util = require('util') * See more at https://tools.ietf.org/html/rfc7230#section-3. */ module.exports = function (source, options) { - var opts = Object.assign( + const opts = Object.assign( { absoluteURI: false, autoContentLength: true, @@ -32,12 +32,12 @@ module.exports = function (source, options) { // RFC 7230 Section 3. Message Format // All lines have no indentation, and should be terminated with CRLF. - var code = new CodeBuilder('', CRLF) + const code = new CodeBuilder('', CRLF) // RFC 7230 Section 5.3. Request Target // Determines if the Request-Line should use 'absolute-form' or 'origin-form'. // Basically it means whether the "http://domain.com" will prepend the full url. - var requestUrl = opts.absoluteURI ? source.fullUrl : source.uriObj.path + const requestUrl = opts.absoluteURI ? source.fullUrl : source.uriObj.path // RFC 7230 Section 3.1.1. Request-Line code.push('%s %s %s', source.method, requestUrl, source.httpVersion) @@ -45,7 +45,7 @@ module.exports = function (source, options) { // RFC 7231 Section 5. Header Fields Object.keys(source.allHeaders).forEach(function (key) { // Capitalize header keys, even though it's not required by the spec. - var keyCapitalized = key.toLowerCase().replace(/(^|-)(\w)/g, function (x) { + const keyCapitalized = key.toLowerCase().replace(/(^|-)(\w)/g, function (x) { return x.toUpperCase() }) @@ -78,8 +78,8 @@ module.exports = function (source, options) { code.blank() // Separate header section and message body section. - var headerSection = code.join() - var messageBody = '' + const headerSection = code.join() + let messageBody = '' // RFC 7230 Section 3.3. Message Body if (source.postData.text) { diff --git a/src/targets/http/index.js b/src/targets/http/index.js index 7ed07a4ec..9ad83c680 100644 --- a/src/targets/http/index.js +++ b/src/targets/http/index.js @@ -8,5 +8,5 @@ module.exports = { default: '1.1' }, - '1.1': require('./http1.1') + 1.1: require('./http1.1') } diff --git a/src/targets/index.js b/src/targets/index.js index 8ccc137ca..09ed49e07 100644 --- a/src/targets/index.js +++ b/src/targets/index.js @@ -8,12 +8,15 @@ module.exports = { http: require('./http'), java: require('./java'), javascript: require('./javascript'), + kotlin: require('./kotlin'), node: require('./node'), objc: require('./objc'), ocaml: require('./ocaml'), php: require('./php'), powershell: require('./powershell'), python: require('./python'), + r: require('./r'), + rapidql: require('./rapidql'), ruby: require('./ruby'), shell: require('./shell'), swift: require('./swift') diff --git a/src/targets/java/asynchttp.js b/src/targets/java/asynchttp.js new file mode 100644 index 000000000..ce3db5db5 --- /dev/null +++ b/src/targets/java/asynchttp.js @@ -0,0 +1,55 @@ +/** + * @description + * Asynchronous Http and WebSocket Client library for Java + * + * @author + * @windard + * + * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author. + */ + +'use strict' + +const CodeBuilder = require('../../helpers/code-builder') + +module.exports = function (source, options) { + const opts = Object.assign({ + indent: ' ' + }, options) + + const code = new CodeBuilder(opts.indent) + + code.push('AsyncHttpClient client = new DefaultAsyncHttpClient();') + + code.push(`client.prepare("${source.method.toUpperCase()}", "${source.fullUrl}")`) + + // Add headers, including the cookies + const headers = Object.keys(source.allHeaders) + + // construct headers + if (headers.length) { + headers.forEach(function (key) { + code.push(1, '.setHeader("%s", "%s")', key, source.allHeaders[key]) + }) + } + + if (source.postData.text) { + code.push(1, '.setBody(%s)', JSON.stringify(source.postData.text)) + } + + code.push(1, '.execute()') + code.push(1, '.toCompletableFuture()') + code.push(1, '.thenAccept(System.out::println)') + code.push(1, '.join();') + code.blank() + code.push('client.close();') + + return code.join() +} + +module.exports.info = { + key: 'asynchttp', + title: 'AsyncHttp', + link: 'https://github.com/AsyncHttpClient/async-http-client', + description: 'Asynchronous Http and WebSocket Client library for Java' +} diff --git a/src/targets/java/index.js b/src/targets/java/index.js index 2d13eefa1..37b0db718 100644 --- a/src/targets/java/index.js +++ b/src/targets/java/index.js @@ -9,5 +9,7 @@ module.exports = { }, okhttp: require('./okhttp'), - unirest: require('./unirest') + unirest: require('./unirest'), + asynchttp: require('./asynchttp'), + nethttp: require('./nethttp') } diff --git a/src/targets/java/nethttp.js b/src/targets/java/nethttp.js new file mode 100644 index 000000000..328eeaa78 --- /dev/null +++ b/src/targets/java/nethttp.js @@ -0,0 +1,63 @@ +/** + * @description + * HTTP code snippet generator for Java using java.net.http. + * + * @author + * @wtetsu + * + * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author. + */ + +'use strict' + +const CodeBuilder = require('../../helpers/code-builder') + +module.exports = function (source, options) { + const opts = Object.assign( + { + indent: ' ' + }, + options + ) + + const code = new CodeBuilder(opts.indent) + + code.push('HttpRequest request = HttpRequest.newBuilder()') + code.push(2, '.uri(URI.create("%s"))', source.fullUrl) + + const headers = Object.keys(source.allHeaders) + + // construct headers + if (headers.length) { + headers.forEach(function (key) { + code.push(2, '.header("%s", "%s")', key, source.allHeaders[key]) + }) + } + + if (source.postData.text) { + code.push( + 2, + '.method("%s", HttpRequest.BodyPublishers.ofString(%s))', + source.method.toUpperCase(), + JSON.stringify(source.postData.text) + ) + } else { + code.push(2, '.method("%s", HttpRequest.BodyPublishers.noBody())', source.method.toUpperCase()) + } + + code.push(2, '.build();') + + code.push( + 'HttpResponse response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());' + ) + code.push('System.out.println(response.body());') + + return code.join() +} + +module.exports.info = { + key: 'nethttp', + title: 'java.net.http', + link: 'https://openjdk.java.net/groups/net/httpclient/intro.html', + description: 'Java Standardized HTTP Client API' +} diff --git a/src/targets/java/okhttp.js b/src/targets/java/okhttp.js index c03d985d2..5d93390a0 100644 --- a/src/targets/java/okhttp.js +++ b/src/targets/java/okhttp.js @@ -10,33 +10,60 @@ 'use strict' -var CodeBuilder = require('../../helpers/code-builder') +const _ = require('lodash') +const CodeBuilder = require('../../helpers/code-builder') module.exports = function (source, options) { - var opts = Object.assign({ + const opts = Object.assign({ indent: ' ' }, options) - var code = new CodeBuilder(opts.indent) + const code = new CodeBuilder(opts.indent) - var methods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD'] + const methods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD'] - var methodsWithBody = ['POST', 'PUT', 'DELETE', 'PATCH'] + const methodsWithBody = ['POST', 'PUT', 'DELETE', 'PATCH'] code.push('OkHttpClient client = new OkHttpClient();') .blank() - if (source.postData.text) { - if (source.postData.boundary) { - code.push('MediaType mediaType = MediaType.parse("%s; boundary=%s");', source.postData.mimeType, source.postData.boundary) - } else { - code.push('MediaType mediaType = MediaType.parse("%s");', source.postData.mimeType) - } - code.push('RequestBody body = RequestBody.create(mediaType, %s);', JSON.stringify(source.postData.text)) + if (source.postData.mimeType === 'multipart/form-data') { + code.push('RequestBody body = new MultipartBody.Builder()') + .push(1, '.setType(MultipartBody.FORM)') + + source.postData.params.forEach((param) => { + if (param.fileName) { + code.push(1, '.addFormDataPart(%s, %s,', JSON.stringify(param.name), JSON.stringify(param.fileName)) + .push(2, 'RequestBody.create(MediaType.parse("text/plain"), fileInput))') + } else { + const value = JSON.stringify(param.value.toString()) || "" + code.push(1, '.addFormDataPart(%s, %s)', JSON.stringify(param.name), value) + } + }) + + code.push(1, '.build();') + } else if (source.postData.mimeType === 'application/x-www-form-urlencoded') { + code.push('RequestBody body = new FormBody.Builder()') + + source.postData.params.forEach((param) => { + const value = JSON.stringify(param.value.toString()) || "" + code.push(1, '.add(%s, %s)', JSON.stringify(param.name), value) + }) + + code.push(1, '.build();') + } else if (source.postData.text) { + code.push('MediaType mediaType = MediaType.parse("%s");', source.postData.mimeType) + .push('String value = %s;', JSON.stringify(source.postData.text)) + .push('RequestBody body = RequestBody.create(mediaType, value);') + } + + if (source.postData.params) { + code.blank() } code.push('Request request = new Request.Builder()') - code.push(1, '.url("%s")', source.fullUrl) + .push(1, '.url("%s")', source.fullUrl) + if (methods.indexOf(source.method.toUpperCase()) === -1) { if (source.postData.text) { code.push(1, '.method("%s", body)', source.method.toUpperCase()) @@ -53,15 +80,10 @@ module.exports = function (source, options) { code.push(1, '.%s()', source.method.toLowerCase()) } - // Add headers, including the cookies - var headers = Object.keys(source.allHeaders) - - // construct headers - if (headers.length) { - headers.forEach(function (key) { - code.push(1, '.addHeader("%s", "%s")', key, source.allHeaders[key]) - }) - } + // construct request headers + _(source.allHeaders) + .pickBy((value, key) => !(value.toLowerCase().includes('multipart/form-data'))) // Remove content type header if form-data + .forEach((value, key) => { code.push(1, '.addHeader("%s", "%s")', key, value) }) code.push(1, '.build();') .blank() diff --git a/src/targets/java/unirest.js b/src/targets/java/unirest.js index beabdc52f..7def78eec 100644 --- a/src/targets/java/unirest.js +++ b/src/targets/java/unirest.js @@ -10,16 +10,16 @@ 'use strict' -var CodeBuilder = require('../../helpers/code-builder') +const CodeBuilder = require('../../helpers/code-builder') module.exports = function (source, options) { - var opts = Object.assign({ + const opts = Object.assign({ indent: ' ' }, options) - var code = new CodeBuilder(opts.indent) + const code = new CodeBuilder(opts.indent) - var methods = [ 'GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS' ] + const methods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS'] if (methods.indexOf(source.method.toUpperCase()) === -1) { code.push('HttpResponse response = Unirest.customMethod("%s","%s")', source.method.toUpperCase(), source.fullUrl) @@ -28,7 +28,7 @@ module.exports = function (source, options) { } // Add headers, including the cookies - var headers = Object.keys(source.allHeaders) + const headers = Object.keys(source.allHeaders) // construct headers if (headers.length) { diff --git a/src/targets/javascript/axios.js b/src/targets/javascript/axios.js new file mode 100644 index 000000000..6a88fc104 --- /dev/null +++ b/src/targets/javascript/axios.js @@ -0,0 +1,98 @@ +/** + * @description + * HTTP code snippet generator for Javascript & Node.js using Axios. + * + * @author + * @rohit-gohri + * + * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author. + */ +'use strict' + +const util = require('util') +const stringifyObject = require('stringify-object') +const CodeBuilder = require('../../helpers/code-builder') +const { removeProperty } = require('../../helpers/general') +const { constructAppendedParamsCode } = require('../../helpers/params') + +module.exports = function (source, options) { + const opts = Object.assign({ + indent: ' ' + }, options) + + let code = new CodeBuilder(opts.indent) + + + code.push('import axios from "axios";') + + const reqOpts = { + method: source.method, + url: source.url + } + + if (Object.keys(source.queryObj).length) { + reqOpts.params = source.queryObj + } + + if (Object.keys(source.allHeaders).length) { + reqOpts.headers = source.allHeaders + } + + switch (source.postData.mimeType) { + case 'application/json': { + if (source.postData.jsonObj) { + reqOpts.data = JSON.stringify(source.postData.jsonObj) + } + break + } + + case 'application/x-www-form-urlencoded': { + code.blank() + .push('const encodedParams = new URLSearchParams();') + + code = constructAppendedParamsCode(code, source.postData.params, { isBrowser: true, dataVarName: 'encodedParams' }) + + reqOpts.data = 'encodedParams' + break + } + + case 'multipart/form-data': { + // when a web api's form-data is sent in a request, application/form-data media type is automatically inserted + // into the headers with the right boundary + reqOpts.headers = removeProperty(reqOpts.headers, 'content-type') + + code.blank() + .push('const data = new FormData();') + + code = constructAppendedParamsCode(code, source.postData.params, { isBrowser: true, dataVarName: 'data' }) + + reqOpts.data = 'data' + break + } + + default: { + if (source.postData.text) { + reqOpts.data = source.postData.text + } + } + } + + code.blank() + .push('const options = %s;', stringifyObject(reqOpts, { indent: ' ', inlineCharacterLimit: 80 }) + .replace(/'encodedParams'/, 'encodedParams').replace(/'data'/, 'data')) + .blank() + code.push(util.format('axios.request(options).then(%s', 'function (response) {')) + .push(1, 'console.log(response.data);') + .push('}).catch(%s', 'function (error) {') + .push(1, 'console.error(error);') + .push('});') + + return code.join() +} + +module.exports.info = { + key: 'axios', + title: 'Axios', + link: 'https://github.com/axios/axios', + description: 'Promise based HTTP client for the browser and node.js' +} diff --git a/src/targets/javascript/fetch.js b/src/targets/javascript/fetch.js index bba38cee0..7ffc341fc 100644 --- a/src/targets/javascript/fetch.js +++ b/src/targets/javascript/fetch.js @@ -10,10 +10,13 @@ 'use strict' -var CodeBuilder = require('../../helpers/code-builder') +const stringifyObject = require('stringify-object') +const CodeBuilder = require('../../helpers/code-builder') +const { removeProperty } = require('../../helpers/general') +const { constructAppendedParamsCode } = require('../../helpers/params') module.exports = function (source, options) { - var opts = Object.assign( + const opts = Object.assign( { indent: ' ', credentials: null @@ -21,11 +24,14 @@ module.exports = function (source, options) { options ) - var code = new CodeBuilder(opts.indent) + let code = new CodeBuilder(opts.indent) options = { - method: source.method, - headers: source.allHeaders + method: source.method + } + + if (Object.keys(source.allHeaders).length) { + options.headers = source.allHeaders } if (opts.credentials !== null) { @@ -33,44 +39,48 @@ module.exports = function (source, options) { } switch (source.postData.mimeType) { - case 'application/x-www-form-urlencoded': - options.body = source.postData.paramsObj - ? source.postData.paramsObj - : source.postData.text + case 'application/json': { + options.body = JSON.stringify(source.postData.jsonObj) break + } - case 'application/json': - options.body = source.postData.jsonObj - break + case 'application/x-www-form-urlencoded': { + code.push('const encodedParams = new URLSearchParams();') + code = constructAppendedParamsCode(code, source.postData.params, { isBrowser: true, dataVarName: 'encodedParams' }) + code.blank(); - case 'multipart/form-data': - code.push('var form = new FormData();') + options.body = 'encodedParams' + break + } - source.postData.params.forEach(function (param) { - code.push( - 'form.append(%s, %s);', - JSON.stringify(param.name), - JSON.stringify(param.value || param.fileName || '') - ) - }) + case 'multipart/form-data': { + // when a web api's form-data is sent in a request, application/form-data media type is automatically inserted + // into the headers with the right boundary + options.headers = removeProperty(options.headers, 'content-type') + code.push('const data = new FormData();') + code = constructAppendedParamsCode(code, source.postData.params, { isBrowser: true, dataVarName: 'data' }) code.blank() + + options.body = 'data'; break + } - default: + default: { if (source.postData.text) { options.body = source.postData.text } + } } - code - .push(`fetch("${source.fullUrl}", ${JSON.stringify(options, null, opts.indent)})`) - .push('.then(response => {') - .push(1, 'console.log(response);') - .push('})') - .push('.catch(err => {') - .push(1, 'console.log(err);') - .push('});') + code.push('const options = %s;', stringifyObject(options, { indent: opts.indent, inlineCharacterLimit: 80 }) + .replace(/'encodedParams'/, 'encodedParams').replace(/'data'/, 'data')) + .blank() + + code.push("fetch('%s', options)", source.fullUrl) + .push(1, '.then(response => response.json())') + .push(1, '.then(response => console.log(response))') + .push(1, '.catch(err => console.error(err));') return code.join() } diff --git a/src/targets/javascript/index.js b/src/targets/javascript/index.js index 27863663d..195c5f663 100644 --- a/src/targets/javascript/index.js +++ b/src/targets/javascript/index.js @@ -10,5 +10,6 @@ module.exports = { jquery: require('./jquery'), fetch: require('./fetch'), - xhr: require('./xhr') + xhr: require('./xhr'), + axios: require('./axios') } diff --git a/src/targets/javascript/jquery.js b/src/targets/javascript/jquery.js index 8cea77477..336d8b78d 100644 --- a/src/targets/javascript/jquery.js +++ b/src/targets/javascript/jquery.js @@ -10,16 +10,17 @@ 'use strict' -var CodeBuilder = require('../../helpers/code-builder') +const CodeBuilder = require('../../helpers/code-builder') +const helpers = require('../../helpers/headers') module.exports = function (source, options) { - var opts = Object.assign({ + const opts = Object.assign({ indent: ' ' }, options) - var code = new CodeBuilder(opts.indent) + const code = new CodeBuilder(opts.indent) - var settings = { + const settings = { async: true, crossDomain: true, url: source.fullUrl, @@ -34,11 +35,11 @@ module.exports = function (source, options) { case 'application/json': settings.processData = false - settings.data = source.postData.text + settings.data = source.postData.jsonObj break case 'multipart/form-data': - code.push('var form = new FormData();') + code.push('const form = new FormData();') source.postData.params.forEach(function (param) { code.push('form.append(%s, %s);', JSON.stringify(param.name), JSON.stringify(param.value || param.fileName || '')) @@ -50,9 +51,12 @@ module.exports = function (source, options) { settings.data = '[form]' // remove the contentType header - if (~settings.headers['content-type'].indexOf('boundary')) { - delete settings.headers['content-type'] + if (helpers.hasHeader(settings.headers, 'content-type')) { + if (helpers.getHeader(settings.headers, 'content-type').indexOf('boundary')) { + delete settings.headers[helpers.getHeaderName(settings.headers, 'content-type')] + } } + code.blank() break @@ -62,11 +66,11 @@ module.exports = function (source, options) { } } - code.push('var settings = ' + JSON.stringify(settings, null, opts.indent).replace('"[form]"', 'form')) - .blank() - .push('$.ajax(settings).done(function (response) {') - .push(1, 'console.log(response);') - .push('});') + code.push('const settings = ' + JSON.stringify(settings, null, opts.indent).replace('"[form]"', 'form') + ';') + .blank() + .push('$.ajax(settings).done(function (response) {') + .push(1, 'console.log(response);') + .push('});') return code.join() } diff --git a/src/targets/javascript/xhr.js b/src/targets/javascript/xhr.js index 64d8d7885..2ae503806 100644 --- a/src/targets/javascript/xhr.js +++ b/src/targets/javascript/xhr.js @@ -10,63 +10,66 @@ 'use strict' -var CodeBuilder = require('../../helpers/code-builder') +const CodeBuilder = require('../../helpers/code-builder') +const helpers = require('../../helpers/headers') module.exports = function (source, options) { - var opts = Object.assign({ + const opts = Object.assign({ indent: ' ', cors: true }, options) - var code = new CodeBuilder(opts.indent) + const code = new CodeBuilder(opts.indent) switch (source.postData.mimeType) { case 'application/json': - code.push('var data = JSON.stringify(%s);', JSON.stringify(source.postData.jsonObj, null, opts.indent)) - .push(null) + code.push('const data = JSON.stringify(%s);', JSON.stringify(source.postData.jsonObj, null, opts.indent)) + .push(null) break case 'multipart/form-data': - code.push('var data = new FormData();') + code.push('const data = new FormData();') source.postData.params.forEach(function (param) { code.push('data.append(%s, %s);', JSON.stringify(param.name), JSON.stringify(param.value || param.fileName || '')) }) // remove the contentType header - if (source.allHeaders['content-type'].indexOf('boundary')) { - delete source.allHeaders['content-type'] + if (helpers.hasHeader(source.allHeaders, 'content-type')) { + if (helpers.getHeader(source.allHeaders, 'content-type').indexOf('boundary')) { + delete source.allHeaders[helpers.getHeaderName(source.allHeaders, 'content-type')] + } } code.blank() break default: - code.push('var data = %s;', JSON.stringify(source.postData.text || null)) - .blank() + code.push('const data = %s;', JSON.stringify(source.postData.text || null)) + .blank() } - code.push('var xhr = new XMLHttpRequest();') + code.push('const xhr = new XMLHttpRequest();') if (opts.cors) { code.push('xhr.withCredentials = true;') } code.blank() - .push('xhr.addEventListener("readystatechange", function () {') - .push(1, 'if (this.readyState === this.DONE) {') - .push(2, 'console.log(this.responseText);') - .push(1, '}') - .push('});') - .blank() - .push('xhr.open(%s, %s);', JSON.stringify(source.method), JSON.stringify(source.fullUrl)) + .push('xhr.addEventListener("readystatechange", function () {') + .push(1, 'if (this.readyState === this.DONE) {') + .push(2, 'console.log(this.responseText);') + .push(1, '}') + .push('});') + .blank() + .push('xhr.open(%s, %s);', JSON.stringify(source.method), JSON.stringify(source.fullUrl)) Object.keys(source.allHeaders).forEach(function (key) { code.push('xhr.setRequestHeader(%s, %s);', JSON.stringify(key), JSON.stringify(source.allHeaders[key])) }) code.blank() - .push('xhr.send(data);') + .push('xhr.send(data);') return code.join() } diff --git a/src/targets/kotlin/index.js b/src/targets/kotlin/index.js new file mode 100644 index 000000000..fd9fbd698 --- /dev/null +++ b/src/targets/kotlin/index.js @@ -0,0 +1,12 @@ +'use strict' + +module.exports = { + info: { + key: 'kotlin', + title: 'Kotlin', + extname: '.kt', + default: 'okhttp' + }, + + okhttp: require('./okhttp') +} diff --git a/src/targets/kotlin/okhttp.js b/src/targets/kotlin/okhttp.js new file mode 100644 index 000000000..8c1390524 --- /dev/null +++ b/src/targets/kotlin/okhttp.js @@ -0,0 +1,78 @@ +/** + * @description + * HTTP code snippet generator for Kotlin using OkHttp. + * + * @author + * @seanghay + * + * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author. + */ + +'use strict' + +const CodeBuilder = require('../../helpers/code-builder') + +module.exports = function (source, options) { + const opts = Object.assign({ + indent: ' ' + }, options) + + const code = new CodeBuilder(opts.indent) + + const methods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD'] + + const methodsWithBody = ['POST', 'PUT', 'DELETE', 'PATCH'] + + code.push('val client = OkHttpClient()') + .blank() + + if (source.postData.text) { + if (source.postData.boundary) { + code.push('val mediaType = MediaType.parse("%s; boundary=%s")', source.postData.mimeType, source.postData.boundary) + } else { + code.push('val mediaType = MediaType.parse("%s")', source.postData.mimeType) + } + code.push('val body = RequestBody.create(mediaType, %s)', JSON.stringify(source.postData.text)) + } + + code.push('val request = Request.Builder()') + code.push(1, '.url("%s")', source.fullUrl) + if (methods.indexOf(source.method.toUpperCase()) === -1) { + if (source.postData.text) { + code.push(1, '.method("%s", body)', source.method.toUpperCase()) + } else { + code.push(1, '.method("%s", null)', source.method.toUpperCase()) + } + } else if (methodsWithBody.indexOf(source.method.toUpperCase()) >= 0) { + if (source.postData.text) { + code.push(1, '.%s(body)', source.method.toLowerCase()) + } else { + code.push(1, '.%s(null)', source.method.toLowerCase()) + } + } else { + code.push(1, '.%s()', source.method.toLowerCase()) + } + + // Add headers, including the cookies + const headers = Object.keys(source.allHeaders) + + // construct headers + if (headers.length) { + headers.forEach(function (key) { + code.push(1, '.addHeader("%s", "%s")', key, source.allHeaders[key]) + }) + } + + code.push(1, '.build()') + .blank() + .push('val response = client.newCall(request).execute()') + + return code.join() +} + +module.exports.info = { + key: 'okhttp', + title: 'OkHttp', + link: 'http://square.github.io/okhttp/', + description: 'An HTTP Request Client Library' +} diff --git a/src/targets/node/axios.js b/src/targets/node/axios.js new file mode 100644 index 000000000..6045f87ff --- /dev/null +++ b/src/targets/node/axios.js @@ -0,0 +1,102 @@ +/** + * @description + * HTTP code snippet generator for Javascript & Node.js using Axios. + * + * @author + * @rohit-gohri + * + * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author. + */ +'use strict' + +const util = require('util') +const stringifyObject = require('stringify-object') +const CodeBuilder = require('../../helpers/code-builder') +const { removeProperty, checkIfRequestContainsFile } = require('../../helpers/general') +const { constructAppendedParamsCode } = require('../../helpers/params') + +module.exports = function (source, options) { + const opts = Object.assign({ + indent: ' ' + }, options) + + let code = new CodeBuilder(opts.indent) + + if (checkIfRequestContainsFile(source)) { + code.push('const fs = require("fs");') + } + + code.push('const axios = require("axios");') + + const reqOpts = { + method: source.method, + url: source.url + } + + if (Object.keys(source.queryObj).length) { + reqOpts.params = source.queryObj + } + + if (Object.keys(source.allHeaders).length) { + reqOpts.headers = source.allHeaders + } + + switch (source.postData.mimeType) { + case 'application/json': { + if (source.postData.jsonObj) { + reqOpts.data = JSON.stringify(source.postData.jsonObj) + } + break + } + + case 'application/x-www-form-urlencoded': { + code.blank() + .push('const encodedParams = new URLSearchParams();') + code = constructAppendedParamsCode(code, source.postData.params, { isBrowser: false, dataVarName: 'encodedParams' }) + + reqOpts.data = 'encodedParams' + break + } + + case 'multipart/form-data': { + // content-type header will come from the data.getHeaders() with the right boundary + reqOpts.headers = removeProperty(reqOpts.headers, 'content-type') + reqOpts.headers.placeholderGetHeaders = 'placeholderGetHeaders' + + code.unshift('const FormData = require("form-data");') + .blank() + .push('const data = new FormData();') + code = constructAppendedParamsCode(code, source.postData.params, { isBrowser: false, dataVarName: 'data' }) + + reqOpts.data = 'data' + break + } + + default: { + if (source.postData.text) { + reqOpts.data = source.postData.text + } + } + } + + code.blank() + .push('const options = %s;', stringifyObject(reqOpts, { indent: ' ', inlineCharacterLimit: 80 }) + .replace(/'encodedParams'/, 'encodedParams').replace(/'data'/, 'data') + .replace("placeholderGetHeaders: 'placeholderGetHeaders'", '...data.getHeaders()')) + .blank() + + code.push(util.format('axios.request(options).then(%s', 'function (response) {')) + .push(1, 'console.log(response.data);') + .push('}).catch(%s', 'function (error) {') + .push(1, 'console.error(error);') + .push('});') + + return code.join() +} + +module.exports.info = { + key: 'axios', + title: 'Axios', + link: 'https://github.com/axios/axios', + description: 'Promise based HTTP client for the browser and node.js' +} diff --git a/src/targets/node/fetch.js b/src/targets/node/fetch.js new file mode 100644 index 000000000..d5fec1e79 --- /dev/null +++ b/src/targets/node/fetch.js @@ -0,0 +1,112 @@ +/** + * @description + * HTTP code snippet generator for Node.js using node-fetch. + * + * @author + * @hirenoble + * + * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author. + */ + +'use strict' + +const stringifyObject = require('stringify-object') +const CodeBuilder = require('../../helpers/code-builder') +const { removeProperty, checkIfRequestContainsFile } = require('../../helpers/general') +const { constructAppendedParamsCode } = require('../../helpers/params') + +module.exports = function (source, options) { + const opts = Object.assign({ + indent: ' ' + }, options) + + let code = new CodeBuilder(opts.indent) + + if (checkIfRequestContainsFile(source)) { + code.push('const fs = require("fs");') + } + + code.push('const fetch = require(\'node-fetch\');') + const url = source.fullUrl + const reqOpts = { + method: source.method + } + + if (Object.keys(source.headersObj).length) { + reqOpts.headers = source.headersObj + } + + switch (source.postData.mimeType) { + case 'application/json': { + if (source.postData.jsonObj) { + reqOpts.body = JSON.stringify(source.postData.jsonObj) + } + break + } + + case 'application/x-www-form-urlencoded': { + code.blank() + .push('const encodedParams = new URLSearchParams();') + + code = constructAppendedParamsCode(code, source.postData.params, { isBrowser: false, dataVarName: 'encodedParams' }) + + reqOpts.body = 'encodedParams' + break + } + + case 'multipart/form-data': { + // content-type header will come from the data.getHeaders() with the right boundary + reqOpts.headers = removeProperty(reqOpts.headers, 'content-type') + reqOpts.headers.placeholderGetHeaders = 'placeholderGetHeaders' + + code.unshift('const FormData = require(\'form-data\');') + code.blank() + .push('const data = new FormData();') + + code = constructAppendedParamsCode(code, source.postData.params, { isBrowser: false, dataVarName: 'data' }) + + reqOpts.body = 'data' + break + } + + default: { + if (source.postData.text) { + reqOpts.body = source.postData.text + } + } + } + + // construct cookies argument + if (source.cookies.length) { + let cookies = '' + source.cookies.forEach(function (cookie) { + cookies = cookies + encodeURIComponent(cookie.name) + '=' + encodeURIComponent(cookie.value) + '; ' + }) + if (reqOpts.headers) { + reqOpts.headers.cookie = cookies + } else { + reqOpts.headers = {} + reqOpts.headers.cookie = cookies + } + } + code.blank() + code.push('const url = \'' + url + '\';') + .blank() + .push('const options = %s;', stringifyObject(reqOpts, { indent: ' ', inlineCharacterLimit: 80 }) + .replace(/'encodedParams'/, 'encodedParams').replace(/'data'/, 'data') + .replace("placeholderGetHeaders: 'placeholderGetHeaders'", '...data.getHeaders()')) + .blank() + .push('fetch(url, options)') + .push(1, '.then(res => res.json())') + .push(1, '.then(json => console.log(json))') + .push(1, '.catch(err => console.error(\'error:\' + err));') + + return code.join() +} + +module.exports.info = { + key: 'fetch', + title: 'Fetch', + link: 'https://github.com/bitinn/node-fetch', + description: 'Simplified HTTP node-fetch client' +} diff --git a/src/targets/node/index.js b/src/targets/node/index.js index 1e4d9e352..3942f03d5 100644 --- a/src/targets/node/index.js +++ b/src/targets/node/index.js @@ -10,5 +10,7 @@ module.exports = { native: require('./native'), request: require('./request'), - unirest: require('./unirest') + unirest: require('./unirest'), + axios: require('./axios'), + fetch: require('./fetch') } diff --git a/src/targets/node/native.js b/src/targets/node/native.js index a4ec208b1..5fc505c93 100644 --- a/src/targets/node/native.js +++ b/src/targets/node/native.js @@ -10,47 +10,47 @@ 'use strict' -var stringifyObject = require('stringify-object') -var CodeBuilder = require('../../helpers/code-builder') +const stringifyObject = require('stringify-object') +const CodeBuilder = require('../../helpers/code-builder') module.exports = function (source, options) { - var opts = Object.assign({ + const opts = Object.assign({ indent: ' ' }, options) - var code = new CodeBuilder(opts.indent) + const code = new CodeBuilder(opts.indent) - var reqOpts = { + const reqOpts = { method: source.method, hostname: source.uriObj.hostname, port: source.uriObj.port, path: source.uriObj.path, - headers: source.allHeaders + headers: { ...source.allHeaders, useQueryString: true } } - code.push('var http = require("%s");', source.uriObj.protocol.replace(':', '')) + code.push('const http = require("%s");', source.uriObj.protocol.replace(':', '')) code.blank() - .push('var options = %s;', JSON.stringify(reqOpts, null, opts.indent)) - .blank() - .push('var req = http.request(options, function (res) {') - .push(1, 'var chunks = [];') - .blank() - .push(1, 'res.on("data", function (chunk) {') - .push(2, 'chunks.push(chunk);') - .push(1, '});') - .blank() - .push(1, 'res.on("end", function () {') - .push(2, 'var body = Buffer.concat(chunks);') - .push(2, 'console.log(body.toString());') - .push(1, '});') - .push('});') - .blank() + .push('const options = %s;', JSON.stringify(reqOpts, null, opts.indent)) + .blank() + .push('const req = http.request(options, function (res) {') + .push(1, 'const chunks = [];') + .blank() + .push(1, 'res.on("data", function (chunk) {') + .push(2, 'chunks.push(chunk);') + .push(1, '});') + .blank() + .push(1, 'res.on("end", function () {') + .push(2, 'const body = Buffer.concat(chunks);') + .push(2, 'console.log(body.toString());') + .push(1, '});') + .push('});') + .blank() switch (source.postData.mimeType) { case 'application/x-www-form-urlencoded': if (source.postData.paramsObj) { - code.unshift('var qs = require("querystring");') + code.unshift('const qs = require("querystring");') code.push('req.write(qs.stringify(%s));', stringifyObject(source.postData.paramsObj, { indent: ' ', inlineCharacterLimit: 80 diff --git a/src/targets/node/request.js b/src/targets/node/request.js index 7711d63db..dbd1dd6a5 100644 --- a/src/targets/node/request.js +++ b/src/targets/node/request.js @@ -10,22 +10,22 @@ 'use strict' -var util = require('util') -var stringifyObject = require('stringify-object') -var CodeBuilder = require('../../helpers/code-builder') +const util = require('util') +const stringifyObject = require('stringify-object') +const CodeBuilder = require('../../helpers/code-builder') module.exports = function (source, options) { - var opts = Object.assign({ + const opts = Object.assign({ indent: ' ' }, options) - var includeFS = false - var code = new CodeBuilder(opts.indent) + let includeFS = false + const code = new CodeBuilder(opts.indent) - code.push('var request = require("request");') - .blank() + code.push("const request = require('request');") + .blank() - var reqOpts = { + const reqOpts = { method: source.method, url: source.url } @@ -35,7 +35,7 @@ module.exports = function (source, options) { } if (Object.keys(source.headersObj).length) { - reqOpts.headers = source.headersObj + reqOpts.headers = {...source.headersObj,'useQueryString': true} } switch (source.postData.mimeType) { @@ -54,14 +54,14 @@ module.exports = function (source, options) { reqOpts.formData = {} source.postData.params.forEach(function (param) { - var attachment = {} + const attachment = {} if (!param.fileName && !param.fileName && !param.contentType) { reqOpts.formData[param.name] = param.value return } - if (param.fileName && !param.value) { + if (param.fileName) { includeFS = true attachment.value = 'fs.createReadStream("' + param.fileName + '")' @@ -90,32 +90,32 @@ module.exports = function (source, options) { if (source.cookies.length) { reqOpts.jar = 'JAR' - code.push('var jar = request.jar();') + code.push('const jar = request.jar();') - var url = source.url + const url = source.url source.cookies.forEach(function (cookie) { - code.push('jar.setCookie(request.cookie("%s=%s"), "%s");', encodeURIComponent(cookie.name), encodeURIComponent(cookie.value), url) + code.push("jar.setCookie(request.cookie('%s=%s'), '%s');", encodeURIComponent(cookie.name), encodeURIComponent(cookie.value), url) }) code.blank() } if (includeFS) { - code.unshift('var fs = require("fs");') + code.unshift("const fs = require('fs');") } - code.push('var options = %s;', stringifyObject(reqOpts, { indent: ' ', inlineCharacterLimit: 80 })) + code.push('const options = %s;', stringifyObject(reqOpts, { indent: ' ', inlineCharacterLimit: 80 })) .blank() code.push(util.format('request(options, %s', 'function (error, response, body) {')) - .push(1, 'if (error) throw new Error(error);') - .blank() - .push(1, 'console.log(body);') - .push('});') - .blank() + .push(1, 'if (error) throw new Error(error);') + .blank() + .push(1, 'console.log(body);') + .push('});') + .blank() - return code.join().replace('"JAR"', 'jar').replace(/"fs\.createReadStream\(\\"(.+)\\"\)"/, 'fs.createReadStream("$1")') + return code.join().replace('"JAR"', 'jar').replace(/'fs\.createReadStream\("(.+)"\)'/g, "fs.createReadStream('$1')") } module.exports.info = { diff --git a/src/targets/node/unirest.js b/src/targets/node/unirest.js index 9927be182..5e60e8194 100644 --- a/src/targets/node/unirest.js +++ b/src/targets/node/unirest.js @@ -10,71 +10,74 @@ 'use strict' -var CodeBuilder = require('../../helpers/code-builder') +const CodeBuilder = require('../../helpers/code-builder') module.exports = function (source, options) { - var opts = Object.assign({ + const opts = Object.assign({ indent: ' ' }, options) - var includeFS = false - var code = new CodeBuilder(opts.indent) + let includeFS = false + const code = new CodeBuilder(opts.indent) - code.push('var unirest = require("unirest");') - .blank() - .push('var req = unirest("%s", "%s");', source.method, source.url) - .blank() + code.push('const unirest = require("unirest");') + .blank() + .push('const req = unirest("%s", "%s");', source.method, source.url) + .blank() if (source.cookies.length) { - code.push('var CookieJar = unirest.jar();') + code.push('const CookieJar = unirest.jar();') source.cookies.forEach(function (cookie) { code.push('CookieJar.add("%s=%s","%s");', encodeURIComponent(cookie.name), encodeURIComponent(cookie.value), source.url) }) code.push('req.jar(CookieJar);') - .blank() + .blank() } if (Object.keys(source.queryObj).length) { code.push('req.query(%s);', JSON.stringify(source.queryObj, null, opts.indent)) - .blank() + .blank() } if (Object.keys(source.headersObj).length) { - code.push('req.headers(%s);', JSON.stringify(source.headersObj, null, opts.indent)) - .blank() + code.push('req.headers(%s);', JSON.stringify({...source.headersObj, useQueryString: true}, null, opts.indent)) + .blank() } switch (source.postData.mimeType) { case 'application/x-www-form-urlencoded': if (source.postData.paramsObj) { code.push('req.form(%s);', JSON.stringify(source.postData.paramsObj, null, opts.indent)) + .blank() } break case 'application/json': if (source.postData.jsonObj) { code.push('req.type("json");') - .push('req.send(%s);', JSON.stringify(source.postData.jsonObj, null, opts.indent)) + .push('req.send(%s);', JSON.stringify(source.postData.jsonObj, null, opts.indent)) + .blank() } break - case 'multipart/form-data': - var multipart = [] + case 'multipart/form-data': { + const multipart = [] source.postData.params.forEach(function (param) { - var part = {} - + const part = {} + const { name } = param || 'body' if (param.fileName && !param.value) { includeFS = true - part.body = 'fs.createReadStream("' + param.fileName + '")' + part[name] = 'fs.createReadStream("' + param.fileName + '")' } else if (param.value) { - part.body = param.value + + part[name] = param.value } - if (part.body) { + if (part[name]) { if (param.contentType) { part['content-type'] = param.contentType } @@ -82,27 +85,28 @@ module.exports = function (source, options) { multipart.push(part) } }) - code.push('req.multipart(%s);', JSON.stringify(multipart, null, opts.indent)) + .blank() break + } default: if (source.postData.text) { - code.push(opts.indent + 'req.send(%s);', JSON.stringify(source.postData.text, null, opts.indent)) + code.push('req.send(%s);', JSON.stringify(source.postData.text, null, opts.indent)) + .blank() } } if (includeFS) { - code.unshift('var fs = require("fs");') + code.unshift('const fs = require("fs");') } - code.blank() - .push('req.end(function (res) {') - .push(1, 'if (res.error) throw new Error(res.error);') - .blank() - .push(1, 'console.log(res.body);') - .push('});') - .blank() + code.push('req.end(function (res) {') + .push(1, 'if (res.error) throw new Error(res.error);') + .blank() + .push(1, 'console.log(res.body);') + .push('});') + .blank() return code.join().replace(/"fs\.createReadStream\(\\"(.+)\\"\)"/, 'fs.createReadStream("$1")') } diff --git a/src/targets/objc/helpers.js b/src/targets/objc/helpers.js index fcdb95c69..14d136e03 100644 --- a/src/targets/objc/helpers.js +++ b/src/targets/objc/helpers.js @@ -1,6 +1,6 @@ 'use strict' -var util = require('util') +const util = require('util') module.exports = { /** @@ -33,8 +33,8 @@ module.exports = { * NSDictionary *params = @{ @"a": @"b", @"c": @"d" }; */ nsDeclaration: function (nsClass, name, parameters, indent) { - var opening = nsClass + ' *' + name + ' = ' - var literal = this.literalRepresentation(parameters, indent ? opening.length : undefined) + const opening = nsClass + ' *' + name + ' = ' + const literal = this.literalRepresentation(parameters, indent ? opening.length : undefined) return opening + literal + ';' }, @@ -45,24 +45,30 @@ module.exports = { * @return {string} */ literalRepresentation: function (value, indentation) { - var join = indentation === undefined ? ', ' : ',\n ' + this.blankString(indentation) + const join = indentation === undefined ? ', ' : ',\n ' + this.blankString(indentation) switch (Object.prototype.toString.call(value)) { case '[object Number]': return '@' + value - case '[object Array]': - var valuesRepresentation = value.map(function (v) { + + case '[object Array]': { + const valuesRepresentation = value.map(function (v) { return this.literalRepresentation(v) }.bind(this)) return '@[ ' + valuesRepresentation.join(join) + ' ]' - case '[object Object]': - var keyValuePairs = [] - for (var k in value) { + } + + case '[object Object]': { + const keyValuePairs = [] + for (const k in value) { keyValuePairs.push(util.format('@"%s": %s', k, this.literalRepresentation(value[k]))) } return '@{ ' + keyValuePairs.join(join) + ' }' + } + case '[object Boolean]': return value ? '@YES' : '@NO' + default: if (value === null || value === undefined) { return '' diff --git a/src/targets/objc/nsurlsession.js b/src/targets/objc/nsurlsession.js index 0a6a10479..1f1760003 100644 --- a/src/targets/objc/nsurlsession.js +++ b/src/targets/objc/nsurlsession.js @@ -10,19 +10,19 @@ 'use strict' -var helpers = require('./helpers') -var CodeBuilder = require('../../helpers/code-builder') +const helpers = require('./helpers') +const CodeBuilder = require('../../helpers/code-builder') module.exports = function (source, options) { - var opts = Object.assign({ + const opts = Object.assign({ indent: ' ', pretty: true, timeout: '10' }, options) - var code = new CodeBuilder(opts.indent) - // Markers for headers to be created as litteral objects and later be set on the NSURLRequest if exist - var req = { + const code = new CodeBuilder(opts.indent) + // Markers for headers to be created as literal objects and later be set on the NSURLRequest if exist + const req = { hasHeaders: false, hasBody: false } @@ -33,7 +33,7 @@ module.exports = function (source, options) { if (Object.keys(source.allHeaders).length) { req.hasHeaders = true code.blank() - .push(helpers.nsDeclaration('NSDictionary', 'headers', source.allHeaders, opts.pretty)) + .push(helpers.nsDeclaration('NSDictionary', 'headers', source.allHeaders, opts.pretty)) } if (source.postData.text || source.postData.jsonObj || source.postData.params) { @@ -45,9 +45,10 @@ module.exports = function (source, options) { // we make it easier for the user to edit it according to his or her needs after pasting. // The user can just add/remove lines adding/removing body parameters. code.blank() - .push('NSMutableData *postData = [[NSMutableData alloc] initWithData:[@"%s=%s" dataUsingEncoding:NSUTF8StringEncoding]];', - source.postData.params[0].name, source.postData.params[0].value) - for (var i = 1, len = source.postData.params.length; i < len; i++) { + .push('NSMutableData *postData = [[NSMutableData alloc] initWithData:[@"%s=%s" dataUsingEncoding:NSUTF8StringEncoding]];', + source.postData.params[0].name, source.postData.params[0].value) + + for (let i = 1, len = source.postData.params.length; i < len; i++) { code.push('[postData appendData:[@"&%s=%s" dataUsingEncoding:NSUTF8StringEncoding]];', source.postData.params[i].name, source.postData.params[i].value) } @@ -56,8 +57,8 @@ module.exports = function (source, options) { case 'application/json': if (source.postData.jsonObj) { code.push(helpers.nsDeclaration('NSDictionary', 'parameters', source.postData.jsonObj, opts.pretty)) - .blank() - .push('NSData *postData = [NSJSONSerialization dataWithJSONObject:parameters options:0 error:nil];') + .blank() + .push('NSData *postData = [NSJSONSerialization dataWithJSONObject:parameters options:0 error:nil];') } break @@ -66,40 +67,40 @@ module.exports = function (source, options) { // we make it easier for the user to edit it according to his or her needs after pasting. // The user can just edit the parameters NSDictionary or put this part of a snippet in a multipart builder method. code.push(helpers.nsDeclaration('NSArray', 'parameters', source.postData.params, opts.pretty)) - .push('NSString *boundary = @"%s";', source.postData.boundary) - .blank() - .push('NSError *error;') - .push('NSMutableString *body = [NSMutableString string];') - .push('for (NSDictionary *param in parameters) {') - .push(1, '[body appendFormat:@"--%@\\r\\n", boundary];') - .push(1, 'if (param[@"fileName"]) {') - .push(2, '[body appendFormat:@"Content-Disposition:form-data; name=\\"%@\\"; filename=\\"%@\\"\\r\\n", param[@"name"], param[@"fileName"]];') - .push(2, '[body appendFormat:@"Content-Type: %@\\r\\n\\r\\n", param[@"contentType"]];') - .push(2, '[body appendFormat:@"%@", [NSString stringWithContentsOfFile:param[@"fileName"] encoding:NSUTF8StringEncoding error:&error]];') - .push(2, 'if (error) {') - .push(3, 'NSLog(@"%@", error);') - .push(2, '}') - .push(1, '} else {') - .push(2, '[body appendFormat:@"Content-Disposition:form-data; name=\\"%@\\"\\r\\n\\r\\n", param[@"name"]];') - .push(2, '[body appendFormat:@"%@", param[@"value"]];') - .push(1, '}') - .push('}') - .push('[body appendFormat:@"\\r\\n--%@--\\r\\n", boundary];') - .push('NSData *postData = [body dataUsingEncoding:NSUTF8StringEncoding];') + .push('NSString *boundary = @"%s";', source.postData.boundary) + .blank() + .push('NSError *error;') + .push('NSMutableString *body = [NSMutableString string];') + .push('for (NSDictionary *param in parameters) {') + .push(1, '[body appendFormat:@"--%@\\r\\n", boundary];') + .push(1, 'if (param[@"fileName"]) {') + .push(2, '[body appendFormat:@"Content-Disposition:form-data; name=\\"%@\\"; filename=\\"%@\\"\\r\\n", param[@"name"], param[@"fileName"]];') + .push(2, '[body appendFormat:@"Content-Type: %@\\r\\n\\r\\n", param[@"contentType"]];') + .push(2, '[body appendFormat:@"%@", [NSString stringWithContentsOfFile:param[@"fileName"] encoding:NSUTF8StringEncoding error:&error]];') + .push(2, 'if (error) {') + .push(3, 'NSLog(@"%@", error);') + .push(2, '}') + .push(1, '} else {') + .push(2, '[body appendFormat:@"Content-Disposition:form-data; name=\\"%@\\"\\r\\n\\r\\n", param[@"name"]];') + .push(2, '[body appendFormat:@"%@", param[@"value"]];') + .push(1, '}') + .push('}') + .push('[body appendFormat:@"\\r\\n--%@--\\r\\n", boundary];') + .push('NSData *postData = [body dataUsingEncoding:NSUTF8StringEncoding];') break default: code.blank() - .push('NSData *postData = [[NSData alloc] initWithData:[@"' + source.postData.text + '" dataUsingEncoding:NSUTF8StringEncoding]];') + .push('NSData *postData = [[NSData alloc] initWithData:[@"' + source.postData.text + '" dataUsingEncoding:NSUTF8StringEncoding]];') } } code.blank() - .push('NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"' + source.fullUrl + '"]') - // NSURLRequestUseProtocolCachePolicy is the default policy, let's just always set it to avoid confusion. - .push(' cachePolicy:NSURLRequestUseProtocolCachePolicy') - .push(' timeoutInterval:' + parseInt(opts.timeout, 10).toFixed(1) + '];') - .push('[request setHTTPMethod:@"' + source.method + '"];') + .push('NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"' + source.fullUrl + '"]') + // NSURLRequestUseProtocolCachePolicy is the default policy, let's just always set it to avoid confusion. + .push(' cachePolicy:NSURLRequestUseProtocolCachePolicy') + .push(' timeoutInterval:' + parseInt(opts.timeout, 10).toFixed(1) + '];') + .push('[request setHTTPMethod:@"' + source.method + '"];') if (req.hasHeaders) { code.push('[request setAllHTTPHeaderFields:headers];') @@ -110,19 +111,19 @@ module.exports = function (source, options) { } code.blank() - // Retrieving the shared session will be less verbose than creating a new one. - .push('NSURLSession *session = [NSURLSession sharedSession];') - .push('NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request') - .push(' completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {') - .push(1, ' if (error) {') - .push(2, ' NSLog(@"%@", error);') - .push(1, ' } else {') - // Casting the NSURLResponse to NSHTTPURLResponse so the user can see the status . - .push(2, ' NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;') - .push(2, ' NSLog(@"%@", httpResponse);') - .push(1, ' }') - .push(' }];') - .push('[dataTask resume];') + // Retrieving the shared session will be less verbose than creating a new one. + .push('NSURLSession *session = [NSURLSession sharedSession];') + .push('NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request') + .push(' completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {') + .push(1, ' if (error) {') + .push(2, ' NSLog(@"%@", error);') + .push(1, ' } else {') + // Casting the NSURLResponse to NSHTTPURLResponse so the user can see the status . + .push(2, ' NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;') + .push(2, ' NSLog(@"%@", httpResponse);') + .push(1, ' }') + .push(' }];') + .push('[dataTask resume];') return code.join() } diff --git a/src/targets/ocaml/cohttp.js b/src/targets/ocaml/cohttp.js index e4cd43343..76e2335c3 100644 --- a/src/targets/ocaml/cohttp.js +++ b/src/targets/ocaml/cohttp.js @@ -10,24 +10,24 @@ 'use strict' -var CodeBuilder = require('../../helpers/code-builder') +const CodeBuilder = require('../../helpers/code-builder') module.exports = function (source, options) { - var opts = Object.assign({ + const opts = Object.assign({ indent: ' ' }, options) - var methods = ['get', 'post', 'head', 'delete', 'patch', 'put', 'options'] - var code = new CodeBuilder(opts.indent) + const methods = ['get', 'post', 'head', 'delete', 'patch', 'put', 'options'] + const code = new CodeBuilder(opts.indent) code.push('open Cohttp_lwt_unix') - .push('open Cohttp') - .push('open Lwt') - .blank() - .push('let uri = Uri.of_string "%s" in', source.fullUrl) + .push('open Cohttp') + .push('open Lwt') + .blank() + .push('let uri = Uri.of_string "%s" in', source.fullUrl) // Add headers, including the cookies - var headers = Object.keys(source.allHeaders) + const headers = Object.keys(source.allHeaders) if (headers.length === 1) { code.push('let headers = Header.add (Header.init ()) "%s" "%s" in', headers[0], source.allHeaders[headers[0]]) @@ -58,7 +58,7 @@ module.exports = function (source, options) { // Catch result code.push('>>= fun (res, body_stream) ->') - .push(1, '(* Do stuff with the result *)') + .push(1, '(* Do stuff with the result *)') return code.join() } diff --git a/src/targets/php/curl.js b/src/targets/php/curl.js index e9a70324a..32e4106aa 100644 --- a/src/targets/php/curl.js +++ b/src/targets/php/curl.js @@ -10,11 +10,11 @@ 'use strict' -var util = require('util') -var CodeBuilder = require('../../helpers/code-builder') +const util = require('util') +const CodeBuilder = require('../../helpers/code-builder') module.exports = function (source, options) { - var opts = Object.assign({ + const opts = Object.assign({ closingTag: false, indent: ' ', maxRedirects: 10, @@ -24,7 +24,7 @@ module.exports = function (source, options) { timeout: 30 }, options) - var code = new CodeBuilder(opts.indent) + const code = new CodeBuilder(opts.indent) if (!opts.noTags) { code.push(opts.shortTags ? ' array(') + curlopts.push('CURLOPT_HTTPHEADER => [') .push(1, headers.join(',\n' + opts.indent + opts.indent)) - .push('),') + .push('],') } code.push(1, curlopts.join()) - .push('));') + .push(']);') .blank() .push('$response = curl_exec($curl);') .push('$err = curl_error($curl);') diff --git a/src/targets/php/helpers.js b/src/targets/php/helpers.js index 7f0ba3e52..266d72bc5 100644 --- a/src/targets/php/helpers.js +++ b/src/targets/php/helpers.js @@ -1,7 +1,7 @@ 'use strict' -var convert = function (obj, indent, lastIndent) { - var i, result +const convert = function (obj, indent, lastIndent) { + let i, result if (!lastIndent) { lastIndent = '' @@ -31,17 +31,18 @@ var convert = function (obj, indent, lastIndent) { result.push(convert(item, indent + indent, indent)) }) - result = 'array(\n' + indent + result.join(',\n' + indent) + '\n' + lastIndent + ')' + result = '[\n' + indent + result.join(',\n' + indent) + '\n' + lastIndent + ']' break case '[object Object]': result = [] for (i in obj) { + // eslint-disable-next-line no-prototype-builtins if (obj.hasOwnProperty(i)) { result.push(convert(i, indent) + ' => ' + convert(obj[i], indent + indent, indent)) } } - result = 'array(\n' + indent + result.join(',\n' + indent) + '\n' + lastIndent + ')' + result = '[\n' + indent + result.join(',\n' + indent) + '\n' + lastIndent + ']' break default: diff --git a/src/targets/php/http1.js b/src/targets/php/http1.js index 5f6298197..97a6422c5 100644 --- a/src/targets/php/http1.js +++ b/src/targets/php/http1.js @@ -10,22 +10,22 @@ 'use strict' -var helpers = require('./helpers') -var CodeBuilder = require('../../helpers/code-builder') +const helpers = require('./helpers') +const CodeBuilder = require('../../helpers/code-builder') module.exports = function (source, options) { - var opts = Object.assign({ + const opts = Object.assign({ closingTag: false, indent: ' ', noTags: false, shortTags: false }, options) - var code = new CodeBuilder(opts.indent) + const code = new CodeBuilder(opts.indent) if (!opts.noTags) { code.push(opts.shortTags ? 'setUrl(%s);', helpers.convert(source.url)) + .push('$request->setUrl(%s);', helpers.convert(source.url)) if (~helpers.methods.indexOf(source.method.toUpperCase())) { code.push('$request->setMethod(HTTP_METH_%s);', source.method.toUpperCase()) @@ -45,44 +45,44 @@ module.exports = function (source, options) { if (Object.keys(source.queryObj).length) { code.push('$request->setQueryData(%s);', helpers.convert(source.queryObj, opts.indent)) - .blank() + .blank() } if (Object.keys(source.headersObj).length) { code.push('$request->setHeaders(%s);', helpers.convert(source.headersObj, opts.indent)) - .blank() + .blank() } if (Object.keys(source.cookiesObj).length) { code.push('$request->setCookies(%s);', helpers.convert(source.cookiesObj, opts.indent)) - .blank() + .blank() } switch (source.postData.mimeType) { case 'application/x-www-form-urlencoded': code.push('$request->setContentType(%s);', helpers.convert(source.postData.mimeType)) - .push('$request->setPostFields(%s);', helpers.convert(source.postData.paramsObj, opts.indent)) - .blank() + .push('$request->setPostFields(%s);', helpers.convert(source.postData.paramsObj, opts.indent)) + .blank() break default: if (source.postData.text) { code.push('$request->setBody(%s);', helpers.convert(source.postData.text)) - .blank() + .blank() } } code.push('try {') - .push(1, '$response = $request->send();') - .blank() - .push(1, 'echo $response->getBody();') - .push('} catch (HttpException $ex) {') - .push(1, 'echo $ex;') - .push('}') + .push(1, '$response = $request->send();') + .blank() + .push(1, 'echo $response->getBody();') + .push('} catch (HttpException $ex) {') + .push(1, 'echo $ex;') + .push('}') if (!opts.noTags && opts.closingTag) { code.blank() - .push('?>') + .push('?>') } return code.join() diff --git a/src/targets/php/http2.js b/src/targets/php/http2.js index 9c3afc28e..b62a12c47 100644 --- a/src/targets/php/http2.js +++ b/src/targets/php/http2.js @@ -10,40 +10,41 @@ 'use strict' -var helpers = require('./helpers') -var CodeBuilder = require('../../helpers/code-builder') +const helpers = require('./helpers') +const headerHelpers = require('../../helpers/headers') +const CodeBuilder = require('../../helpers/code-builder') module.exports = function (source, options) { - var opts = Object.assign({ + const opts = Object.assign({ closingTag: false, indent: ' ', noTags: false, shortTags: false }, options) - var code = new CodeBuilder(opts.indent) - var hasBody = false + const code = new CodeBuilder(opts.indent) + let hasBody = false if (!opts.noTags) { code.push(opts.shortTags ? 'append(new http\\QueryString(%s));', helpers.convert(source.postData.paramsObj, opts.indent)) - .blank() + .push('$body->append(new http\\QueryString(%s));', helpers.convert(source.postData.paramsObj, opts.indent)) + .blank() hasBody = true break - case 'multipart/form-data': - var files = [] - var fields = {} + case 'multipart/form-data': { + const files = [] + const fields = {} source.postData.params.forEach(function (param) { if (param.fileName) { @@ -59,62 +60,65 @@ module.exports = function (source, options) { }) code.push('$body = new http\\Message\\Body;') - .push('$body->addForm(%s, %s);', - Object.keys(fields).length ? helpers.convert(fields, opts.indent) : 'NULL', - files.length ? helpers.convert(files, opts.indent) : 'NULL' - ) + .push('$body->addForm(%s, %s);', + Object.keys(fields).length ? helpers.convert(fields, opts.indent) : 'null', + files.length ? helpers.convert(files, opts.indent) : 'null' + ) // remove the contentType header - if (~source.headersObj['content-type'].indexOf('boundary')) { - delete source.headersObj['content-type'] + if (headerHelpers.hasHeader(source.headersObj, 'content-type')) { + if (headerHelpers.getHeader(source.headersObj, 'content-type').indexOf('boundary')) { + delete source.headersObj[headerHelpers.getHeaderName(source.headersObj, 'content-type')] + } } code.blank() hasBody = true break + } default: if (source.postData.text) { code.push('$body = new http\\Message\\Body;') - .push('$body->append(%s);', helpers.convert(source.postData.text)) - .blank() + .push('$body->append(%s);', helpers.convert(source.postData.text)) + .blank() hasBody = true } } code.push('$request->setRequestUrl(%s);', helpers.convert(source.url)) - .push('$request->setRequestMethod(%s);', helpers.convert(source.method)) + .push('$request->setRequestMethod(%s);', helpers.convert(source.method)) if (hasBody) { code.push('$request->setBody($body);') - .blank() + .blank() } if (Object.keys(source.queryObj).length) { code.push('$request->setQuery(new http\\QueryString(%s));', helpers.convert(source.queryObj, opts.indent)) - .blank() + .blank() } if (Object.keys(source.headersObj).length) { code.push('$request->setHeaders(%s);', helpers.convert(source.headersObj, opts.indent)) - .blank() + .blank() } if (Object.keys(source.cookiesObj).length) { code.blank() - .push('$client->setCookies(%s);', helpers.convert(source.cookiesObj, opts.indent)) - .blank() + .push('$client->setCookies(%s);', helpers.convert(source.cookiesObj, opts.indent)) + .blank() } code.push('$client->enqueue($request)->send();') - .push('$response = $client->getResponse();') - .blank() - .push('echo $response->getBody();') + .push('$response = $client->getResponse();') + .blank() + .push('echo $response->getBody();') if (!opts.noTags && opts.closingTag) { code.blank() - .push('?>') + .push('?>') } return code.join() diff --git a/src/targets/powershell/common.js b/src/targets/powershell/common.js index 38339d091..e6c53a538 100644 --- a/src/targets/powershell/common.js +++ b/src/targets/powershell/common.js @@ -1,20 +1,21 @@ 'use strict' -var CodeBuilder = require('../../helpers/code-builder') +const CodeBuilder = require('../../helpers/code-builder') +const helpers = require('../../helpers/headers') module.exports = function (command) { return function (source, options) { - var code = new CodeBuilder() - var methods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS'] + const code = new CodeBuilder() + const methods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS'] if (methods.indexOf(source.method.toUpperCase()) === -1) { return 'Method not supported' } - var commandOptions = [] + const commandOptions = [] // Add headers, including the cookies - var headers = Object.keys(source.headersObj) + const headers = Object.keys(source.headersObj) // construct headers if (headers.length) { @@ -44,7 +45,7 @@ module.exports = function (command) { } if (source.postData.text) { - commandOptions.push("-ContentType '" + source.allHeaders['content-type'] + "'") + commandOptions.push("-ContentType '" + helpers.getHeader(source.allHeaders, 'content-type') + "'") commandOptions.push("-Body '" + source.postData.text + "'") } diff --git a/src/targets/python/helpers.js b/src/targets/python/helpers.js new file mode 100644 index 000000000..e6ef5564f --- /dev/null +++ b/src/targets/python/helpers.js @@ -0,0 +1,81 @@ +'use strict' + +const util = require('util') + +/** + * Create an string of given length filled with blank spaces + * + * @param {number} length Length of the array to return + * @param {string} str String to pad out with + */ +function buildString (length, str) { + return Array.apply(null, new Array(length)).map(String.prototype.valueOf, str).join('') +} + +/** + * Create a string corresponding to a Dictionary or Array literal representation with pretty option + * and indentation. + */ +function concatValues (concatType, values, pretty, indentation, indentLevel) { + const currentIndent = buildString(indentLevel, indentation) + const closingBraceIndent = buildString(indentLevel - 1, indentation) + const join = pretty ? ',\n' + currentIndent : ', ' + const openingBrace = concatType === 'object' ? '{' : '[' + const closingBrace = concatType === 'object' ? '}' : ']' + + if (pretty) { + return openingBrace + '\n' + currentIndent + values.join(join) + '\n' + closingBraceIndent + closingBrace + } else { + return openingBrace + values.join(join) + closingBrace + } +} + +module.exports = { + /** + * Create a valid Python string of a literal value according to its type. + * + * @param {*} value Any JavaScript literal + * @param {Object} opts Target options + * @return {string} + */ + literalRepresentation: function (value, opts, indentLevel) { + indentLevel = indentLevel === undefined ? 1 : indentLevel + 1 + + switch (Object.prototype.toString.call(value)) { + case '[object Number]': + return value + + case '[object Array]': { + let pretty = false + const valuesRepresentation = value.map(function (v) { + // Switch to prettify if the value is a dictionary with multiple keys + if (Object.prototype.toString.call(v) === '[object Object]') { + pretty = Object.keys(v).length > 1 + } + return this.literalRepresentation(v, opts, indentLevel) + }.bind(this)) + return concatValues('array', valuesRepresentation, pretty, opts.indent, indentLevel) + } + + case '[object Object]': { + const keyValuePairs = [] + for (const k in value) { + keyValuePairs.push(util.format('"%s": %s', k, this.literalRepresentation(value[k], opts, indentLevel))) + } + return concatValues('object', keyValuePairs, opts.pretty && keyValuePairs.length > 1, opts.indent, indentLevel) + } + + case '[object Null]': + return 'None' + + case '[object Boolean]': + return value ? 'True' : 'False' + + default: + if (value === null || value === undefined) { + return '' + } + return '"' + value.toString().replace(/"/g, '\\"') + '"' + } + } +} diff --git a/src/targets/python/python3.js b/src/targets/python/python3.js index 753a6571a..a843b9398 100644 --- a/src/targets/python/python3.js +++ b/src/targets/python/python3.js @@ -10,46 +10,45 @@ 'use strict' -var CodeBuilder = require('../../helpers/code-builder') +const CodeBuilder = require('../../helpers/code-builder') module.exports = function (source, options) { - var code = new CodeBuilder() + const code = new CodeBuilder() // Start Request code.push('import http.client') - .blank() + .blank() // Check which protocol to be used for the client connection - var protocol = source.uriObj.protocol + const protocol = source.uriObj.protocol if (protocol === 'https:') { code.push('conn = http.client.HTTPSConnection("%s")', source.uriObj.host) - .blank() + .blank() } else { code.push('conn = http.client.HTTPConnection("%s")', source.uriObj.host) - .blank() + .blank() } // Create payload string if it exists - var payload = JSON.stringify(source.postData.text) + const payload = JSON.stringify(source.postData.text) if (payload) { code.push('payload = %s', payload) - .blank() + .blank() } // Create Headers - var header - var headers = source.allHeaders - var headerCount = Object.keys(headers).length + const headers = source.allHeaders + const headerCount = Object.keys(headers).length if (headerCount === 1) { - for (header in headers) { + for (const header in headers) { code.push('headers = { \'%s\': "%s" }', header, headers[header]) - .blank() + .blank() } } else if (headerCount > 1) { - var count = 1 + let count = 1 code.push('headers = {') - for (header in headers) { + for (const header in headers) { if (count++ !== headerCount) { code.push(' \'%s\': "%s",', header, headers[header]) } else { @@ -58,12 +57,12 @@ module.exports = function (source, options) { } code.push(' }') - .blank() + .blank() } // Make Request - var method = source.method - var path = source.uriObj.path + const method = source.method + const path = source.uriObj.path if (payload && headerCount) { code.push('conn.request("%s", "%s", payload, headers)', method, path) } else if (payload && !headerCount) { @@ -76,10 +75,10 @@ module.exports = function (source, options) { // Get Response code.blank() - .push('res = conn.getresponse()') - .push('data = res.read()') - .blank() - .push('print(data.decode("utf-8"))') + .push('res = conn.getresponse()') + .push('data = res.read()') + .blank() + .push('print(data.decode("utf-8"))') return code.join() } diff --git a/src/targets/python/requests.js b/src/targets/python/requests.js index 7adfc0ecb..3dc0ac9b1 100644 --- a/src/targets/python/requests.js +++ b/src/targets/python/requests.js @@ -10,69 +10,93 @@ 'use strict' -var util = require('util') -var CodeBuilder = require('../../helpers/code-builder') +const util = require('util') +const CodeBuilder = require('../../helpers/code-builder') +const helpers = require('./helpers') module.exports = function (source, options) { + const opts = Object.assign({ + indent: ' ', + pretty: true + }, options) + // Start snippet - var code = new CodeBuilder(' ') + const code = new CodeBuilder(opts.indent) // Import requests code.push('import requests') - .blank() + .blank() // Set URL code.push('url = "%s"', source.url) - .blank() + .blank() // Construct query string + let qs if (Object.keys(source.queryObj).length) { - var qs = 'querystring = ' + JSON.stringify(source.queryObj) + qs = 'querystring = ' + JSON.stringify(source.queryObj) code.push(qs) - .blank() + .blank() } // Construct payload - var payload = JSON.stringify(source.postData.text) + let hasPayload = false + let jsonPayload = false + switch (source.postData.mimeType) { + case 'application/json': + if (source.postData.jsonObj) { + code.push('payload = %s', helpers.literalRepresentation(source.postData.jsonObj, opts)) + jsonPayload = true + hasPayload = true + } + break - if (payload) { - code.push('payload = %s', payload) + default: { + const payload = JSON.stringify(source.postData.text) + if (payload) { + code.push('payload = %s', payload) + hasPayload = true + } + } } // Construct headers - var header - var headers = source.allHeaders - var headerCount = Object.keys(headers).length + const headers = source.allHeaders + const headerCount = Object.keys(headers).length if (headerCount === 1) { - for (header in headers) { - code.push('headers = {\'%s\': \'%s\'}', header, headers[header]) - .blank() + for (const header in headers) { + code.push('headers = {"%s": "%s"}', header, headers[header]) + .blank() } } else if (headerCount > 1) { - var count = 1 + let count = 1 code.push('headers = {') - for (header in headers) { + for (const header in headers) { if (count++ !== headerCount) { - code.push(1, '\'%s\': "%s",', header, headers[header]) + code.push(1, '"%s": "%s",', header, headers[header]) } else { - code.push(1, '\'%s\': "%s"', header, headers[header]) + code.push(1, '"%s": "%s"', header, headers[header]) } } - code.push(1, '}') - .blank() + code.push('}') + .blank() } // Construct request - var method = source.method - var request = util.format('response = requests.request("%s", url', method) - - if (payload) { - request += ', data=payload' + const method = source.method + let request = util.format('response = requests.request("%s", url', method) + + if (hasPayload) { + if (jsonPayload) { + request += ', json=payload' + } else { + request += ', data=payload' + } } if (headerCount > 0) { @@ -86,10 +110,10 @@ module.exports = function (source, options) { request += ')' code.push(request) - .blank() + .blank() - // Print response - .push('print(response.text)') + // Print response + .push('print(response.text)') return code.join() } @@ -100,5 +124,3 @@ module.exports.info = { link: 'http://docs.python-requests.org/en/latest/api/#requests.request', description: 'Requests HTTP library' } - -// response = requests.request("POST", url, data=payload, headers=headers, params=querystring) diff --git a/src/targets/r/httr.js b/src/targets/r/httr.js new file mode 100644 index 000000000..66321e545 --- /dev/null +++ b/src/targets/r/httr.js @@ -0,0 +1,152 @@ +/** + * @description + * HTTP code snippet generator for R using httr + * + * @author + * @gabrielakoreeda + * + * for any questions or issues regarding the generated code snippet, please open an issue mentioning the author. + */ + +'use strict' + +const util = require('util') +const CodeBuilder = require('../../helpers/code-builder') + +module.exports = function (source, options) { + // Start snippet + const code = new CodeBuilder() + + // Import httr + code.push('library(httr)') + .blank() + + // Set URL + code.push('url <- "%s"', source.url) + .blank() + + // Construct query string + const qs = source.queryObj + const queryKeys = Object.keys(qs) + const queryCount = queryKeys.length + delete source.queryObj.key + + if (queryCount === 1) { + code.push('queryString <- list(%s = "%s")', queryKeys, Object.values(qs).toString()) + .blank() + } else if (queryCount > 1) { + code.push('queryString <- list(') + + queryKeys.forEach((queryKey, index) => { + if (index !== queryCount - 1) { + code.push(' %s = "%s",', queryKey, qs[queryKey].toString()) + } else { + code.push(' %s = "%s"', queryKey, qs[queryKey].toString()) + } + }) + + code.push(')') + .blank() + } + + // Construct payload + const payload = JSON.stringify(source.postData.text) + + if (payload) { + code.push('payload <- %s', payload) + .blank() + } + + // Define encode + if (source.postData.text || source.postData.jsonObj || source.postData.params) { + switch (source.postData.mimeType) { + case 'application/x-www-form-urlencoded': + code.push('encode <- "form"') + .blank() + break + + case 'application/json': + code.push('encode <- "json"') + .blank() + break + + case 'multipart/form-data': + code.push('encode <- "multipart"') + .blank() + break + + default: + code.push('encode <- "raw"') + .blank() + break + } + } + + // Construct headers + const headers = source.allHeaders + const headersKeys = Object.keys(headers); + let headerCount = headersKeys.length + let header = '' + let cookies + let accept + + headersKeys.forEach((headerKey, index) => { + if (headerKey.toLowerCase() === 'accept') { + accept = ', accept("' + headers[headerKey] + '")' + headerCount = headerCount - 1 + } else if (headerKey.toLowerCase() === 'cookie') { + cookies = ', set_cookies(`' + headers[headerKey].replace(/;/g, '", `').replace(/` /g, '`').replace(/=/g, '` = "') + '")' + headerCount = headerCount - 1 + } else if (headerKey.toLowerCase() !== 'content-type') { + header += `'${headerKey}' = '${headers[headerKey]}` + if (headerCount > 1 && index !== headersKeys.length - 1) { header += "', " } + } + }) + + // Construct request + const method = source.method + let request = util.format('response <- VERB("%s", url', method) + + if (payload) { + request += ', body = payload' + } + + if (header !== '') { + request += ', add_headers(' + header + "')" + } + + if (source.queryString.length) { + request += ', query = queryString' + } + + request += ', content_type("' + source.postData.mimeType + '")' + + if (typeof accept !== 'undefined') { + request += accept + } + + if (typeof cookies !== 'undefined') { + request += cookies + } + + if (source.postData.text || source.postData.jsonObj || source.postData.params) { + request += ', encode = encode' + } + + request += ')' + + code.push(request) + .blank() + + // Print response + .push('content(response, "text")') + + return code.join() +} + +module.exports.info = { + key: 'httr', + title: 'httr', + link: 'https://cran.r-project.org/web/packages/httr/vignettes/quickstart.html', + description: 'httr: Tools for Working with URLs and HTTP' +} diff --git a/src/targets/r/index.js b/src/targets/r/index.js new file mode 100644 index 000000000..3b4fec208 --- /dev/null +++ b/src/targets/r/index.js @@ -0,0 +1,12 @@ +'use strict' + +module.exports = { + info: { + key: 'r', + title: 'R', + extname: '.r', + default: 'httr' + }, + + httr: require('./httr') +} diff --git a/src/targets/rapidql/index.js b/src/targets/rapidql/index.js new file mode 100644 index 000000000..80fb16b6a --- /dev/null +++ b/src/targets/rapidql/index.js @@ -0,0 +1,12 @@ +'use strict' + +module.exports = { + info: { + key: 'rapidql', + title: 'RapidQL', + extname: '.js', + default: 'rapidql' + }, + + rapidql: require('./rapidql'), +} diff --git a/src/targets/rapidql/rapidql.js b/src/targets/rapidql/rapidql.js new file mode 100644 index 000000000..b1611cfb6 --- /dev/null +++ b/src/targets/rapidql/rapidql.js @@ -0,0 +1,51 @@ +'use strict' + +const CodeBuilder = require('../../helpers/code-builder') + +module.exports = function (source, options) { + var opts = Object.assign({ + indent: ' ' + }, options) + + const code = new CodeBuilder(opts.indent) + + code.push('// For more information about RapidQL, checkout docs.rapidql.com!'); + code.blank(); + code.push("const RapidQL = require('RapidQL');"); + code.push('let rql = new RapidQL({'); + code.push('});'); + code.push(''); + code.push('rql.query(`{'); + code.push(` Http.${(source.method || '').toLowerCase()}(`); + code.push(` url:"${source.fullUrl}"`); + + if (source.headers.length) { + code.push(` headers : {\n${Object.entries(source.allHeaders).map(([key, val]) => `"${key}":"${val}"`).join(",\n")}\n }`); + } + + + if (source.postData.jsonObj) { + code.push(` json: true,`) + code.push(` body: ${source.postData.text}`) + } else if(source.postData.params) { + code.push(` form : {\n${source.postData.params.map(param => `"${param.name}":"${param.value}"`).join(",\n")}\n }`); + } else { + code.push(` body : ${source.postData.text}`); + } + + code.push(" ) {"); + code.push(""); + code.push(" }"); + code.push("}`)"); + code.push(".then((res) => console.log(res))"); + code.push(".catch((err) => console.log(err));"); + + return code.join(); +} + +module.exports.info = { + key: 'rapidql', + title: 'RapidQL', + link: 'https://github.com/RapidAPI/rapidql', + description: '' +} diff --git a/src/targets/ruby/native.js b/src/targets/ruby/native.js index 4e24a34e0..df96b9e30 100644 --- a/src/targets/ruby/native.js +++ b/src/targets/ruby/native.js @@ -1,12 +1,12 @@ 'use strict' -var CodeBuilder = require('../../helpers/code-builder') +const CodeBuilder = require('../../helpers/code-builder') module.exports = function (source, options) { - var code = new CodeBuilder() + const code = new CodeBuilder() code.push('require \'uri\'') - .push('require \'net/http\'') + .push('require \'net/http\'') if (source.uriObj.protocol === 'https:') { code.push('require \'openssl\'') @@ -16,31 +16,31 @@ module.exports = function (source, options) { // To support custom methods we check for the supported methods // and if doesn't exist then we build a custom class for it - var method = source.method.toUpperCase() - var methods = ['GET', 'POST', 'HEAD', 'DELETE', 'PATCH', 'PUT', 'OPTIONS', 'COPY', 'LOCK', 'UNLOCK', 'MOVE', 'TRACE'] - var capMethod = method.charAt(0) + method.substring(1).toLowerCase() + const method = source.method.toUpperCase() + const methods = ['GET', 'POST', 'HEAD', 'DELETE', 'PATCH', 'PUT', 'OPTIONS', 'COPY', 'LOCK', 'UNLOCK', 'MOVE', 'TRACE'] + const capMethod = method.charAt(0) + method.substring(1).toLowerCase() if (methods.indexOf(method) < 0) { code.push('class Net::HTTP::%s < Net::HTTPRequest', capMethod) - .push(' METHOD = \'%s\'', method.toUpperCase()) - .push(' REQUEST_HAS_BODY = \'%s\'', source.postData.text ? 'true' : 'false') - .push(' RESPONSE_HAS_BODY = true') - .push('end') - .blank() + .push(' METHOD = \'%s\'', method.toUpperCase()) + .push(' REQUEST_HAS_BODY = \'%s\'', source.postData.text ? 'true' : 'false') + .push(' RESPONSE_HAS_BODY = true') + .push('end') + .blank() } code.push('url = URI("%s")', source.fullUrl) - .blank() - .push('http = Net::HTTP.new(url.host, url.port)') + .blank() + .push('http = Net::HTTP.new(url.host, url.port)') if (source.uriObj.protocol === 'https:') { code.push('http.use_ssl = true') - .push('http.verify_mode = OpenSSL::SSL::VERIFY_NONE') + .push('http.verify_mode = OpenSSL::SSL::VERIFY_NONE') } code.blank() - .push('request = Net::HTTP::%s.new(url)', capMethod) + .push('request = Net::HTTP::%s.new(url)', capMethod) - var headers = Object.keys(source.allHeaders) + const headers = Object.keys(source.allHeaders) if (headers.length) { headers.forEach(function (key) { code.push('request["%s"] = \'%s\'', key, source.allHeaders[key]) @@ -52,8 +52,8 @@ module.exports = function (source, options) { } code.blank() - .push('response = http.request(request)') - .push('puts response.read_body') + .push('response = http.request(request)') + .push('puts response.read_body') return code.join() } diff --git a/src/targets/shell/curl.js b/src/targets/shell/curl.js index 3b6397f4a..3cde6bb5a 100644 --- a/src/targets/shell/curl.js +++ b/src/targets/shell/curl.js @@ -10,29 +10,55 @@ 'use strict' -var util = require('util') -var helpers = require('../../helpers/shell') -var CodeBuilder = require('../../helpers/code-builder') +const util = require('util') +const helpers = require('../../helpers/shell') +const headerHelpers = require('../../helpers/headers') +const CodeBuilder = require('../../helpers/code-builder') module.exports = function (source, options) { - var opts = Object.assign({ + const opts = Object.assign({ indent: ' ', short: false, - binary: false + binary: false, + globOff: false }, options) - var code = new CodeBuilder(opts.indent, opts.indent !== false ? ' \\\n' + opts.indent : ' ') + const code = new CodeBuilder(opts.indent, opts.indent !== false ? ' \\\n' + opts.indent : ' ') - code.push('curl %s %s', opts.short ? '-X' : '--request', source.method) - .push(util.format('%s%s', opts.short ? '' : '--url ', helpers.quote(source.fullUrl))) + const globOption = opts.short ? '-g' : '--globoff' + const requestOption = opts.short ? '-X' : '--request' + let formattedUrl = helpers.quote(source.fullUrl) + + code.push('curl %s %s', requestOption, source.method) + if (opts.globOff) { + formattedUrl = unescape(formattedUrl) + code.push(globOption) + } + code.push(util.format('%s%s', opts.short ? '' : '--url ', formattedUrl)) if (source.httpVersion === 'HTTP/1.0') { code.push(opts.short ? '-0' : '--http1.0') } + // if multipart form data, we want to remove the boundary + if (source.postData.mimeType === 'multipart/form-data') { + const contentTypeHeaderName = headerHelpers.getHeaderName(source.headersObj, 'content-type') + const contentTypeHeader = source.headersObj[contentTypeHeaderName] + + if (contentTypeHeaderName && contentTypeHeader) { + // remove the leading semi colon and boundary + // up to the next semi colon or the end of string + const noBoundary = contentTypeHeader.replace(/; boundary.+?(?=(;|$))/, '') + + // replace the content-type header with no boundary in both headersObj and allHeaders + source.headersObj[contentTypeHeaderName] = noBoundary + source.allHeaders[contentTypeHeaderName] = noBoundary + } + } + // construct headers Object.keys(source.headersObj).sort().forEach(function (key) { - var header = util.format('%s: %s', key, source.headersObj[key]) + const header = util.format('%s: %s', key, source.headersObj[key]) code.push('%s %s', opts.short ? '-H' : '--header', helpers.quote(header)) }) @@ -43,11 +69,12 @@ module.exports = function (source, options) { // construct post params switch (source.postData.mimeType) { case 'multipart/form-data': - source.postData.params.map(function (param) { - var post = util.format('%s=%s', param.name, param.value) - - if (param.fileName && !param.value) { + source.postData.params.forEach(function (param) { + let post = '' + if (param.fileName) { post = util.format('%s=@%s', param.name, param.fileName) + } else { + post = util.format('%s=%s', param.name, param.value) } code.push('%s %s', opts.short ? '-F' : '--form', helpers.quote(post)) @@ -56,7 +83,7 @@ module.exports = function (source, options) { case 'application/x-www-form-urlencoded': if (source.postData.params) { - source.postData.params.map(function (param) { + source.postData.params.forEach(function (param) { code.push( '%s %s', opts.binary ? '--data-binary' : (opts.short ? '-d' : '--data'), helpers.quote(util.format('%s=%s', param.name, param.value)) diff --git a/src/targets/shell/httpie.js b/src/targets/shell/httpie.js index b880fc106..40b0338a3 100644 --- a/src/targets/shell/httpie.js +++ b/src/targets/shell/httpie.js @@ -10,12 +10,12 @@ 'use strict' -var util = require('util') -var shell = require('../../helpers/shell') -var CodeBuilder = require('../../helpers/code-builder') +const util = require('util') +const shell = require('../../helpers/shell') +const CodeBuilder = require('../../helpers/code-builder') module.exports = function (source, options) { - var opts = Object.assign({ + const opts = Object.assign({ body: false, cert: false, headers: false, @@ -30,10 +30,10 @@ module.exports = function (source, options) { verify: false }, options) - var code = new CodeBuilder(opts.indent, opts.indent !== false ? ' \\\n' + opts.indent : ' ') + const code = new CodeBuilder(opts.indent, opts.indent !== false ? ' \\\n' + opts.indent : ' ') - var raw = false - var flags = [] + let raw = false + const flags = [] if (opts.headers) { flags.push(opts.short ? '-h' : '--headers') @@ -73,10 +73,10 @@ module.exports = function (source, options) { // construct query params if (opts.queryParams) { - var queryStringKeys = Object.keys(source.queryObj) + const queryStringKeys = Object.keys(source.queryObj) queryStringKeys.forEach(function (name) { - var value = source.queryObj[name] + const value = source.queryObj[name] if (Array.isArray(value)) { value.forEach(function (val) { diff --git a/src/targets/shell/wget.js b/src/targets/shell/wget.js index 2155552ce..a453cc855 100644 --- a/src/targets/shell/wget.js +++ b/src/targets/shell/wget.js @@ -10,18 +10,18 @@ 'use strict' -var util = require('util') -var helpers = require('../../helpers/shell') -var CodeBuilder = require('../../helpers/code-builder') +const util = require('util') +const helpers = require('../../helpers/shell') +const CodeBuilder = require('../../helpers/code-builder') module.exports = function (source, options) { - var opts = Object.assign({ + const opts = Object.assign({ indent: ' ', short: false, verbose: false }, options) - var code = new CodeBuilder(opts.indent, opts.indent !== false ? ' \\\n' + opts.indent : ' ') + const code = new CodeBuilder(opts.indent, opts.indent !== false ? ' \\\n' + opts.indent : ' ') if (opts.verbose) { code.push('wget %s', opts.short ? '-v' : '--verbose') @@ -32,7 +32,7 @@ module.exports = function (source, options) { code.push('--method %s', helpers.quote(source.method)) Object.keys(source.allHeaders).forEach(function (key) { - var header = util.format('%s: %s', key, source.allHeaders[key]) + const header = util.format('%s: %s', key, source.allHeaders[key]) code.push('--header %s', helpers.quote(header)) }) @@ -41,7 +41,7 @@ module.exports = function (source, options) { } code.push(opts.short ? '-O' : '--output-document') - .push('- %s', helpers.quote(source.fullUrl)) + .push('- %s', helpers.quote(source.fullUrl)) return code.join() } diff --git a/src/targets/swift/helpers.js b/src/targets/swift/helpers.js index fdc26fd82..62a212127 100644 --- a/src/targets/swift/helpers.js +++ b/src/targets/swift/helpers.js @@ -1,11 +1,12 @@ 'use strict' -var util = require('util') +const util = require('util') /** * Create an string of given length filled with blank spaces * * @param {number} length Length of the array to return + * @param {string} str String to pad out with * @return {string} */ function buildString (length, str) { @@ -17,9 +18,9 @@ function buildString (length, str) { * and indentation. */ function concatArray (arr, pretty, indentation, indentLevel) { - var currentIndent = buildString(indentLevel, indentation) - var closingBraceIndent = buildString(indentLevel - 1, indentation) - var join = pretty ? ',\n' + currentIndent : ', ' + const currentIndent = buildString(indentLevel, indentation) + const closingBraceIndent = buildString(indentLevel - 1, indentation) + const join = pretty ? ',\n' + currentIndent : ', ' if (pretty) { return '[\n' + currentIndent + arr.join(join) + '\n' + closingBraceIndent + ']' @@ -54,10 +55,11 @@ module.exports = { switch (Object.prototype.toString.call(value)) { case '[object Number]': return value - case '[object Array]': + + case '[object Array]': { // Don't prettify arrays nto not take too much space - var pretty = false - var valuesRepresentation = value.map(function (v) { + let pretty = false + const valuesRepresentation = value.map(function (v) { // Switch to prettify if the value is a dictionary with multiple keys if (Object.prototype.toString.call(v) === '[object Object]') { pretty = Object.keys(v).length > 1 @@ -65,14 +67,19 @@ module.exports = { return this.literalRepresentation(v, opts, indentLevel) }.bind(this)) return concatArray(valuesRepresentation, pretty, opts.indent, indentLevel) - case '[object Object]': - var keyValuePairs = [] - for (var k in value) { + } + + case '[object Object]': { + const keyValuePairs = [] + for (const k in value) { keyValuePairs.push(util.format('"%s": %s', k, this.literalRepresentation(value[k], opts, indentLevel))) } return concatArray(keyValuePairs, opts.pretty && keyValuePairs.length > 1, opts.indent, indentLevel) + } + case '[object Boolean]': return value.toString() + default: if (value === null || value === undefined) { return '' diff --git a/src/targets/swift/nsurlsession.js b/src/targets/swift/nsurlsession.js index 2c42a5a9d..d3b48a72e 100644 --- a/src/targets/swift/nsurlsession.js +++ b/src/targets/swift/nsurlsession.js @@ -10,20 +10,20 @@ 'use strict' -var helpers = require('./helpers') -var CodeBuilder = require('../../helpers/code-builder') +const helpers = require('./helpers') +const CodeBuilder = require('../../helpers/code-builder') module.exports = function (source, options) { - var opts = Object.assign({ + const opts = Object.assign({ indent: ' ', pretty: true, timeout: '10' }, options) - var code = new CodeBuilder(opts.indent) + const code = new CodeBuilder(opts.indent) // Markers for headers to be created as litteral objects and later be set on the NSURLRequest if exist - var req = { + const req = { hasHeaders: false, hasBody: false } @@ -34,7 +34,7 @@ module.exports = function (source, options) { if (Object.keys(source.allHeaders).length) { req.hasHeaders = true code.blank() - .push(helpers.literalDeclaration('headers', source.allHeaders, opts)) + .push(helpers.literalDeclaration('headers', source.allHeaders, opts)) } if (source.postData.text || source.postData.jsonObj || source.postData.params) { @@ -46,8 +46,8 @@ module.exports = function (source, options) { // we make it easier for the user to edit it according to his or her needs after pasting. // The user can just add/remove lines adding/removing body parameters. code.blank() - .push('let postData = NSMutableData(data: "%s=%s".data(using: String.Encoding.utf8)!)', source.postData.params[0].name, source.postData.params[0].value) - for (var i = 1, len = source.postData.params.length; i < len; i++) { + .push('let postData = NSMutableData(data: "%s=%s".data(using: String.Encoding.utf8)!)', source.postData.params[0].name, source.postData.params[0].value) + for (let i = 1, len = source.postData.params.length; i < len; i++) { code.push('postData.append("&%s=%s".data(using: String.Encoding.utf8)!)', source.postData.params[i].name, source.postData.params[i].value) } break @@ -55,8 +55,8 @@ module.exports = function (source, options) { case 'application/json': if (source.postData.jsonObj) { code.push(helpers.literalDeclaration('parameters', source.postData.jsonObj, opts), 'as [String : Any]') - .blank() - .push('let postData = JSONSerialization.data(withJSONObject: parameters, options: [])') + .blank() + .push('let postData = JSONSerialization.data(withJSONObject: parameters, options: [])') } break @@ -67,42 +67,42 @@ module.exports = function (source, options) { * The user can just edit the parameters NSDictionary or put this part of a snippet in a multipart builder method. */ code.push(helpers.literalDeclaration('parameters', source.postData.params, opts)) - .blank() - .push('let boundary = "%s"', source.postData.boundary) - .blank() - .push('var body = ""') - .push('var error: NSError? = nil') - .push('for param in parameters {') - .push(1, 'let paramName = param["name"]!') - .push(1, 'body += "--\\(boundary)\\r\\n"') - .push(1, 'body += "Content-Disposition:form-data; name=\\"\\(paramName)\\""') - .push(1, 'if let filename = param["fileName"] {') - .push(2, 'let contentType = param["content-type"]!') - .push(2, 'let fileContent = String(contentsOfFile: filename, encoding: String.Encoding.utf8)') - .push(2, 'if (error != nil) {') - .push(3, 'print(error)') - .push(2, '}') - .push(2, 'body += "; filename=\\"\\(filename)\\"\\r\\n"') - .push(2, 'body += "Content-Type: \\(contentType)\\r\\n\\r\\n"') - .push(2, 'body += fileContent') - .push(1, '} else if let paramValue = param["value"] {') - .push(2, 'body += "\\r\\n\\r\\n\\(paramValue)"') - .push(1, '}') - .push('}') + .blank() + .push('let boundary = "%s"', source.postData.boundary) + .blank() + .push('var body = ""') + .push('var error: NSError? = nil') + .push('for param in parameters {') + .push(1, 'let paramName = param["name"]!') + .push(1, 'body += "--\\(boundary)\\r\\n"') + .push(1, 'body += "Content-Disposition:form-data; name=\\"\\(paramName)\\""') + .push(1, 'if let filename = param["fileName"] {') + .push(2, 'let contentType = param["content-type"]!') + .push(2, 'let fileContent = String(contentsOfFile: filename, encoding: String.Encoding.utf8)') + .push(2, 'if (error != nil) {') + .push(3, 'print(error)') + .push(2, '}') + .push(2, 'body += "; filename=\\"\\(filename)\\"\\r\\n"') + .push(2, 'body += "Content-Type: \\(contentType)\\r\\n\\r\\n"') + .push(2, 'body += fileContent') + .push(1, '} else if let paramValue = param["value"] {') + .push(2, 'body += "\\r\\n\\r\\n\\(paramValue)"') + .push(1, '}') + .push('}') break default: code.blank() - .push('let postData = NSData(data: "%s".data(using: String.Encoding.utf8)!)', source.postData.text) + .push('let postData = NSData(data: "%s".data(using: String.Encoding.utf8)!)', source.postData.text) } } code.blank() - // NSURLRequestUseProtocolCachePolicy is the default policy, let's just always set it to avoid confusion. - .push('let request = NSMutableURLRequest(url: NSURL(string: "%s")! as URL,', source.fullUrl) - .push(' cachePolicy: .useProtocolCachePolicy,') - .push(' timeoutInterval: %s)', parseInt(opts.timeout, 10).toFixed(1)) - .push('request.httpMethod = "%s"', source.method) + // NSURLRequestUseProtocolCachePolicy is the default policy, let's just always set it to avoid confusion. + .push('let request = NSMutableURLRequest(url: NSURL(string: "%s")! as URL,', source.fullUrl) + .push(' cachePolicy: .useProtocolCachePolicy,') + .push(' timeoutInterval: %s)', parseInt(opts.timeout, 10).toFixed(1)) + .push('request.httpMethod = "%s"', source.method) if (req.hasHeaders) { code.push('request.allHTTPHeaderFields = headers') @@ -113,19 +113,19 @@ module.exports = function (source, options) { } code.blank() - // Retrieving the shared session will be less verbose than creating a new one. - .push('let session = URLSession.shared') - .push('let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in') - .push(1, 'if (error != nil) {') - .push(2, 'print(error)') - .push(1, '} else {') - // Casting the NSURLResponse to NSHTTPURLResponse so the user can see the status . - .push(2, 'let httpResponse = response as? HTTPURLResponse') - .push(2, 'print(httpResponse)') - .push(1, '}') - .push('})') - .blank() - .push('dataTask.resume()') + // Retrieving the shared session will be less verbose than creating a new one. + .push('let session = URLSession.shared') + .push('let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in') + .push(1, 'if (error != nil) {') + .push(2, 'print(error)') + .push(1, '} else {') + // Casting the NSURLResponse to NSHTTPURLResponse so the user can see the status . + .push(2, 'let httpResponse = response as? HTTPURLResponse') + .push(2, 'print(httpResponse)') + .push(1, '}') + .push('})') + .blank() + .push('dataTask.resume()') return code.join() } diff --git a/test/fixtures/available-targets.json b/test/fixtures/available-targets.json index 06eeba58a..7ad7857ab 100644 --- a/test/fixtures/available-targets.json +++ b/test/fixtures/available-targets.json @@ -48,6 +48,18 @@ "title": "Unirest", "link": "http://unirest.io/nodejs.html", "description": "Lightweight HTTP Request Client Library" + }, + { + "key": "axios", + "title": "Axios", + "link": "https://github.com/axios/axios", + "description": "Promise based HTTP client for the browser and node.js" + }, + { + "key": "fetch", + "title": "Fetch", + "link": "https://github.com/bitinn/node-fetch", + "description": "Simplified HTTP node-fetch client" } ] }, @@ -74,6 +86,12 @@ "title": "XMLHttpRequest", "link": "https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest", "description": "W3C Standard API that provides scripted client functionality" + }, + { + "key": "axios", + "title": "Axios", + "link": "https://github.com/axios/axios", + "description": "Promise based HTTP client for the browser and node.js" } ] }, @@ -196,6 +214,18 @@ "title": "Unirest", "link": "http://unirest.io/java.html", "description": "Lightweight HTTP Request Client Library" + }, + { + "key": "asynchttp", + "title": "AsyncHttp", + "link": "https://github.com/AsyncHttpClient/async-http-client", + "description": "Asynchronous Http and WebSocket Client library for Java" + }, + { + "key": "nethttp", + "title": "java.net.http", + "link": "https://openjdk.java.net/groups/net/httpclient/intro.html", + "description": "Java Standardized HTTP Client API" } ] }, @@ -224,6 +254,12 @@ "title": "RestSharp", "link": "http://restsharp.org/", "description": "Simple REST and HTTP API Client for .NET" + }, + { + "key": "httpclient", + "title": "HttpClient", + "link": "https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient", + "description": ".NET Standard HTTP Client" } ] }, @@ -255,6 +291,20 @@ } ] }, + { + "key": "r", + "title": "R", + "extname": ".r", + "default": "httr", + "clients": [ + { + "key": "httr", + "title": "httr", + "link": "https://cran.r-project.org/web/packages/httr/vignettes/quickstart.html", + "description": "httr: Tools for Working with URLs and HTTP" + } + ] + }, { "default": "webrequest", "extname": ".ps1", @@ -288,5 +338,19 @@ "title": "HTTP/1.1" } ] + }, + { + "key": "kotlin", + "title": "Kotlin", + "extname": ".kt", + "default": "okhttp", + "clients": [ + { + "key": "okhttp", + "title": "OkHttp", + "link": "http://square.github.io/okhttp/", + "description": "An HTTP Request Client Library" + } + ] } ] diff --git a/test/fixtures/customTarget.js b/test/fixtures/customTarget.js new file mode 100644 index 000000000..9a6e11c41 --- /dev/null +++ b/test/fixtures/customTarget.js @@ -0,0 +1,12 @@ +'use strict' + +module.exports = { + info: { + key: 'js-variant', + title: 'JavaScript Variant', + extname: '.js', + default: 'request' + }, + + request: require('../../src/targets/node/request') +} diff --git a/test/fixtures/output/c/libcurl/multipart-form-data.c b/test/fixtures/output/c/libcurl/multipart-form-data.c index 232a092fc..e47d6e573 100644 --- a/test/fixtures/output/c/libcurl/multipart-form-data.c +++ b/test/fixtures/output/c/libcurl/multipart-form-data.c @@ -4,7 +4,7 @@ curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "POST"); curl_easy_setopt(hnd, CURLOPT_URL, "http://mockbin.com/har"); struct curl_slist *headers = NULL; -headers = curl_slist_append(headers, "content-type: multipart/form-data; boundary=---011000010111000001101001"); +headers = curl_slist_append(headers, "Content-Type: multipart/form-data; boundary=---011000010111000001101001"); curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers); curl_easy_setopt(hnd, CURLOPT_POSTFIELDS, "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"foo\"\r\n\r\nbar\r\n-----011000010111000001101001--\r\n"); diff --git a/test/fixtures/output/c/libcurl/nested.c b/test/fixtures/output/c/libcurl/nested.c new file mode 100644 index 000000000..dfb8ee8f2 --- /dev/null +++ b/test/fixtures/output/c/libcurl/nested.c @@ -0,0 +1,6 @@ +CURL *hnd = curl_easy_init(); + +curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET"); +curl_easy_setopt(hnd, CURLOPT_URL, "http://mockbin.com/har?foo%5Bbar%5D=baz%2Czap&fiz=buz&key=value"); + +CURLcode ret = curl_easy_perform(hnd); diff --git a/test/fixtures/output/clojure/clj_http/nested.clj b/test/fixtures/output/clojure/clj_http/nested.clj new file mode 100644 index 000000000..73016ab59 --- /dev/null +++ b/test/fixtures/output/clojure/clj_http/nested.clj @@ -0,0 +1,5 @@ +(require '[clj-http.client :as client]) + +(client/get "http://mockbin.com/har" {:query-params {:foo[bar] "baz,zap" + :fiz "buz" + :key "value"}}) diff --git a/test/fixtures/output/csharp/httpclient/application-form-encoded.cs b/test/fixtures/output/csharp/httpclient/application-form-encoded.cs new file mode 100644 index 000000000..1fd11f8e0 --- /dev/null +++ b/test/fixtures/output/csharp/httpclient/application-form-encoded.cs @@ -0,0 +1,17 @@ +var client = new HttpClient(); +var request = new HttpRequestMessage +{ + Method = HttpMethod.Post, + RequestUri = new Uri("http://mockbin.com/har"), + Content = new FormUrlEncodedContent(new Dictionary + { + { "foo", "bar" }, + { "hello", "world" }, + }), +}; +using (var response = await client.SendAsync(request)) +{ + response.EnsureSuccessStatusCode(); + var body = await response.Content.ReadAsStringAsync(); + Console.WriteLine(body); +} diff --git a/test/fixtures/output/csharp/httpclient/application-json.cs b/test/fixtures/output/csharp/httpclient/application-json.cs new file mode 100644 index 000000000..9bf3269f8 --- /dev/null +++ b/test/fixtures/output/csharp/httpclient/application-json.cs @@ -0,0 +1,19 @@ +var client = new HttpClient(); +var request = new HttpRequestMessage +{ + Method = HttpMethod.Post, + RequestUri = new Uri("http://mockbin.com/har"), + Content = new StringContent("{\"number\":1,\"string\":\"f\\\"oo\",\"arr\":[1,2,3],\"nested\":{\"a\":\"b\"},\"arr_mix\":[1,\"a\",{\"arr_mix_nested\":{}}],\"boolean\":false}") + { + Headers = + { + ContentType = new MediaTypeHeaderValue("application/json") + } + } +}; +using (var response = await client.SendAsync(request)) +{ + response.EnsureSuccessStatusCode(); + var body = await response.Content.ReadAsStringAsync(); + Console.WriteLine(body); +} diff --git a/test/fixtures/output/csharp/httpclient/cookies.cs b/test/fixtures/output/csharp/httpclient/cookies.cs new file mode 100644 index 000000000..3ebced64e --- /dev/null +++ b/test/fixtures/output/csharp/httpclient/cookies.cs @@ -0,0 +1,20 @@ +var clientHandler = new HttpClientHandler +{ + UseCookies = false, +}; +var client = new HttpClient(clientHandler); +var request = new HttpRequestMessage +{ + Method = HttpMethod.Post, + RequestUri = new Uri("http://mockbin.com/har"), + Headers = + { + { "cookie", "foo=bar; bar=baz" }, + }, +}; +using (var response = await client.SendAsync(request)) +{ + response.EnsureSuccessStatusCode(); + var body = await response.Content.ReadAsStringAsync(); + Console.WriteLine(body); +} diff --git a/test/fixtures/output/csharp/httpclient/custom-method.cs b/test/fixtures/output/csharp/httpclient/custom-method.cs new file mode 100644 index 000000000..a82173dac --- /dev/null +++ b/test/fixtures/output/csharp/httpclient/custom-method.cs @@ -0,0 +1,12 @@ +var client = new HttpClient(); +var request = new HttpRequestMessage +{ + Method = new HttpMethod("PROPFIND"), + RequestUri = new Uri("http://mockbin.com/har"), +}; +using (var response = await client.SendAsync(request)) +{ + response.EnsureSuccessStatusCode(); + var body = await response.Content.ReadAsStringAsync(); + Console.WriteLine(body); +} diff --git a/test/fixtures/output/csharp/httpclient/full.cs b/test/fixtures/output/csharp/httpclient/full.cs new file mode 100644 index 000000000..f1ae328b2 --- /dev/null +++ b/test/fixtures/output/csharp/httpclient/full.cs @@ -0,0 +1,25 @@ +var clientHandler = new HttpClientHandler +{ + UseCookies = false, +}; +var client = new HttpClient(clientHandler); +var request = new HttpRequestMessage +{ + Method = HttpMethod.Post, + RequestUri = new Uri("http://mockbin.com/har?foo=bar&foo=baz&baz=abc&key=value"), + Headers = + { + { "cookie", "foo=bar; bar=baz" }, + { "accept", "application/json" }, + }, + Content = new FormUrlEncodedContent(new Dictionary + { + { "foo", "bar" }, + }), +}; +using (var response = await client.SendAsync(request)) +{ + response.EnsureSuccessStatusCode(); + var body = await response.Content.ReadAsStringAsync(); + Console.WriteLine(body); +} diff --git a/test/fixtures/output/csharp/httpclient/headers.cs b/test/fixtures/output/csharp/httpclient/headers.cs new file mode 100644 index 000000000..ad317d71e --- /dev/null +++ b/test/fixtures/output/csharp/httpclient/headers.cs @@ -0,0 +1,17 @@ +var client = new HttpClient(); +var request = new HttpRequestMessage +{ + Method = HttpMethod.Get, + RequestUri = new Uri("http://mockbin.com/har"), + Headers = + { + { "accept", "application/json" }, + { "x-foo", "Bar" }, + }, +}; +using (var response = await client.SendAsync(request)) +{ + response.EnsureSuccessStatusCode(); + var body = await response.Content.ReadAsStringAsync(); + Console.WriteLine(body); +} diff --git a/test/fixtures/output/csharp/httpclient/https.cs b/test/fixtures/output/csharp/httpclient/https.cs new file mode 100644 index 000000000..c36e055ef --- /dev/null +++ b/test/fixtures/output/csharp/httpclient/https.cs @@ -0,0 +1,12 @@ +var client = new HttpClient(); +var request = new HttpRequestMessage +{ + Method = HttpMethod.Get, + RequestUri = new Uri("https://mockbin.com/har"), +}; +using (var response = await client.SendAsync(request)) +{ + response.EnsureSuccessStatusCode(); + var body = await response.Content.ReadAsStringAsync(); + Console.WriteLine(body); +} diff --git a/test/fixtures/output/csharp/httpclient/jsonObj-multiline.cs b/test/fixtures/output/csharp/httpclient/jsonObj-multiline.cs new file mode 100644 index 000000000..dbd732960 --- /dev/null +++ b/test/fixtures/output/csharp/httpclient/jsonObj-multiline.cs @@ -0,0 +1,19 @@ +var client = new HttpClient(); +var request = new HttpRequestMessage +{ + Method = HttpMethod.Post, + RequestUri = new Uri("http://mockbin.com/har"), + Content = new StringContent("{\n \"foo\": \"bar\"\n}") + { + Headers = + { + ContentType = new MediaTypeHeaderValue("application/json") + } + } +}; +using (var response = await client.SendAsync(request)) +{ + response.EnsureSuccessStatusCode(); + var body = await response.Content.ReadAsStringAsync(); + Console.WriteLine(body); +} diff --git a/test/fixtures/output/csharp/httpclient/jsonObj-null-value.cs b/test/fixtures/output/csharp/httpclient/jsonObj-null-value.cs new file mode 100644 index 000000000..f2451a477 --- /dev/null +++ b/test/fixtures/output/csharp/httpclient/jsonObj-null-value.cs @@ -0,0 +1,19 @@ +var client = new HttpClient(); +var request = new HttpRequestMessage +{ + Method = HttpMethod.Post, + RequestUri = new Uri("http://mockbin.com/har"), + Content = new StringContent("{\"foo\":null}") + { + Headers = + { + ContentType = new MediaTypeHeaderValue("application/json") + } + } +}; +using (var response = await client.SendAsync(request)) +{ + response.EnsureSuccessStatusCode(); + var body = await response.Content.ReadAsStringAsync(); + Console.WriteLine(body); +} diff --git a/test/fixtures/output/csharp/httpclient/multipart-data.cs b/test/fixtures/output/csharp/httpclient/multipart-data.cs new file mode 100644 index 000000000..cba898143 --- /dev/null +++ b/test/fixtures/output/csharp/httpclient/multipart-data.cs @@ -0,0 +1,27 @@ +var client = new HttpClient(); +var request = new HttpRequestMessage +{ + Method = HttpMethod.Post, + RequestUri = new Uri("http://mockbin.com/har"), + Content = new MultipartFormDataContent + { + new StringContent("Hello World") + { + Headers = + { + ContentType = new MediaTypeHeaderValue("text/plain"), + ContentDisposition = new ContentDispositionHeaderValue("form-data") + { + Name = "foo", + FileName = "hello.txt", + } + } + }, + }, +}; +using (var response = await client.SendAsync(request)) +{ + response.EnsureSuccessStatusCode(); + var body = await response.Content.ReadAsStringAsync(); + Console.WriteLine(body); +} diff --git a/test/fixtures/output/csharp/httpclient/multipart-file.cs b/test/fixtures/output/csharp/httpclient/multipart-file.cs new file mode 100644 index 000000000..b150479b6 --- /dev/null +++ b/test/fixtures/output/csharp/httpclient/multipart-file.cs @@ -0,0 +1,27 @@ +var client = new HttpClient(); +var request = new HttpRequestMessage +{ + Method = HttpMethod.Post, + RequestUri = new Uri("http://mockbin.com/har"), + Content = new MultipartFormDataContent + { + new StringContent("") + { + Headers = + { + ContentType = new MediaTypeHeaderValue("text/plain"), + ContentDisposition = new ContentDispositionHeaderValue("form-data") + { + Name = "foo", + FileName = "test/fixtures/files/hello.txt", + } + } + }, + }, +}; +using (var response = await client.SendAsync(request)) +{ + response.EnsureSuccessStatusCode(); + var body = await response.Content.ReadAsStringAsync(); + Console.WriteLine(body); +} diff --git a/test/fixtures/output/csharp/httpclient/multipart-form-data.cs b/test/fixtures/output/csharp/httpclient/multipart-form-data.cs new file mode 100644 index 000000000..dafa4a1ff --- /dev/null +++ b/test/fixtures/output/csharp/httpclient/multipart-form-data.cs @@ -0,0 +1,25 @@ +var client = new HttpClient(); +var request = new HttpRequestMessage +{ + Method = HttpMethod.Post, + RequestUri = new Uri("http://mockbin.com/har"), + Content = new MultipartFormDataContent + { + new StringContent("bar") + { + Headers = + { + ContentDisposition = new ContentDispositionHeaderValue("form-data") + { + Name = "foo", + } + } + }, + }, +}; +using (var response = await client.SendAsync(request)) +{ + response.EnsureSuccessStatusCode(); + var body = await response.Content.ReadAsStringAsync(); + Console.WriteLine(body); +} diff --git a/test/fixtures/output/csharp/httpclient/nested.cs b/test/fixtures/output/csharp/httpclient/nested.cs new file mode 100644 index 000000000..0024a37e6 --- /dev/null +++ b/test/fixtures/output/csharp/httpclient/nested.cs @@ -0,0 +1,12 @@ +var client = new HttpClient(); +var request = new HttpRequestMessage +{ + Method = HttpMethod.Get, + RequestUri = new Uri("http://mockbin.com/har?foo%5Bbar%5D=baz%2Czap&fiz=buz&key=value"), +}; +using (var response = await client.SendAsync(request)) +{ + response.EnsureSuccessStatusCode(); + var body = await response.Content.ReadAsStringAsync(); + Console.WriteLine(body); +} diff --git a/test/fixtures/output/csharp/httpclient/query.cs b/test/fixtures/output/csharp/httpclient/query.cs new file mode 100644 index 000000000..702642147 --- /dev/null +++ b/test/fixtures/output/csharp/httpclient/query.cs @@ -0,0 +1,12 @@ +var client = new HttpClient(); +var request = new HttpRequestMessage +{ + Method = HttpMethod.Get, + RequestUri = new Uri("http://mockbin.com/har?foo=bar&foo=baz&baz=abc&key=value"), +}; +using (var response = await client.SendAsync(request)) +{ + response.EnsureSuccessStatusCode(); + var body = await response.Content.ReadAsStringAsync(); + Console.WriteLine(body); +} diff --git a/test/fixtures/output/csharp/httpclient/short.cs b/test/fixtures/output/csharp/httpclient/short.cs new file mode 100644 index 000000000..265b1967d --- /dev/null +++ b/test/fixtures/output/csharp/httpclient/short.cs @@ -0,0 +1,12 @@ +var client = new HttpClient(); +var request = new HttpRequestMessage +{ + Method = HttpMethod.Get, + RequestUri = new Uri("http://mockbin.com/har"), +}; +using (var response = await client.SendAsync(request)) +{ + response.EnsureSuccessStatusCode(); + var body = await response.Content.ReadAsStringAsync(); + Console.WriteLine(body); +} diff --git a/test/fixtures/output/csharp/httpclient/text-plain.cs b/test/fixtures/output/csharp/httpclient/text-plain.cs new file mode 100644 index 000000000..cf56fa86f --- /dev/null +++ b/test/fixtures/output/csharp/httpclient/text-plain.cs @@ -0,0 +1,19 @@ +var client = new HttpClient(); +var request = new HttpRequestMessage +{ + Method = HttpMethod.Post, + RequestUri = new Uri("http://mockbin.com/har"), + Content = new StringContent("Hello World") + { + Headers = + { + ContentType = new MediaTypeHeaderValue("text/plain") + } + } +}; +using (var response = await client.SendAsync(request)) +{ + response.EnsureSuccessStatusCode(); + var body = await response.Content.ReadAsStringAsync(); + Console.WriteLine(body); +} diff --git a/test/fixtures/output/csharp/restsharp/multipart-form-data.cs b/test/fixtures/output/csharp/restsharp/multipart-form-data.cs index 1ad23e37a..aae6aa514 100644 --- a/test/fixtures/output/csharp/restsharp/multipart-form-data.cs +++ b/test/fixtures/output/csharp/restsharp/multipart-form-data.cs @@ -1,5 +1,5 @@ var client = new RestClient("http://mockbin.com/har"); var request = new RestRequest(Method.POST); -request.AddHeader("content-type", "multipart/form-data; boundary=---011000010111000001101001"); +request.AddHeader("Content-Type", "multipart/form-data; boundary=---011000010111000001101001"); request.AddParameter("multipart/form-data; boundary=---011000010111000001101001", "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"foo\"\r\n\r\nbar\r\n-----011000010111000001101001--\r\n", ParameterType.RequestBody); IRestResponse response = client.Execute(request); diff --git a/test/fixtures/output/csharp/restsharp/nested.cs b/test/fixtures/output/csharp/restsharp/nested.cs new file mode 100644 index 000000000..fbc0fd775 --- /dev/null +++ b/test/fixtures/output/csharp/restsharp/nested.cs @@ -0,0 +1,3 @@ +var client = new RestClient("http://mockbin.com/har?foo%5Bbar%5D=baz%2Czap&fiz=buz&key=value"); +var request = new RestRequest(Method.GET); +IRestResponse response = client.Execute(request); diff --git a/test/fixtures/output/go/native/multipart-form-data.go b/test/fixtures/output/go/native/multipart-form-data.go index d587d473f..cf31548a9 100644 --- a/test/fixtures/output/go/native/multipart-form-data.go +++ b/test/fixtures/output/go/native/multipart-form-data.go @@ -15,7 +15,7 @@ func main() { req, _ := http.NewRequest("POST", url, payload) - req.Header.Add("content-type", "multipart/form-data; boundary=---011000010111000001101001") + req.Header.Add("Content-Type", "multipart/form-data; boundary=---011000010111000001101001") res, _ := http.DefaultClient.Do(req) diff --git a/test/fixtures/output/go/native/nested.go b/test/fixtures/output/go/native/nested.go new file mode 100644 index 000000000..f392179d7 --- /dev/null +++ b/test/fixtures/output/go/native/nested.go @@ -0,0 +1,23 @@ +package main + +import ( + "fmt" + "net/http" + "io/ioutil" +) + +func main() { + + url := "http://mockbin.com/har?foo%5Bbar%5D=baz%2Czap&fiz=buz&key=value" + + req, _ := http.NewRequest("GET", url, nil) + + res, _ := http.DefaultClient.Do(req) + + defer res.Body.Close() + body, _ := ioutil.ReadAll(res.Body) + + fmt.Println(res) + fmt.Println(string(body)) + +} diff --git a/test/fixtures/output/http/1.1/application-form-encoded b/test/fixtures/output/http/1.1/application-form-encoded index ce1fea04b..723d94a90 100644 --- a/test/fixtures/output/http/1.1/application-form-encoded +++ b/test/fixtures/output/http/1.1/application-form-encoded @@ -1,6 +1,6 @@ -POST /har HTTP/1.1 -Content-Type: application/x-www-form-urlencoded -Host: mockbin.com -Content-Length: 19 - +POST /har HTTP/1.1 +Content-Type: application/x-www-form-urlencoded +Host: mockbin.com +Content-Length: 19 + foo=bar&hello=world diff --git a/test/fixtures/output/http/1.1/application-json b/test/fixtures/output/http/1.1/application-json index 6b2808eb0..ee65b5469 100644 --- a/test/fixtures/output/http/1.1/application-json +++ b/test/fixtures/output/http/1.1/application-json @@ -1,6 +1,6 @@ -POST /har HTTP/1.1 -Content-Type: application/json -Host: mockbin.com -Content-Length: 118 - +POST /har HTTP/1.1 +Content-Type: application/json +Host: mockbin.com +Content-Length: 118 + {"number":1,"string":"f\"oo","arr":[1,2,3],"nested":{"a":"b"},"arr_mix":[1,"a",{"arr_mix_nested":{}}],"boolean":false} diff --git a/test/fixtures/output/http/1.1/cookies b/test/fixtures/output/http/1.1/cookies index 6a2413d9a..15945bcc8 100644 --- a/test/fixtures/output/http/1.1/cookies +++ b/test/fixtures/output/http/1.1/cookies @@ -1,5 +1,5 @@ -POST /har HTTP/1.1 -Cookie: foo=bar; bar=baz -Host: mockbin.com - +POST /har HTTP/1.1 +Cookie: foo=bar; bar=baz +Host: mockbin.com + diff --git a/test/fixtures/output/http/1.1/custom-method b/test/fixtures/output/http/1.1/custom-method index 5a818ed57..76f546524 100644 --- a/test/fixtures/output/http/1.1/custom-method +++ b/test/fixtures/output/http/1.1/custom-method @@ -1,4 +1,4 @@ -PROPFIND /har HTTP/1.1 -Host: mockbin.com - +PROPFIND /har HTTP/1.1 +Host: mockbin.com + diff --git a/test/fixtures/output/http/1.1/full b/test/fixtures/output/http/1.1/full index 1a2f499d9..d4d41ecff 100644 --- a/test/fixtures/output/http/1.1/full +++ b/test/fixtures/output/http/1.1/full @@ -1,8 +1,8 @@ -POST /har?foo=bar&foo=baz&baz=abc&key=value HTTP/1.1 -Cookie: foo=bar; bar=baz -Accept: application/json -Content-Type: application/x-www-form-urlencoded -Host: mockbin.com -Content-Length: 7 - +POST /har?foo=bar&foo=baz&baz=abc&key=value HTTP/1.1 +Cookie: foo=bar; bar=baz +Accept: application/json +Content-Type: application/x-www-form-urlencoded +Host: mockbin.com +Content-Length: 7 + foo=bar diff --git a/test/fixtures/output/http/1.1/headers b/test/fixtures/output/http/1.1/headers index 0a23b57d9..7bde2bcc7 100644 --- a/test/fixtures/output/http/1.1/headers +++ b/test/fixtures/output/http/1.1/headers @@ -1,6 +1,6 @@ -GET /har HTTP/1.1 -Accept: application/json -X-Foo: Bar -Host: mockbin.com - +GET /har HTTP/1.1 +Accept: application/json +X-Foo: Bar +Host: mockbin.com + diff --git a/test/fixtures/output/http/1.1/https b/test/fixtures/output/http/1.1/https index 854df52c9..122711d7a 100644 --- a/test/fixtures/output/http/1.1/https +++ b/test/fixtures/output/http/1.1/https @@ -1,4 +1,4 @@ -GET /har HTTP/1.1 -Host: mockbin.com - +GET /har HTTP/1.1 +Host: mockbin.com + diff --git a/test/fixtures/output/http/1.1/jsonObj-multiline b/test/fixtures/output/http/1.1/jsonObj-multiline index 4e48138d1..ebc26ade1 100644 --- a/test/fixtures/output/http/1.1/jsonObj-multiline +++ b/test/fixtures/output/http/1.1/jsonObj-multiline @@ -1,8 +1,8 @@ -POST /har HTTP/1.1 -Content-Type: application/json -Host: mockbin.com -Content-Length: 18 - +POST /har HTTP/1.1 +Content-Type: application/json +Host: mockbin.com +Content-Length: 18 + { "foo": "bar" } diff --git a/test/fixtures/output/http/1.1/jsonObj-null-value b/test/fixtures/output/http/1.1/jsonObj-null-value index e879e2298..240a57bce 100644 --- a/test/fixtures/output/http/1.1/jsonObj-null-value +++ b/test/fixtures/output/http/1.1/jsonObj-null-value @@ -1,6 +1,6 @@ -POST /har HTTP/1.1 -Content-Type: application/json -Host: mockbin.com -Content-Length: 12 - +POST /har HTTP/1.1 +Content-Type: application/json +Host: mockbin.com +Content-Length: 12 + {"foo":null} diff --git a/test/fixtures/output/http/1.1/multipart-data b/test/fixtures/output/http/1.1/multipart-data index 4a2b44469..cbe1c5f5a 100644 --- a/test/fixtures/output/http/1.1/multipart-data +++ b/test/fixtures/output/http/1.1/multipart-data @@ -1,10 +1,11 @@ -POST /har HTTP/1.1 -Content-Type: multipart/form-data; boundary=---011000010111000001101001 -Host: mockbin.com -Content-Length: 136 - ------011000010111000001101001 -Content-Disposition: form-data; name="foo"; filename="hello.txt" -Content-Type: text/plain - +POST /har HTTP/1.1 +Content-Type: multipart/form-data; boundary=---011000010111000001101001 +Host: mockbin.com +Content-Length: 171 + +-----011000010111000001101001 +Content-Disposition: form-data; name="foo"; filename="hello.txt" +Content-Type: text/plain + Hello World +-----011000010111000001101001-- diff --git a/test/fixtures/output/http/1.1/multipart-file b/test/fixtures/output/http/1.1/multipart-file index 16a76e1ae..be0776f19 100644 --- a/test/fixtures/output/http/1.1/multipart-file +++ b/test/fixtures/output/http/1.1/multipart-file @@ -1,10 +1,11 @@ -POST /har HTTP/1.1 -Content-Type: multipart/form-data; boundary=---011000010111000001101001 -Host: mockbin.com -Content-Length: 125 - ------011000010111000001101001 -Content-Disposition: form-data; name="foo"; filename="hello.txt" -Content-Type: text/plain - +POST /har HTTP/1.1 +Content-Type: multipart/form-data; boundary=---011000010111000001101001 +Host: mockbin.com +Content-Length: 160 +-----011000010111000001101001 +Content-Disposition: form-data; name="foo"; filename="hello.txt" +Content-Type: text/plain + + +-----011000010111000001101001-- diff --git a/test/fixtures/output/http/1.1/multipart-form-data b/test/fixtures/output/http/1.1/multipart-form-data index 752acd4c9..5fd60b6f4 100644 --- a/test/fixtures/output/http/1.1/multipart-form-data +++ b/test/fixtures/output/http/1.1/multipart-form-data @@ -1,9 +1,10 @@ -POST /har HTTP/1.1 -Content-Type: multipart/form-data; boundary=---011000010111000001101001 -Host: mockbin.com -Content-Length: 80 - ------011000010111000001101001 -Content-Disposition: form-data; name="foo" - +POST /har HTTP/1.1 +Content-Type: multipart/form-data; boundary=---011000010111000001101001 +Host: mockbin.com +Content-Length: 115 + +-----011000010111000001101001 +Content-Disposition: form-data; name="foo" + bar +-----011000010111000001101001-- diff --git a/test/fixtures/output/http/1.1/nested b/test/fixtures/output/http/1.1/nested new file mode 100644 index 000000000..04944865c --- /dev/null +++ b/test/fixtures/output/http/1.1/nested @@ -0,0 +1,4 @@ +GET /har?foo%5Bbar%5D=baz%2Czap&fiz=buz&key=value HTTP/1.1 +Host: mockbin.com + + diff --git a/test/fixtures/output/http/1.1/query b/test/fixtures/output/http/1.1/query index 8217c2361..5d2fd5d42 100644 --- a/test/fixtures/output/http/1.1/query +++ b/test/fixtures/output/http/1.1/query @@ -1,4 +1,4 @@ -GET /har?foo=bar&foo=baz&baz=abc&key=value HTTP/1.1 -Host: mockbin.com - +GET /har?foo=bar&foo=baz&baz=abc&key=value HTTP/1.1 +Host: mockbin.com + diff --git a/test/fixtures/output/http/1.1/short b/test/fixtures/output/http/1.1/short index 854df52c9..122711d7a 100644 --- a/test/fixtures/output/http/1.1/short +++ b/test/fixtures/output/http/1.1/short @@ -1,4 +1,4 @@ -GET /har HTTP/1.1 -Host: mockbin.com - +GET /har HTTP/1.1 +Host: mockbin.com + diff --git a/test/fixtures/output/http/1.1/text-plain b/test/fixtures/output/http/1.1/text-plain index e0db5c854..c341a43ac 100644 --- a/test/fixtures/output/http/1.1/text-plain +++ b/test/fixtures/output/http/1.1/text-plain @@ -1,6 +1,6 @@ -POST /har HTTP/1.1 -Content-Type: text/plain -Host: mockbin.com -Content-Length: 11 - +POST /har HTTP/1.1 +Content-Type: text/plain +Host: mockbin.com +Content-Length: 11 + Hello World diff --git a/test/fixtures/output/java/asynchttp/application-form-encoded.java b/test/fixtures/output/java/asynchttp/application-form-encoded.java new file mode 100644 index 000000000..b4d515b1c --- /dev/null +++ b/test/fixtures/output/java/asynchttp/application-form-encoded.java @@ -0,0 +1,10 @@ +AsyncHttpClient client = new DefaultAsyncHttpClient(); +client.prepare("POST", "http://mockbin.com/har") + .setHeader("content-type", "application/x-www-form-urlencoded") + .setBody("foo=bar&hello=world") + .execute() + .toCompletableFuture() + .thenAccept(System.out::println) + .join(); + +client.close(); diff --git a/test/fixtures/output/java/asynchttp/application-json.java b/test/fixtures/output/java/asynchttp/application-json.java new file mode 100644 index 000000000..1633e36c9 --- /dev/null +++ b/test/fixtures/output/java/asynchttp/application-json.java @@ -0,0 +1,10 @@ +AsyncHttpClient client = new DefaultAsyncHttpClient(); +client.prepare("POST", "http://mockbin.com/har") + .setHeader("content-type", "application/json") + .setBody("{\"number\":1,\"string\":\"f\\\"oo\",\"arr\":[1,2,3],\"nested\":{\"a\":\"b\"},\"arr_mix\":[1,\"a\",{\"arr_mix_nested\":{}}],\"boolean\":false}") + .execute() + .toCompletableFuture() + .thenAccept(System.out::println) + .join(); + +client.close(); diff --git a/test/fixtures/output/java/asynchttp/cookies.java b/test/fixtures/output/java/asynchttp/cookies.java new file mode 100644 index 000000000..62b6eee43 --- /dev/null +++ b/test/fixtures/output/java/asynchttp/cookies.java @@ -0,0 +1,9 @@ +AsyncHttpClient client = new DefaultAsyncHttpClient(); +client.prepare("POST", "http://mockbin.com/har") + .setHeader("cookie", "foo=bar; bar=baz") + .execute() + .toCompletableFuture() + .thenAccept(System.out::println) + .join(); + +client.close(); diff --git a/test/fixtures/output/java/asynchttp/custom-method.java b/test/fixtures/output/java/asynchttp/custom-method.java new file mode 100644 index 000000000..be1e9fc46 --- /dev/null +++ b/test/fixtures/output/java/asynchttp/custom-method.java @@ -0,0 +1,8 @@ +AsyncHttpClient client = new DefaultAsyncHttpClient(); +client.prepare("PROPFIND", "http://mockbin.com/har") + .execute() + .toCompletableFuture() + .thenAccept(System.out::println) + .join(); + +client.close(); diff --git a/test/fixtures/output/java/asynchttp/full.java b/test/fixtures/output/java/asynchttp/full.java new file mode 100644 index 000000000..9fd2c6ffb --- /dev/null +++ b/test/fixtures/output/java/asynchttp/full.java @@ -0,0 +1,12 @@ +AsyncHttpClient client = new DefaultAsyncHttpClient(); +client.prepare("POST", "http://mockbin.com/har?foo=bar&foo=baz&baz=abc&key=value") + .setHeader("cookie", "foo=bar; bar=baz") + .setHeader("accept", "application/json") + .setHeader("content-type", "application/x-www-form-urlencoded") + .setBody("foo=bar") + .execute() + .toCompletableFuture() + .thenAccept(System.out::println) + .join(); + +client.close(); diff --git a/test/fixtures/output/java/asynchttp/headers.java b/test/fixtures/output/java/asynchttp/headers.java new file mode 100644 index 000000000..472fe09bd --- /dev/null +++ b/test/fixtures/output/java/asynchttp/headers.java @@ -0,0 +1,10 @@ +AsyncHttpClient client = new DefaultAsyncHttpClient(); +client.prepare("GET", "http://mockbin.com/har") + .setHeader("accept", "application/json") + .setHeader("x-foo", "Bar") + .execute() + .toCompletableFuture() + .thenAccept(System.out::println) + .join(); + +client.close(); diff --git a/test/fixtures/output/java/asynchttp/https.java b/test/fixtures/output/java/asynchttp/https.java new file mode 100644 index 000000000..779198c27 --- /dev/null +++ b/test/fixtures/output/java/asynchttp/https.java @@ -0,0 +1,8 @@ +AsyncHttpClient client = new DefaultAsyncHttpClient(); +client.prepare("GET", "https://mockbin.com/har") + .execute() + .toCompletableFuture() + .thenAccept(System.out::println) + .join(); + +client.close(); diff --git a/test/fixtures/output/java/asynchttp/jsonObj-multiline.java b/test/fixtures/output/java/asynchttp/jsonObj-multiline.java new file mode 100644 index 000000000..25f44e5cb --- /dev/null +++ b/test/fixtures/output/java/asynchttp/jsonObj-multiline.java @@ -0,0 +1,10 @@ +AsyncHttpClient client = new DefaultAsyncHttpClient(); +client.prepare("POST", "http://mockbin.com/har") + .setHeader("content-type", "application/json") + .setBody("{\n \"foo\": \"bar\"\n}") + .execute() + .toCompletableFuture() + .thenAccept(System.out::println) + .join(); + +client.close(); diff --git a/test/fixtures/output/java/asynchttp/jsonObj-null-value.java b/test/fixtures/output/java/asynchttp/jsonObj-null-value.java new file mode 100644 index 000000000..6d299feb9 --- /dev/null +++ b/test/fixtures/output/java/asynchttp/jsonObj-null-value.java @@ -0,0 +1,10 @@ +AsyncHttpClient client = new DefaultAsyncHttpClient(); +client.prepare("POST", "http://mockbin.com/har") + .setHeader("content-type", "application/json") + .setBody("{\"foo\":null}") + .execute() + .toCompletableFuture() + .thenAccept(System.out::println) + .join(); + +client.close(); diff --git a/test/fixtures/output/java/asynchttp/multipart-data.java b/test/fixtures/output/java/asynchttp/multipart-data.java new file mode 100644 index 000000000..50c9f504d --- /dev/null +++ b/test/fixtures/output/java/asynchttp/multipart-data.java @@ -0,0 +1,10 @@ +AsyncHttpClient client = new DefaultAsyncHttpClient(); +client.prepare("POST", "http://mockbin.com/har") + .setHeader("content-type", "multipart/form-data; boundary=---011000010111000001101001") + .setBody("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"foo\"; filename=\"hello.txt\"\r\nContent-Type: text/plain\r\n\r\nHello World\r\n-----011000010111000001101001--\r\n") + .execute() + .toCompletableFuture() + .thenAccept(System.out::println) + .join(); + +client.close(); diff --git a/test/fixtures/output/java/asynchttp/multipart-file.java b/test/fixtures/output/java/asynchttp/multipart-file.java new file mode 100644 index 000000000..cee440818 --- /dev/null +++ b/test/fixtures/output/java/asynchttp/multipart-file.java @@ -0,0 +1,10 @@ +AsyncHttpClient client = new DefaultAsyncHttpClient(); +client.prepare("POST", "http://mockbin.com/har") + .setHeader("content-type", "multipart/form-data; boundary=---011000010111000001101001") + .setBody("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"foo\"; filename=\"hello.txt\"\r\nContent-Type: text/plain\r\n\r\n\r\n-----011000010111000001101001--\r\n") + .execute() + .toCompletableFuture() + .thenAccept(System.out::println) + .join(); + +client.close(); diff --git a/test/fixtures/output/java/asynchttp/multipart-form-data.java b/test/fixtures/output/java/asynchttp/multipart-form-data.java new file mode 100644 index 000000000..90c80c631 --- /dev/null +++ b/test/fixtures/output/java/asynchttp/multipart-form-data.java @@ -0,0 +1,10 @@ +AsyncHttpClient client = new DefaultAsyncHttpClient(); +client.prepare("POST", "http://mockbin.com/har") + .setHeader("Content-Type", "multipart/form-data; boundary=---011000010111000001101001") + .setBody("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"foo\"\r\n\r\nbar\r\n-----011000010111000001101001--\r\n") + .execute() + .toCompletableFuture() + .thenAccept(System.out::println) + .join(); + +client.close(); diff --git a/test/fixtures/output/java/asynchttp/nested.java b/test/fixtures/output/java/asynchttp/nested.java new file mode 100644 index 000000000..ae76e58a1 --- /dev/null +++ b/test/fixtures/output/java/asynchttp/nested.java @@ -0,0 +1,8 @@ +AsyncHttpClient client = new DefaultAsyncHttpClient(); +client.prepare("GET", "http://mockbin.com/har?foo%5Bbar%5D=baz%2Czap&fiz=buz&key=value") + .execute() + .toCompletableFuture() + .thenAccept(System.out::println) + .join(); + +client.close(); diff --git a/test/fixtures/output/java/asynchttp/query.java b/test/fixtures/output/java/asynchttp/query.java new file mode 100644 index 000000000..524cbd27a --- /dev/null +++ b/test/fixtures/output/java/asynchttp/query.java @@ -0,0 +1,8 @@ +AsyncHttpClient client = new DefaultAsyncHttpClient(); +client.prepare("GET", "http://mockbin.com/har?foo=bar&foo=baz&baz=abc&key=value") + .execute() + .toCompletableFuture() + .thenAccept(System.out::println) + .join(); + +client.close(); diff --git a/test/fixtures/output/java/asynchttp/short.java b/test/fixtures/output/java/asynchttp/short.java new file mode 100644 index 000000000..0ab245f40 --- /dev/null +++ b/test/fixtures/output/java/asynchttp/short.java @@ -0,0 +1,8 @@ +AsyncHttpClient client = new DefaultAsyncHttpClient(); +client.prepare("GET", "http://mockbin.com/har") + .execute() + .toCompletableFuture() + .thenAccept(System.out::println) + .join(); + +client.close(); diff --git a/test/fixtures/output/java/asynchttp/text-plain.java b/test/fixtures/output/java/asynchttp/text-plain.java new file mode 100644 index 000000000..4b2cf1a61 --- /dev/null +++ b/test/fixtures/output/java/asynchttp/text-plain.java @@ -0,0 +1,10 @@ +AsyncHttpClient client = new DefaultAsyncHttpClient(); +client.prepare("POST", "http://mockbin.com/har") + .setHeader("content-type", "text/plain") + .setBody("Hello World") + .execute() + .toCompletableFuture() + .thenAccept(System.out::println) + .join(); + +client.close(); diff --git a/test/fixtures/output/java/nethttp/application-form-encoded.java b/test/fixtures/output/java/nethttp/application-form-encoded.java new file mode 100644 index 000000000..bb31130e1 --- /dev/null +++ b/test/fixtures/output/java/nethttp/application-form-encoded.java @@ -0,0 +1,7 @@ +HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create("http://mockbin.com/har")) + .header("content-type", "application/x-www-form-urlencoded") + .method("POST", HttpRequest.BodyPublishers.ofString("foo=bar&hello=world")) + .build(); +HttpResponse response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()); +System.out.println(response.body()); diff --git a/test/fixtures/output/java/nethttp/application-json.java b/test/fixtures/output/java/nethttp/application-json.java new file mode 100644 index 000000000..60e2402b8 --- /dev/null +++ b/test/fixtures/output/java/nethttp/application-json.java @@ -0,0 +1,7 @@ +HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create("http://mockbin.com/har")) + .header("content-type", "application/json") + .method("POST", HttpRequest.BodyPublishers.ofString("{\"number\":1,\"string\":\"f\\\"oo\",\"arr\":[1,2,3],\"nested\":{\"a\":\"b\"},\"arr_mix\":[1,\"a\",{\"arr_mix_nested\":{}}],\"boolean\":false}")) + .build(); +HttpResponse response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()); +System.out.println(response.body()); diff --git a/test/fixtures/output/java/nethttp/cookies.java b/test/fixtures/output/java/nethttp/cookies.java new file mode 100644 index 000000000..7aa98347d --- /dev/null +++ b/test/fixtures/output/java/nethttp/cookies.java @@ -0,0 +1,7 @@ +HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create("http://mockbin.com/har")) + .header("cookie", "foo=bar; bar=baz") + .method("POST", HttpRequest.BodyPublishers.noBody()) + .build(); +HttpResponse response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()); +System.out.println(response.body()); diff --git a/test/fixtures/output/java/nethttp/custom-method.java b/test/fixtures/output/java/nethttp/custom-method.java new file mode 100644 index 000000000..07e71ab10 --- /dev/null +++ b/test/fixtures/output/java/nethttp/custom-method.java @@ -0,0 +1,6 @@ +HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create("http://mockbin.com/har")) + .method("PROPFIND", HttpRequest.BodyPublishers.noBody()) + .build(); +HttpResponse response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()); +System.out.println(response.body()); diff --git a/test/fixtures/output/java/nethttp/full.java b/test/fixtures/output/java/nethttp/full.java new file mode 100644 index 000000000..b6e02eedd --- /dev/null +++ b/test/fixtures/output/java/nethttp/full.java @@ -0,0 +1,9 @@ +HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create("http://mockbin.com/har?foo=bar&foo=baz&baz=abc&key=value")) + .header("cookie", "foo=bar; bar=baz") + .header("accept", "application/json") + .header("content-type", "application/x-www-form-urlencoded") + .method("POST", HttpRequest.BodyPublishers.ofString("foo=bar")) + .build(); +HttpResponse response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()); +System.out.println(response.body()); diff --git a/test/fixtures/output/java/nethttp/headers.java b/test/fixtures/output/java/nethttp/headers.java new file mode 100644 index 000000000..2e8a09f87 --- /dev/null +++ b/test/fixtures/output/java/nethttp/headers.java @@ -0,0 +1,8 @@ +HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create("http://mockbin.com/har")) + .header("accept", "application/json") + .header("x-foo", "Bar") + .method("GET", HttpRequest.BodyPublishers.noBody()) + .build(); +HttpResponse response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()); +System.out.println(response.body()); diff --git a/test/fixtures/output/java/nethttp/https.java b/test/fixtures/output/java/nethttp/https.java new file mode 100644 index 000000000..a32c4305b --- /dev/null +++ b/test/fixtures/output/java/nethttp/https.java @@ -0,0 +1,6 @@ +HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create("https://mockbin.com/har")) + .method("GET", HttpRequest.BodyPublishers.noBody()) + .build(); +HttpResponse response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()); +System.out.println(response.body()); diff --git a/test/fixtures/output/java/nethttp/jsonObj-multiline.java b/test/fixtures/output/java/nethttp/jsonObj-multiline.java new file mode 100644 index 000000000..2a76e6bd6 --- /dev/null +++ b/test/fixtures/output/java/nethttp/jsonObj-multiline.java @@ -0,0 +1,7 @@ +HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create("http://mockbin.com/har")) + .header("content-type", "application/json") + .method("POST", HttpRequest.BodyPublishers.ofString("{\n \"foo\": \"bar\"\n}")) + .build(); +HttpResponse response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()); +System.out.println(response.body()); diff --git a/test/fixtures/output/java/nethttp/jsonObj-null-value.java b/test/fixtures/output/java/nethttp/jsonObj-null-value.java new file mode 100644 index 000000000..14cc4f3c8 --- /dev/null +++ b/test/fixtures/output/java/nethttp/jsonObj-null-value.java @@ -0,0 +1,7 @@ +HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create("http://mockbin.com/har")) + .header("content-type", "application/json") + .method("POST", HttpRequest.BodyPublishers.ofString("{\"foo\":null}")) + .build(); +HttpResponse response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()); +System.out.println(response.body()); diff --git a/test/fixtures/output/java/nethttp/multipart-data.java b/test/fixtures/output/java/nethttp/multipart-data.java new file mode 100644 index 000000000..f4cf85bfb --- /dev/null +++ b/test/fixtures/output/java/nethttp/multipart-data.java @@ -0,0 +1,7 @@ +HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create("http://mockbin.com/har")) + .header("content-type", "multipart/form-data; boundary=---011000010111000001101001") + .method("POST", HttpRequest.BodyPublishers.ofString("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"foo\"; filename=\"hello.txt\"\r\nContent-Type: text/plain\r\n\r\nHello World\r\n-----011000010111000001101001--\r\n")) + .build(); +HttpResponse response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()); +System.out.println(response.body()); diff --git a/test/fixtures/output/java/nethttp/multipart-file.java b/test/fixtures/output/java/nethttp/multipart-file.java new file mode 100644 index 000000000..7c86e4be3 --- /dev/null +++ b/test/fixtures/output/java/nethttp/multipart-file.java @@ -0,0 +1,7 @@ +HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create("http://mockbin.com/har")) + .header("content-type", "multipart/form-data; boundary=---011000010111000001101001") + .method("POST", HttpRequest.BodyPublishers.ofString("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"foo\"; filename=\"hello.txt\"\r\nContent-Type: text/plain\r\n\r\n\r\n-----011000010111000001101001--\r\n")) + .build(); +HttpResponse response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()); +System.out.println(response.body()); diff --git a/test/fixtures/output/java/nethttp/multipart-form-data.java b/test/fixtures/output/java/nethttp/multipart-form-data.java new file mode 100644 index 000000000..5a8c8f9f9 --- /dev/null +++ b/test/fixtures/output/java/nethttp/multipart-form-data.java @@ -0,0 +1,7 @@ +HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create("http://mockbin.com/har")) + .header("Content-Type", "multipart/form-data; boundary=---011000010111000001101001") + .method("POST", HttpRequest.BodyPublishers.ofString("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"foo\"\r\n\r\nbar\r\n-----011000010111000001101001--\r\n")) + .build(); +HttpResponse response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()); +System.out.println(response.body()); diff --git a/test/fixtures/output/java/nethttp/nested.java b/test/fixtures/output/java/nethttp/nested.java new file mode 100644 index 000000000..edd4a0ff1 --- /dev/null +++ b/test/fixtures/output/java/nethttp/nested.java @@ -0,0 +1,6 @@ +HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create("http://mockbin.com/har?foo%5Bbar%5D=baz%2Czap&fiz=buz&key=value")) + .method("GET", HttpRequest.BodyPublishers.noBody()) + .build(); +HttpResponse response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()); +System.out.println(response.body()); diff --git a/test/fixtures/output/java/nethttp/query.java b/test/fixtures/output/java/nethttp/query.java new file mode 100644 index 000000000..7d8f106dd --- /dev/null +++ b/test/fixtures/output/java/nethttp/query.java @@ -0,0 +1,6 @@ +HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create("http://mockbin.com/har?foo=bar&foo=baz&baz=abc&key=value")) + .method("GET", HttpRequest.BodyPublishers.noBody()) + .build(); +HttpResponse response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()); +System.out.println(response.body()); diff --git a/test/fixtures/output/java/nethttp/short.java b/test/fixtures/output/java/nethttp/short.java new file mode 100644 index 000000000..5e282c106 --- /dev/null +++ b/test/fixtures/output/java/nethttp/short.java @@ -0,0 +1,6 @@ +HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create("http://mockbin.com/har")) + .method("GET", HttpRequest.BodyPublishers.noBody()) + .build(); +HttpResponse response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()); +System.out.println(response.body()); diff --git a/test/fixtures/output/java/nethttp/text-plain.java b/test/fixtures/output/java/nethttp/text-plain.java new file mode 100644 index 000000000..634823835 --- /dev/null +++ b/test/fixtures/output/java/nethttp/text-plain.java @@ -0,0 +1,7 @@ +HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create("http://mockbin.com/har")) + .header("content-type", "text/plain") + .method("POST", HttpRequest.BodyPublishers.ofString("Hello World")) + .build(); +HttpResponse response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()); +System.out.println(response.body()); diff --git a/test/fixtures/output/java/okhttp/multipart-form-data.java b/test/fixtures/output/java/okhttp/multipart-form-data.java index ab1e1d2c4..517e4fb48 100644 --- a/test/fixtures/output/java/okhttp/multipart-form-data.java +++ b/test/fixtures/output/java/okhttp/multipart-form-data.java @@ -5,7 +5,7 @@ Request request = new Request.Builder() .url("http://mockbin.com/har") .post(body) - .addHeader("content-type", "multipart/form-data; boundary=---011000010111000001101001") + .addHeader("Content-Type", "multipart/form-data; boundary=---011000010111000001101001") .build(); Response response = client.newCall(request).execute(); diff --git a/test/fixtures/output/java/okhttp/nested.java b/test/fixtures/output/java/okhttp/nested.java new file mode 100644 index 000000000..fface6c99 --- /dev/null +++ b/test/fixtures/output/java/okhttp/nested.java @@ -0,0 +1,8 @@ +OkHttpClient client = new OkHttpClient(); + +Request request = new Request.Builder() + .url("http://mockbin.com/har?foo%5Bbar%5D=baz%2Czap&fiz=buz&key=value") + .get() + .build(); + +Response response = client.newCall(request).execute(); diff --git a/test/fixtures/output/java/unirest/multipart-form-data.java b/test/fixtures/output/java/unirest/multipart-form-data.java index 38ce54749..ec517f373 100644 --- a/test/fixtures/output/java/unirest/multipart-form-data.java +++ b/test/fixtures/output/java/unirest/multipart-form-data.java @@ -1,4 +1,4 @@ HttpResponse response = Unirest.post("http://mockbin.com/har") - .header("content-type", "multipart/form-data; boundary=---011000010111000001101001") + .header("Content-Type", "multipart/form-data; boundary=---011000010111000001101001") .body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"foo\"\r\n\r\nbar\r\n-----011000010111000001101001--\r\n") .asString(); diff --git a/test/fixtures/output/java/unirest/nested.java b/test/fixtures/output/java/unirest/nested.java new file mode 100644 index 000000000..7ad3da188 --- /dev/null +++ b/test/fixtures/output/java/unirest/nested.java @@ -0,0 +1,2 @@ +HttpResponse response = Unirest.get("http://mockbin.com/har?foo%5Bbar%5D=baz%2Czap&fiz=buz&key=value") + .asString(); diff --git a/test/fixtures/output/javascript/axios/application-form-encoded.js b/test/fixtures/output/javascript/axios/application-form-encoded.js new file mode 100644 index 000000000..db254b59f --- /dev/null +++ b/test/fixtures/output/javascript/axios/application-form-encoded.js @@ -0,0 +1,14 @@ +import axios from "axios"; + +const options = { + method: 'POST', + url: 'http://mockbin.com/har', + headers: {'content-type': 'application/x-www-form-urlencoded'}, + data: {foo: 'bar', hello: 'world'} +}; + +axios.request(options).then(function (response) { + console.log(response.data); +}).catch(function (error) { + console.error(error); +}); diff --git a/test/fixtures/output/javascript/axios/application-json.js b/test/fixtures/output/javascript/axios/application-json.js new file mode 100644 index 000000000..d84ad11f3 --- /dev/null +++ b/test/fixtures/output/javascript/axios/application-json.js @@ -0,0 +1,21 @@ +import axios from "axios"; + +const options = { + method: 'POST', + url: 'http://mockbin.com/har', + headers: {'content-type': 'application/json'}, + data: { + number: 1, + string: 'f"oo', + arr: [1, 2, 3], + nested: {a: 'b'}, + arr_mix: [1, 'a', {arr_mix_nested: {}}], + boolean: false + } +}; + +axios.request(options).then(function (response) { + console.log(response.data); +}).catch(function (error) { + console.error(error); +}); diff --git a/test/fixtures/output/javascript/axios/cookies.js b/test/fixtures/output/javascript/axios/cookies.js new file mode 100644 index 000000000..ef57ed14b --- /dev/null +++ b/test/fixtures/output/javascript/axios/cookies.js @@ -0,0 +1,13 @@ +import axios from "axios"; + +const options = { + method: 'POST', + url: 'http://mockbin.com/har', + headers: {cookie: 'foo=bar; bar=baz'} +}; + +axios.request(options).then(function (response) { + console.log(response.data); +}).catch(function (error) { + console.error(error); +}); diff --git a/test/fixtures/output/javascript/axios/custom-method.js b/test/fixtures/output/javascript/axios/custom-method.js new file mode 100644 index 000000000..c6b75135b --- /dev/null +++ b/test/fixtures/output/javascript/axios/custom-method.js @@ -0,0 +1,9 @@ +import axios from "axios"; + +const options = {method: 'PROPFIND', url: 'http://mockbin.com/har'}; + +axios.request(options).then(function (response) { + console.log(response.data); +}).catch(function (error) { + console.error(error); +}); diff --git a/test/fixtures/output/javascript/axios/full.js b/test/fixtures/output/javascript/axios/full.js new file mode 100644 index 000000000..61f25dd9c --- /dev/null +++ b/test/fixtures/output/javascript/axios/full.js @@ -0,0 +1,19 @@ +import axios from "axios"; + +const options = { + method: 'POST', + url: 'http://mockbin.com/har', + params: {foo: ['bar', 'baz'], baz: 'abc', key: 'value'}, + headers: { + cookie: 'foo=bar; bar=baz', + accept: 'application/json', + 'content-type': 'application/x-www-form-urlencoded' + }, + data: {foo: 'bar'} +}; + +axios.request(options).then(function (response) { + console.log(response.data); +}).catch(function (error) { + console.error(error); +}); diff --git a/test/fixtures/output/javascript/axios/headers.js b/test/fixtures/output/javascript/axios/headers.js new file mode 100644 index 000000000..1db8b5b72 --- /dev/null +++ b/test/fixtures/output/javascript/axios/headers.js @@ -0,0 +1,13 @@ +import axios from "axios"; + +const options = { + method: 'GET', + url: 'http://mockbin.com/har', + headers: {accept: 'application/json', 'x-foo': 'Bar'} +}; + +axios.request(options).then(function (response) { + console.log(response.data); +}).catch(function (error) { + console.error(error); +}); diff --git a/test/fixtures/output/javascript/axios/https.js b/test/fixtures/output/javascript/axios/https.js new file mode 100644 index 000000000..342998c5a --- /dev/null +++ b/test/fixtures/output/javascript/axios/https.js @@ -0,0 +1,9 @@ +import axios from "axios"; + +const options = {method: 'GET', url: 'https://mockbin.com/har'}; + +axios.request(options).then(function (response) { + console.log(response.data); +}).catch(function (error) { + console.error(error); +}); diff --git a/test/fixtures/output/javascript/axios/jsonObj-multiline.js b/test/fixtures/output/javascript/axios/jsonObj-multiline.js new file mode 100644 index 000000000..82196992f --- /dev/null +++ b/test/fixtures/output/javascript/axios/jsonObj-multiline.js @@ -0,0 +1,14 @@ +import axios from "axios"; + +const options = { + method: 'POST', + url: 'http://mockbin.com/har', + headers: {'content-type': 'application/json'}, + data: {foo: 'bar'} +}; + +axios.request(options).then(function (response) { + console.log(response.data); +}).catch(function (error) { + console.error(error); +}); diff --git a/test/fixtures/output/javascript/axios/jsonObj-null-value.js b/test/fixtures/output/javascript/axios/jsonObj-null-value.js new file mode 100644 index 000000000..eb4da09bb --- /dev/null +++ b/test/fixtures/output/javascript/axios/jsonObj-null-value.js @@ -0,0 +1,14 @@ +import axios from "axios"; + +const options = { + method: 'POST', + url: 'http://mockbin.com/har', + headers: {'content-type': 'application/json'}, + data: {foo: null} +}; + +axios.request(options).then(function (response) { + console.log(response.data); +}).catch(function (error) { + console.error(error); +}); diff --git a/test/fixtures/output/javascript/axios/multipart-data.js b/test/fixtures/output/javascript/axios/multipart-data.js new file mode 100644 index 000000000..5890ea396 --- /dev/null +++ b/test/fixtures/output/javascript/axios/multipart-data.js @@ -0,0 +1,17 @@ +import axios from "axios"; + +const form = new FormData(); +form.append("foo", "Hello World"); + +const options = { + method: 'POST', + url: 'http://mockbin.com/har', + headers: {'content-type': 'multipart/form-data; boundary=---011000010111000001101001'}, + data: '[form]' +}; + +axios.request(options).then(function (response) { + console.log(response.data); +}).catch(function (error) { + console.error(error); +}); diff --git a/test/fixtures/output/javascript/axios/multipart-file.js b/test/fixtures/output/javascript/axios/multipart-file.js new file mode 100644 index 000000000..5bc048bdb --- /dev/null +++ b/test/fixtures/output/javascript/axios/multipart-file.js @@ -0,0 +1,17 @@ +import axios from "axios"; + +const form = new FormData(); +form.append("foo", "test/fixtures/files/hello.txt"); + +const options = { + method: 'POST', + url: 'http://mockbin.com/har', + headers: {'content-type': 'multipart/form-data; boundary=---011000010111000001101001'}, + data: '[form]' +}; + +axios.request(options).then(function (response) { + console.log(response.data); +}).catch(function (error) { + console.error(error); +}); diff --git a/test/fixtures/output/javascript/axios/multipart-form-data.js b/test/fixtures/output/javascript/axios/multipart-form-data.js new file mode 100644 index 000000000..b000f6353 --- /dev/null +++ b/test/fixtures/output/javascript/axios/multipart-form-data.js @@ -0,0 +1,17 @@ +import axios from "axios"; + +const form = new FormData(); +form.append("foo", "bar"); + +const options = { + method: 'POST', + url: 'http://mockbin.com/har', + headers: {'Content-Type': 'multipart/form-data; boundary=---011000010111000001101001'}, + data: '[form]' +}; + +axios.request(options).then(function (response) { + console.log(response.data); +}).catch(function (error) { + console.error(error); +}); diff --git a/test/fixtures/output/javascript/axios/nested.js b/test/fixtures/output/javascript/axios/nested.js new file mode 100644 index 000000000..00c3fd556 --- /dev/null +++ b/test/fixtures/output/javascript/axios/nested.js @@ -0,0 +1,13 @@ +import axios from "axios"; + +const options = { + method: 'GET', + url: 'http://mockbin.com/har', + params: {'foo[bar]': 'baz,zap', fiz: 'buz', key: 'value'} +}; + +axios.request(options).then(function (response) { + console.log(response.data); +}).catch(function (error) { + console.error(error); +}); diff --git a/test/fixtures/output/javascript/axios/query.js b/test/fixtures/output/javascript/axios/query.js new file mode 100644 index 000000000..1de276679 --- /dev/null +++ b/test/fixtures/output/javascript/axios/query.js @@ -0,0 +1,13 @@ +import axios from "axios"; + +const options = { + method: 'GET', + url: 'http://mockbin.com/har', + params: {foo: ['bar', 'baz'], baz: 'abc', key: 'value'} +}; + +axios.request(options).then(function (response) { + console.log(response.data); +}).catch(function (error) { + console.error(error); +}); diff --git a/test/fixtures/output/javascript/axios/short.js b/test/fixtures/output/javascript/axios/short.js new file mode 100644 index 000000000..d35c630a9 --- /dev/null +++ b/test/fixtures/output/javascript/axios/short.js @@ -0,0 +1,9 @@ +import axios from "axios"; + +const options = {method: 'GET', url: 'http://mockbin.com/har'}; + +axios.request(options).then(function (response) { + console.log(response.data); +}).catch(function (error) { + console.error(error); +}); diff --git a/test/fixtures/output/javascript/axios/text-plain.js b/test/fixtures/output/javascript/axios/text-plain.js new file mode 100644 index 000000000..a199f3570 --- /dev/null +++ b/test/fixtures/output/javascript/axios/text-plain.js @@ -0,0 +1,14 @@ +import axios from "axios"; + +const options = { + method: 'POST', + url: 'http://mockbin.com/har', + headers: {'content-type': 'text/plain'}, + data: 'Hello World' +}; + +axios.request(options).then(function (response) { + console.log(response.data); +}).catch(function (error) { + console.error(error); +}); diff --git a/test/fixtures/output/javascript/fetch/application-form-encoded.js b/test/fixtures/output/javascript/fetch/application-form-encoded.js index dbef84f44..a710c45c1 100644 --- a/test/fixtures/output/javascript/fetch/application-form-encoded.js +++ b/test/fixtures/output/javascript/fetch/application-form-encoded.js @@ -1,16 +1,10 @@ -fetch("http://mockbin.com/har", { - "method": "POST", - "headers": { - "content-type": "application/x-www-form-urlencoded" - }, - "body": { - "foo": "bar", - "hello": "world" - } -}) -.then(response => { - console.log(response); -}) -.catch(err => { - console.log(err); -}); +const options = { + method: 'POST', + headers: {'content-type': 'application/x-www-form-urlencoded'}, + body: new URLSearchParams({foo: 'bar', hello: 'world'}) +}; + +fetch('http://mockbin.com/har', options) + .then(response => response.json()) + .then(response => console.log(response)) + .catch(err => console.error(err)); diff --git a/test/fixtures/output/javascript/fetch/application-json.js b/test/fixtures/output/javascript/fetch/application-json.js index 57f52efe9..7aeb5510e 100644 --- a/test/fixtures/output/javascript/fetch/application-json.js +++ b/test/fixtures/output/javascript/fetch/application-json.js @@ -1,32 +1,10 @@ -fetch("http://mockbin.com/har", { - "method": "POST", - "headers": { - "content-type": "application/json" - }, - "body": { - "number": 1, - "string": "f\"oo", - "arr": [ - 1, - 2, - 3 - ], - "nested": { - "a": "b" - }, - "arr_mix": [ - 1, - "a", - { - "arr_mix_nested": {} - } - ], - "boolean": false - } -}) -.then(response => { - console.log(response); -}) -.catch(err => { - console.log(err); -}); +const options = { + method: 'POST', + headers: {'content-type': 'application/json'}, + body: '{"number":1,"string":"f\"oo","arr":[1,2,3],"nested":{"a":"b"},"arr_mix":[1,"a",{"arr_mix_nested":{}}],"boolean":false}' +}; + +fetch('http://mockbin.com/har', options) + .then(response => response.json()) + .then(response => console.log(response)) + .catch(err => console.error(err)); diff --git a/test/fixtures/output/javascript/fetch/cookies.js b/test/fixtures/output/javascript/fetch/cookies.js index a6e55b17e..8cbf70742 100644 --- a/test/fixtures/output/javascript/fetch/cookies.js +++ b/test/fixtures/output/javascript/fetch/cookies.js @@ -1,12 +1,6 @@ -fetch("http://mockbin.com/har", { - "method": "POST", - "headers": { - "cookie": "foo=bar; bar=baz" - } -}) -.then(response => { - console.log(response); -}) -.catch(err => { - console.log(err); -}); +const options = {method: 'POST', headers: {cookie: 'foo=bar; bar=baz'}}; + +fetch('http://mockbin.com/har', options) + .then(response => response.json()) + .then(response => console.log(response)) + .catch(err => console.error(err)); diff --git a/test/fixtures/output/javascript/fetch/custom-method.js b/test/fixtures/output/javascript/fetch/custom-method.js index 177d6becd..1a12c8405 100644 --- a/test/fixtures/output/javascript/fetch/custom-method.js +++ b/test/fixtures/output/javascript/fetch/custom-method.js @@ -1,10 +1,6 @@ -fetch("http://mockbin.com/har", { - "method": "PROPFIND", - "headers": {} -}) -.then(response => { - console.log(response); -}) -.catch(err => { - console.log(err); -}); +const options = {method: 'PROPFIND'}; + +fetch('http://mockbin.com/har', options) + .then(response => response.json()) + .then(response => console.log(response)) + .catch(err => console.error(err)); diff --git a/test/fixtures/output/javascript/fetch/full.js b/test/fixtures/output/javascript/fetch/full.js index 24b81af89..99298d460 100644 --- a/test/fixtures/output/javascript/fetch/full.js +++ b/test/fixtures/output/javascript/fetch/full.js @@ -1,17 +1,14 @@ -fetch("http://mockbin.com/har?foo=bar&foo=baz&baz=abc&key=value", { - "method": "POST", - "headers": { - "cookie": "foo=bar; bar=baz", - "accept": "application/json", - "content-type": "application/x-www-form-urlencoded" +const options = { + method: 'POST', + headers: { + cookie: 'foo=bar; bar=baz', + accept: 'application/json', + 'content-type': 'application/x-www-form-urlencoded' }, - "body": { - "foo": "bar" - } -}) -.then(response => { - console.log(response); -}) -.catch(err => { - console.log(err); -}); + body: new URLSearchParams({foo: 'bar'}) +}; + +fetch('http://mockbin.com/har?foo=bar&foo=baz&baz=abc&key=value', options) + .then(response => response.json()) + .then(response => console.log(response)) + .catch(err => console.error(err)); diff --git a/test/fixtures/output/javascript/fetch/headers.js b/test/fixtures/output/javascript/fetch/headers.js index 4541a5708..583e54cb6 100644 --- a/test/fixtures/output/javascript/fetch/headers.js +++ b/test/fixtures/output/javascript/fetch/headers.js @@ -1,13 +1,6 @@ -fetch("http://mockbin.com/har", { - "method": "GET", - "headers": { - "accept": "application/json", - "x-foo": "Bar" - } -}) -.then(response => { - console.log(response); -}) -.catch(err => { - console.log(err); -}); +const options = {method: 'GET', headers: {accept: 'application/json', 'x-foo': 'Bar'}}; + +fetch('http://mockbin.com/har', options) + .then(response => response.json()) + .then(response => console.log(response)) + .catch(err => console.error(err)); diff --git a/test/fixtures/output/javascript/fetch/https.js b/test/fixtures/output/javascript/fetch/https.js index 859620bd4..ba9350cc6 100644 --- a/test/fixtures/output/javascript/fetch/https.js +++ b/test/fixtures/output/javascript/fetch/https.js @@ -1,10 +1,6 @@ -fetch("https://mockbin.com/har", { - "method": "GET", - "headers": {} -}) -.then(response => { - console.log(response); -}) -.catch(err => { - console.log(err); -}); +const options = {method: 'GET'}; + +fetch('https://mockbin.com/har', options) + .then(response => response.json()) + .then(response => console.log(response)) + .catch(err => console.error(err)); diff --git a/test/fixtures/output/javascript/fetch/jsonObj-multiline.js b/test/fixtures/output/javascript/fetch/jsonObj-multiline.js index 5ca7889a8..f35e2be3c 100644 --- a/test/fixtures/output/javascript/fetch/jsonObj-multiline.js +++ b/test/fixtures/output/javascript/fetch/jsonObj-multiline.js @@ -1,15 +1,10 @@ -fetch("http://mockbin.com/har", { - "method": "POST", - "headers": { - "content-type": "application/json" - }, - "body": { - "foo": "bar" - } -}) -.then(response => { - console.log(response); -}) -.catch(err => { - console.log(err); -}); +const options = { + method: 'POST', + headers: {'content-type': 'application/json'}, + body: '{"foo":"bar"}' +}; + +fetch('http://mockbin.com/har', options) + .then(response => response.json()) + .then(response => console.log(response)) + .catch(err => console.error(err)); diff --git a/test/fixtures/output/javascript/fetch/jsonObj-null-value.js b/test/fixtures/output/javascript/fetch/jsonObj-null-value.js index b9bb1663b..e0adc2da4 100644 --- a/test/fixtures/output/javascript/fetch/jsonObj-null-value.js +++ b/test/fixtures/output/javascript/fetch/jsonObj-null-value.js @@ -1,15 +1,10 @@ -fetch("http://mockbin.com/har", { - "method": "POST", - "headers": { - "content-type": "application/json" - }, - "body": { - "foo": null - } -}) -.then(response => { - console.log(response); -}) -.catch(err => { - console.log(err); -}); +const options = { + method: 'POST', + headers: {'content-type': 'application/json'}, + body: '{"foo":null}' +}; + +fetch('http://mockbin.com/har', options) + .then(response => response.json()) + .then(response => console.log(response)) + .catch(err => console.error(err)); diff --git a/test/fixtures/output/javascript/fetch/multipart-data.js b/test/fixtures/output/javascript/fetch/multipart-data.js index 6413c458f..b469e5f05 100644 --- a/test/fixtures/output/javascript/fetch/multipart-data.js +++ b/test/fixtures/output/javascript/fetch/multipart-data.js @@ -1,15 +1,14 @@ -var form = new FormData(); +const form = new FormData(); form.append("foo", "Hello World"); -fetch("http://mockbin.com/har", { - "method": "POST", - "headers": { - "content-type": "multipart/form-data; boundary=---011000010111000001101001" - } -}) -.then(response => { - console.log(response); -}) -.catch(err => { - console.log(err); -}); +const options = { + method: 'POST', + headers: {'content-type': 'multipart/form-data; boundary=---011000010111000001101001'} +}; + +options.body = form; + +fetch('http://mockbin.com/har', options) + .then(response => response.json()) + .then(response => console.log(response)) + .catch(err => console.error(err)); diff --git a/test/fixtures/output/javascript/fetch/multipart-file.js b/test/fixtures/output/javascript/fetch/multipart-file.js index e71b706f3..7fa08db3f 100644 --- a/test/fixtures/output/javascript/fetch/multipart-file.js +++ b/test/fixtures/output/javascript/fetch/multipart-file.js @@ -1,15 +1,14 @@ -var form = new FormData(); +const form = new FormData(); form.append("foo", "test/fixtures/files/hello.txt"); -fetch("http://mockbin.com/har", { - "method": "POST", - "headers": { - "content-type": "multipart/form-data; boundary=---011000010111000001101001" - } -}) -.then(response => { - console.log(response); -}) -.catch(err => { - console.log(err); -}); +const options = { + method: 'POST', + headers: {'content-type': 'multipart/form-data; boundary=---011000010111000001101001'} +}; + +options.body = form; + +fetch('http://mockbin.com/har', options) + .then(response => response.json()) + .then(response => console.log(response)) + .catch(err => console.error(err)); diff --git a/test/fixtures/output/javascript/fetch/multipart-form-data.js b/test/fixtures/output/javascript/fetch/multipart-form-data.js index 38e97a631..28cc96d32 100644 --- a/test/fixtures/output/javascript/fetch/multipart-form-data.js +++ b/test/fixtures/output/javascript/fetch/multipart-form-data.js @@ -1,15 +1,14 @@ -var form = new FormData(); +const form = new FormData(); form.append("foo", "bar"); -fetch("http://mockbin.com/har", { - "method": "POST", - "headers": { - "content-type": "multipart/form-data; boundary=---011000010111000001101001" - } -}) -.then(response => { - console.log(response); -}) -.catch(err => { - console.log(err); -}); +const options = { + method: 'POST', + headers: {'Content-Type': 'multipart/form-data; boundary=---011000010111000001101001'} +}; + +options.body = form; + +fetch('http://mockbin.com/har', options) + .then(response => response.json()) + .then(response => console.log(response)) + .catch(err => console.error(err)); diff --git a/test/fixtures/output/javascript/fetch/nested.js b/test/fixtures/output/javascript/fetch/nested.js new file mode 100644 index 000000000..f4fd92dfa --- /dev/null +++ b/test/fixtures/output/javascript/fetch/nested.js @@ -0,0 +1,6 @@ +const options = {method: 'GET'}; + +fetch('http://mockbin.com/har?foo%5Bbar%5D=baz%2Czap&fiz=buz&key=value', options) + .then(response => response.json()) + .then(response => console.log(response)) + .catch(err => console.error(err)); diff --git a/test/fixtures/output/javascript/fetch/query.js b/test/fixtures/output/javascript/fetch/query.js index c1fafa2a7..8f331fda6 100644 --- a/test/fixtures/output/javascript/fetch/query.js +++ b/test/fixtures/output/javascript/fetch/query.js @@ -1,10 +1,6 @@ -fetch("http://mockbin.com/har?foo=bar&foo=baz&baz=abc&key=value", { - "method": "GET", - "headers": {} -}) -.then(response => { - console.log(response); -}) -.catch(err => { - console.log(err); -}); +const options = {method: 'GET'}; + +fetch('http://mockbin.com/har?foo=bar&foo=baz&baz=abc&key=value', options) + .then(response => response.json()) + .then(response => console.log(response)) + .catch(err => console.error(err)); diff --git a/test/fixtures/output/javascript/fetch/short.js b/test/fixtures/output/javascript/fetch/short.js index 9ee22b65a..8b0152c24 100644 --- a/test/fixtures/output/javascript/fetch/short.js +++ b/test/fixtures/output/javascript/fetch/short.js @@ -1,10 +1,6 @@ -fetch("http://mockbin.com/har", { - "method": "GET", - "headers": {} -}) -.then(response => { - console.log(response); -}) -.catch(err => { - console.log(err); -}); +const options = {method: 'GET'}; + +fetch('http://mockbin.com/har', options) + .then(response => response.json()) + .then(response => console.log(response)) + .catch(err => console.error(err)); diff --git a/test/fixtures/output/javascript/fetch/text-plain.js b/test/fixtures/output/javascript/fetch/text-plain.js index 9728fb732..38ef7081e 100644 --- a/test/fixtures/output/javascript/fetch/text-plain.js +++ b/test/fixtures/output/javascript/fetch/text-plain.js @@ -1,13 +1,6 @@ -fetch("http://mockbin.com/har", { - "method": "POST", - "headers": { - "content-type": "text/plain" - }, - "body": "Hello World" -}) -.then(response => { - console.log(response); -}) -.catch(err => { - console.log(err); -}); +const options = {method: 'POST', headers: {'content-type': 'text/plain'}, body: 'Hello World'}; + +fetch('http://mockbin.com/har', options) + .then(response => response.json()) + .then(response => console.log(response)) + .catch(err => console.error(err)); diff --git a/test/fixtures/output/javascript/jquery/application-form-encoded.js b/test/fixtures/output/javascript/jquery/application-form-encoded.js index dc296cc3e..9ecf72e80 100644 --- a/test/fixtures/output/javascript/jquery/application-form-encoded.js +++ b/test/fixtures/output/javascript/jquery/application-form-encoded.js @@ -1,4 +1,4 @@ -var settings = { +const settings = { "async": true, "crossDomain": true, "url": "http://mockbin.com/har", @@ -10,7 +10,7 @@ var settings = { "foo": "bar", "hello": "world" } -} +}; $.ajax(settings).done(function (response) { console.log(response); diff --git a/test/fixtures/output/javascript/jquery/application-json.js b/test/fixtures/output/javascript/jquery/application-json.js index 0b53728b3..5b02a22f0 100644 --- a/test/fixtures/output/javascript/jquery/application-json.js +++ b/test/fixtures/output/javascript/jquery/application-json.js @@ -1,4 +1,4 @@ -var settings = { +const settings = { "async": true, "crossDomain": true, "url": "http://mockbin.com/har", @@ -8,7 +8,7 @@ var settings = { }, "processData": false, "data": "{\"number\":1,\"string\":\"f\\\"oo\",\"arr\":[1,2,3],\"nested\":{\"a\":\"b\"},\"arr_mix\":[1,\"a\",{\"arr_mix_nested\":{}}],\"boolean\":false}" -} +}; $.ajax(settings).done(function (response) { console.log(response); diff --git a/test/fixtures/output/javascript/jquery/cookies.js b/test/fixtures/output/javascript/jquery/cookies.js index f65a8d048..653f10d0c 100644 --- a/test/fixtures/output/javascript/jquery/cookies.js +++ b/test/fixtures/output/javascript/jquery/cookies.js @@ -1,4 +1,4 @@ -var settings = { +const settings = { "async": true, "crossDomain": true, "url": "http://mockbin.com/har", @@ -6,7 +6,7 @@ var settings = { "headers": { "cookie": "foo=bar; bar=baz" } -} +}; $.ajax(settings).done(function (response) { console.log(response); diff --git a/test/fixtures/output/javascript/jquery/custom-method.js b/test/fixtures/output/javascript/jquery/custom-method.js index ba4185299..521c2fc00 100644 --- a/test/fixtures/output/javascript/jquery/custom-method.js +++ b/test/fixtures/output/javascript/jquery/custom-method.js @@ -1,10 +1,10 @@ -var settings = { +const settings = { "async": true, "crossDomain": true, "url": "http://mockbin.com/har", "method": "PROPFIND", "headers": {} -} +}; $.ajax(settings).done(function (response) { console.log(response); diff --git a/test/fixtures/output/javascript/jquery/full.js b/test/fixtures/output/javascript/jquery/full.js index 50f7cf609..36fb5b1f9 100644 --- a/test/fixtures/output/javascript/jquery/full.js +++ b/test/fixtures/output/javascript/jquery/full.js @@ -1,4 +1,4 @@ -var settings = { +const settings = { "async": true, "crossDomain": true, "url": "http://mockbin.com/har?foo=bar&foo=baz&baz=abc&key=value", @@ -11,7 +11,7 @@ var settings = { "data": { "foo": "bar" } -} +}; $.ajax(settings).done(function (response) { console.log(response); diff --git a/test/fixtures/output/javascript/jquery/headers.js b/test/fixtures/output/javascript/jquery/headers.js index 030e7f6ff..17652fa25 100644 --- a/test/fixtures/output/javascript/jquery/headers.js +++ b/test/fixtures/output/javascript/jquery/headers.js @@ -1,4 +1,4 @@ -var settings = { +const settings = { "async": true, "crossDomain": true, "url": "http://mockbin.com/har", @@ -7,7 +7,7 @@ var settings = { "accept": "application/json", "x-foo": "Bar" } -} +}; $.ajax(settings).done(function (response) { console.log(response); diff --git a/test/fixtures/output/javascript/jquery/https.js b/test/fixtures/output/javascript/jquery/https.js index 418bfba7f..09fe852d6 100644 --- a/test/fixtures/output/javascript/jquery/https.js +++ b/test/fixtures/output/javascript/jquery/https.js @@ -1,10 +1,10 @@ -var settings = { +const settings = { "async": true, "crossDomain": true, "url": "https://mockbin.com/har", "method": "GET", "headers": {} -} +}; $.ajax(settings).done(function (response) { console.log(response); diff --git a/test/fixtures/output/javascript/jquery/jsonObj-multiline.js b/test/fixtures/output/javascript/jquery/jsonObj-multiline.js index 5e5096c53..f7060b4b5 100644 --- a/test/fixtures/output/javascript/jquery/jsonObj-multiline.js +++ b/test/fixtures/output/javascript/jquery/jsonObj-multiline.js @@ -1,4 +1,4 @@ -var settings = { +const settings = { "async": true, "crossDomain": true, "url": "http://mockbin.com/har", @@ -8,7 +8,7 @@ var settings = { }, "processData": false, "data": "{\n \"foo\": \"bar\"\n}" -} +}; $.ajax(settings).done(function (response) { console.log(response); diff --git a/test/fixtures/output/javascript/jquery/jsonObj-null-value.js b/test/fixtures/output/javascript/jquery/jsonObj-null-value.js index a8b88b785..afa5f175a 100644 --- a/test/fixtures/output/javascript/jquery/jsonObj-null-value.js +++ b/test/fixtures/output/javascript/jquery/jsonObj-null-value.js @@ -1,4 +1,4 @@ -var settings = { +const settings = { "async": true, "crossDomain": true, "url": "http://mockbin.com/har", @@ -8,7 +8,7 @@ var settings = { }, "processData": false, "data": "{\"foo\":null}" -} +}; $.ajax(settings).done(function (response) { console.log(response); diff --git a/test/fixtures/output/javascript/jquery/multipart-data.js b/test/fixtures/output/javascript/jquery/multipart-data.js index 8dea93d99..74f9b9752 100644 --- a/test/fixtures/output/javascript/jquery/multipart-data.js +++ b/test/fixtures/output/javascript/jquery/multipart-data.js @@ -1,7 +1,7 @@ -var form = new FormData(); +const form = new FormData(); form.append("foo", "Hello World"); -var settings = { +const settings = { "async": true, "crossDomain": true, "url": "http://mockbin.com/har", @@ -11,7 +11,7 @@ var settings = { "contentType": false, "mimeType": "multipart/form-data", "data": form -} +}; $.ajax(settings).done(function (response) { console.log(response); diff --git a/test/fixtures/output/javascript/jquery/multipart-file.js b/test/fixtures/output/javascript/jquery/multipart-file.js index 12006dd89..8c1a50404 100644 --- a/test/fixtures/output/javascript/jquery/multipart-file.js +++ b/test/fixtures/output/javascript/jquery/multipart-file.js @@ -1,7 +1,7 @@ -var form = new FormData(); +const form = new FormData(); form.append("foo", "test/fixtures/files/hello.txt"); -var settings = { +const settings = { "async": true, "crossDomain": true, "url": "http://mockbin.com/har", @@ -11,7 +11,7 @@ var settings = { "contentType": false, "mimeType": "multipart/form-data", "data": form -} +}; $.ajax(settings).done(function (response) { console.log(response); diff --git a/test/fixtures/output/javascript/jquery/multipart-form-data.js b/test/fixtures/output/javascript/jquery/multipart-form-data.js index 584b8d9ec..fc2f25e0b 100644 --- a/test/fixtures/output/javascript/jquery/multipart-form-data.js +++ b/test/fixtures/output/javascript/jquery/multipart-form-data.js @@ -1,7 +1,7 @@ -var form = new FormData(); +const form = new FormData(); form.append("foo", "bar"); -var settings = { +const settings = { "async": true, "crossDomain": true, "url": "http://mockbin.com/har", @@ -11,7 +11,7 @@ var settings = { "contentType": false, "mimeType": "multipart/form-data", "data": form -} +}; $.ajax(settings).done(function (response) { console.log(response); diff --git a/test/fixtures/output/javascript/jquery/nested.js b/test/fixtures/output/javascript/jquery/nested.js new file mode 100644 index 000000000..20ea35d73 --- /dev/null +++ b/test/fixtures/output/javascript/jquery/nested.js @@ -0,0 +1,11 @@ +const settings = { + "async": true, + "crossDomain": true, + "url": "http://mockbin.com/har?foo%5Bbar%5D=baz%2Czap&fiz=buz&key=value", + "method": "GET", + "headers": {} +}; + +$.ajax(settings).done(function (response) { + console.log(response); +}); diff --git a/test/fixtures/output/javascript/jquery/query.js b/test/fixtures/output/javascript/jquery/query.js index 15a0663e4..58baea69e 100644 --- a/test/fixtures/output/javascript/jquery/query.js +++ b/test/fixtures/output/javascript/jquery/query.js @@ -1,10 +1,10 @@ -var settings = { +const settings = { "async": true, "crossDomain": true, "url": "http://mockbin.com/har?foo=bar&foo=baz&baz=abc&key=value", "method": "GET", "headers": {} -} +}; $.ajax(settings).done(function (response) { console.log(response); diff --git a/test/fixtures/output/javascript/jquery/short.js b/test/fixtures/output/javascript/jquery/short.js index 45e3bdd07..c87b2c8cf 100644 --- a/test/fixtures/output/javascript/jquery/short.js +++ b/test/fixtures/output/javascript/jquery/short.js @@ -1,10 +1,10 @@ -var settings = { +const settings = { "async": true, "crossDomain": true, "url": "http://mockbin.com/har", "method": "GET", "headers": {} -} +}; $.ajax(settings).done(function (response) { console.log(response); diff --git a/test/fixtures/output/javascript/jquery/text-plain.js b/test/fixtures/output/javascript/jquery/text-plain.js index 58debb2de..160075d2f 100644 --- a/test/fixtures/output/javascript/jquery/text-plain.js +++ b/test/fixtures/output/javascript/jquery/text-plain.js @@ -1,4 +1,4 @@ -var settings = { +const settings = { "async": true, "crossDomain": true, "url": "http://mockbin.com/har", @@ -7,7 +7,7 @@ var settings = { "content-type": "text/plain" }, "data": "Hello World" -} +}; $.ajax(settings).done(function (response) { console.log(response); diff --git a/test/fixtures/output/javascript/xhr/application-form-encoded.js b/test/fixtures/output/javascript/xhr/application-form-encoded.js index 90cfc66a6..c6b2cdecc 100644 --- a/test/fixtures/output/javascript/xhr/application-form-encoded.js +++ b/test/fixtures/output/javascript/xhr/application-form-encoded.js @@ -1,6 +1,6 @@ -var data = "foo=bar&hello=world"; +const data = "foo=bar&hello=world"; -var xhr = new XMLHttpRequest(); +const xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function () { diff --git a/test/fixtures/output/javascript/xhr/application-json.js b/test/fixtures/output/javascript/xhr/application-json.js index 98508d808..853be4a3c 100644 --- a/test/fixtures/output/javascript/xhr/application-json.js +++ b/test/fixtures/output/javascript/xhr/application-json.js @@ -1,4 +1,4 @@ -var data = JSON.stringify({ +const data = JSON.stringify({ "number": 1, "string": "f\"oo", "arr": [ @@ -19,7 +19,7 @@ var data = JSON.stringify({ "boolean": false }); -var xhr = new XMLHttpRequest(); +const xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function () { diff --git a/test/fixtures/output/javascript/xhr/cookies.js b/test/fixtures/output/javascript/xhr/cookies.js index d110546ea..dbce36082 100644 --- a/test/fixtures/output/javascript/xhr/cookies.js +++ b/test/fixtures/output/javascript/xhr/cookies.js @@ -1,6 +1,6 @@ -var data = null; +const data = null; -var xhr = new XMLHttpRequest(); +const xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function () { diff --git a/test/fixtures/output/javascript/xhr/custom-method.js b/test/fixtures/output/javascript/xhr/custom-method.js index 6da6675c3..40c589237 100644 --- a/test/fixtures/output/javascript/xhr/custom-method.js +++ b/test/fixtures/output/javascript/xhr/custom-method.js @@ -1,6 +1,6 @@ -var data = null; +const data = null; -var xhr = new XMLHttpRequest(); +const xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function () { diff --git a/test/fixtures/output/javascript/xhr/full.js b/test/fixtures/output/javascript/xhr/full.js index 55547738f..a32dd52bc 100644 --- a/test/fixtures/output/javascript/xhr/full.js +++ b/test/fixtures/output/javascript/xhr/full.js @@ -1,6 +1,6 @@ -var data = "foo=bar"; +const data = "foo=bar"; -var xhr = new XMLHttpRequest(); +const xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function () { diff --git a/test/fixtures/output/javascript/xhr/headers.js b/test/fixtures/output/javascript/xhr/headers.js index 27e9347bc..511c4ab52 100644 --- a/test/fixtures/output/javascript/xhr/headers.js +++ b/test/fixtures/output/javascript/xhr/headers.js @@ -1,6 +1,6 @@ -var data = null; +const data = null; -var xhr = new XMLHttpRequest(); +const xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function () { diff --git a/test/fixtures/output/javascript/xhr/https.js b/test/fixtures/output/javascript/xhr/https.js index 6f2e8f34f..0d5ce6b2b 100644 --- a/test/fixtures/output/javascript/xhr/https.js +++ b/test/fixtures/output/javascript/xhr/https.js @@ -1,6 +1,6 @@ -var data = null; +const data = null; -var xhr = new XMLHttpRequest(); +const xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function () { diff --git a/test/fixtures/output/javascript/xhr/jsonObj-multiline.js b/test/fixtures/output/javascript/xhr/jsonObj-multiline.js index 8cc564a3d..b0bfbe099 100644 --- a/test/fixtures/output/javascript/xhr/jsonObj-multiline.js +++ b/test/fixtures/output/javascript/xhr/jsonObj-multiline.js @@ -1,8 +1,8 @@ -var data = JSON.stringify({ +const data = JSON.stringify({ "foo": "bar" }); -var xhr = new XMLHttpRequest(); +const xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function () { diff --git a/test/fixtures/output/javascript/xhr/jsonObj-null-value.js b/test/fixtures/output/javascript/xhr/jsonObj-null-value.js index 8105f6446..d6948dcf9 100644 --- a/test/fixtures/output/javascript/xhr/jsonObj-null-value.js +++ b/test/fixtures/output/javascript/xhr/jsonObj-null-value.js @@ -1,8 +1,8 @@ -var data = JSON.stringify({ +const data = JSON.stringify({ "foo": null }); -var xhr = new XMLHttpRequest(); +const xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function () { diff --git a/test/fixtures/output/javascript/xhr/multipart-data.js b/test/fixtures/output/javascript/xhr/multipart-data.js index 2b7f42579..5753015f5 100644 --- a/test/fixtures/output/javascript/xhr/multipart-data.js +++ b/test/fixtures/output/javascript/xhr/multipart-data.js @@ -1,7 +1,7 @@ -var data = new FormData(); +const data = new FormData(); data.append("foo", "Hello World"); -var xhr = new XMLHttpRequest(); +const xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function () { diff --git a/test/fixtures/output/javascript/xhr/multipart-file.js b/test/fixtures/output/javascript/xhr/multipart-file.js index a5326f2a3..44d80da5b 100644 --- a/test/fixtures/output/javascript/xhr/multipart-file.js +++ b/test/fixtures/output/javascript/xhr/multipart-file.js @@ -1,7 +1,7 @@ -var data = new FormData(); +const data = new FormData(); data.append("foo", "test/fixtures/files/hello.txt"); -var xhr = new XMLHttpRequest(); +const xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function () { diff --git a/test/fixtures/output/javascript/xhr/multipart-form-data.js b/test/fixtures/output/javascript/xhr/multipart-form-data.js index 574bafff5..32e25edb3 100644 --- a/test/fixtures/output/javascript/xhr/multipart-form-data.js +++ b/test/fixtures/output/javascript/xhr/multipart-form-data.js @@ -1,7 +1,7 @@ -var data = new FormData(); +const data = new FormData(); data.append("foo", "bar"); -var xhr = new XMLHttpRequest(); +const xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function () { diff --git a/test/fixtures/output/javascript/xhr/nested.js b/test/fixtures/output/javascript/xhr/nested.js new file mode 100644 index 000000000..6660e830d --- /dev/null +++ b/test/fixtures/output/javascript/xhr/nested.js @@ -0,0 +1,14 @@ +const data = null; + +const xhr = new XMLHttpRequest(); +xhr.withCredentials = true; + +xhr.addEventListener("readystatechange", function () { + if (this.readyState === this.DONE) { + console.log(this.responseText); + } +}); + +xhr.open("GET", "http://mockbin.com/har?foo%5Bbar%5D=baz%2Czap&fiz=buz&key=value"); + +xhr.send(data); diff --git a/test/fixtures/output/javascript/xhr/query.js b/test/fixtures/output/javascript/xhr/query.js index b9cfa0d23..f620f6b37 100644 --- a/test/fixtures/output/javascript/xhr/query.js +++ b/test/fixtures/output/javascript/xhr/query.js @@ -1,6 +1,6 @@ -var data = null; +const data = null; -var xhr = new XMLHttpRequest(); +const xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function () { diff --git a/test/fixtures/output/javascript/xhr/short.js b/test/fixtures/output/javascript/xhr/short.js index af35e7675..0993af510 100644 --- a/test/fixtures/output/javascript/xhr/short.js +++ b/test/fixtures/output/javascript/xhr/short.js @@ -1,6 +1,6 @@ -var data = null; +const data = null; -var xhr = new XMLHttpRequest(); +const xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function () { diff --git a/test/fixtures/output/javascript/xhr/text-plain.js b/test/fixtures/output/javascript/xhr/text-plain.js index 6b6ca5171..495fc0e4a 100644 --- a/test/fixtures/output/javascript/xhr/text-plain.js +++ b/test/fixtures/output/javascript/xhr/text-plain.js @@ -1,6 +1,6 @@ -var data = "Hello World"; +const data = "Hello World"; -var xhr = new XMLHttpRequest(); +const xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("readystatechange", function () { diff --git a/test/fixtures/output/kotlin/okhttp/application-form-encoded.kt b/test/fixtures/output/kotlin/okhttp/application-form-encoded.kt new file mode 100644 index 000000000..4cf107205 --- /dev/null +++ b/test/fixtures/output/kotlin/okhttp/application-form-encoded.kt @@ -0,0 +1,11 @@ +val client = OkHttpClient() + +val mediaType = MediaType.parse("application/x-www-form-urlencoded") +val body = RequestBody.create(mediaType, "foo=bar&hello=world") +val request = Request.Builder() + .url("http://mockbin.com/har") + .post(body) + .addHeader("content-type", "application/x-www-form-urlencoded") + .build() + +val response = client.newCall(request).execute() diff --git a/test/fixtures/output/kotlin/okhttp/application-json.kt b/test/fixtures/output/kotlin/okhttp/application-json.kt new file mode 100644 index 000000000..3775021f2 --- /dev/null +++ b/test/fixtures/output/kotlin/okhttp/application-json.kt @@ -0,0 +1,11 @@ +val client = OkHttpClient() + +val mediaType = MediaType.parse("application/json") +val body = RequestBody.create(mediaType, "{\"number\":1,\"string\":\"f\\\"oo\",\"arr\":[1,2,3],\"nested\":{\"a\":\"b\"},\"arr_mix\":[1,\"a\",{\"arr_mix_nested\":{}}],\"boolean\":false}") +val request = Request.Builder() + .url("http://mockbin.com/har") + .post(body) + .addHeader("content-type", "application/json") + .build() + +val response = client.newCall(request).execute() diff --git a/test/fixtures/output/kotlin/okhttp/cookies.kt b/test/fixtures/output/kotlin/okhttp/cookies.kt new file mode 100644 index 000000000..b20ba0c16 --- /dev/null +++ b/test/fixtures/output/kotlin/okhttp/cookies.kt @@ -0,0 +1,9 @@ +val client = OkHttpClient() + +val request = Request.Builder() + .url("http://mockbin.com/har") + .post(null) + .addHeader("cookie", "foo=bar; bar=baz") + .build() + +val response = client.newCall(request).execute() diff --git a/test/fixtures/output/kotlin/okhttp/custom-method.kt b/test/fixtures/output/kotlin/okhttp/custom-method.kt new file mode 100644 index 000000000..662995244 --- /dev/null +++ b/test/fixtures/output/kotlin/okhttp/custom-method.kt @@ -0,0 +1,8 @@ +val client = OkHttpClient() + +val request = Request.Builder() + .url("http://mockbin.com/har") + .method("PROPFIND", null) + .build() + +val response = client.newCall(request).execute() diff --git a/test/fixtures/output/kotlin/okhttp/full.kt b/test/fixtures/output/kotlin/okhttp/full.kt new file mode 100644 index 000000000..ad7e8bd5e --- /dev/null +++ b/test/fixtures/output/kotlin/okhttp/full.kt @@ -0,0 +1,13 @@ +val client = OkHttpClient() + +val mediaType = MediaType.parse("application/x-www-form-urlencoded") +val body = RequestBody.create(mediaType, "foo=bar") +val request = Request.Builder() + .url("http://mockbin.com/har?foo=bar&foo=baz&baz=abc&key=value") + .post(body) + .addHeader("cookie", "foo=bar; bar=baz") + .addHeader("accept", "application/json") + .addHeader("content-type", "application/x-www-form-urlencoded") + .build() + +val response = client.newCall(request).execute() diff --git a/test/fixtures/output/kotlin/okhttp/headers.kt b/test/fixtures/output/kotlin/okhttp/headers.kt new file mode 100644 index 000000000..780e5800c --- /dev/null +++ b/test/fixtures/output/kotlin/okhttp/headers.kt @@ -0,0 +1,10 @@ +val client = OkHttpClient() + +val request = Request.Builder() + .url("http://mockbin.com/har") + .get() + .addHeader("accept", "application/json") + .addHeader("x-foo", "Bar") + .build() + +val response = client.newCall(request).execute() diff --git a/test/fixtures/output/kotlin/okhttp/https.kt b/test/fixtures/output/kotlin/okhttp/https.kt new file mode 100644 index 000000000..a2d2244d4 --- /dev/null +++ b/test/fixtures/output/kotlin/okhttp/https.kt @@ -0,0 +1,8 @@ +val client = OkHttpClient() + +val request = Request.Builder() + .url("https://mockbin.com/har") + .get() + .build() + +val response = client.newCall(request).execute() diff --git a/test/fixtures/output/kotlin/okhttp/jsonObj-multiline.kt b/test/fixtures/output/kotlin/okhttp/jsonObj-multiline.kt new file mode 100644 index 000000000..15d47ee1e --- /dev/null +++ b/test/fixtures/output/kotlin/okhttp/jsonObj-multiline.kt @@ -0,0 +1,11 @@ +val client = OkHttpClient() + +val mediaType = MediaType.parse("application/json") +val body = RequestBody.create(mediaType, "{\n \"foo\": \"bar\"\n}") +val request = Request.Builder() + .url("http://mockbin.com/har") + .post(body) + .addHeader("content-type", "application/json") + .build() + +val response = client.newCall(request).execute() diff --git a/test/fixtures/output/kotlin/okhttp/jsonObj-null-value.kt b/test/fixtures/output/kotlin/okhttp/jsonObj-null-value.kt new file mode 100644 index 000000000..b44121533 --- /dev/null +++ b/test/fixtures/output/kotlin/okhttp/jsonObj-null-value.kt @@ -0,0 +1,11 @@ +val client = OkHttpClient() + +val mediaType = MediaType.parse("application/json") +val body = RequestBody.create(mediaType, "{\"foo\":null}") +val request = Request.Builder() + .url("http://mockbin.com/har") + .post(body) + .addHeader("content-type", "application/json") + .build() + +val response = client.newCall(request).execute() diff --git a/test/fixtures/output/kotlin/okhttp/multipart-data.kt b/test/fixtures/output/kotlin/okhttp/multipart-data.kt new file mode 100644 index 000000000..7e742e811 --- /dev/null +++ b/test/fixtures/output/kotlin/okhttp/multipart-data.kt @@ -0,0 +1,11 @@ +val client = OkHttpClient() + +val mediaType = MediaType.parse("multipart/form-data; boundary=---011000010111000001101001") +val body = RequestBody.create(mediaType, "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"foo\"; filename=\"hello.txt\"\r\nContent-Type: text/plain\r\n\r\nHello World\r\n-----011000010111000001101001--\r\n") +val request = Request.Builder() + .url("http://mockbin.com/har") + .post(body) + .addHeader("content-type", "multipart/form-data; boundary=---011000010111000001101001") + .build() + +val response = client.newCall(request).execute() diff --git a/test/fixtures/output/kotlin/okhttp/multipart-file.kt b/test/fixtures/output/kotlin/okhttp/multipart-file.kt new file mode 100644 index 000000000..0673c9116 --- /dev/null +++ b/test/fixtures/output/kotlin/okhttp/multipart-file.kt @@ -0,0 +1,11 @@ +val client = OkHttpClient() + +val mediaType = MediaType.parse("multipart/form-data; boundary=---011000010111000001101001") +val body = RequestBody.create(mediaType, "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"foo\"; filename=\"hello.txt\"\r\nContent-Type: text/plain\r\n\r\n\r\n-----011000010111000001101001--\r\n") +val request = Request.Builder() + .url("http://mockbin.com/har") + .post(body) + .addHeader("content-type", "multipart/form-data; boundary=---011000010111000001101001") + .build() + +val response = client.newCall(request).execute() diff --git a/test/fixtures/output/kotlin/okhttp/multipart-form-data.kt b/test/fixtures/output/kotlin/okhttp/multipart-form-data.kt new file mode 100644 index 000000000..4148c7865 --- /dev/null +++ b/test/fixtures/output/kotlin/okhttp/multipart-form-data.kt @@ -0,0 +1,11 @@ +val client = OkHttpClient() + +val mediaType = MediaType.parse("multipart/form-data; boundary=---011000010111000001101001") +val body = RequestBody.create(mediaType, "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"foo\"\r\n\r\nbar\r\n-----011000010111000001101001--\r\n") +val request = Request.Builder() + .url("http://mockbin.com/har") + .post(body) + .addHeader("Content-Type", "multipart/form-data; boundary=---011000010111000001101001") + .build() + +val response = client.newCall(request).execute() diff --git a/test/fixtures/output/kotlin/okhttp/nested.kt b/test/fixtures/output/kotlin/okhttp/nested.kt new file mode 100644 index 000000000..b7439ff71 --- /dev/null +++ b/test/fixtures/output/kotlin/okhttp/nested.kt @@ -0,0 +1,8 @@ +val client = OkHttpClient() + +val request = Request.Builder() + .url("http://mockbin.com/har?foo%5Bbar%5D=baz%2Czap&fiz=buz&key=value") + .get() + .build() + +val response = client.newCall(request).execute() diff --git a/test/fixtures/output/kotlin/okhttp/query.kt b/test/fixtures/output/kotlin/okhttp/query.kt new file mode 100644 index 000000000..798a81017 --- /dev/null +++ b/test/fixtures/output/kotlin/okhttp/query.kt @@ -0,0 +1,8 @@ +val client = OkHttpClient() + +val request = Request.Builder() + .url("http://mockbin.com/har?foo=bar&foo=baz&baz=abc&key=value") + .get() + .build() + +val response = client.newCall(request).execute() diff --git a/test/fixtures/output/kotlin/okhttp/short.kt b/test/fixtures/output/kotlin/okhttp/short.kt new file mode 100644 index 000000000..e728d71a7 --- /dev/null +++ b/test/fixtures/output/kotlin/okhttp/short.kt @@ -0,0 +1,8 @@ +val client = OkHttpClient() + +val request = Request.Builder() + .url("http://mockbin.com/har") + .get() + .build() + +val response = client.newCall(request).execute() diff --git a/test/fixtures/output/kotlin/okhttp/text-plain.kt b/test/fixtures/output/kotlin/okhttp/text-plain.kt new file mode 100644 index 000000000..bf85b0fa6 --- /dev/null +++ b/test/fixtures/output/kotlin/okhttp/text-plain.kt @@ -0,0 +1,11 @@ +val client = OkHttpClient() + +val mediaType = MediaType.parse("text/plain") +val body = RequestBody.create(mediaType, "Hello World") +val request = Request.Builder() + .url("http://mockbin.com/har") + .post(body) + .addHeader("content-type", "text/plain") + .build() + +val response = client.newCall(request).execute() diff --git a/test/fixtures/output/node/axios/application-form-encoded.js b/test/fixtures/output/node/axios/application-form-encoded.js new file mode 100644 index 000000000..1d35a60cb --- /dev/null +++ b/test/fixtures/output/node/axios/application-form-encoded.js @@ -0,0 +1,14 @@ +var axios = require("axios").default; + +var options = { + method: 'POST', + url: 'http://mockbin.com/har', + headers: {'content-type': 'application/x-www-form-urlencoded'}, + data: {foo: 'bar', hello: 'world'} +}; + +axios.request(options).then(function (response) { + console.log(response.data); +}).catch(function (error) { + console.error(error); +}); diff --git a/test/fixtures/output/node/axios/application-json.js b/test/fixtures/output/node/axios/application-json.js new file mode 100644 index 000000000..277a20c55 --- /dev/null +++ b/test/fixtures/output/node/axios/application-json.js @@ -0,0 +1,21 @@ +var axios = require("axios").default; + +var options = { + method: 'POST', + url: 'http://mockbin.com/har', + headers: {'content-type': 'application/json'}, + data: { + number: 1, + string: 'f"oo', + arr: [1, 2, 3], + nested: {a: 'b'}, + arr_mix: [1, 'a', {arr_mix_nested: {}}], + boolean: false + } +}; + +axios.request(options).then(function (response) { + console.log(response.data); +}).catch(function (error) { + console.error(error); +}); diff --git a/test/fixtures/output/node/axios/cookies.js b/test/fixtures/output/node/axios/cookies.js new file mode 100644 index 000000000..4011d2cd4 --- /dev/null +++ b/test/fixtures/output/node/axios/cookies.js @@ -0,0 +1,13 @@ +var axios = require("axios").default; + +var options = { + method: 'POST', + url: 'http://mockbin.com/har', + headers: {cookie: 'foo=bar; bar=baz'} +}; + +axios.request(options).then(function (response) { + console.log(response.data); +}).catch(function (error) { + console.error(error); +}); diff --git a/test/fixtures/output/node/axios/custom-method.js b/test/fixtures/output/node/axios/custom-method.js new file mode 100644 index 000000000..931f34d14 --- /dev/null +++ b/test/fixtures/output/node/axios/custom-method.js @@ -0,0 +1,9 @@ +var axios = require("axios").default; + +var options = {method: 'PROPFIND', url: 'http://mockbin.com/har'}; + +axios.request(options).then(function (response) { + console.log(response.data); +}).catch(function (error) { + console.error(error); +}); diff --git a/test/fixtures/output/node/axios/full.js b/test/fixtures/output/node/axios/full.js new file mode 100644 index 000000000..9a5a70ff2 --- /dev/null +++ b/test/fixtures/output/node/axios/full.js @@ -0,0 +1,19 @@ +var axios = require("axios").default; + +var options = { + method: 'POST', + url: 'http://mockbin.com/har', + params: {foo: ['bar', 'baz'], baz: 'abc', key: 'value'}, + headers: { + cookie: 'foo=bar; bar=baz', + accept: 'application/json', + 'content-type': 'application/x-www-form-urlencoded' + }, + data: {foo: 'bar'} +}; + +axios.request(options).then(function (response) { + console.log(response.data); +}).catch(function (error) { + console.error(error); +}); diff --git a/test/fixtures/output/node/axios/headers.js b/test/fixtures/output/node/axios/headers.js new file mode 100644 index 000000000..2dbe470d1 --- /dev/null +++ b/test/fixtures/output/node/axios/headers.js @@ -0,0 +1,13 @@ +var axios = require("axios").default; + +var options = { + method: 'GET', + url: 'http://mockbin.com/har', + headers: {accept: 'application/json', 'x-foo': 'Bar'} +}; + +axios.request(options).then(function (response) { + console.log(response.data); +}).catch(function (error) { + console.error(error); +}); diff --git a/test/fixtures/output/node/axios/https.js b/test/fixtures/output/node/axios/https.js new file mode 100644 index 000000000..9c4782877 --- /dev/null +++ b/test/fixtures/output/node/axios/https.js @@ -0,0 +1,9 @@ +var axios = require("axios").default; + +var options = {method: 'GET', url: 'https://mockbin.com/har'}; + +axios.request(options).then(function (response) { + console.log(response.data); +}).catch(function (error) { + console.error(error); +}); diff --git a/test/fixtures/output/node/axios/jsonObj-multiline.js b/test/fixtures/output/node/axios/jsonObj-multiline.js new file mode 100644 index 000000000..d31f23370 --- /dev/null +++ b/test/fixtures/output/node/axios/jsonObj-multiline.js @@ -0,0 +1,14 @@ +var axios = require("axios").default; + +var options = { + method: 'POST', + url: 'http://mockbin.com/har', + headers: {'content-type': 'application/json'}, + data: {foo: 'bar'} +}; + +axios.request(options).then(function (response) { + console.log(response.data); +}).catch(function (error) { + console.error(error); +}); diff --git a/test/fixtures/output/node/axios/jsonObj-null-value.js b/test/fixtures/output/node/axios/jsonObj-null-value.js new file mode 100644 index 000000000..04efe1d9f --- /dev/null +++ b/test/fixtures/output/node/axios/jsonObj-null-value.js @@ -0,0 +1,14 @@ +var axios = require("axios").default; + +var options = { + method: 'POST', + url: 'http://mockbin.com/har', + headers: {'content-type': 'application/json'}, + data: {foo: null} +}; + +axios.request(options).then(function (response) { + console.log(response.data); +}).catch(function (error) { + console.error(error); +}); diff --git a/test/fixtures/output/node/axios/multipart-data.js b/test/fixtures/output/node/axios/multipart-data.js new file mode 100644 index 000000000..691141cb7 --- /dev/null +++ b/test/fixtures/output/node/axios/multipart-data.js @@ -0,0 +1,14 @@ +var axios = require("axios").default; + +var options = { + method: 'POST', + url: 'http://mockbin.com/har', + headers: {'content-type': 'multipart/form-data; boundary=---011000010111000001101001'}, + data: '-----011000010111000001101001\r\nContent-Disposition: form-data; name="foo"; filename="hello.txt"\r\nContent-Type: text/plain\r\n\r\nHello World\r\n-----011000010111000001101001--\r\n' +}; + +axios.request(options).then(function (response) { + console.log(response.data); +}).catch(function (error) { + console.error(error); +}); diff --git a/test/fixtures/output/node/axios/multipart-file.js b/test/fixtures/output/node/axios/multipart-file.js new file mode 100644 index 000000000..41d487c5a --- /dev/null +++ b/test/fixtures/output/node/axios/multipart-file.js @@ -0,0 +1,14 @@ +var axios = require("axios").default; + +var options = { + method: 'POST', + url: 'http://mockbin.com/har', + headers: {'content-type': 'multipart/form-data; boundary=---011000010111000001101001'}, + data: '-----011000010111000001101001\r\nContent-Disposition: form-data; name="foo"; filename="hello.txt"\r\nContent-Type: text/plain\r\n\r\n\r\n-----011000010111000001101001--\r\n' +}; + +axios.request(options).then(function (response) { + console.log(response.data); +}).catch(function (error) { + console.error(error); +}); diff --git a/test/fixtures/output/node/axios/multipart-form-data.js b/test/fixtures/output/node/axios/multipart-form-data.js new file mode 100644 index 000000000..d0ee89517 --- /dev/null +++ b/test/fixtures/output/node/axios/multipart-form-data.js @@ -0,0 +1,14 @@ +var axios = require("axios").default; + +var options = { + method: 'POST', + url: 'http://mockbin.com/har', + headers: {'Content-Type': 'multipart/form-data; boundary=---011000010111000001101001'}, + data: '-----011000010111000001101001\r\nContent-Disposition: form-data; name="foo"\r\n\r\nbar\r\n-----011000010111000001101001--\r\n' +}; + +axios.request(options).then(function (response) { + console.log(response.data); +}).catch(function (error) { + console.error(error); +}); diff --git a/test/fixtures/output/node/axios/nested.js b/test/fixtures/output/node/axios/nested.js new file mode 100644 index 000000000..eda2acbd2 --- /dev/null +++ b/test/fixtures/output/node/axios/nested.js @@ -0,0 +1,13 @@ +var axios = require("axios").default; + +var options = { + method: 'GET', + url: 'http://mockbin.com/har', + params: {'foo[bar]': 'baz,zap', fiz: 'buz', key: 'value'} +}; + +axios.request(options).then(function (response) { + console.log(response.data); +}).catch(function (error) { + console.error(error); +}); diff --git a/test/fixtures/output/node/axios/query.js b/test/fixtures/output/node/axios/query.js new file mode 100644 index 000000000..d190362c2 --- /dev/null +++ b/test/fixtures/output/node/axios/query.js @@ -0,0 +1,13 @@ +var axios = require("axios").default; + +var options = { + method: 'GET', + url: 'http://mockbin.com/har', + params: {foo: ['bar', 'baz'], baz: 'abc', key: 'value'} +}; + +axios.request(options).then(function (response) { + console.log(response.data); +}).catch(function (error) { + console.error(error); +}); diff --git a/test/fixtures/output/node/axios/short.js b/test/fixtures/output/node/axios/short.js new file mode 100644 index 000000000..e2f516913 --- /dev/null +++ b/test/fixtures/output/node/axios/short.js @@ -0,0 +1,9 @@ +var axios = require("axios").default; + +var options = {method: 'GET', url: 'http://mockbin.com/har'}; + +axios.request(options).then(function (response) { + console.log(response.data); +}).catch(function (error) { + console.error(error); +}); diff --git a/test/fixtures/output/node/axios/text-plain.js b/test/fixtures/output/node/axios/text-plain.js new file mode 100644 index 000000000..3e46d3922 --- /dev/null +++ b/test/fixtures/output/node/axios/text-plain.js @@ -0,0 +1,14 @@ +var axios = require("axios").default; + +var options = { + method: 'POST', + url: 'http://mockbin.com/har', + headers: {'content-type': 'text/plain'}, + data: 'Hello World' +}; + +axios.request(options).then(function (response) { + console.log(response.data); +}).catch(function (error) { + console.error(error); +}); diff --git a/test/fixtures/output/node/fetch/application-form-encoded.js b/test/fixtures/output/node/fetch/application-form-encoded.js new file mode 100644 index 000000000..8271d9110 --- /dev/null +++ b/test/fixtures/output/node/fetch/application-form-encoded.js @@ -0,0 +1,19 @@ +const { URLSearchParams } = require('url'); +const fetch = require('node-fetch'); +const encodedParams = new URLSearchParams(); + +encodedParams.set('foo', 'bar'); +encodedParams.set('hello', 'world'); + +let url = 'http://mockbin.com/har'; + +let options = { + method: 'POST', + headers: {'content-type': 'application/x-www-form-urlencoded'}, + body: encodedParams +}; + +fetch(url, options) + .then(res => res.json()) + .then(json => console.log(json)) + .catch(err => console.error('error:' + err)); diff --git a/test/fixtures/output/node/fetch/application-json.js b/test/fixtures/output/node/fetch/application-json.js new file mode 100644 index 000000000..618d55e99 --- /dev/null +++ b/test/fixtures/output/node/fetch/application-json.js @@ -0,0 +1,14 @@ +const fetch = require('node-fetch'); + +let url = 'http://mockbin.com/har'; + +let options = { + method: 'POST', + headers: {'content-type': 'application/json'}, + body: '{"number":1,"string":"f\"oo","arr":[1,2,3],"nested":{"a":"b"},"arr_mix":[1,"a",{"arr_mix_nested":{}}],"boolean":false}' +}; + +fetch(url, options) + .then(res => res.json()) + .then(json => console.log(json)) + .catch(err => console.error('error:' + err)); diff --git a/test/fixtures/output/node/fetch/cookies.js b/test/fixtures/output/node/fetch/cookies.js new file mode 100644 index 000000000..b24beaad1 --- /dev/null +++ b/test/fixtures/output/node/fetch/cookies.js @@ -0,0 +1,10 @@ +const fetch = require('node-fetch'); + +let url = 'http://mockbin.com/har'; + +let options = {method: 'POST', headers: {cookie: 'foo=bar; bar=baz; '}}; + +fetch(url, options) + .then(res => res.json()) + .then(json => console.log(json)) + .catch(err => console.error('error:' + err)); diff --git a/test/fixtures/output/node/fetch/custom-method.js b/test/fixtures/output/node/fetch/custom-method.js new file mode 100644 index 000000000..195f83dc3 --- /dev/null +++ b/test/fixtures/output/node/fetch/custom-method.js @@ -0,0 +1,10 @@ +const fetch = require('node-fetch'); + +let url = 'http://mockbin.com/har'; + +let options = {method: 'PROPFIND'}; + +fetch(url, options) + .then(res => res.json()) + .then(json => console.log(json)) + .catch(err => console.error('error:' + err)); diff --git a/test/fixtures/output/node/fetch/full.js b/test/fixtures/output/node/fetch/full.js new file mode 100644 index 000000000..655e28d78 --- /dev/null +++ b/test/fixtures/output/node/fetch/full.js @@ -0,0 +1,22 @@ +const { URLSearchParams } = require('url'); +const fetch = require('node-fetch'); +const encodedParams = new URLSearchParams(); + +encodedParams.set('foo', 'bar'); + +let url = 'http://mockbin.com/har?foo=bar&foo=baz&baz=abc&key=value'; + +let options = { + method: 'POST', + headers: { + accept: 'application/json', + 'content-type': 'application/x-www-form-urlencoded', + cookie: 'foo=bar; bar=baz; ' + }, + body: encodedParams +}; + +fetch(url, options) + .then(res => res.json()) + .then(json => console.log(json)) + .catch(err => console.error('error:' + err)); diff --git a/test/fixtures/output/node/fetch/headers.js b/test/fixtures/output/node/fetch/headers.js new file mode 100644 index 000000000..7fa29488b --- /dev/null +++ b/test/fixtures/output/node/fetch/headers.js @@ -0,0 +1,10 @@ +const fetch = require('node-fetch'); + +let url = 'http://mockbin.com/har'; + +let options = {method: 'GET', headers: {accept: 'application/json', 'x-foo': 'Bar'}}; + +fetch(url, options) + .then(res => res.json()) + .then(json => console.log(json)) + .catch(err => console.error('error:' + err)); diff --git a/test/fixtures/output/node/fetch/https.js b/test/fixtures/output/node/fetch/https.js new file mode 100644 index 000000000..608306631 --- /dev/null +++ b/test/fixtures/output/node/fetch/https.js @@ -0,0 +1,10 @@ +const fetch = require('node-fetch'); + +let url = 'https://mockbin.com/har'; + +let options = {method: 'GET'}; + +fetch(url, options) + .then(res => res.json()) + .then(json => console.log(json)) + .catch(err => console.error('error:' + err)); diff --git a/test/fixtures/output/node/fetch/jsonObj-multiline.js b/test/fixtures/output/node/fetch/jsonObj-multiline.js new file mode 100644 index 000000000..b3bac3894 --- /dev/null +++ b/test/fixtures/output/node/fetch/jsonObj-multiline.js @@ -0,0 +1,14 @@ +const fetch = require('node-fetch'); + +let url = 'http://mockbin.com/har'; + +let options = { + method: 'POST', + headers: {'content-type': 'application/json'}, + body: '{"foo":"bar"}' +}; + +fetch(url, options) + .then(res => res.json()) + .then(json => console.log(json)) + .catch(err => console.error('error:' + err)); diff --git a/test/fixtures/output/node/fetch/jsonObj-null-value.js b/test/fixtures/output/node/fetch/jsonObj-null-value.js new file mode 100644 index 000000000..d61ec0ec1 --- /dev/null +++ b/test/fixtures/output/node/fetch/jsonObj-null-value.js @@ -0,0 +1,14 @@ +const fetch = require('node-fetch'); + +let url = 'http://mockbin.com/har'; + +let options = { + method: 'POST', + headers: {'content-type': 'application/json'}, + body: '{"foo":null}' +}; + +fetch(url, options) + .then(res => res.json()) + .then(json => console.log(json)) + .catch(err => console.error('error:' + err)); diff --git a/test/fixtures/output/node/fetch/multipart-data.js b/test/fixtures/output/node/fetch/multipart-data.js new file mode 100644 index 000000000..fe1b41778 --- /dev/null +++ b/test/fixtures/output/node/fetch/multipart-data.js @@ -0,0 +1,20 @@ +const fs = require('fs'); +const FormData = require('form-data'); +const fetch = require('node-fetch'); +const formData = new FormData(); + +formData.append('foo', fs.createReadStream('hello.txt')); + +let url = 'http://mockbin.com/har'; + +let options = { + method: 'POST', + headers: {'content-type': 'multipart/form-data; boundary=---011000010111000001101001'} +}; + +options.body = formData; + +fetch(url, options) + .then(res => res.json()) + .then(json => console.log(json)) + .catch(err => console.error('error:' + err)); diff --git a/test/fixtures/output/node/fetch/multipart-file.js b/test/fixtures/output/node/fetch/multipart-file.js new file mode 100644 index 000000000..8d5a7657c --- /dev/null +++ b/test/fixtures/output/node/fetch/multipart-file.js @@ -0,0 +1,20 @@ +const fs = require('fs'); +const FormData = require('form-data'); +const fetch = require('node-fetch'); +const formData = new FormData(); + +formData.append('foo', fs.createReadStream('test/fixtures/files/hello.txt')); + +let url = 'http://mockbin.com/har'; + +let options = { + method: 'POST', + headers: {'content-type': 'multipart/form-data; boundary=---011000010111000001101001'} +}; + +options.body = formData; + +fetch(url, options) + .then(res => res.json()) + .then(json => console.log(json)) + .catch(err => console.error('error:' + err)); diff --git a/test/fixtures/output/node/fetch/multipart-form-data.js b/test/fixtures/output/node/fetch/multipart-form-data.js new file mode 100644 index 000000000..7b14bfe99 --- /dev/null +++ b/test/fixtures/output/node/fetch/multipart-form-data.js @@ -0,0 +1,19 @@ +const FormData = require('form-data'); +const fetch = require('node-fetch'); +const formData = new FormData(); + +formData.append('foo', 'bar'); + +let url = 'http://mockbin.com/har'; + +let options = { + method: 'POST', + headers: {'Content-Type': 'multipart/form-data; boundary=---011000010111000001101001'} +}; + +options.body = formData; + +fetch(url, options) + .then(res => res.json()) + .then(json => console.log(json)) + .catch(err => console.error('error:' + err)); diff --git a/test/fixtures/output/node/fetch/nested.js b/test/fixtures/output/node/fetch/nested.js new file mode 100644 index 000000000..2976da50e --- /dev/null +++ b/test/fixtures/output/node/fetch/nested.js @@ -0,0 +1,10 @@ +const fetch = require('node-fetch'); + +let url = 'http://mockbin.com/har?foo%5Bbar%5D=baz%2Czap&fiz=buz&key=value'; + +let options = {method: 'GET'}; + +fetch(url, options) + .then(res => res.json()) + .then(json => console.log(json)) + .catch(err => console.error('error:' + err)); diff --git a/test/fixtures/output/node/fetch/query.js b/test/fixtures/output/node/fetch/query.js new file mode 100644 index 000000000..eb6b866d5 --- /dev/null +++ b/test/fixtures/output/node/fetch/query.js @@ -0,0 +1,10 @@ +const fetch = require('node-fetch'); + +let url = 'http://mockbin.com/har?foo=bar&foo=baz&baz=abc&key=value'; + +let options = {method: 'GET'}; + +fetch(url, options) + .then(res => res.json()) + .then(json => console.log(json)) + .catch(err => console.error('error:' + err)); diff --git a/test/fixtures/output/node/fetch/short.js b/test/fixtures/output/node/fetch/short.js new file mode 100644 index 000000000..4e27d88d6 --- /dev/null +++ b/test/fixtures/output/node/fetch/short.js @@ -0,0 +1,10 @@ +const fetch = require('node-fetch'); + +let url = 'http://mockbin.com/har'; + +let options = {method: 'GET'}; + +fetch(url, options) + .then(res => res.json()) + .then(json => console.log(json)) + .catch(err => console.error('error:' + err)); diff --git a/test/fixtures/output/node/fetch/text-plain.js b/test/fixtures/output/node/fetch/text-plain.js new file mode 100644 index 000000000..86b86249c --- /dev/null +++ b/test/fixtures/output/node/fetch/text-plain.js @@ -0,0 +1,10 @@ +const fetch = require('node-fetch'); + +let url = 'http://mockbin.com/har'; + +let options = {method: 'POST', headers: {'content-type': 'text/plain'}, body: 'Hello World'}; + +fetch(url, options) + .then(res => res.json()) + .then(json => console.log(json)) + .catch(err => console.error('error:' + err)); diff --git a/test/fixtures/output/node/native/application-form-encoded.js b/test/fixtures/output/node/native/application-form-encoded.js index 6d91f8974..bcd87872b 100644 --- a/test/fixtures/output/node/native/application-form-encoded.js +++ b/test/fixtures/output/node/native/application-form-encoded.js @@ -1,7 +1,7 @@ -var qs = require("querystring"); -var http = require("http"); +const qs = require("querystring"); +const http = require("http"); -var options = { +const options = { "method": "POST", "hostname": "mockbin.com", "port": null, @@ -11,15 +11,15 @@ var options = { } }; -var req = http.request(options, function (res) { - var chunks = []; +const req = http.request(options, function (res) { + const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { - var body = Buffer.concat(chunks); + const body = Buffer.concat(chunks); console.log(body.toString()); }); }); diff --git a/test/fixtures/output/node/native/application-json.js b/test/fixtures/output/node/native/application-json.js index 9ee32ee3b..4234fe283 100644 --- a/test/fixtures/output/node/native/application-json.js +++ b/test/fixtures/output/node/native/application-json.js @@ -1,6 +1,6 @@ -var http = require("http"); +const http = require("http"); -var options = { +const options = { "method": "POST", "hostname": "mockbin.com", "port": null, @@ -10,15 +10,15 @@ var options = { } }; -var req = http.request(options, function (res) { - var chunks = []; +const req = http.request(options, function (res) { + const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { - var body = Buffer.concat(chunks); + const body = Buffer.concat(chunks); console.log(body.toString()); }); }); diff --git a/test/fixtures/output/node/native/cookies.js b/test/fixtures/output/node/native/cookies.js index 39e75389d..56936f0eb 100644 --- a/test/fixtures/output/node/native/cookies.js +++ b/test/fixtures/output/node/native/cookies.js @@ -1,6 +1,6 @@ -var http = require("http"); +const http = require("http"); -var options = { +const options = { "method": "POST", "hostname": "mockbin.com", "port": null, @@ -10,15 +10,15 @@ var options = { } }; -var req = http.request(options, function (res) { - var chunks = []; +const req = http.request(options, function (res) { + const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { - var body = Buffer.concat(chunks); + const body = Buffer.concat(chunks); console.log(body.toString()); }); }); diff --git a/test/fixtures/output/node/native/custom-method.js b/test/fixtures/output/node/native/custom-method.js index f87f77499..2c44fc9b7 100644 --- a/test/fixtures/output/node/native/custom-method.js +++ b/test/fixtures/output/node/native/custom-method.js @@ -1,6 +1,6 @@ -var http = require("http"); +const http = require("http"); -var options = { +const options = { "method": "PROPFIND", "hostname": "mockbin.com", "port": null, @@ -8,15 +8,15 @@ var options = { "headers": {} }; -var req = http.request(options, function (res) { - var chunks = []; +const req = http.request(options, function (res) { + const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { - var body = Buffer.concat(chunks); + const body = Buffer.concat(chunks); console.log(body.toString()); }); }); diff --git a/test/fixtures/output/node/native/full.js b/test/fixtures/output/node/native/full.js index 8701cdc42..af89775d9 100644 --- a/test/fixtures/output/node/native/full.js +++ b/test/fixtures/output/node/native/full.js @@ -1,7 +1,7 @@ -var qs = require("querystring"); -var http = require("http"); +const qs = require("querystring"); +const http = require("http"); -var options = { +const options = { "method": "POST", "hostname": "mockbin.com", "port": null, @@ -13,15 +13,15 @@ var options = { } }; -var req = http.request(options, function (res) { - var chunks = []; +const req = http.request(options, function (res) { + const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { - var body = Buffer.concat(chunks); + const body = Buffer.concat(chunks); console.log(body.toString()); }); }); diff --git a/test/fixtures/output/node/native/headers.js b/test/fixtures/output/node/native/headers.js index 21d094b48..a36dfc9c1 100644 --- a/test/fixtures/output/node/native/headers.js +++ b/test/fixtures/output/node/native/headers.js @@ -1,6 +1,6 @@ -var http = require("http"); +const http = require("http"); -var options = { +const options = { "method": "GET", "hostname": "mockbin.com", "port": null, @@ -11,15 +11,15 @@ var options = { } }; -var req = http.request(options, function (res) { - var chunks = []; +const req = http.request(options, function (res) { + const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { - var body = Buffer.concat(chunks); + const body = Buffer.concat(chunks); console.log(body.toString()); }); }); diff --git a/test/fixtures/output/node/native/https.js b/test/fixtures/output/node/native/https.js index 5dd0a44b6..e6f201a23 100644 --- a/test/fixtures/output/node/native/https.js +++ b/test/fixtures/output/node/native/https.js @@ -1,6 +1,6 @@ -var http = require("https"); +const http = require("https"); -var options = { +const options = { "method": "GET", "hostname": "mockbin.com", "port": null, @@ -8,15 +8,15 @@ var options = { "headers": {} }; -var req = http.request(options, function (res) { - var chunks = []; +const req = http.request(options, function (res) { + const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { - var body = Buffer.concat(chunks); + const body = Buffer.concat(chunks); console.log(body.toString()); }); }); diff --git a/test/fixtures/output/node/native/jsonObj-multiline.js b/test/fixtures/output/node/native/jsonObj-multiline.js index 2b9873b4a..2a07d1b18 100644 --- a/test/fixtures/output/node/native/jsonObj-multiline.js +++ b/test/fixtures/output/node/native/jsonObj-multiline.js @@ -1,6 +1,6 @@ -var http = require("http"); +const http = require("http"); -var options = { +const options = { "method": "POST", "hostname": "mockbin.com", "port": null, @@ -10,15 +10,15 @@ var options = { } }; -var req = http.request(options, function (res) { - var chunks = []; +const req = http.request(options, function (res) { + const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { - var body = Buffer.concat(chunks); + const body = Buffer.concat(chunks); console.log(body.toString()); }); }); diff --git a/test/fixtures/output/node/native/jsonObj-null-value.js b/test/fixtures/output/node/native/jsonObj-null-value.js index fa34ca357..be0dad1a0 100644 --- a/test/fixtures/output/node/native/jsonObj-null-value.js +++ b/test/fixtures/output/node/native/jsonObj-null-value.js @@ -1,6 +1,6 @@ -var http = require("http"); +const http = require("http"); -var options = { +const options = { "method": "POST", "hostname": "mockbin.com", "port": null, @@ -10,15 +10,15 @@ var options = { } }; -var req = http.request(options, function (res) { - var chunks = []; +const req = http.request(options, function (res) { + const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { - var body = Buffer.concat(chunks); + const body = Buffer.concat(chunks); console.log(body.toString()); }); }); diff --git a/test/fixtures/output/node/native/multipart-data.js b/test/fixtures/output/node/native/multipart-data.js index 61d527c1f..54e204013 100644 --- a/test/fixtures/output/node/native/multipart-data.js +++ b/test/fixtures/output/node/native/multipart-data.js @@ -1,6 +1,6 @@ -var http = require("http"); +const http = require("http"); -var options = { +const options = { "method": "POST", "hostname": "mockbin.com", "port": null, @@ -10,15 +10,15 @@ var options = { } }; -var req = http.request(options, function (res) { - var chunks = []; +const req = http.request(options, function (res) { + const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { - var body = Buffer.concat(chunks); + const body = Buffer.concat(chunks); console.log(body.toString()); }); }); diff --git a/test/fixtures/output/node/native/multipart-file.js b/test/fixtures/output/node/native/multipart-file.js index 17023a88d..23fa91116 100644 --- a/test/fixtures/output/node/native/multipart-file.js +++ b/test/fixtures/output/node/native/multipart-file.js @@ -1,6 +1,6 @@ -var http = require("http"); +const http = require("http"); -var options = { +const options = { "method": "POST", "hostname": "mockbin.com", "port": null, @@ -10,15 +10,15 @@ var options = { } }; -var req = http.request(options, function (res) { - var chunks = []; +const req = http.request(options, function (res) { + const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { - var body = Buffer.concat(chunks); + const body = Buffer.concat(chunks); console.log(body.toString()); }); }); diff --git a/test/fixtures/output/node/native/multipart-form-data.js b/test/fixtures/output/node/native/multipart-form-data.js index 55244c444..dfde8da81 100644 --- a/test/fixtures/output/node/native/multipart-form-data.js +++ b/test/fixtures/output/node/native/multipart-form-data.js @@ -1,24 +1,24 @@ -var http = require("http"); +const http = require("http"); -var options = { +const options = { "method": "POST", "hostname": "mockbin.com", "port": null, "path": "/har", "headers": { - "content-type": "multipart/form-data; boundary=---011000010111000001101001" + "Content-Type": "multipart/form-data; boundary=---011000010111000001101001" } }; -var req = http.request(options, function (res) { - var chunks = []; +const req = http.request(options, function (res) { + const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { - var body = Buffer.concat(chunks); + const body = Buffer.concat(chunks); console.log(body.toString()); }); }); diff --git a/test/fixtures/output/node/native/nested.js b/test/fixtures/output/node/native/nested.js new file mode 100644 index 000000000..f5a048696 --- /dev/null +++ b/test/fixtures/output/node/native/nested.js @@ -0,0 +1,24 @@ +const http = require("http"); + +const options = { + "method": "GET", + "hostname": "mockbin.com", + "port": null, + "path": "/har?foo%5Bbar%5D=baz%2Czap&fiz=buz&key=value", + "headers": {} +}; + +const req = http.request(options, function (res) { + const chunks = []; + + res.on("data", function (chunk) { + chunks.push(chunk); + }); + + res.on("end", function () { + const body = Buffer.concat(chunks); + console.log(body.toString()); + }); +}); + +req.end(); diff --git a/test/fixtures/output/node/native/query.js b/test/fixtures/output/node/native/query.js index c706f8217..c88b3a85a 100644 --- a/test/fixtures/output/node/native/query.js +++ b/test/fixtures/output/node/native/query.js @@ -1,6 +1,6 @@ -var http = require("http"); +const http = require("http"); -var options = { +const options = { "method": "GET", "hostname": "mockbin.com", "port": null, @@ -8,15 +8,15 @@ var options = { "headers": {} }; -var req = http.request(options, function (res) { - var chunks = []; +const req = http.request(options, function (res) { + const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { - var body = Buffer.concat(chunks); + const body = Buffer.concat(chunks); console.log(body.toString()); }); }); diff --git a/test/fixtures/output/node/native/short.js b/test/fixtures/output/node/native/short.js index 1c25ff701..e661ca8c9 100644 --- a/test/fixtures/output/node/native/short.js +++ b/test/fixtures/output/node/native/short.js @@ -1,6 +1,6 @@ -var http = require("http"); +const http = require("http"); -var options = { +const options = { "method": "GET", "hostname": "mockbin.com", "port": null, @@ -8,15 +8,15 @@ var options = { "headers": {} }; -var req = http.request(options, function (res) { - var chunks = []; +const req = http.request(options, function (res) { + const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { - var body = Buffer.concat(chunks); + const body = Buffer.concat(chunks); console.log(body.toString()); }); }); diff --git a/test/fixtures/output/node/native/text-plain.js b/test/fixtures/output/node/native/text-plain.js index f733d8149..3f737b843 100644 --- a/test/fixtures/output/node/native/text-plain.js +++ b/test/fixtures/output/node/native/text-plain.js @@ -1,6 +1,6 @@ -var http = require("http"); +const http = require("http"); -var options = { +const options = { "method": "POST", "hostname": "mockbin.com", "port": null, @@ -10,15 +10,15 @@ var options = { } }; -var req = http.request(options, function (res) { - var chunks = []; +const req = http.request(options, function (res) { + const chunks = []; res.on("data", function (chunk) { chunks.push(chunk); }); res.on("end", function () { - var body = Buffer.concat(chunks); + const body = Buffer.concat(chunks); console.log(body.toString()); }); }); diff --git a/test/fixtures/output/node/request/application-form-encoded.js b/test/fixtures/output/node/request/application-form-encoded.js index 54c6cb9d9..798c16876 100644 --- a/test/fixtures/output/node/request/application-form-encoded.js +++ b/test/fixtures/output/node/request/application-form-encoded.js @@ -1,6 +1,6 @@ -var request = require("request"); +const request = require('request'); -var options = { +const options = { method: 'POST', url: 'http://mockbin.com/har', headers: {'content-type': 'application/x-www-form-urlencoded'}, diff --git a/test/fixtures/output/node/request/application-json.js b/test/fixtures/output/node/request/application-json.js index 47ccb206a..af6ad0db3 100644 --- a/test/fixtures/output/node/request/application-json.js +++ b/test/fixtures/output/node/request/application-json.js @@ -1,6 +1,6 @@ -var request = require("request"); +const request = require('request'); -var options = { +const options = { method: 'POST', url: 'http://mockbin.com/har', headers: {'content-type': 'application/json'}, diff --git a/test/fixtures/output/node/request/cookies.js b/test/fixtures/output/node/request/cookies.js index a739c0cef..4d23a4d14 100644 --- a/test/fixtures/output/node/request/cookies.js +++ b/test/fixtures/output/node/request/cookies.js @@ -1,10 +1,10 @@ -var request = require("request"); +const request = require('request'); -var jar = request.jar(); -jar.setCookie(request.cookie("foo=bar"), "http://mockbin.com/har"); -jar.setCookie(request.cookie("bar=baz"), "http://mockbin.com/har"); +const jar = request.jar(); +jar.setCookie(request.cookie('foo=bar'), 'http://mockbin.com/har'); +jar.setCookie(request.cookie('bar=baz'), 'http://mockbin.com/har'); -var options = {method: 'POST', url: 'http://mockbin.com/har', jar: 'JAR'}; +const options = {method: 'POST', url: 'http://mockbin.com/har', jar: 'JAR'}; request(options, function (error, response, body) { if (error) throw new Error(error); diff --git a/test/fixtures/output/node/request/custom-method.js b/test/fixtures/output/node/request/custom-method.js index 947650559..3b2bff046 100644 --- a/test/fixtures/output/node/request/custom-method.js +++ b/test/fixtures/output/node/request/custom-method.js @@ -1,6 +1,6 @@ -var request = require("request"); +const request = require('request'); -var options = {method: 'PROPFIND', url: 'http://mockbin.com/har'}; +const options = {method: 'PROPFIND', url: 'http://mockbin.com/har'}; request(options, function (error, response, body) { if (error) throw new Error(error); diff --git a/test/fixtures/output/node/request/full.js b/test/fixtures/output/node/request/full.js index b24ae4bb6..2dd1c8aa8 100644 --- a/test/fixtures/output/node/request/full.js +++ b/test/fixtures/output/node/request/full.js @@ -1,10 +1,10 @@ -var request = require("request"); +const request = require('request'); -var jar = request.jar(); -jar.setCookie(request.cookie("foo=bar"), "http://mockbin.com/har"); -jar.setCookie(request.cookie("bar=baz"), "http://mockbin.com/har"); +const jar = request.jar(); +jar.setCookie(request.cookie('foo=bar'), 'http://mockbin.com/har'); +jar.setCookie(request.cookie('bar=baz'), 'http://mockbin.com/har'); -var options = { +const options = { method: 'POST', url: 'http://mockbin.com/har', qs: {foo: ['bar', 'baz'], baz: 'abc', key: 'value'}, diff --git a/test/fixtures/output/node/request/headers.js b/test/fixtures/output/node/request/headers.js index 1e28531ff..a30e3fb4c 100644 --- a/test/fixtures/output/node/request/headers.js +++ b/test/fixtures/output/node/request/headers.js @@ -1,6 +1,6 @@ -var request = require("request"); +const request = require('request'); -var options = { +const options = { method: 'GET', url: 'http://mockbin.com/har', headers: {accept: 'application/json', 'x-foo': 'Bar'} diff --git a/test/fixtures/output/node/request/https.js b/test/fixtures/output/node/request/https.js index d655d6835..b5e4390ed 100644 --- a/test/fixtures/output/node/request/https.js +++ b/test/fixtures/output/node/request/https.js @@ -1,6 +1,6 @@ -var request = require("request"); +const request = require('request'); -var options = {method: 'GET', url: 'https://mockbin.com/har'}; +const options = {method: 'GET', url: 'https://mockbin.com/har'}; request(options, function (error, response, body) { if (error) throw new Error(error); diff --git a/test/fixtures/output/node/request/jsonObj-multiline.js b/test/fixtures/output/node/request/jsonObj-multiline.js index 3a0c3a8d0..b94df9ca5 100644 --- a/test/fixtures/output/node/request/jsonObj-multiline.js +++ b/test/fixtures/output/node/request/jsonObj-multiline.js @@ -1,6 +1,6 @@ -var request = require("request"); +const request = require('request'); -var options = { +const options = { method: 'POST', url: 'http://mockbin.com/har', headers: {'content-type': 'application/json'}, diff --git a/test/fixtures/output/node/request/jsonObj-null-value.js b/test/fixtures/output/node/request/jsonObj-null-value.js index a06dd028a..e12f19716 100644 --- a/test/fixtures/output/node/request/jsonObj-null-value.js +++ b/test/fixtures/output/node/request/jsonObj-null-value.js @@ -1,6 +1,6 @@ -var request = require("request"); +const request = require('request'); -var options = { +const options = { method: 'POST', url: 'http://mockbin.com/har', headers: {'content-type': 'application/json'}, diff --git a/test/fixtures/output/node/request/multipart-data.js b/test/fixtures/output/node/request/multipart-data.js index 2af993d89..defd7acbb 100644 --- a/test/fixtures/output/node/request/multipart-data.js +++ b/test/fixtures/output/node/request/multipart-data.js @@ -1,16 +1,14 @@ -var request = require("request"); +const fs = require('fs'); +const request = require('request'); -var options = { +const options = { method: 'POST', url: 'http://mockbin.com/har', headers: {'content-type': 'multipart/form-data; boundary=---011000010111000001101001'}, formData: { foo: { - value: 'Hello World', - options: { - filename: 'hello.txt', - contentType: 'text/plain' - } + value: fs.createReadStream('hello.txt'), + options: {filename: 'hello.txt', contentType: 'text/plain'} } } }; diff --git a/test/fixtures/output/node/request/multipart-file.js b/test/fixtures/output/node/request/multipart-file.js index 0eae5dea1..8cb2864ba 100644 --- a/test/fixtures/output/node/request/multipart-file.js +++ b/test/fixtures/output/node/request/multipart-file.js @@ -1,17 +1,14 @@ -var fs = require("fs"); -var request = require("request"); +const fs = require('fs'); +const request = require('request'); -var options = { +const options = { method: 'POST', url: 'http://mockbin.com/har', headers: {'content-type': 'multipart/form-data; boundary=---011000010111000001101001'}, formData: { foo: { - value: 'fs.createReadStream("test/fixtures/files/hello.txt")', - options: { - filename: 'test/fixtures/files/hello.txt', - contentType: 'text/plain' - } + value: fs.createReadStream('test/fixtures/files/hello.txt'), + options: {filename: 'test/fixtures/files/hello.txt', contentType: 'text/plain'} } } }; diff --git a/test/fixtures/output/node/request/multipart-form-data.js b/test/fixtures/output/node/request/multipart-form-data.js index 05ddf57dd..e808b7162 100644 --- a/test/fixtures/output/node/request/multipart-form-data.js +++ b/test/fixtures/output/node/request/multipart-form-data.js @@ -1,9 +1,9 @@ -var request = require("request"); +const request = require('request'); -var options = { +const options = { method: 'POST', url: 'http://mockbin.com/har', - headers: {'content-type': 'multipart/form-data; boundary=---011000010111000001101001'}, + headers: {'Content-Type': 'multipart/form-data; boundary=---011000010111000001101001'}, formData: {foo: 'bar'} }; diff --git a/test/fixtures/output/node/request/nested.js b/test/fixtures/output/node/request/nested.js new file mode 100644 index 000000000..f3b711bd6 --- /dev/null +++ b/test/fixtures/output/node/request/nested.js @@ -0,0 +1,14 @@ +const request = require('request'); + +const options = { + method: 'GET', + url: 'http://mockbin.com/har', + qs: {'foo[bar]': 'baz,zap', fiz: 'buz', key: 'value'} +}; + +request(options, function (error, response, body) { + if (error) throw new Error(error); + + console.log(body); +}); + diff --git a/test/fixtures/output/node/request/query.js b/test/fixtures/output/node/request/query.js index dfcb2e763..9183840e5 100644 --- a/test/fixtures/output/node/request/query.js +++ b/test/fixtures/output/node/request/query.js @@ -1,6 +1,6 @@ -var request = require("request"); +const request = require('request'); -var options = { +const options = { method: 'GET', url: 'http://mockbin.com/har', qs: {foo: ['bar', 'baz'], baz: 'abc', key: 'value'} diff --git a/test/fixtures/output/node/request/short.js b/test/fixtures/output/node/request/short.js index 823ad63e2..4543d8a39 100644 --- a/test/fixtures/output/node/request/short.js +++ b/test/fixtures/output/node/request/short.js @@ -1,6 +1,6 @@ -var request = require("request"); +const request = require('request'); -var options = {method: 'GET', url: 'http://mockbin.com/har'}; +const options = {method: 'GET', url: 'http://mockbin.com/har'}; request(options, function (error, response, body) { if (error) throw new Error(error); diff --git a/test/fixtures/output/node/request/text-plain.js b/test/fixtures/output/node/request/text-plain.js index bf646234e..e0bdcacfa 100644 --- a/test/fixtures/output/node/request/text-plain.js +++ b/test/fixtures/output/node/request/text-plain.js @@ -1,6 +1,6 @@ -var request = require("request"); +const request = require('request'); -var options = { +const options = { method: 'POST', url: 'http://mockbin.com/har', headers: {'content-type': 'text/plain'}, diff --git a/test/fixtures/output/node/unirest/application-form-encoded.js b/test/fixtures/output/node/unirest/application-form-encoded.js index 5f410768b..b8d2d15c8 100644 --- a/test/fixtures/output/node/unirest/application-form-encoded.js +++ b/test/fixtures/output/node/unirest/application-form-encoded.js @@ -1,6 +1,6 @@ -var unirest = require("unirest"); +const unirest = require("unirest"); -var req = unirest("POST", "http://mockbin.com/har"); +const req = unirest("POST", "http://mockbin.com/har"); req.headers({ "content-type": "application/x-www-form-urlencoded" diff --git a/test/fixtures/output/node/unirest/application-json.js b/test/fixtures/output/node/unirest/application-json.js index ba8d8202a..c9ec7c013 100644 --- a/test/fixtures/output/node/unirest/application-json.js +++ b/test/fixtures/output/node/unirest/application-json.js @@ -1,6 +1,6 @@ -var unirest = require("unirest"); +const unirest = require("unirest"); -var req = unirest("POST", "http://mockbin.com/har"); +const req = unirest("POST", "http://mockbin.com/har"); req.headers({ "content-type": "application/json" diff --git a/test/fixtures/output/node/unirest/cookies.js b/test/fixtures/output/node/unirest/cookies.js index 6d8d62d41..f14403091 100644 --- a/test/fixtures/output/node/unirest/cookies.js +++ b/test/fixtures/output/node/unirest/cookies.js @@ -1,13 +1,12 @@ -var unirest = require("unirest"); +const unirest = require("unirest"); -var req = unirest("POST", "http://mockbin.com/har"); +const req = unirest("POST", "http://mockbin.com/har"); -var CookieJar = unirest.jar(); +const CookieJar = unirest.jar(); CookieJar.add("foo=bar","http://mockbin.com/har"); CookieJar.add("bar=baz","http://mockbin.com/har"); req.jar(CookieJar); - req.end(function (res) { if (res.error) throw new Error(res.error); diff --git a/test/fixtures/output/node/unirest/custom-method.js b/test/fixtures/output/node/unirest/custom-method.js index 3e5bb5fa5..a2a931df2 100644 --- a/test/fixtures/output/node/unirest/custom-method.js +++ b/test/fixtures/output/node/unirest/custom-method.js @@ -1,7 +1,6 @@ -var unirest = require("unirest"); - -var req = unirest("PROPFIND", "http://mockbin.com/har"); +const unirest = require("unirest"); +const req = unirest("PROPFIND", "http://mockbin.com/har"); req.end(function (res) { if (res.error) throw new Error(res.error); diff --git a/test/fixtures/output/node/unirest/full.js b/test/fixtures/output/node/unirest/full.js index a7b949626..2c638e450 100644 --- a/test/fixtures/output/node/unirest/full.js +++ b/test/fixtures/output/node/unirest/full.js @@ -1,8 +1,8 @@ -var unirest = require("unirest"); +const unirest = require("unirest"); -var req = unirest("POST", "http://mockbin.com/har"); +const req = unirest("POST", "http://mockbin.com/har"); -var CookieJar = unirest.jar(); +const CookieJar = unirest.jar(); CookieJar.add("foo=bar","http://mockbin.com/har"); CookieJar.add("bar=baz","http://mockbin.com/har"); req.jar(CookieJar); diff --git a/test/fixtures/output/node/unirest/headers.js b/test/fixtures/output/node/unirest/headers.js index c36114767..a9e1939b2 100644 --- a/test/fixtures/output/node/unirest/headers.js +++ b/test/fixtures/output/node/unirest/headers.js @@ -1,13 +1,12 @@ -var unirest = require("unirest"); +const unirest = require("unirest"); -var req = unirest("GET", "http://mockbin.com/har"); +const req = unirest("GET", "http://mockbin.com/har"); req.headers({ "accept": "application/json", "x-foo": "Bar" }); - req.end(function (res) { if (res.error) throw new Error(res.error); diff --git a/test/fixtures/output/node/unirest/https.js b/test/fixtures/output/node/unirest/https.js index ec5faf337..52ae902f6 100644 --- a/test/fixtures/output/node/unirest/https.js +++ b/test/fixtures/output/node/unirest/https.js @@ -1,7 +1,6 @@ -var unirest = require("unirest"); - -var req = unirest("GET", "https://mockbin.com/har"); +const unirest = require("unirest"); +const req = unirest("GET", "https://mockbin.com/har"); req.end(function (res) { if (res.error) throw new Error(res.error); diff --git a/test/fixtures/output/node/unirest/jsonObj-multiline.js b/test/fixtures/output/node/unirest/jsonObj-multiline.js index cafd8cd60..2044cfe6b 100644 --- a/test/fixtures/output/node/unirest/jsonObj-multiline.js +++ b/test/fixtures/output/node/unirest/jsonObj-multiline.js @@ -1,6 +1,6 @@ -var unirest = require("unirest"); +const unirest = require("unirest"); -var req = unirest("POST", "http://mockbin.com/har"); +const req = unirest("POST", "http://mockbin.com/har"); req.headers({ "content-type": "application/json" diff --git a/test/fixtures/output/node/unirest/jsonObj-null-value.js b/test/fixtures/output/node/unirest/jsonObj-null-value.js index f898c6024..73ae28654 100644 --- a/test/fixtures/output/node/unirest/jsonObj-null-value.js +++ b/test/fixtures/output/node/unirest/jsonObj-null-value.js @@ -1,6 +1,6 @@ -var unirest = require("unirest"); +const unirest = require("unirest"); -var req = unirest("POST", "http://mockbin.com/har"); +const req = unirest("POST", "http://mockbin.com/har"); req.headers({ "content-type": "application/json" diff --git a/test/fixtures/output/node/unirest/multipart-data.js b/test/fixtures/output/node/unirest/multipart-data.js index bdf8da515..dafb13368 100644 --- a/test/fixtures/output/node/unirest/multipart-data.js +++ b/test/fixtures/output/node/unirest/multipart-data.js @@ -1,6 +1,6 @@ -var unirest = require("unirest"); +const unirest = require("unirest"); -var req = unirest("POST", "http://mockbin.com/har"); +const req = unirest("POST", "http://mockbin.com/har"); req.headers({ "content-type": "multipart/form-data; boundary=---011000010111000001101001" diff --git a/test/fixtures/output/node/unirest/multipart-file.js b/test/fixtures/output/node/unirest/multipart-file.js index c8efe878a..d18272287 100644 --- a/test/fixtures/output/node/unirest/multipart-file.js +++ b/test/fixtures/output/node/unirest/multipart-file.js @@ -1,7 +1,7 @@ -var fs = require("fs"); -var unirest = require("unirest"); +const fs = require("fs"); +const unirest = require("unirest"); -var req = unirest("POST", "http://mockbin.com/har"); +const req = unirest("POST", "http://mockbin.com/har"); req.headers({ "content-type": "multipart/form-data; boundary=---011000010111000001101001" diff --git a/test/fixtures/output/node/unirest/multipart-form-data.js b/test/fixtures/output/node/unirest/multipart-form-data.js index ea358a350..ada44268c 100644 --- a/test/fixtures/output/node/unirest/multipart-form-data.js +++ b/test/fixtures/output/node/unirest/multipart-form-data.js @@ -1,9 +1,9 @@ -var unirest = require("unirest"); +const unirest = require("unirest"); -var req = unirest("POST", "http://mockbin.com/har"); +const req = unirest("POST", "http://mockbin.com/har"); req.headers({ - "content-type": "multipart/form-data; boundary=---011000010111000001101001" + "Content-Type": "multipart/form-data; boundary=---011000010111000001101001" }); req.multipart([ diff --git a/test/fixtures/output/node/unirest/nested.js b/test/fixtures/output/node/unirest/nested.js new file mode 100644 index 000000000..5df42aa0f --- /dev/null +++ b/test/fixtures/output/node/unirest/nested.js @@ -0,0 +1,16 @@ +const unirest = require("unirest"); + +const req = unirest("GET", "http://mockbin.com/har"); + +req.query({ + "foo[bar]": "baz,zap", + "fiz": "buz", + "key": "value" +}); + +req.end(function (res) { + if (res.error) throw new Error(res.error); + + console.log(res.body); +}); + diff --git a/test/fixtures/output/node/unirest/query.js b/test/fixtures/output/node/unirest/query.js index 464e2f941..2fc6e74d8 100644 --- a/test/fixtures/output/node/unirest/query.js +++ b/test/fixtures/output/node/unirest/query.js @@ -1,6 +1,6 @@ -var unirest = require("unirest"); +const unirest = require("unirest"); -var req = unirest("GET", "http://mockbin.com/har"); +const req = unirest("GET", "http://mockbin.com/har"); req.query({ "foo": [ @@ -11,7 +11,6 @@ req.query({ "key": "value" }); - req.end(function (res) { if (res.error) throw new Error(res.error); diff --git a/test/fixtures/output/node/unirest/short.js b/test/fixtures/output/node/unirest/short.js index 95a778b52..666a38b54 100644 --- a/test/fixtures/output/node/unirest/short.js +++ b/test/fixtures/output/node/unirest/short.js @@ -1,7 +1,6 @@ -var unirest = require("unirest"); - -var req = unirest("GET", "http://mockbin.com/har"); +const unirest = require("unirest"); +const req = unirest("GET", "http://mockbin.com/har"); req.end(function (res) { if (res.error) throw new Error(res.error); diff --git a/test/fixtures/output/node/unirest/text-plain.js b/test/fixtures/output/node/unirest/text-plain.js index bffa7ee03..aa25d2db1 100644 --- a/test/fixtures/output/node/unirest/text-plain.js +++ b/test/fixtures/output/node/unirest/text-plain.js @@ -1,12 +1,12 @@ -var unirest = require("unirest"); +const unirest = require("unirest"); -var req = unirest("POST", "http://mockbin.com/har"); +const req = unirest("POST", "http://mockbin.com/har"); req.headers({ "content-type": "text/plain" }); - req.send("Hello World"); +req.send("Hello World"); req.end(function (res) { if (res.error) throw new Error(res.error); diff --git a/test/fixtures/output/objc/nsurlsession/multipart-form-data.m b/test/fixtures/output/objc/nsurlsession/multipart-form-data.m index 3c4648d02..0790bf768 100644 --- a/test/fixtures/output/objc/nsurlsession/multipart-form-data.m +++ b/test/fixtures/output/objc/nsurlsession/multipart-form-data.m @@ -1,6 +1,6 @@ #import -NSDictionary *headers = @{ @"content-type": @"multipart/form-data; boundary=---011000010111000001101001" }; +NSDictionary *headers = @{ @"Content-Type": @"multipart/form-data; boundary=---011000010111000001101001" }; NSArray *parameters = @[ @{ @"name": @"foo", @"value": @"bar" } ]; NSString *boundary = @"---011000010111000001101001"; diff --git a/test/fixtures/output/objc/nsurlsession/nested.m b/test/fixtures/output/objc/nsurlsession/nested.m new file mode 100644 index 000000000..b3c64dcf5 --- /dev/null +++ b/test/fixtures/output/objc/nsurlsession/nested.m @@ -0,0 +1,18 @@ +#import + +NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://mockbin.com/har?foo%5Bbar%5D=baz%2Czap&fiz=buz&key=value"] + cachePolicy:NSURLRequestUseProtocolCachePolicy + timeoutInterval:10.0]; +[request setHTTPMethod:@"GET"]; + +NSURLSession *session = [NSURLSession sharedSession]; +NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request + completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { + if (error) { + NSLog(@"%@", error); + } else { + NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response; + NSLog(@"%@", httpResponse); + } + }]; +[dataTask resume]; diff --git a/test/fixtures/output/ocaml/cohttp/multipart-form-data.ml b/test/fixtures/output/ocaml/cohttp/multipart-form-data.ml index 488c3e41b..efc66b71a 100644 --- a/test/fixtures/output/ocaml/cohttp/multipart-form-data.ml +++ b/test/fixtures/output/ocaml/cohttp/multipart-form-data.ml @@ -3,7 +3,7 @@ open Cohttp open Lwt let uri = Uri.of_string "http://mockbin.com/har" in -let headers = Header.add (Header.init ()) "content-type" "multipart/form-data; boundary=---011000010111000001101001" in +let headers = Header.add (Header.init ()) "Content-Type" "multipart/form-data; boundary=---011000010111000001101001" in let body = Cohttp_lwt_body.of_string "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"foo\"\r\n\r\nbar\r\n-----011000010111000001101001--\r\n" in Client.call ~headers ~body `POST uri diff --git a/test/fixtures/output/ocaml/cohttp/nested.ml b/test/fixtures/output/ocaml/cohttp/nested.ml new file mode 100644 index 000000000..b9f95ece5 --- /dev/null +++ b/test/fixtures/output/ocaml/cohttp/nested.ml @@ -0,0 +1,9 @@ +open Cohttp_lwt_unix +open Cohttp +open Lwt + +let uri = Uri.of_string "http://mockbin.com/har?foo%5Bbar%5D=baz%2Czap&fiz=buz&key=value" in + +Client.call `GET uri +>>= fun (res, body_stream) -> + (* Do stuff with the result *) diff --git a/test/fixtures/output/php/curl/application-form-encoded.php b/test/fixtures/output/php/curl/application-form-encoded.php index ca76dc0af..0892dd3ed 100644 --- a/test/fixtures/output/php/curl/application-form-encoded.php +++ b/test/fixtures/output/php/curl/application-form-encoded.php @@ -2,7 +2,7 @@ $curl = curl_init(); -curl_setopt_array($curl, array( +curl_setopt_array($curl, [ CURLOPT_URL => "http://mockbin.com/har", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", @@ -11,10 +11,10 @@ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => "foo=bar&hello=world", - CURLOPT_HTTPHEADER => array( + CURLOPT_HTTPHEADER => [ "content-type: application/x-www-form-urlencoded" - ), -)); + ], +]); $response = curl_exec($curl); $err = curl_error($curl); diff --git a/test/fixtures/output/php/curl/application-json.php b/test/fixtures/output/php/curl/application-json.php index 595bcd167..8a0f0c1e4 100644 --- a/test/fixtures/output/php/curl/application-json.php +++ b/test/fixtures/output/php/curl/application-json.php @@ -2,7 +2,7 @@ $curl = curl_init(); -curl_setopt_array($curl, array( +curl_setopt_array($curl, [ CURLOPT_URL => "http://mockbin.com/har", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", @@ -11,10 +11,10 @@ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => "{\"number\":1,\"string\":\"f\\\"oo\",\"arr\":[1,2,3],\"nested\":{\"a\":\"b\"},\"arr_mix\":[1,\"a\",{\"arr_mix_nested\":{}}],\"boolean\":false}", - CURLOPT_HTTPHEADER => array( + CURLOPT_HTTPHEADER => [ "content-type: application/json" - ), -)); + ], +]); $response = curl_exec($curl); $err = curl_error($curl); diff --git a/test/fixtures/output/php/curl/cookies.php b/test/fixtures/output/php/curl/cookies.php index 1f6ab0c63..28104300e 100644 --- a/test/fixtures/output/php/curl/cookies.php +++ b/test/fixtures/output/php/curl/cookies.php @@ -2,7 +2,7 @@ $curl = curl_init(); -curl_setopt_array($curl, array( +curl_setopt_array($curl, [ CURLOPT_URL => "http://mockbin.com/har", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", @@ -11,7 +11,7 @@ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_COOKIE => "foo=bar; bar=baz", -)); +]); $response = curl_exec($curl); $err = curl_error($curl); diff --git a/test/fixtures/output/php/curl/custom-method.php b/test/fixtures/output/php/curl/custom-method.php index b12fac445..08aa59732 100644 --- a/test/fixtures/output/php/curl/custom-method.php +++ b/test/fixtures/output/php/curl/custom-method.php @@ -2,7 +2,7 @@ $curl = curl_init(); -curl_setopt_array($curl, array( +curl_setopt_array($curl, [ CURLOPT_URL => "http://mockbin.com/har", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", @@ -10,7 +10,7 @@ CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "PROPFIND", -)); +]); $response = curl_exec($curl); $err = curl_error($curl); diff --git a/test/fixtures/output/php/curl/full.php b/test/fixtures/output/php/curl/full.php index 4208fd484..6f342b6dd 100644 --- a/test/fixtures/output/php/curl/full.php +++ b/test/fixtures/output/php/curl/full.php @@ -2,7 +2,7 @@ $curl = curl_init(); -curl_setopt_array($curl, array( +curl_setopt_array($curl, [ CURLOPT_URL => "http://mockbin.com/har?foo=bar&foo=baz&baz=abc&key=value", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", @@ -12,11 +12,11 @@ CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => "foo=bar", CURLOPT_COOKIE => "foo=bar; bar=baz", - CURLOPT_HTTPHEADER => array( + CURLOPT_HTTPHEADER => [ "accept: application/json", "content-type: application/x-www-form-urlencoded" - ), -)); + ], +]); $response = curl_exec($curl); $err = curl_error($curl); diff --git a/test/fixtures/output/php/curl/headers.php b/test/fixtures/output/php/curl/headers.php index 1e080520d..4e8be5acf 100644 --- a/test/fixtures/output/php/curl/headers.php +++ b/test/fixtures/output/php/curl/headers.php @@ -2,7 +2,7 @@ $curl = curl_init(); -curl_setopt_array($curl, array( +curl_setopt_array($curl, [ CURLOPT_URL => "http://mockbin.com/har", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", @@ -10,11 +10,11 @@ CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", - CURLOPT_HTTPHEADER => array( + CURLOPT_HTTPHEADER => [ "accept: application/json", "x-foo: Bar" - ), -)); + ], +]); $response = curl_exec($curl); $err = curl_error($curl); diff --git a/test/fixtures/output/php/curl/https.php b/test/fixtures/output/php/curl/https.php index 01b00b21d..7d97476ee 100644 --- a/test/fixtures/output/php/curl/https.php +++ b/test/fixtures/output/php/curl/https.php @@ -2,7 +2,7 @@ $curl = curl_init(); -curl_setopt_array($curl, array( +curl_setopt_array($curl, [ CURLOPT_URL => "https://mockbin.com/har", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", @@ -10,7 +10,7 @@ CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", -)); +]); $response = curl_exec($curl); $err = curl_error($curl); diff --git a/test/fixtures/output/php/curl/jsonObj-multiline.php b/test/fixtures/output/php/curl/jsonObj-multiline.php index a05b726be..19f772744 100644 --- a/test/fixtures/output/php/curl/jsonObj-multiline.php +++ b/test/fixtures/output/php/curl/jsonObj-multiline.php @@ -2,7 +2,7 @@ $curl = curl_init(); -curl_setopt_array($curl, array( +curl_setopt_array($curl, [ CURLOPT_URL => "http://mockbin.com/har", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", @@ -11,10 +11,10 @@ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => "{\n \"foo\": \"bar\"\n}", - CURLOPT_HTTPHEADER => array( + CURLOPT_HTTPHEADER => [ "content-type: application/json" - ), -)); + ], +]); $response = curl_exec($curl); $err = curl_error($curl); diff --git a/test/fixtures/output/php/curl/jsonObj-null-value.php b/test/fixtures/output/php/curl/jsonObj-null-value.php index 91194a4a1..99a228991 100644 --- a/test/fixtures/output/php/curl/jsonObj-null-value.php +++ b/test/fixtures/output/php/curl/jsonObj-null-value.php @@ -2,7 +2,7 @@ $curl = curl_init(); -curl_setopt_array($curl, array( +curl_setopt_array($curl, [ CURLOPT_URL => "http://mockbin.com/har", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", @@ -11,10 +11,10 @@ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => "{\"foo\":null}", - CURLOPT_HTTPHEADER => array( + CURLOPT_HTTPHEADER => [ "content-type: application/json" - ), -)); + ], +]); $response = curl_exec($curl); $err = curl_error($curl); diff --git a/test/fixtures/output/php/curl/multipart-data.php b/test/fixtures/output/php/curl/multipart-data.php index 944a4c374..d6ce07fe3 100644 --- a/test/fixtures/output/php/curl/multipart-data.php +++ b/test/fixtures/output/php/curl/multipart-data.php @@ -2,7 +2,7 @@ $curl = curl_init(); -curl_setopt_array($curl, array( +curl_setopt_array($curl, [ CURLOPT_URL => "http://mockbin.com/har", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", @@ -11,10 +11,10 @@ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"foo\"; filename=\"hello.txt\"\r\nContent-Type: text/plain\r\n\r\nHello World\r\n-----011000010111000001101001--\r\n", - CURLOPT_HTTPHEADER => array( + CURLOPT_HTTPHEADER => [ "content-type: multipart/form-data; boundary=---011000010111000001101001" - ), -)); + ], +]); $response = curl_exec($curl); $err = curl_error($curl); diff --git a/test/fixtures/output/php/curl/multipart-file.php b/test/fixtures/output/php/curl/multipart-file.php index 160b27705..e238b8edf 100644 --- a/test/fixtures/output/php/curl/multipart-file.php +++ b/test/fixtures/output/php/curl/multipart-file.php @@ -2,7 +2,7 @@ $curl = curl_init(); -curl_setopt_array($curl, array( +curl_setopt_array($curl, [ CURLOPT_URL => "http://mockbin.com/har", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", @@ -11,10 +11,10 @@ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"foo\"; filename=\"hello.txt\"\r\nContent-Type: text/plain\r\n\r\n\r\n-----011000010111000001101001--\r\n", - CURLOPT_HTTPHEADER => array( + CURLOPT_HTTPHEADER => [ "content-type: multipart/form-data; boundary=---011000010111000001101001" - ), -)); + ], +]); $response = curl_exec($curl); $err = curl_error($curl); diff --git a/test/fixtures/output/php/curl/multipart-form-data.php b/test/fixtures/output/php/curl/multipart-form-data.php index f815f6c56..038aa49c9 100644 --- a/test/fixtures/output/php/curl/multipart-form-data.php +++ b/test/fixtures/output/php/curl/multipart-form-data.php @@ -2,7 +2,7 @@ $curl = curl_init(); -curl_setopt_array($curl, array( +curl_setopt_array($curl, [ CURLOPT_URL => "http://mockbin.com/har", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", @@ -11,10 +11,10 @@ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"foo\"\r\n\r\nbar\r\n-----011000010111000001101001--\r\n", - CURLOPT_HTTPHEADER => array( - "content-type: multipart/form-data; boundary=---011000010111000001101001" - ), -)); + CURLOPT_HTTPHEADER => [ + "Content-Type: multipart/form-data; boundary=---011000010111000001101001" + ], +]); $response = curl_exec($curl); $err = curl_error($curl); diff --git a/test/fixtures/output/php/curl/nested.php b/test/fixtures/output/php/curl/nested.php new file mode 100644 index 000000000..9b345abe1 --- /dev/null +++ b/test/fixtures/output/php/curl/nested.php @@ -0,0 +1,24 @@ + "http://mockbin.com/har?foo%5Bbar%5D=baz%2Czap&fiz=buz&key=value", + CURLOPT_RETURNTRANSFER => true, + CURLOPT_ENCODING => "", + CURLOPT_MAXREDIRS => 10, + CURLOPT_TIMEOUT => 30, + CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, + CURLOPT_CUSTOMREQUEST => "GET", +]); + +$response = curl_exec($curl); +$err = curl_error($curl); + +curl_close($curl); + +if ($err) { + echo "cURL Error #:" . $err; +} else { + echo $response; +} diff --git a/test/fixtures/output/php/curl/query.php b/test/fixtures/output/php/curl/query.php index d85fc7815..158e8511b 100644 --- a/test/fixtures/output/php/curl/query.php +++ b/test/fixtures/output/php/curl/query.php @@ -2,7 +2,7 @@ $curl = curl_init(); -curl_setopt_array($curl, array( +curl_setopt_array($curl, [ CURLOPT_URL => "http://mockbin.com/har?foo=bar&foo=baz&baz=abc&key=value", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", @@ -10,7 +10,7 @@ CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", -)); +]); $response = curl_exec($curl); $err = curl_error($curl); diff --git a/test/fixtures/output/php/curl/short.php b/test/fixtures/output/php/curl/short.php index c67fb150f..9188e25cc 100644 --- a/test/fixtures/output/php/curl/short.php +++ b/test/fixtures/output/php/curl/short.php @@ -2,7 +2,7 @@ $curl = curl_init(); -curl_setopt_array($curl, array( +curl_setopt_array($curl, [ CURLOPT_URL => "http://mockbin.com/har", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", @@ -10,7 +10,7 @@ CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", -)); +]); $response = curl_exec($curl); $err = curl_error($curl); diff --git a/test/fixtures/output/php/curl/text-plain.php b/test/fixtures/output/php/curl/text-plain.php index 6306b9213..8fbb09dff 100644 --- a/test/fixtures/output/php/curl/text-plain.php +++ b/test/fixtures/output/php/curl/text-plain.php @@ -2,7 +2,7 @@ $curl = curl_init(); -curl_setopt_array($curl, array( +curl_setopt_array($curl, [ CURLOPT_URL => "http://mockbin.com/har", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", @@ -11,10 +11,10 @@ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => "Hello World", - CURLOPT_HTTPHEADER => array( + CURLOPT_HTTPHEADER => [ "content-type: text/plain" - ), -)); + ], +]); $response = curl_exec($curl); $err = curl_error($curl); diff --git a/test/fixtures/output/php/http1/application-form-encoded.php b/test/fixtures/output/php/http1/application-form-encoded.php index 32d4112bd..44079b8a0 100644 --- a/test/fixtures/output/php/http1/application-form-encoded.php +++ b/test/fixtures/output/php/http1/application-form-encoded.php @@ -4,15 +4,15 @@ $request->setUrl('http://mockbin.com/har'); $request->setMethod(HTTP_METH_POST); -$request->setHeaders(array( +$request->setHeaders([ 'content-type' => 'application/x-www-form-urlencoded' -)); +]); $request->setContentType('application/x-www-form-urlencoded'); -$request->setPostFields(array( +$request->setPostFields([ 'foo' => 'bar', 'hello' => 'world' -)); +]); try { $response = $request->send(); diff --git a/test/fixtures/output/php/http1/application-json.php b/test/fixtures/output/php/http1/application-json.php index 2abde643d..15e736556 100644 --- a/test/fixtures/output/php/http1/application-json.php +++ b/test/fixtures/output/php/http1/application-json.php @@ -4,9 +4,9 @@ $request->setUrl('http://mockbin.com/har'); $request->setMethod(HTTP_METH_POST); -$request->setHeaders(array( +$request->setHeaders([ 'content-type' => 'application/json' -)); +]); $request->setBody('{"number":1,"string":"f\\"oo","arr":[1,2,3],"nested":{"a":"b"},"arr_mix":[1,"a",{"arr_mix_nested":{}}],"boolean":false}'); diff --git a/test/fixtures/output/php/http1/cookies.php b/test/fixtures/output/php/http1/cookies.php index 1dfcf609b..032a4bb4f 100644 --- a/test/fixtures/output/php/http1/cookies.php +++ b/test/fixtures/output/php/http1/cookies.php @@ -4,10 +4,10 @@ $request->setUrl('http://mockbin.com/har'); $request->setMethod(HTTP_METH_POST); -$request->setCookies(array( +$request->setCookies([ 'bar' => 'baz', 'foo' => 'bar' -)); +]); try { $response = $request->send(); diff --git a/test/fixtures/output/php/http1/full.php b/test/fixtures/output/php/http1/full.php index d40b63f07..f94481137 100644 --- a/test/fixtures/output/php/http1/full.php +++ b/test/fixtures/output/php/http1/full.php @@ -4,29 +4,29 @@ $request->setUrl('http://mockbin.com/har'); $request->setMethod(HTTP_METH_POST); -$request->setQueryData(array( - 'foo' => array( +$request->setQueryData([ + 'foo' => [ 'bar', 'baz' - ), + ], 'baz' => 'abc', 'key' => 'value' -)); +]); -$request->setHeaders(array( +$request->setHeaders([ 'accept' => 'application/json', 'content-type' => 'application/x-www-form-urlencoded' -)); +]); -$request->setCookies(array( +$request->setCookies([ 'bar' => 'baz', 'foo' => 'bar' -)); +]); $request->setContentType('application/x-www-form-urlencoded'); -$request->setPostFields(array( +$request->setPostFields([ 'foo' => 'bar' -)); +]); try { $response = $request->send(); diff --git a/test/fixtures/output/php/http1/headers.php b/test/fixtures/output/php/http1/headers.php index 67e516286..8f819c70f 100644 --- a/test/fixtures/output/php/http1/headers.php +++ b/test/fixtures/output/php/http1/headers.php @@ -4,10 +4,10 @@ $request->setUrl('http://mockbin.com/har'); $request->setMethod(HTTP_METH_GET); -$request->setHeaders(array( +$request->setHeaders([ 'accept' => 'application/json', 'x-foo' => 'Bar' -)); +]); try { $response = $request->send(); diff --git a/test/fixtures/output/php/http1/jsonObj-multiline.php b/test/fixtures/output/php/http1/jsonObj-multiline.php index a72bb2f79..88cf3d607 100644 --- a/test/fixtures/output/php/http1/jsonObj-multiline.php +++ b/test/fixtures/output/php/http1/jsonObj-multiline.php @@ -4,9 +4,9 @@ $request->setUrl('http://mockbin.com/har'); $request->setMethod(HTTP_METH_POST); -$request->setHeaders(array( +$request->setHeaders([ 'content-type' => 'application/json' -)); +]); $request->setBody('{ "foo": "bar" diff --git a/test/fixtures/output/php/http1/jsonObj-null-value.php b/test/fixtures/output/php/http1/jsonObj-null-value.php index 216298351..1b359a36e 100644 --- a/test/fixtures/output/php/http1/jsonObj-null-value.php +++ b/test/fixtures/output/php/http1/jsonObj-null-value.php @@ -4,9 +4,9 @@ $request->setUrl('http://mockbin.com/har'); $request->setMethod(HTTP_METH_POST); -$request->setHeaders(array( +$request->setHeaders([ 'content-type' => 'application/json' -)); +]); $request->setBody('{"foo":null}'); diff --git a/test/fixtures/output/php/http1/multipart-data.php b/test/fixtures/output/php/http1/multipart-data.php index d5e20ac4d..d93f59b65 100644 --- a/test/fixtures/output/php/http1/multipart-data.php +++ b/test/fixtures/output/php/http1/multipart-data.php @@ -4,16 +4,16 @@ $request->setUrl('http://mockbin.com/har'); $request->setMethod(HTTP_METH_POST); -$request->setHeaders(array( +$request->setHeaders([ 'content-type' => 'multipart/form-data; boundary=---011000010111000001101001' -)); +]); -$request->setBody('-----011000010111000001101001 -Content-Disposition: form-data; name="foo"; filename="hello.txt" -Content-Type: text/plain - -Hello World ------011000010111000001101001-- +$request->setBody('-----011000010111000001101001 +Content-Disposition: form-data; name="foo"; filename="hello.txt" +Content-Type: text/plain + +Hello World +-----011000010111000001101001-- '); try { diff --git a/test/fixtures/output/php/http1/multipart-file.php b/test/fixtures/output/php/http1/multipart-file.php index 721be8237..b76557918 100644 --- a/test/fixtures/output/php/http1/multipart-file.php +++ b/test/fixtures/output/php/http1/multipart-file.php @@ -4,16 +4,16 @@ $request->setUrl('http://mockbin.com/har'); $request->setMethod(HTTP_METH_POST); -$request->setHeaders(array( +$request->setHeaders([ 'content-type' => 'multipart/form-data; boundary=---011000010111000001101001' -)); +]); -$request->setBody('-----011000010111000001101001 -Content-Disposition: form-data; name="foo"; filename="hello.txt" -Content-Type: text/plain - - ------011000010111000001101001-- +$request->setBody('-----011000010111000001101001 +Content-Disposition: form-data; name="foo"; filename="hello.txt" +Content-Type: text/plain + + +-----011000010111000001101001-- '); try { diff --git a/test/fixtures/output/php/http1/multipart-form-data.php b/test/fixtures/output/php/http1/multipart-form-data.php index c78c84f8e..d7227ca78 100644 --- a/test/fixtures/output/php/http1/multipart-form-data.php +++ b/test/fixtures/output/php/http1/multipart-form-data.php @@ -4,15 +4,15 @@ $request->setUrl('http://mockbin.com/har'); $request->setMethod(HTTP_METH_POST); -$request->setHeaders(array( - 'content-type' => 'multipart/form-data; boundary=---011000010111000001101001' -)); +$request->setHeaders([ + 'Content-Type' => 'multipart/form-data; boundary=---011000010111000001101001' +]); -$request->setBody('-----011000010111000001101001 -Content-Disposition: form-data; name="foo" - -bar ------011000010111000001101001-- +$request->setBody('-----011000010111000001101001 +Content-Disposition: form-data; name="foo" + +bar +-----011000010111000001101001-- '); try { diff --git a/test/fixtures/output/php/http1/nested.php b/test/fixtures/output/php/http1/nested.php new file mode 100644 index 000000000..d0963b977 --- /dev/null +++ b/test/fixtures/output/php/http1/nested.php @@ -0,0 +1,19 @@ +setUrl('http://mockbin.com/har'); +$request->setMethod(HTTP_METH_GET); + +$request->setQueryData([ + 'foo[bar]' => 'baz,zap', + 'fiz' => 'buz', + 'key' => 'value' +]); + +try { + $response = $request->send(); + + echo $response->getBody(); +} catch (HttpException $ex) { + echo $ex; +} diff --git a/test/fixtures/output/php/http1/query.php b/test/fixtures/output/php/http1/query.php index ec8a949b5..76b3953c0 100644 --- a/test/fixtures/output/php/http1/query.php +++ b/test/fixtures/output/php/http1/query.php @@ -4,14 +4,14 @@ $request->setUrl('http://mockbin.com/har'); $request->setMethod(HTTP_METH_GET); -$request->setQueryData(array( - 'foo' => array( +$request->setQueryData([ + 'foo' => [ 'bar', 'baz' - ), + ], 'baz' => 'abc', 'key' => 'value' -)); +]); try { $response = $request->send(); diff --git a/test/fixtures/output/php/http1/text-plain.php b/test/fixtures/output/php/http1/text-plain.php index 1e8938682..102f2fbda 100644 --- a/test/fixtures/output/php/http1/text-plain.php +++ b/test/fixtures/output/php/http1/text-plain.php @@ -4,9 +4,9 @@ $request->setUrl('http://mockbin.com/har'); $request->setMethod(HTTP_METH_POST); -$request->setHeaders(array( +$request->setHeaders([ 'content-type' => 'text/plain' -)); +]); $request->setBody('Hello World'); diff --git a/test/fixtures/output/php/http2/application-form-encoded.php b/test/fixtures/output/php/http2/application-form-encoded.php index 573ecbcbb..97a029089 100644 --- a/test/fixtures/output/php/http2/application-form-encoded.php +++ b/test/fixtures/output/php/http2/application-form-encoded.php @@ -4,18 +4,18 @@ $request = new http\Client\Request; $body = new http\Message\Body; -$body->append(new http\QueryString(array( +$body->append(new http\QueryString([ 'foo' => 'bar', 'hello' => 'world' -))); +])); $request->setRequestUrl('http://mockbin.com/har'); $request->setRequestMethod('POST'); $request->setBody($body); -$request->setHeaders(array( +$request->setHeaders([ 'content-type' => 'application/x-www-form-urlencoded' -)); +]); $client->enqueue($request)->send(); $response = $client->getResponse(); diff --git a/test/fixtures/output/php/http2/application-json.php b/test/fixtures/output/php/http2/application-json.php index f4305c773..908bbaddf 100644 --- a/test/fixtures/output/php/http2/application-json.php +++ b/test/fixtures/output/php/http2/application-json.php @@ -10,9 +10,9 @@ $request->setRequestMethod('POST'); $request->setBody($body); -$request->setHeaders(array( +$request->setHeaders([ 'content-type' => 'application/json' -)); +]); $client->enqueue($request)->send(); $response = $client->getResponse(); diff --git a/test/fixtures/output/php/http2/cookies.php b/test/fixtures/output/php/http2/cookies.php index 0502c6d66..bf9a73665 100644 --- a/test/fixtures/output/php/http2/cookies.php +++ b/test/fixtures/output/php/http2/cookies.php @@ -6,10 +6,10 @@ $request->setRequestUrl('http://mockbin.com/har'); $request->setRequestMethod('POST'); -$client->setCookies(array( +$client->setCookies([ 'bar' => 'baz', 'foo' => 'bar' -)); +]); $client->enqueue($request)->send(); $response = $client->getResponse(); diff --git a/test/fixtures/output/php/http2/full.php b/test/fixtures/output/php/http2/full.php index fd598c978..d90cfd671 100644 --- a/test/fixtures/output/php/http2/full.php +++ b/test/fixtures/output/php/http2/full.php @@ -4,33 +4,33 @@ $request = new http\Client\Request; $body = new http\Message\Body; -$body->append(new http\QueryString(array( +$body->append(new http\QueryString([ 'foo' => 'bar' -))); +])); $request->setRequestUrl('http://mockbin.com/har'); $request->setRequestMethod('POST'); $request->setBody($body); -$request->setQuery(new http\QueryString(array( - 'foo' => array( +$request->setQuery(new http\QueryString([ + 'foo' => [ 'bar', 'baz' - ), + ], 'baz' => 'abc', 'key' => 'value' -))); +])); -$request->setHeaders(array( +$request->setHeaders([ 'accept' => 'application/json', 'content-type' => 'application/x-www-form-urlencoded' -)); +]); -$client->setCookies(array( +$client->setCookies([ 'bar' => 'baz', 'foo' => 'bar' -)); +]); $client->enqueue($request)->send(); $response = $client->getResponse(); diff --git a/test/fixtures/output/php/http2/headers.php b/test/fixtures/output/php/http2/headers.php index a15443a63..712a0275f 100644 --- a/test/fixtures/output/php/http2/headers.php +++ b/test/fixtures/output/php/http2/headers.php @@ -5,10 +5,10 @@ $request->setRequestUrl('http://mockbin.com/har'); $request->setRequestMethod('GET'); -$request->setHeaders(array( +$request->setHeaders([ 'accept' => 'application/json', 'x-foo' => 'Bar' -)); +]); $client->enqueue($request)->send(); $response = $client->getResponse(); diff --git a/test/fixtures/output/php/http2/jsonObj-multiline.php b/test/fixtures/output/php/http2/jsonObj-multiline.php index 022459e39..d0ea37380 100644 --- a/test/fixtures/output/php/http2/jsonObj-multiline.php +++ b/test/fixtures/output/php/http2/jsonObj-multiline.php @@ -12,9 +12,9 @@ $request->setRequestMethod('POST'); $request->setBody($body); -$request->setHeaders(array( +$request->setHeaders([ 'content-type' => 'application/json' -)); +]); $client->enqueue($request)->send(); $response = $client->getResponse(); diff --git a/test/fixtures/output/php/http2/jsonObj-null-value.php b/test/fixtures/output/php/http2/jsonObj-null-value.php index d122998e8..70f50a59c 100644 --- a/test/fixtures/output/php/http2/jsonObj-null-value.php +++ b/test/fixtures/output/php/http2/jsonObj-null-value.php @@ -10,9 +10,9 @@ $request->setRequestMethod('POST'); $request->setBody($body); -$request->setHeaders(array( +$request->setHeaders([ 'content-type' => 'application/json' -)); +]); $client->enqueue($request)->send(); $response = $client->getResponse(); diff --git a/test/fixtures/output/php/http2/multipart-data.php b/test/fixtures/output/php/http2/multipart-data.php index 8ec5acf35..b2cc65dfb 100644 --- a/test/fixtures/output/php/http2/multipart-data.php +++ b/test/fixtures/output/php/http2/multipart-data.php @@ -4,14 +4,14 @@ $request = new http\Client\Request; $body = new http\Message\Body; -$body->addForm(NULL, array( - array( +$body->addForm(null, [ + [ 'name' => 'foo', 'type' => 'text/plain', 'file' => 'hello.txt', 'data' => 'Hello World' - ) -)); + ] +]); $request->setRequestUrl('http://mockbin.com/har'); $request->setRequestMethod('POST'); diff --git a/test/fixtures/output/php/http2/multipart-file.php b/test/fixtures/output/php/http2/multipart-file.php index 2fbb7db52..ff5d55333 100644 --- a/test/fixtures/output/php/http2/multipart-file.php +++ b/test/fixtures/output/php/http2/multipart-file.php @@ -4,14 +4,14 @@ $request = new http\Client\Request; $body = new http\Message\Body; -$body->addForm(NULL, array( - array( +$body->addForm(null, [ + [ 'name' => 'foo', 'type' => 'text/plain', 'file' => 'test/fixtures/files/hello.txt', 'data' => null - ) -)); + ] +]); $request->setRequestUrl('http://mockbin.com/har'); $request->setRequestMethod('POST'); diff --git a/test/fixtures/output/php/http2/multipart-form-data.php b/test/fixtures/output/php/http2/multipart-form-data.php index ba2799d53..e76639d9d 100644 --- a/test/fixtures/output/php/http2/multipart-form-data.php +++ b/test/fixtures/output/php/http2/multipart-form-data.php @@ -4,9 +4,9 @@ $request = new http\Client\Request; $body = new http\Message\Body; -$body->addForm(array( +$body->addForm([ 'foo' => 'bar' -), NULL); +], null); $request->setRequestUrl('http://mockbin.com/har'); $request->setRequestMethod('POST'); diff --git a/test/fixtures/output/php/http2/nested.php b/test/fixtures/output/php/http2/nested.php new file mode 100644 index 000000000..c240f5c06 --- /dev/null +++ b/test/fixtures/output/php/http2/nested.php @@ -0,0 +1,17 @@ +setRequestUrl('http://mockbin.com/har'); +$request->setRequestMethod('GET'); +$request->setQuery(new http\QueryString([ + 'foo[bar]' => 'baz,zap', + 'fiz' => 'buz', + 'key' => 'value' +])); + +$client->enqueue($request)->send(); +$response = $client->getResponse(); + +echo $response->getBody(); diff --git a/test/fixtures/output/php/http2/query.php b/test/fixtures/output/php/http2/query.php index effd119a5..fd2b45025 100644 --- a/test/fixtures/output/php/http2/query.php +++ b/test/fixtures/output/php/http2/query.php @@ -5,14 +5,14 @@ $request->setRequestUrl('http://mockbin.com/har'); $request->setRequestMethod('GET'); -$request->setQuery(new http\QueryString(array( - 'foo' => array( +$request->setQuery(new http\QueryString([ + 'foo' => [ 'bar', 'baz' - ), + ], 'baz' => 'abc', 'key' => 'value' -))); +])); $client->enqueue($request)->send(); $response = $client->getResponse(); diff --git a/test/fixtures/output/php/http2/text-plain.php b/test/fixtures/output/php/http2/text-plain.php index 099e9c5a3..1669d62a5 100644 --- a/test/fixtures/output/php/http2/text-plain.php +++ b/test/fixtures/output/php/http2/text-plain.php @@ -10,9 +10,9 @@ $request->setRequestMethod('POST'); $request->setBody($body); -$request->setHeaders(array( +$request->setHeaders([ 'content-type' => 'text/plain' -)); +]); $client->enqueue($request)->send(); $response = $client->getResponse(); diff --git a/test/fixtures/output/powershell/restmethod/multipart-data.ps1 b/test/fixtures/output/powershell/restmethod/multipart-data.ps1 index 5c340a95f..9324af570 100644 --- a/test/fixtures/output/powershell/restmethod/multipart-data.ps1 +++ b/test/fixtures/output/powershell/restmethod/multipart-data.ps1 @@ -1,7 +1,9 @@ $headers=@{} $headers.Add("content-type", "multipart/form-data; boundary=---011000010111000001101001") -$response = Invoke-RestMethod -Uri 'http://mockbin.com/har' -Method POST -Headers $headers -ContentType 'multipart/form-data; boundary=---011000010111000001101001' -Body '-----011000010111000001101001 -Content-Disposition: form-data; name="foo"; filename="hello.txt" -Content-Type: text/plain - -Hello World' +$response = Invoke-RestMethod -Uri 'http://mockbin.com/har' -Method POST -Headers $headers -ContentType 'multipart/form-data; boundary=---011000010111000001101001' -Body '-----011000010111000001101001 +Content-Disposition: form-data; name="foo"; filename="hello.txt" +Content-Type: text/plain + +Hello World +-----011000010111000001101001-- +' diff --git a/test/fixtures/output/powershell/restmethod/multipart-file.ps1 b/test/fixtures/output/powershell/restmethod/multipart-file.ps1 index a1a02c79c..e1329cb24 100644 --- a/test/fixtures/output/powershell/restmethod/multipart-file.ps1 +++ b/test/fixtures/output/powershell/restmethod/multipart-file.ps1 @@ -1,7 +1,9 @@ $headers=@{} $headers.Add("content-type", "multipart/form-data; boundary=---011000010111000001101001") -$response = Invoke-RestMethod -Uri 'http://mockbin.com/har' -Method POST -Headers $headers -ContentType 'multipart/form-data; boundary=---011000010111000001101001' -Body '-----011000010111000001101001 -Content-Disposition: form-data; name="foo"; filename="hello.txt" -Content-Type: text/plain - +$response = Invoke-RestMethod -Uri 'http://mockbin.com/har' -Method POST -Headers $headers -ContentType 'multipart/form-data; boundary=---011000010111000001101001' -Body '-----011000010111000001101001 +Content-Disposition: form-data; name="foo"; filename="hello.txt" +Content-Type: text/plain + + +-----011000010111000001101001-- ' diff --git a/test/fixtures/output/powershell/restmethod/multipart-form-data.ps1 b/test/fixtures/output/powershell/restmethod/multipart-form-data.ps1 index dc110e420..bb78bfb10 100644 --- a/test/fixtures/output/powershell/restmethod/multipart-form-data.ps1 +++ b/test/fixtures/output/powershell/restmethod/multipart-form-data.ps1 @@ -1,6 +1,8 @@ $headers=@{} -$headers.Add("content-type", "multipart/form-data; boundary=---011000010111000001101001") -$response = Invoke-RestMethod -Uri 'http://mockbin.com/har' -Method POST -Headers $headers -ContentType 'multipart/form-data; boundary=---011000010111000001101001' -Body '-----011000010111000001101001 -Content-Disposition: form-data; name="foo" - -bar' +$headers.Add("Content-Type", "multipart/form-data; boundary=---011000010111000001101001") +$response = Invoke-RestMethod -Uri 'http://mockbin.com/har' -Method POST -Headers $headers -ContentType 'multipart/form-data; boundary=---011000010111000001101001' -Body '-----011000010111000001101001 +Content-Disposition: form-data; name="foo" + +bar +-----011000010111000001101001-- +' diff --git a/test/fixtures/output/powershell/restmethod/nested.ps1 b/test/fixtures/output/powershell/restmethod/nested.ps1 new file mode 100644 index 000000000..2fb02991f --- /dev/null +++ b/test/fixtures/output/powershell/restmethod/nested.ps1 @@ -0,0 +1 @@ +$response = Invoke-RestMethod -Uri 'http://mockbin.com/har?foo%5Bbar%5D=baz%2Czap&fiz=buz&key=value' -Method GET diff --git a/test/fixtures/output/powershell/webrequest/multipart-data.ps1 b/test/fixtures/output/powershell/webrequest/multipart-data.ps1 index 43f66f4b7..64a05c86b 100644 --- a/test/fixtures/output/powershell/webrequest/multipart-data.ps1 +++ b/test/fixtures/output/powershell/webrequest/multipart-data.ps1 @@ -4,4 +4,6 @@ $response = Invoke-WebRequest -Uri 'http://mockbin.com/har' -Method POST -Header Content-Disposition: form-data; name="foo"; filename="hello.txt" Content-Type: text/plain -Hello World' +Hello World +-----011000010111000001101001-- +' diff --git a/test/fixtures/output/powershell/webrequest/multipart-file.ps1 b/test/fixtures/output/powershell/webrequest/multipart-file.ps1 index 9ff731856..c1dc54b57 100644 --- a/test/fixtures/output/powershell/webrequest/multipart-file.ps1 +++ b/test/fixtures/output/powershell/webrequest/multipart-file.ps1 @@ -4,4 +4,6 @@ $response = Invoke-WebRequest -Uri 'http://mockbin.com/har' -Method POST -Header Content-Disposition: form-data; name="foo"; filename="hello.txt" Content-Type: text/plain + +-----011000010111000001101001-- ' diff --git a/test/fixtures/output/powershell/webrequest/multipart-form-data.ps1 b/test/fixtures/output/powershell/webrequest/multipart-form-data.ps1 index 386f30630..91f16b8db 100644 --- a/test/fixtures/output/powershell/webrequest/multipart-form-data.ps1 +++ b/test/fixtures/output/powershell/webrequest/multipart-form-data.ps1 @@ -1,6 +1,8 @@ $headers=@{} -$headers.Add("content-type", "multipart/form-data; boundary=---011000010111000001101001") +$headers.Add("Content-Type", "multipart/form-data; boundary=---011000010111000001101001") $response = Invoke-WebRequest -Uri 'http://mockbin.com/har' -Method POST -Headers $headers -ContentType 'multipart/form-data; boundary=---011000010111000001101001' -Body '-----011000010111000001101001 Content-Disposition: form-data; name="foo" -bar' +bar +-----011000010111000001101001-- +' diff --git a/test/fixtures/output/powershell/webrequest/nested.ps1 b/test/fixtures/output/powershell/webrequest/nested.ps1 new file mode 100644 index 000000000..d05d97730 --- /dev/null +++ b/test/fixtures/output/powershell/webrequest/nested.ps1 @@ -0,0 +1 @@ +$response = Invoke-WebRequest -Uri 'http://mockbin.com/har?foo%5Bbar%5D=baz%2Czap&fiz=buz&key=value' -Method GET diff --git a/test/fixtures/output/python/python3/multipart-form-data.py b/test/fixtures/output/python/python3/multipart-form-data.py index 42bb17546..d5f5c0254 100644 --- a/test/fixtures/output/python/python3/multipart-form-data.py +++ b/test/fixtures/output/python/python3/multipart-form-data.py @@ -4,7 +4,7 @@ payload = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"foo\"\r\n\r\nbar\r\n-----011000010111000001101001--\r\n" -headers = { 'content-type': "multipart/form-data; boundary=---011000010111000001101001" } +headers = { 'Content-Type': "multipart/form-data; boundary=---011000010111000001101001" } conn.request("POST", "/har", payload, headers) diff --git a/test/fixtures/output/python/python3/nested.py b/test/fixtures/output/python/python3/nested.py new file mode 100644 index 000000000..75c6f9a2c --- /dev/null +++ b/test/fixtures/output/python/python3/nested.py @@ -0,0 +1,10 @@ +import http.client + +conn = http.client.HTTPConnection("mockbin.com") + +conn.request("GET", "/har?foo%5Bbar%5D=baz%2Czap&fiz=buz&key=value") + +res = conn.getresponse() +data = res.read() + +print(data.decode("utf-8")) diff --git a/test/fixtures/output/python/requests/application-form-encoded.py b/test/fixtures/output/python/requests/application-form-encoded.py index 54556d0f1..308126b0e 100644 --- a/test/fixtures/output/python/requests/application-form-encoded.py +++ b/test/fixtures/output/python/requests/application-form-encoded.py @@ -3,7 +3,7 @@ url = "http://mockbin.com/har" payload = "foo=bar&hello=world" -headers = {'content-type': 'application/x-www-form-urlencoded'} +headers = {"content-type": "application/x-www-form-urlencoded"} response = requests.request("POST", url, data=payload, headers=headers) diff --git a/test/fixtures/output/python/requests/application-json.py b/test/fixtures/output/python/requests/application-json.py index a60dcd215..cfb2c4830 100644 --- a/test/fixtures/output/python/requests/application-json.py +++ b/test/fixtures/output/python/requests/application-json.py @@ -2,9 +2,16 @@ url = "http://mockbin.com/har" -payload = "{\"number\":1,\"string\":\"f\\\"oo\",\"arr\":[1,2,3],\"nested\":{\"a\":\"b\"},\"arr_mix\":[1,\"a\",{\"arr_mix_nested\":{}}],\"boolean\":false}" -headers = {'content-type': 'application/json'} +payload = { + "number": 1, + "string": "f\"oo", + "arr": [1, 2, 3], + "nested": {"a": "b"}, + "arr_mix": [1, "a", {"arr_mix_nested": {}}], + "boolean": False +} +headers = {"content-type": "application/json"} -response = requests.request("POST", url, data=payload, headers=headers) +response = requests.request("POST", url, json=payload, headers=headers) print(response.text) diff --git a/test/fixtures/output/python/requests/cookies.py b/test/fixtures/output/python/requests/cookies.py index 96977a509..3387a1d8f 100644 --- a/test/fixtures/output/python/requests/cookies.py +++ b/test/fixtures/output/python/requests/cookies.py @@ -2,7 +2,7 @@ url = "http://mockbin.com/har" -headers = {'cookie': 'foo=bar; bar=baz'} +headers = {"cookie": "foo=bar; bar=baz"} response = requests.request("POST", url, headers=headers) diff --git a/test/fixtures/output/python/requests/full.py b/test/fixtures/output/python/requests/full.py index 621d12a22..82b97e3c9 100644 --- a/test/fixtures/output/python/requests/full.py +++ b/test/fixtures/output/python/requests/full.py @@ -6,10 +6,10 @@ payload = "foo=bar" headers = { - 'cookie': "foo=bar; bar=baz", - 'accept': "application/json", - 'content-type': "application/x-www-form-urlencoded" - } + "cookie": "foo=bar; bar=baz", + "accept": "application/json", + "content-type": "application/x-www-form-urlencoded" +} response = requests.request("POST", url, data=payload, headers=headers, params=querystring) diff --git a/test/fixtures/output/python/requests/headers.py b/test/fixtures/output/python/requests/headers.py index 847323fb6..ae2b4d047 100644 --- a/test/fixtures/output/python/requests/headers.py +++ b/test/fixtures/output/python/requests/headers.py @@ -3,9 +3,9 @@ url = "http://mockbin.com/har" headers = { - 'accept': "application/json", - 'x-foo': "Bar" - } + "accept": "application/json", + "x-foo": "Bar" +} response = requests.request("GET", url, headers=headers) diff --git a/test/fixtures/output/python/requests/jsonObj-multiline.py b/test/fixtures/output/python/requests/jsonObj-multiline.py index 49d6071fc..60eb971ac 100644 --- a/test/fixtures/output/python/requests/jsonObj-multiline.py +++ b/test/fixtures/output/python/requests/jsonObj-multiline.py @@ -2,9 +2,9 @@ url = "http://mockbin.com/har" -payload = "{\n \"foo\": \"bar\"\n}" -headers = {'content-type': 'application/json'} +payload = {"foo": "bar"} +headers = {"content-type": "application/json"} -response = requests.request("POST", url, data=payload, headers=headers) +response = requests.request("POST", url, json=payload, headers=headers) print(response.text) diff --git a/test/fixtures/output/python/requests/jsonObj-null-value.py b/test/fixtures/output/python/requests/jsonObj-null-value.py index 99d3a6bcc..9a9f79937 100644 --- a/test/fixtures/output/python/requests/jsonObj-null-value.py +++ b/test/fixtures/output/python/requests/jsonObj-null-value.py @@ -2,9 +2,9 @@ url = "http://mockbin.com/har" -payload = "{\"foo\":null}" -headers = {'content-type': 'application/json'} +payload = {"foo": None} +headers = {"content-type": "application/json"} -response = requests.request("POST", url, data=payload, headers=headers) +response = requests.request("POST", url, json=payload, headers=headers) print(response.text) diff --git a/test/fixtures/output/python/requests/multipart-data.py b/test/fixtures/output/python/requests/multipart-data.py index 4b9cc5c81..9760d47b5 100644 --- a/test/fixtures/output/python/requests/multipart-data.py +++ b/test/fixtures/output/python/requests/multipart-data.py @@ -3,7 +3,7 @@ url = "http://mockbin.com/har" payload = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"foo\"; filename=\"hello.txt\"\r\nContent-Type: text/plain\r\n\r\nHello World\r\n-----011000010111000001101001--\r\n" -headers = {'content-type': 'multipart/form-data; boundary=---011000010111000001101001'} +headers = {"content-type": "multipart/form-data; boundary=---011000010111000001101001"} response = requests.request("POST", url, data=payload, headers=headers) diff --git a/test/fixtures/output/python/requests/multipart-file.py b/test/fixtures/output/python/requests/multipart-file.py index 5c3188b84..be3bde71a 100644 --- a/test/fixtures/output/python/requests/multipart-file.py +++ b/test/fixtures/output/python/requests/multipart-file.py @@ -3,7 +3,7 @@ url = "http://mockbin.com/har" payload = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"foo\"; filename=\"hello.txt\"\r\nContent-Type: text/plain\r\n\r\n\r\n-----011000010111000001101001--\r\n" -headers = {'content-type': 'multipart/form-data; boundary=---011000010111000001101001'} +headers = {"content-type": "multipart/form-data; boundary=---011000010111000001101001"} response = requests.request("POST", url, data=payload, headers=headers) diff --git a/test/fixtures/output/python/requests/multipart-form-data.py b/test/fixtures/output/python/requests/multipart-form-data.py index 77bbb3438..978e19b03 100644 --- a/test/fixtures/output/python/requests/multipart-form-data.py +++ b/test/fixtures/output/python/requests/multipart-form-data.py @@ -3,7 +3,7 @@ url = "http://mockbin.com/har" payload = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"foo\"\r\n\r\nbar\r\n-----011000010111000001101001--\r\n" -headers = {'content-type': 'multipart/form-data; boundary=---011000010111000001101001'} +headers = {"Content-Type": "multipart/form-data; boundary=---011000010111000001101001"} response = requests.request("POST", url, data=payload, headers=headers) diff --git a/test/fixtures/output/python/requests/nested.py b/test/fixtures/output/python/requests/nested.py new file mode 100644 index 000000000..affab7a79 --- /dev/null +++ b/test/fixtures/output/python/requests/nested.py @@ -0,0 +1,9 @@ +import requests + +url = "http://mockbin.com/har" + +querystring = {"foo[bar]":"baz,zap","fiz":"buz","key":"value"} + +response = requests.request("GET", url, params=querystring) + +print(response.text) diff --git a/test/fixtures/output/python/requests/text-plain.py b/test/fixtures/output/python/requests/text-plain.py index ba42964e3..fda6ebba1 100644 --- a/test/fixtures/output/python/requests/text-plain.py +++ b/test/fixtures/output/python/requests/text-plain.py @@ -3,7 +3,7 @@ url = "http://mockbin.com/har" payload = "Hello World" -headers = {'content-type': 'text/plain'} +headers = {"content-type": "text/plain"} response = requests.request("POST", url, data=payload, headers=headers) diff --git a/test/fixtures/output/r/httr/application-form-encoded.r b/test/fixtures/output/r/httr/application-form-encoded.r new file mode 100644 index 000000000..147ce2fe4 --- /dev/null +++ b/test/fixtures/output/r/httr/application-form-encoded.r @@ -0,0 +1,11 @@ +library(httr) + +url <- "http://mockbin.com/har" + +payload <- "foo=bar&hello=world" + +encode <- "form" + +response <- VERB("POST", url, body = payload, content_type("application/x-www-form-urlencoded"), encode = encode) + +content(response, "text") diff --git a/test/fixtures/output/r/httr/application-json.r b/test/fixtures/output/r/httr/application-json.r new file mode 100644 index 000000000..7fc78099a --- /dev/null +++ b/test/fixtures/output/r/httr/application-json.r @@ -0,0 +1,11 @@ +library(httr) + +url <- "http://mockbin.com/har" + +payload <- "{\"number\":1,\"string\":\"f\\\"oo\",\"arr\":[1,2,3],\"nested\":{\"a\":\"b\"},\"arr_mix\":[1,\"a\",{\"arr_mix_nested\":{}}],\"boolean\":false}" + +encode <- "json" + +response <- VERB("POST", url, body = payload, content_type("application/json"), encode = encode) + +content(response, "text") diff --git a/test/fixtures/output/r/httr/cookies.r b/test/fixtures/output/r/httr/cookies.r new file mode 100644 index 000000000..c323359bb --- /dev/null +++ b/test/fixtures/output/r/httr/cookies.r @@ -0,0 +1,7 @@ +library(httr) + +url <- "http://mockbin.com/har" + +response <- VERB("POST", url, content_type("application/octet-stream"), set_cookies(`foo` = "bar", `bar` = "baz")) + +content(response, "text") diff --git a/test/fixtures/output/r/httr/custom-method.r b/test/fixtures/output/r/httr/custom-method.r new file mode 100644 index 000000000..08b4d307a --- /dev/null +++ b/test/fixtures/output/r/httr/custom-method.r @@ -0,0 +1,7 @@ +library(httr) + +url <- "http://mockbin.com/har" + +response <- VERB("PROPFIND", url, content_type("application/octet-stream")) + +content(response, "text") diff --git a/test/fixtures/output/r/httr/full.r b/test/fixtures/output/r/httr/full.r new file mode 100644 index 000000000..420ef6c6c --- /dev/null +++ b/test/fixtures/output/r/httr/full.r @@ -0,0 +1,16 @@ +library(httr) + +url <- "http://mockbin.com/har" + +queryString <- list( + foo = "bar,baz", + baz = "abc" +) + +payload <- "foo=bar" + +encode <- "form" + +response <- VERB("POST", url, body = payload, query = queryString, content_type("application/x-www-form-urlencoded"), accept("application/json"), set_cookies(`foo` = "bar", `bar` = "baz"), encode = encode) + +content(response, "text") diff --git a/test/fixtures/output/r/httr/headers.r b/test/fixtures/output/r/httr/headers.r new file mode 100644 index 000000000..26a20cbdb --- /dev/null +++ b/test/fixtures/output/r/httr/headers.r @@ -0,0 +1,7 @@ +library(httr) + +url <- "http://mockbin.com/har" + +response <- VERB("GET", url, add_headers(x_foo = 'Bar'), content_type("application/octet-stream"), accept("application/json")) + +content(response, "text") diff --git a/test/fixtures/output/r/httr/https.r b/test/fixtures/output/r/httr/https.r new file mode 100644 index 000000000..60068e474 --- /dev/null +++ b/test/fixtures/output/r/httr/https.r @@ -0,0 +1,7 @@ +library(httr) + +url <- "https://mockbin.com/har" + +response <- VERB("GET", url, content_type("application/octet-stream")) + +content(response, "text") diff --git a/test/fixtures/output/r/httr/jsonObj-multiline.r b/test/fixtures/output/r/httr/jsonObj-multiline.r new file mode 100644 index 000000000..551d8af11 --- /dev/null +++ b/test/fixtures/output/r/httr/jsonObj-multiline.r @@ -0,0 +1,11 @@ +library(httr) + +url <- "http://mockbin.com/har" + +payload <- "{\n \"foo\": \"bar\"\n}" + +encode <- "json" + +response <- VERB("POST", url, body = payload, content_type("application/json"), encode = encode) + +content(response, "text") diff --git a/test/fixtures/output/r/httr/jsonObj-null-value.r b/test/fixtures/output/r/httr/jsonObj-null-value.r new file mode 100644 index 000000000..cb53d1806 --- /dev/null +++ b/test/fixtures/output/r/httr/jsonObj-null-value.r @@ -0,0 +1,11 @@ +library(httr) + +url <- "http://mockbin.com/har" + +payload <- "{\"foo\":null}" + +encode <- "json" + +response <- VERB("POST", url, body = payload, content_type("application/json"), encode = encode) + +content(response, "text") diff --git a/test/fixtures/output/r/httr/multipart-data.r b/test/fixtures/output/r/httr/multipart-data.r new file mode 100644 index 000000000..e35ffebd7 --- /dev/null +++ b/test/fixtures/output/r/httr/multipart-data.r @@ -0,0 +1,11 @@ +library(httr) + +url <- "http://mockbin.com/har" + +payload <- "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"foo\"; filename=\"hello.txt\"\r\nContent-Type: text/plain\r\n\r\nHello World\r\n-----011000010111000001101001--\r\n" + +encode <- "multipart" + +response <- VERB("POST", url, body = payload, content_type("multipart/form-data"), encode = encode) + +content(response, "text") diff --git a/test/fixtures/output/r/httr/multipart-file.r b/test/fixtures/output/r/httr/multipart-file.r new file mode 100644 index 000000000..55c044270 --- /dev/null +++ b/test/fixtures/output/r/httr/multipart-file.r @@ -0,0 +1,11 @@ +library(httr) + +url <- "http://mockbin.com/har" + +payload <- "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"foo\"; filename=\"hello.txt\"\r\nContent-Type: text/plain\r\n\r\n\r\n-----011000010111000001101001--\r\n" + +encode <- "multipart" + +response <- VERB("POST", url, body = payload, content_type("multipart/form-data"), encode = encode) + +content(response, "text") diff --git a/test/fixtures/output/r/httr/multipart-form-data.r b/test/fixtures/output/r/httr/multipart-form-data.r new file mode 100644 index 000000000..5cd514d1b --- /dev/null +++ b/test/fixtures/output/r/httr/multipart-form-data.r @@ -0,0 +1,11 @@ +library(httr) + +url <- "http://mockbin.com/har" + +payload <- "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"foo\"\r\n\r\nbar\r\n-----011000010111000001101001--\r\n" + +encode <- "multipart" + +response <- VERB("POST", url, body = payload, content_type("multipart/form-data"), encode = encode) + +content(response, "text") diff --git a/test/fixtures/output/r/httr/nested.r b/test/fixtures/output/r/httr/nested.r new file mode 100644 index 000000000..669352cf7 --- /dev/null +++ b/test/fixtures/output/r/httr/nested.r @@ -0,0 +1,12 @@ +library(httr) + +url <- "http://mockbin.com/har" + +queryString <- list( + foo[bar] = "baz,zap", + fiz = "buz" +) + +response <- VERB("GET", url, query = queryString, content_type("application/octet-stream")) + +content(response, "text") diff --git a/test/fixtures/output/r/httr/query.r b/test/fixtures/output/r/httr/query.r new file mode 100644 index 000000000..20f4145e7 --- /dev/null +++ b/test/fixtures/output/r/httr/query.r @@ -0,0 +1,12 @@ +library(httr) + +url <- "http://mockbin.com/har" + +queryString <- list( + foo = "bar,baz", + baz = "abc" +) + +response <- VERB("GET", url, query = queryString, content_type("application/octet-stream")) + +content(response, "text") diff --git a/test/fixtures/output/r/httr/short.r b/test/fixtures/output/r/httr/short.r new file mode 100644 index 000000000..be664c5ef --- /dev/null +++ b/test/fixtures/output/r/httr/short.r @@ -0,0 +1,7 @@ +library(httr) + +url <- "http://mockbin.com/har" + +response <- VERB("GET", url, content_type("application/octet-stream")) + +content(response, "text") diff --git a/test/fixtures/output/r/httr/text-plain.r b/test/fixtures/output/r/httr/text-plain.r new file mode 100644 index 000000000..4d86dce50 --- /dev/null +++ b/test/fixtures/output/r/httr/text-plain.r @@ -0,0 +1,11 @@ +library(httr) + +url <- "http://mockbin.com/har" + +payload <- "Hello World" + +encode <- "raw" + +response <- VERB("POST", url, body = payload, content_type("text/plain"), encode = encode) + +content(response, "text") diff --git a/test/fixtures/output/ruby/native/multipart-form-data.rb b/test/fixtures/output/ruby/native/multipart-form-data.rb index 60d18faf3..e7800b288 100644 --- a/test/fixtures/output/ruby/native/multipart-form-data.rb +++ b/test/fixtures/output/ruby/native/multipart-form-data.rb @@ -6,7 +6,7 @@ http = Net::HTTP.new(url.host, url.port) request = Net::HTTP::Post.new(url) -request["content-type"] = 'multipart/form-data; boundary=---011000010111000001101001' +request["Content-Type"] = 'multipart/form-data; boundary=---011000010111000001101001' request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"foo\"\r\n\r\nbar\r\n-----011000010111000001101001--\r\n" response = http.request(request) diff --git a/test/fixtures/output/ruby/native/nested.rb b/test/fixtures/output/ruby/native/nested.rb new file mode 100644 index 000000000..9a12a21dc --- /dev/null +++ b/test/fixtures/output/ruby/native/nested.rb @@ -0,0 +1,11 @@ +require 'uri' +require 'net/http' + +url = URI("http://mockbin.com/har?foo%5Bbar%5D=baz%2Czap&fiz=buz&key=value") + +http = Net::HTTP.new(url.host, url.port) + +request = Net::HTTP::Get.new(url) + +response = http.request(request) +puts response.read_body diff --git a/test/fixtures/output/shell/curl/multipart-data.sh b/test/fixtures/output/shell/curl/multipart-data.sh index 8dee5514c..216ae2365 100644 --- a/test/fixtures/output/shell/curl/multipart-data.sh +++ b/test/fixtures/output/shell/curl/multipart-data.sh @@ -1,4 +1,4 @@ curl --request POST \ --url http://mockbin.com/har \ - --header 'content-type: multipart/form-data; boundary=---011000010111000001101001' \ - --form 'foo=Hello World' + --header 'content-type: multipart/form-data' \ + --form foo=@hello.txt diff --git a/test/fixtures/output/shell/curl/multipart-file.sh b/test/fixtures/output/shell/curl/multipart-file.sh index e054807c6..9f18a585b 100644 --- a/test/fixtures/output/shell/curl/multipart-file.sh +++ b/test/fixtures/output/shell/curl/multipart-file.sh @@ -1,4 +1,4 @@ curl --request POST \ --url http://mockbin.com/har \ - --header 'content-type: multipart/form-data; boundary=---011000010111000001101001' \ + --header 'content-type: multipart/form-data' \ --form foo=@test/fixtures/files/hello.txt diff --git a/test/fixtures/output/shell/curl/multipart-form-data.sh b/test/fixtures/output/shell/curl/multipart-form-data.sh index d7b10e7ee..fd5d2d16a 100644 --- a/test/fixtures/output/shell/curl/multipart-form-data.sh +++ b/test/fixtures/output/shell/curl/multipart-form-data.sh @@ -1,4 +1,4 @@ curl --request POST \ --url http://mockbin.com/har \ - --header 'content-type: multipart/form-data; boundary=---011000010111000001101001' \ + --header 'Content-Type: multipart/form-data' \ --form foo=bar diff --git a/test/fixtures/output/shell/curl/nested.sh b/test/fixtures/output/shell/curl/nested.sh new file mode 100644 index 000000000..8c9149622 --- /dev/null +++ b/test/fixtures/output/shell/curl/nested.sh @@ -0,0 +1,2 @@ +curl --request GET \ + --url 'http://mockbin.com/har?foo%5Bbar%5D=baz%2Czap&fiz=buz&key=value' diff --git a/test/fixtures/output/shell/httpie/multipart-data.sh b/test/fixtures/output/shell/httpie/multipart-data.sh index 5cb1606a1..64b17a1f4 100644 --- a/test/fixtures/output/shell/httpie/multipart-data.sh +++ b/test/fixtures/output/shell/httpie/multipart-data.sh @@ -1,9 +1,9 @@ -echo '-----011000010111000001101001 -Content-Disposition: form-data; name="foo"; filename="hello.txt" -Content-Type: text/plain - -Hello World ------011000010111000001101001-- +echo '-----011000010111000001101001 +Content-Disposition: form-data; name="foo"; filename="hello.txt" +Content-Type: text/plain + +Hello World +-----011000010111000001101001-- ' | \ http POST http://mockbin.com/har \ content-type:'multipart/form-data; boundary=---011000010111000001101001' diff --git a/test/fixtures/output/shell/httpie/multipart-file.sh b/test/fixtures/output/shell/httpie/multipart-file.sh index 550a40ee1..25b7ede3e 100644 --- a/test/fixtures/output/shell/httpie/multipart-file.sh +++ b/test/fixtures/output/shell/httpie/multipart-file.sh @@ -1,9 +1,9 @@ -echo '-----011000010111000001101001 -Content-Disposition: form-data; name="foo"; filename="hello.txt" -Content-Type: text/plain - - ------011000010111000001101001-- +echo '-----011000010111000001101001 +Content-Disposition: form-data; name="foo"; filename="hello.txt" +Content-Type: text/plain + + +-----011000010111000001101001-- ' | \ http POST http://mockbin.com/har \ content-type:'multipart/form-data; boundary=---011000010111000001101001' diff --git a/test/fixtures/output/shell/httpie/multipart-form-data.sh b/test/fixtures/output/shell/httpie/multipart-form-data.sh index a177c60e5..28e8af7d4 100644 --- a/test/fixtures/output/shell/httpie/multipart-form-data.sh +++ b/test/fixtures/output/shell/httpie/multipart-form-data.sh @@ -1,8 +1,8 @@ -echo '-----011000010111000001101001 -Content-Disposition: form-data; name="foo" - -bar ------011000010111000001101001-- +echo '-----011000010111000001101001 +Content-Disposition: form-data; name="foo" + +bar +-----011000010111000001101001-- ' | \ http POST http://mockbin.com/har \ - content-type:'multipart/form-data; boundary=---011000010111000001101001' + Content-Type:'multipart/form-data; boundary=---011000010111000001101001' diff --git a/test/fixtures/output/shell/httpie/nested.sh b/test/fixtures/output/shell/httpie/nested.sh new file mode 100644 index 000000000..261890e50 --- /dev/null +++ b/test/fixtures/output/shell/httpie/nested.sh @@ -0,0 +1 @@ +http GET 'http://mockbin.com/har?foo%5Bbar%5D=baz%2Czap&fiz=buz&key=value' diff --git a/test/fixtures/output/shell/wget/multipart-form-data.sh b/test/fixtures/output/shell/wget/multipart-form-data.sh index 8ccf44a74..6b1cd3b45 100644 --- a/test/fixtures/output/shell/wget/multipart-form-data.sh +++ b/test/fixtures/output/shell/wget/multipart-form-data.sh @@ -1,6 +1,6 @@ wget --quiet \ --method POST \ - --header 'content-type: multipart/form-data; boundary=---011000010111000001101001' \ + --header 'Content-Type: multipart/form-data; boundary=---011000010111000001101001' \ --body-data '-----011000010111000001101001\r\nContent-Disposition: form-data; name="foo"\r\n\r\nbar\r\n-----011000010111000001101001--\r\n' \ --output-document \ - http://mockbin.com/har diff --git a/test/fixtures/output/shell/wget/nested.sh b/test/fixtures/output/shell/wget/nested.sh new file mode 100644 index 000000000..ce9cdfe68 --- /dev/null +++ b/test/fixtures/output/shell/wget/nested.sh @@ -0,0 +1,4 @@ +wget --quiet \ + --method GET \ + --output-document \ + - 'http://mockbin.com/har?foo%5Bbar%5D=baz%2Czap&fiz=buz&key=value' diff --git a/test/fixtures/output/swift/nsurlsession/multipart-form-data.swift b/test/fixtures/output/swift/nsurlsession/multipart-form-data.swift index bafceef17..3e2975b5d 100644 --- a/test/fixtures/output/swift/nsurlsession/multipart-form-data.swift +++ b/test/fixtures/output/swift/nsurlsession/multipart-form-data.swift @@ -1,6 +1,6 @@ import Foundation -let headers = ["content-type": "multipart/form-data; boundary=---011000010111000001101001"] +let headers = ["Content-Type": "multipart/form-data; boundary=---011000010111000001101001"] let parameters = [ [ "name": "foo", diff --git a/test/fixtures/output/swift/nsurlsession/nested.swift b/test/fixtures/output/swift/nsurlsession/nested.swift new file mode 100644 index 000000000..21415b678 --- /dev/null +++ b/test/fixtures/output/swift/nsurlsession/nested.swift @@ -0,0 +1,18 @@ +import Foundation + +let request = NSMutableURLRequest(url: NSURL(string: "http://mockbin.com/har?foo%5Bbar%5D=baz%2Czap&fiz=buz&key=value")! as URL, + cachePolicy: .useProtocolCachePolicy, + timeoutInterval: 10.0) +request.httpMethod = "GET" + +let session = URLSession.shared +let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in + if (error != nil) { + print(error) + } else { + let httpResponse = response as? HTTPURLResponse + print(httpResponse) + } +}) + +dataTask.resume() diff --git a/test/fixtures/requests/multipart-form-data.json b/test/fixtures/requests/multipart-form-data.json index 4db5eeea6..63d4bdc2e 100644 --- a/test/fixtures/requests/multipart-form-data.json +++ b/test/fixtures/requests/multipart-form-data.json @@ -3,7 +3,7 @@ "url": "http://mockbin.com/har", "headers": [ { - "name": "content-type", + "name": "Content-Type", "value": "multipart/form-data" } ], diff --git a/test/fixtures/requests/nested.json b/test/fixtures/requests/nested.json new file mode 100644 index 000000000..a9caa7565 --- /dev/null +++ b/test/fixtures/requests/nested.json @@ -0,0 +1,19 @@ +{ + "method": "GET", + "url": "http://mockbin.com/har", + "httpVersion": "HTTP/1.1", + "queryString": [ + { + "name": "foo[bar]", + "value": "baz,zap" + }, + { + "name": "fiz", + "value": "buz" + }, + { + "name": "key", + "value": "value" + } + ] +} \ No newline at end of file diff --git a/test/headers.js b/test/headers.js new file mode 100644 index 000000000..bc7b48c99 --- /dev/null +++ b/test/headers.js @@ -0,0 +1,41 @@ +'use strict' + +const helpers = require('../src/helpers/headers') +const should = require('should') + +const headers = { + 'Content-Type': 'multipart/form-data; boundary=---011000010111000001101001', + accept: 'application/json' +} + +describe('Headers', function () { + describe('#getHeader', () => { + it('should get a header', () => { + helpers.getHeader(headers, 'content-type').should.eql('multipart/form-data; boundary=---011000010111000001101001') + helpers.getHeader(headers, 'content-TYPE').should.eql('multipart/form-data; boundary=---011000010111000001101001') + helpers.getHeader(headers, 'Accept').should.eql('application/json') + + should.not.exist(helpers.getHeader(headers, 'authorization')) + }) + }) + + describe('#getHeaderName', () => { + it('should get a header name', () => { + helpers.getHeaderName(headers, 'content-type').should.eql('Content-Type') + helpers.getHeaderName(headers, 'content-TYPE').should.eql('Content-Type') + helpers.getHeaderName(headers, 'Accept').should.eql('accept') + + should.not.exist(helpers.getHeaderName(headers, 'authorization')) + }) + }) + + describe('#hasHeader', () => { + it('should return if a header is present', () => { + helpers.hasHeader(headers, 'content-type').should.be.true() + helpers.hasHeader(headers, 'content-TYPE').should.be.true() + helpers.hasHeader(headers, 'Accept').should.be.true() + + helpers.hasHeader(headers, 'authorization').should.be.false() + }) + }) +}) diff --git a/test/index.js b/test/index.js index 6974b4d3a..d35bda61b 100644 --- a/test/index.js +++ b/test/index.js @@ -1,15 +1,13 @@ -/* global describe, it */ - 'use strict' -var fixtures = require('./fixtures') -var HTTPSnippet = require('../src') +const fixtures = require('./fixtures') +const HTTPSnippet = require('../src') -var should = require('should') +const should = require('should') describe('HTTPSnippet', function () { it('should return false if no matching target', function (done) { - var snippet = new HTTPSnippet(fixtures.requests.short) + const snippet = new HTTPSnippet(fixtures.requests.short) snippet.convert(null).should.eql(false) @@ -17,11 +15,11 @@ describe('HTTPSnippet', function () { }) it('should fail validation', function (done) { - var snippet; + let snippet; /* eslint-disable no-extra-parens */ (function () { - snippet = new HTTPSnippet({yolo: 'foo'}) + snippet = new HTTPSnippet({ yolo: 'foo' }) }).should.throw(Error) should.not.exist(snippet) @@ -30,12 +28,12 @@ describe('HTTPSnippet', function () { }) it('should parse HAR file with multiple entries', function (done) { - var snippet = new HTTPSnippet(fixtures.har) + const snippet = new HTTPSnippet(fixtures.har) snippet.should.have.property('requests').and.be.an.Array() snippet.requests.length.should.equal(2) - var results = snippet.convert('shell') + const results = snippet.convert('shell') results.should.be.an.Array() results.length.should.equal(2) @@ -44,7 +42,7 @@ describe('HTTPSnippet', function () { }) it('should convert multipart/mixed to multipart/form-data', function (done) { - var req = new HTTPSnippet(fixtures.mimetypes['multipart/mixed']).requests[0] + const req = new HTTPSnippet(fixtures.mimetypes['multipart/mixed']).requests[0] req.postData.mimeType.should.eql('multipart/form-data') @@ -52,7 +50,7 @@ describe('HTTPSnippet', function () { }) it('should convert multipart/related to multipart/form-data', function (done) { - var req = new HTTPSnippet(fixtures.mimetypes['multipart/related']).requests[0] + const req = new HTTPSnippet(fixtures.mimetypes['multipart/related']).requests[0] req.postData.mimeType.should.eql('multipart/form-data') @@ -60,7 +58,7 @@ describe('HTTPSnippet', function () { }) it('should convert multipart/alternative to multipart/form-data', function (done) { - var req = new HTTPSnippet(fixtures.mimetypes['multipart/alternative']).requests[0] + const req = new HTTPSnippet(fixtures.mimetypes['multipart/alternative']).requests[0] req.postData.mimeType.should.eql('multipart/form-data') @@ -68,7 +66,7 @@ describe('HTTPSnippet', function () { }) it('should convert text/json to application/json', function (done) { - var req = new HTTPSnippet(fixtures.mimetypes['text/json']).requests[0] + const req = new HTTPSnippet(fixtures.mimetypes['text/json']).requests[0] req.postData.mimeType.should.eql('application/json') @@ -76,7 +74,7 @@ describe('HTTPSnippet', function () { }) it('should convert text/x-json to application/json', function (done) { - var req = new HTTPSnippet(fixtures.mimetypes['text/x-json']).requests[0] + const req = new HTTPSnippet(fixtures.mimetypes['text/x-json']).requests[0] req.postData.mimeType.should.eql('application/json') @@ -84,7 +82,7 @@ describe('HTTPSnippet', function () { }) it('should convert application/x-json to application/json', function (done) { - var req = new HTTPSnippet(fixtures.mimetypes['application/x-json']).requests[0] + const req = new HTTPSnippet(fixtures.mimetypes['application/x-json']).requests[0] req.postData.mimeType.should.eql('application/json') @@ -92,7 +90,7 @@ describe('HTTPSnippet', function () { }) it('should gracefully fallback if not able to parse JSON', function (done) { - var req = new HTTPSnippet(fixtures.mimetypes['invalid-json']).requests[0] + const req = new HTTPSnippet(fixtures.mimetypes['invalid-json']).requests[0] req.postData.mimeType.should.eql('text/plain') @@ -100,7 +98,7 @@ describe('HTTPSnippet', function () { }) it('should set postData.text = empty string when postData.params === undefined in application/x-www-form-urlencoded', function (done) { - var req = new HTTPSnippet(fixtures.mimetypes['application/x-www-form-urlencoded']).requests[0] + const req = new HTTPSnippet(fixtures.mimetypes['application/x-www-form-urlencoded']).requests[0] req.postData.text.should.eql('') @@ -108,7 +106,7 @@ describe('HTTPSnippet', function () { }) it('should add "uriObj" to source object', function (done) { - var req = new HTTPSnippet(fixtures.requests.query).requests[0] + const req = new HTTPSnippet(fixtures.requests.query).requests[0] req.uriObj.should.be.an.Object() @@ -139,7 +137,7 @@ describe('HTTPSnippet', function () { }) it('should add "queryObj" to source object', function (done) { - var req = new HTTPSnippet(fixtures.requests.query).requests[0] + const req = new HTTPSnippet(fixtures.requests.query).requests[0] req.queryObj.should.be.an.Object() req.queryObj.should.eql({ @@ -155,11 +153,49 @@ describe('HTTPSnippet', function () { }) it('should add "headersObj" to source object', function (done) { - var req = new HTTPSnippet(fixtures.requests.headers).requests[0] + const req = new HTTPSnippet(fixtures.requests.headers).requests[0] + + req.headersObj.should.be.an.Object() + req.headersObj.should.eql({ + accept: 'application/json', + 'x-foo': 'Bar' + }) + + done() + }) + + it('should add "headersObj" to source object case insensitive when HTTP/1.0', function (done) { + const fixture = Object.assign({}, fixtures.requests.headers) + fixture.httpVersion = 'HTTP/1.1' + fixture.headers = fixture.headers.concat({ + name: 'Kong-Admin-Token', + value: 'Hunter1' + }) + + const req = new HTTPSnippet(fixture).requests[0] + req.headersObj.should.be.an.Object() + req.headersObj.should.eql({ + 'Kong-Admin-Token': 'Hunter1', + accept: 'application/json', + 'x-foo': 'Bar' + }) + + done() + }) + + it('should add "headersObj" to source object in lowercase when HTTP/2.x', function (done) { + const fixture = Object.assign({}, fixtures.requests.headers) + fixture.httpVersion = 'HTTP/2' + fixture.headers = fixture.headers.concat({ + name: 'Kong-Admin-Token', + value: 'Hunter1' + }) + const req = new HTTPSnippet(fixture).requests[0] req.headersObj.should.be.an.Object() req.headersObj.should.eql({ - 'accept': 'application/json', + 'kong-admin-token': 'Hunter1', + accept: 'application/json', 'x-foo': 'Bar' }) @@ -167,7 +203,7 @@ describe('HTTPSnippet', function () { }) it('should modify orignal url to strip query string', function (done) { - var req = new HTTPSnippet(fixtures.requests.query).requests[0] + const req = new HTTPSnippet(fixtures.requests.query).requests[0] req.url.should.be.a.String() req.url.should.eql('http://mockbin.com/har') @@ -176,7 +212,7 @@ describe('HTTPSnippet', function () { }) it('should add "fullUrl" to source object', function (done) { - var req = new HTTPSnippet(fixtures.requests.query).requests[0] + const req = new HTTPSnippet(fixtures.requests.query).requests[0] req.fullUrl.should.be.a.String() req.fullUrl.should.eql('http://mockbin.com/har?foo=bar&foo=baz&baz=abc&key=value') @@ -185,7 +221,7 @@ describe('HTTPSnippet', function () { }) it('should fix "path" property of "uriObj" to match queryString', function (done) { - var req = new HTTPSnippet(fixtures.requests.query).requests[0] + const req = new HTTPSnippet(fixtures.requests.query).requests[0] req.uriObj.path.should.be.a.String() req.uriObj.path.should.eql('/har?foo=bar&foo=baz&baz=abc&key=value') diff --git a/test/reducer.js b/test/reducer.js index 80a43bbf4..73f130e76 100644 --- a/test/reducer.js +++ b/test/reducer.js @@ -1,38 +1,36 @@ -/* global describe, it */ - 'use strict' -var reducer = require('../src/helpers/reducer') +const reducer = require('../src/helpers/reducer') require('should') describe('Reducer', function () { it('should convert array object pair to key-value object', function (done) { - var query = [ - {name: 'key', value: 'value'}, - {name: 'foo', value: 'bar'} + const query = [ + { name: 'key', value: 'value' }, + { name: 'foo', value: 'bar' } ] - var obj = query.reduce(reducer, {}) + const obj = query.reduce(reducer, {}) obj.should.be.an.Object() - obj.should.eql({key: 'value', foo: 'bar'}) + obj.should.eql({ key: 'value', foo: 'bar' }) done() }) it('should convert multi-dimensional arrays to key=[array] object', function (done) { - var query = [ - {name: 'key', value: 'value'}, - {name: 'foo', value: 'bar1'}, - {name: 'foo', value: 'bar2'}, - {name: 'foo', value: 'bar3'} + const query = [ + { name: 'key', value: 'value' }, + { name: 'foo', value: 'bar1' }, + { name: 'foo', value: 'bar2' }, + { name: 'foo', value: 'bar3' } ] - var obj = query.reduce(reducer, {}) + const obj = query.reduce(reducer, {}) obj.should.be.an.Object() - obj.should.eql({key: 'value', foo: ['bar1', 'bar2', 'bar3']}) + obj.should.eql({ key: 'value', foo: ['bar1', 'bar2', 'bar3'] }) done() }) diff --git a/test/requests.js b/test/requests.js index b7cda7c72..dd52ff9cd 100644 --- a/test/requests.js +++ b/test/requests.js @@ -2,16 +2,17 @@ 'use strict' -var fixtures = require('./fixtures') -var HTTPSnippet = require('../src') -var targets = require('../src/targets') -var shell = require('child_process') -var util = require('util') +const fixtures = require('./fixtures') +const HTTPSnippet = require('../src') +const targets = require('../src/targets') +const shell = require('child_process') +const util = require('util') require('should') -var base = './test/fixtures/output/' -var requests = [ 'application-form-encoded', +const base = './test/fixtures/output/' +const requests = [ + 'application-form-encoded', 'application-json', 'cookies', 'custom-method', @@ -28,28 +29,34 @@ fixtures.cli.forEach(function (cli) { cli.clients.forEach(function (client) { requests.forEach(function (request) { it(client + ' request should match mock for ' + request, function (done) { - var stdout = '' - var fixture = cli.target + '/' + client + '/' + request + HTTPSnippet.extname(cli.target) - var command = util.format(cli.run, base + fixture) + let stdout = '' + const fixture = cli.target + '/' + client + '/' + request + HTTPSnippet.extname(cli.target) + const command = util.format(cli.run, base + fixture) - var ls = shell.exec(command) + const ls = shell.exec(command) ls.stdout.on('data', function (data) { stdout += data }) ls.on('exit', function (code) { + let har try { - var har = JSON.parse(stdout) + har = JSON.parse(stdout) } catch (err) { err.should.be.null() } + // Clone the fixture we're testing against to another object because for multipart/form-data cases we're + // deleting the header, and if we don't clone the fixture to another object, that deleted header will cause + // other tests to fail because it's missing where other tests are expecting it. + const fixture = JSON.parse(JSON.stringify(fixtures.requests[request])) + // make an exception for multipart/form-data - if (fixtures.requests[request].headers) { - fixtures.requests[request].headers.forEach(function (header, index) { - if (header.name === 'content-type' && header.value === 'multipart/form-data') { - delete fixtures.requests[request].headers[index] + if (fixture.headers) { + fixture.headers.forEach(function (header, index) { + if (header.name.toLowerCase() === 'content-type' && header.value === 'multipart/form-data') { + delete fixture.headers[index] } }) } @@ -59,7 +66,7 @@ fixtures.cli.forEach(function (cli) { har.log.entries[0].should.have.property('request') // BUG: Mockbin returns http url even when request is for https url if (request !== 'https') { - har.log.entries[0].request.should.containDeep(fixtures.requests[request]) + har.log.entries[0].request.should.containDeep(fixture) } done() }) diff --git a/test/targets.js b/test/targets.js index 319dbe0e8..58d77e3f3 100644 --- a/test/targets.js +++ b/test/targets.js @@ -1,28 +1,26 @@ -/* global describe, it */ - 'use strict' -var fixtures = require('./fixtures') -var fs = require('fs') -var glob = require('glob') -var HTTPSnippet = require('../src') -var path = require('path') -var should = require('should') -var targets = require('../src/targets') +const fixtures = require('./fixtures') +const fs = require('fs') +const glob = require('glob') +const HTTPSnippet = require('../src') +const path = require('path') +const should = require('should') +const targets = require('../src/targets') -var base = './test/fixtures/output/' +const base = './test/fixtures/output/' // read all output files -var output = glob.sync('**/*', {cwd: base, nodir: true}).reduce(function (obj, name) { +const output = glob.sync('**/*', { cwd: base, nodir: true }).reduce(function (obj, name) { obj[name] = fs.readFileSync(base + name) return obj }, {}) -var clearInfo = function (key) { +const clearInfo = function (key) { return !~['info', 'index'].indexOf(key) } -var itShouldHaveTests = function (target, client) { +const itShouldHaveTests = function (target, client) { it(target + ' should have tests', function (done) { fs.readdir(path.join(__dirname, 'targets', target), function (err, files) { should.not.exist(err) @@ -33,7 +31,7 @@ var itShouldHaveTests = function (target, client) { }) } -var itShouldHaveInfo = function (name, obj) { +const itShouldHaveInfo = function (name, obj) { it(name + ' should have info method', function () { obj.should.have.property('info').and.be.an.Object() obj.info.key.should.equal(name).and.be.a.String() @@ -43,16 +41,16 @@ var itShouldHaveInfo = function (name, obj) { // TODO: investigate issues with these fixtures const skipMe = { - 'clojure': { - 'clj_http': ['jsonObj-null-value', 'jsonObj-multiline'] + clojure: { + clj_http: ['jsonObj-null-value', 'jsonObj-multiline'] }, '*': { - '*': ['multipart-data', 'multipart-file', 'multipart-form-data'] + '*': [] } } -var itShouldHaveRequestTestOutputFixture = function (request, target, client) { - var fixture = target + '/' + client + '/' + request + HTTPSnippet.extname(target) +const itShouldHaveRequestTestOutputFixture = function (request, target, client) { + const fixture = target + '/' + client + '/' + request + HTTPSnippet.extname(target) it('should have output test for ' + request, function () { if (skipMe[target] && @@ -65,8 +63,8 @@ var itShouldHaveRequestTestOutputFixture = function (request, target, client) { }) } -var itShouldGenerateOutput = function (request, path, target, client) { - var fixture = path + request + HTTPSnippet.extname(target) +const itShouldGenerateOutput = function (request, path, target, client) { + const fixture = path + request + HTTPSnippet.extname(target) it('should generate ' + request + ' snippet', function () { if (Object.keys(output).indexOf(fixture) === -1 || @@ -76,24 +74,124 @@ var itShouldGenerateOutput = function (request, path, target, client) { skipMe['*']['*'].indexOf(request) > -1)) { this.skip() } - var instance = new HTTPSnippet(fixtures.requests[request]) - var result = instance.convert(target, client) + '\n' + + const instance = new HTTPSnippet(fixtures.requests[request]) + + // `form-data` sets the line break as `\r\n`, but we can't easily replicate that in our fixtures so let's convert + // it to a standard line break instead. + const result = instance.convert(target, client).replace(/\r\n/g, '\n').trim() result.should.be.a.String() - result.should.equal(output[fixture].toString()) + result.should.equal(output[fixture].toString().trim()) }) } describe('Available Targets', function () { - var targets = HTTPSnippet.availableTargets() - - targets.forEach(function (target) { + HTTPSnippet.availableTargets().forEach(function (target) { it('available-targets.json should include ' + target.title, function () { fixtures['available-targets'].should.containEql(target) }) }) }) +describe('Custom targets', function () { + describe('Adding a custom target', function () { + it('should throw if the target does has no info object', function () { + (function () { + HTTPSnippet.addTarget({}) + }).should.throw(Error) + }) + + it('should throw if the target does not have a properly constructed info object', function () { + (function () { + HTTPSnippet.addTarget({ info: { key: '' } }) + }).should.throw(Error) + }) + + it('should throw if the target already exists', function () { + (function () { + HTTPSnippet.addTarget(targets.node) + }).should.throw(Error) + }) + + it('should throw if the target has no client', function () { + (function () { + HTTPSnippet.addTarget({ + info: targets.node.info + }) + }).should.throw(Error) + }) + + it('should add and convert for a new custom target', function () { + const customTarget = require('./fixtures/customTarget') + + HTTPSnippet.addTarget(customTarget) + const target = HTTPSnippet.availableTargets().find(function (target) { return target.key === customTarget.info.key }) + const client = target.clients.find(function (client) { return client.key === customTarget.info.default }) + client.should.be.an.Object() + + Object.keys(fixtures.requests).filter(clearInfo).forEach(function (request) { + // Re-using the `request` module fixtures and framework since we copied it to create a custom client. + itShouldGenerateOutput(request, 'node/request/', customTarget.info.key, customTarget.info.default) + }) + }) + }) + + describe('Adding a custom client target', function () { + let customClient + + beforeEach(function () { + // Re-using the existing request client instead of mocking out something completely new. + customClient = { + ...targets.node.request, + info: { + key: 'axios-test', + title: 'Axios', + link: 'https://www.npmjs.com/package/axios', + description: 'Promise based HTTP client for the browser and node.js' + } + } + }) + + it('should throw if client already exists', function () { + (function () { + HTTPSnippet.addTargetClient('node', { ...customClient, info: { ...customClient.info, key: 'axios' } }) + }).should.throw(Error) + }) + + it("should throw if the client's target does not exist", function () { + (function () { + HTTPSnippet.addTargetClient('node.js', customClient) + }).should.throw(Error) + }) + + it('should throw if the client does has no info object', function () { + (function () { + HTTPSnippet.addTargetClient('node', {}) + }).should.throw(Error) + }) + + it('should throw if the target does not have a properly constructed info object', function () { + (function () { + HTTPSnippet.addTargetClient('node', { info: { key: '' } }) + }).should.throw(Error) + }) + + it('should add and convert for a new custom client target', function () { + HTTPSnippet.addTargetClient('node', customClient) + + const target = HTTPSnippet.availableTargets().find(function (target) { return target.key === 'node' }) + const client = target.clients.find(function (client) { return client.key === customClient.info.key }) + client.should.be.an.Object() + + Object.keys(fixtures.requests).filter(clearInfo).forEach(function (request) { + // Re-using the `request` module fixtures and framework since we copied it to create a custom client target. + itShouldGenerateOutput(request, 'node/request/', 'node', customClient.info.key) + }) + }) + }) +}) + // test all the things! describe('Targets', function () { Object.keys(targets).forEach(function (target) { @@ -106,7 +204,7 @@ describe('Targets', function () { itShouldHaveTests(target, client) - var test = require(path.join(__dirname, 'targets', target, client)) + const test = require(path.join(__dirname, 'targets', target, client)) test(HTTPSnippet, fixtures) diff --git a/test/targets/csharp/httpclient.js b/test/targets/csharp/httpclient.js new file mode 100644 index 000000000..9ad8c1790 --- /dev/null +++ b/test/targets/csharp/httpclient.js @@ -0,0 +1,5 @@ +'use strict' + +require('should') + +module.exports = function (snippet, fixtures) {} diff --git a/test/targets/go/native.js b/test/targets/go/native.js index 8daa55a44..5137eccb8 100644 --- a/test/targets/go/native.js +++ b/test/targets/go/native.js @@ -1,20 +1,19 @@ -/* global it */ - 'use strict' require('should') module.exports = function (HTTPSnippet, fixtures) { it('should support false boilerplate option', function () { - var result = new HTTPSnippet(fixtures.requests.full).convert('go', 'native', { + const result = new HTTPSnippet(fixtures.requests.full).convert('go', 'native', { showBoilerplate: false }) result.should.be.a.String() result.should.eql('url := "http://mockbin.com/har?foo=bar&foo=baz&baz=abc&key=value"\n\npayload := strings.NewReader("foo=bar")\n\nreq, _ := http.NewRequest("POST", url, payload)\n\nreq.Header.Add("cookie", "foo=bar; bar=baz")\nreq.Header.Add("accept", "application/json")\nreq.Header.Add("content-type", "application/x-www-form-urlencoded")\n\nres, _ := http.DefaultClient.Do(req)\n\ndefer res.Body.Close()\nbody, _ := ioutil.ReadAll(res.Body)\n\nfmt.Println(res)\nfmt.Println(string(body))') }) + it('should support checkErrors option', function () { - var result = new HTTPSnippet(fixtures.requests.full).convert('go', 'native', { + const result = new HTTPSnippet(fixtures.requests.full).convert('go', 'native', { checkErrors: true }) @@ -59,8 +58,9 @@ func main() { }`) }) + it('should support printBody option', function () { - var result = new HTTPSnippet(fixtures.requests.full).convert('go', 'native', { + const result = new HTTPSnippet(fixtures.requests.full).convert('go', 'native', { printBody: false }) @@ -91,8 +91,9 @@ func main() { }`) }) + it('should support timeout option', function () { - var result = new HTTPSnippet(fixtures.requests.full).convert('go', 'native', { + const result = new HTTPSnippet(fixtures.requests.full).convert('go', 'native', { timeout: 30 }) diff --git a/test/targets/java/asynchttp.js b/test/targets/java/asynchttp.js new file mode 100644 index 000000000..9ad8c1790 --- /dev/null +++ b/test/targets/java/asynchttp.js @@ -0,0 +1,5 @@ +'use strict' + +require('should') + +module.exports = function (snippet, fixtures) {} diff --git a/test/targets/java/nethttp.js b/test/targets/java/nethttp.js new file mode 100644 index 000000000..9ad8c1790 --- /dev/null +++ b/test/targets/java/nethttp.js @@ -0,0 +1,5 @@ +'use strict' + +require('should') + +module.exports = function (snippet, fixtures) {} diff --git a/test/targets/javascript/axios.js b/test/targets/javascript/axios.js new file mode 100644 index 000000000..b77cc77e7 --- /dev/null +++ b/test/targets/javascript/axios.js @@ -0,0 +1,3 @@ +'use strict' + +module.exports = function (snippet, fixtures) {} diff --git a/test/targets/javascript/xhr.js b/test/targets/javascript/xhr.js index 38c8b73d5..fd522aec6 100644 --- a/test/targets/javascript/xhr.js +++ b/test/targets/javascript/xhr.js @@ -1,16 +1,14 @@ -/* global it */ - 'use strict' require('should') module.exports = function (HTTPSnippet, fixtures) { it('should not use cors', function () { - var result = new HTTPSnippet(fixtures.requests.short).convert('javascript', 'xhr', { + const result = new HTTPSnippet(fixtures.requests.short).convert('javascript', 'xhr', { cors: false }) result.should.be.a.String() - result.replace(/\n/g, '').should.eql('var data = null;var xhr = new XMLHttpRequest();xhr.addEventListener("readystatechange", function () { if (this.readyState === this.DONE) { console.log(this.responseText); }});xhr.open("GET", "http://mockbin.com/har");xhr.send(data);') + result.replace(/\n/g, '').should.eql('const data = null;const xhr = new XMLHttpRequest();xhr.addEventListener("readystatechange", function () { if (this.readyState === this.DONE) { console.log(this.responseText); }});xhr.open("GET", "http://mockbin.com/har");xhr.send(data);') }) } diff --git a/test/targets/kotlin/okhttp.js b/test/targets/kotlin/okhttp.js new file mode 100644 index 000000000..9ad8c1790 --- /dev/null +++ b/test/targets/kotlin/okhttp.js @@ -0,0 +1,5 @@ +'use strict' + +require('should') + +module.exports = function (snippet, fixtures) {} diff --git a/test/targets/node/axios.js b/test/targets/node/axios.js new file mode 100644 index 000000000..b77cc77e7 --- /dev/null +++ b/test/targets/node/axios.js @@ -0,0 +1,3 @@ +'use strict' + +module.exports = function (snippet, fixtures) {} diff --git a/test/targets/node/fetch.js b/test/targets/node/fetch.js new file mode 100644 index 000000000..b77cc77e7 --- /dev/null +++ b/test/targets/node/fetch.js @@ -0,0 +1,3 @@ +'use strict' + +module.exports = function (snippet, fixtures) {} diff --git a/test/targets/objc/nsurlsession.js b/test/targets/objc/nsurlsession.js index aff90e0f8..87f4781b2 100644 --- a/test/targets/objc/nsurlsession.js +++ b/test/targets/objc/nsurlsession.js @@ -1,28 +1,28 @@ -/* global it */ - 'use strict' require('should') module.exports = function (HTTPSnippet, fixtures) { it('should support an indent option', function () { - var result = new HTTPSnippet(fixtures.requests.short).convert('objc', { + const result = new HTTPSnippet(fixtures.requests.short).convert('objc', { indent: ' ' }) result.should.be.a.String() result.replace(/\n/g, '').should.eql('#import NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://mockbin.com/har"] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0];[request setHTTPMethod:@"GET"];NSURLSession *session = [NSURLSession sharedSession];NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { if (error) { NSLog(@"%@", error); } else { NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response; NSLog(@"%@", httpResponse); } }];[dataTask resume];') }) + it('should support a timeout option', function () { - var result = new HTTPSnippet(fixtures.requests.short).convert('objc', { + const result = new HTTPSnippet(fixtures.requests.short).convert('objc', { timeout: 5 }) result.should.be.a.String() result.replace(/\n/g, '').should.eql('#import NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://mockbin.com/har"] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:5.0];[request setHTTPMethod:@"GET"];NSURLSession *session = [NSURLSession sharedSession];NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { if (error) { NSLog(@"%@", error); } else { NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response; NSLog(@"%@", httpResponse); } }];[dataTask resume];') }) + it('should support pretty option', function () { - var result = new HTTPSnippet(fixtures.requests.full).convert('objc', { + const result = new HTTPSnippet(fixtures.requests.full).convert('objc', { pretty: false }) @@ -31,7 +31,7 @@ module.exports = function (HTTPSnippet, fixtures) { }) it('should support json object with null value', function () { - var result = new HTTPSnippet(fixtures.requests['jsonObj-null-value']).convert('objc', { + const result = new HTTPSnippet(fixtures.requests['jsonObj-null-value']).convert('objc', { pretty: false }) diff --git a/test/targets/python/python3.js b/test/targets/python/python3.js index ce4678eb9..9ad8c1790 100644 --- a/test/targets/python/python3.js +++ b/test/targets/python/python3.js @@ -2,5 +2,4 @@ require('should') -module.exports = function (snippet, fixtures) { -} +module.exports = function (snippet, fixtures) {} diff --git a/test/targets/python/requests.js b/test/targets/python/requests.js index 4d632fc70..d85783c08 100644 --- a/test/targets/python/requests.js +++ b/test/targets/python/requests.js @@ -1,12 +1,10 @@ -/* global it */ - 'use strict' require('should') module.exports = function (HTTPSnippet) { it('should support query parameters provided in HAR\'s url', function () { - var result = new HTTPSnippet({ 'method': 'GET', 'url': 'http://mockbin.com/har?param=value' }).convert('python', 'requests', { + const result = new HTTPSnippet({ method: 'GET', url: 'http://mockbin.com/har?param=value' }).convert('python', 'requests', { showBoilerplate: false }) diff --git a/test/targets/r/httr.js b/test/targets/r/httr.js new file mode 100644 index 000000000..9ad8c1790 --- /dev/null +++ b/test/targets/r/httr.js @@ -0,0 +1,5 @@ +'use strict' + +require('should') + +module.exports = function (snippet, fixtures) {} diff --git a/test/targets/shell/curl.js b/test/targets/shell/curl.js index 0de970ea8..9435639b0 100644 --- a/test/targets/shell/curl.js +++ b/test/targets/shell/curl.js @@ -1,12 +1,10 @@ -/* global it */ - 'use strict' require('should') module.exports = function (HTTPSnippet, fixtures) { it('should use short options', function () { - var result = new HTTPSnippet(fixtures.requests.full).convert('shell', 'curl', { + const result = new HTTPSnippet(fixtures.requests.full).convert('shell', 'curl', { short: true, indent: false }) @@ -16,7 +14,7 @@ module.exports = function (HTTPSnippet, fixtures) { }) it('should use binary option', function () { - var result = new HTTPSnippet(fixtures.requests.full).convert('shell', 'curl', { + const result = new HTTPSnippet(fixtures.requests.full).convert('shell', 'curl', { short: true, indent: false, binary: true @@ -26,8 +24,39 @@ module.exports = function (HTTPSnippet, fixtures) { result.should.eql("curl -X POST 'http://mockbin.com/har?foo=bar&foo=baz&baz=abc&key=value' -H 'accept: application/json' -H 'content-type: application/x-www-form-urlencoded' -b 'foo=bar; bar=baz' --data-binary foo=bar") }) + it('should use short globoff option', function () { + const result = new HTTPSnippet(fixtures.requests.nested).convert('shell', 'curl', { + short: true, + indent: false, + globOff: true + }) + + result.should.be.a.String() + result.should.eql("curl -X GET -g 'http://mockbin.com/har?foo[bar]=baz,zap&fiz=buz&key=value'") + }) + + it('should use long globoff option', function () { + const result = new HTTPSnippet(fixtures.requests.nested).convert('shell', 'curl', { + indent: false, + globOff: true + }) + + result.should.be.a.String() + result.should.eql("curl --request GET --globoff --url 'http://mockbin.com/har?foo[bar]=baz,zap&fiz=buz&key=value'") + }) + + it('should not de-glob when globoff is false', function () { + const result = new HTTPSnippet(fixtures.requests.nested).convert('shell', 'curl', { + indent: false, + globOff: false + }) + + result.should.be.a.String() + result.should.eql("curl --request GET --url 'http://mockbin.com/har?foo%5Bbar%5D=baz%2Czap&fiz=buz&key=value'") + }) + it('should use --http1.0 for HTTP/1.0', function () { - var result = new HTTPSnippet(fixtures.curl.http1).convert('shell', 'curl', { + const result = new HTTPSnippet(fixtures.curl.http1).convert('shell', 'curl', { indent: false }) @@ -36,7 +65,7 @@ module.exports = function (HTTPSnippet, fixtures) { }) it('should use custom indentation', function () { - var result = new HTTPSnippet(fixtures.requests.full).convert('shell', 'curl', { + const result = new HTTPSnippet(fixtures.requests.full).convert('shell', 'curl', { indent: '@' }) diff --git a/test/targets/shell/httpie.js b/test/targets/shell/httpie.js index 571a8ea8b..1d11e0518 100644 --- a/test/targets/shell/httpie.js +++ b/test/targets/shell/httpie.js @@ -1,12 +1,10 @@ -/* global it */ - 'use strict' require('should') module.exports = function (HTTPSnippet, fixtures) { it('should ask for verbose output', function () { - var result = new HTTPSnippet(fixtures.requests.short).convert('shell', 'httpie', { + const result = new HTTPSnippet(fixtures.requests.short).convert('shell', 'httpie', { indent: false, verbose: true }) @@ -16,7 +14,7 @@ module.exports = function (HTTPSnippet, fixtures) { }) it('should use short flags', function () { - var result = new HTTPSnippet(fixtures.requests.short).convert('shell', 'httpie', { + const result = new HTTPSnippet(fixtures.requests.short).convert('shell', 'httpie', { body: true, cert: 'foo', headers: true, @@ -35,7 +33,7 @@ module.exports = function (HTTPSnippet, fixtures) { }) it('should use long flags', function () { - var result = new HTTPSnippet(fixtures.requests.short).convert('shell', 'httpie', { + const result = new HTTPSnippet(fixtures.requests.short).convert('shell', 'httpie', { body: true, cert: 'foo', headers: true, @@ -53,7 +51,7 @@ module.exports = function (HTTPSnippet, fixtures) { }) it('should use custom indentation', function () { - var result = new HTTPSnippet(fixtures.requests.full).convert('shell', 'httpie', { + const result = new HTTPSnippet(fixtures.requests.full).convert('shell', 'httpie', { indent: '@' }) @@ -62,7 +60,7 @@ module.exports = function (HTTPSnippet, fixtures) { }) it('should use queryString parameters', function () { - var result = new HTTPSnippet(fixtures.requests.query).convert('shell', 'httpie', { + const result = new HTTPSnippet(fixtures.requests.query).convert('shell', 'httpie', { indent: false, queryParams: true }) @@ -72,7 +70,7 @@ module.exports = function (HTTPSnippet, fixtures) { }) it('should build parameterized output of query string', function () { - var result = new HTTPSnippet(fixtures.requests.query).convert('shell', 'httpie', { + const result = new HTTPSnippet(fixtures.requests.query).convert('shell', 'httpie', { indent: false, queryParams: true }) @@ -82,7 +80,7 @@ module.exports = function (HTTPSnippet, fixtures) { }) it('should build parameterized output of post data', function () { - var result = new HTTPSnippet(fixtures.requests['application-form-encoded']).convert('shell', 'httpie', { + const result = new HTTPSnippet(fixtures.requests['application-form-encoded']).convert('shell', 'httpie', { short: true, indent: false, queryParams: true diff --git a/test/targets/shell/wget.js b/test/targets/shell/wget.js index 75adad1fc..7570628c6 100644 --- a/test/targets/shell/wget.js +++ b/test/targets/shell/wget.js @@ -1,12 +1,10 @@ -/* global it */ - 'use strict' require('should') module.exports = function (HTTPSnippet, fixtures) { it('should use short options', function () { - var result = new HTTPSnippet(fixtures.requests.full).convert('shell', 'wget', { + const result = new HTTPSnippet(fixtures.requests.full).convert('shell', 'wget', { short: true, indent: false }) @@ -16,7 +14,7 @@ module.exports = function (HTTPSnippet, fixtures) { }) it('should ask for -v output', function () { - var result = new HTTPSnippet(fixtures.requests.short).convert('shell', 'wget', { + const result = new HTTPSnippet(fixtures.requests.short).convert('shell', 'wget', { short: true, indent: false, verbose: true @@ -27,7 +25,7 @@ module.exports = function (HTTPSnippet, fixtures) { }) it('should ask for --verbose output', function () { - var result = new HTTPSnippet(fixtures.requests.short).convert('shell', 'wget', { + const result = new HTTPSnippet(fixtures.requests.short).convert('shell', 'wget', { short: false, indent: false, verbose: true @@ -38,7 +36,7 @@ module.exports = function (HTTPSnippet, fixtures) { }) it('should use custom indentation', function () { - var result = new HTTPSnippet(fixtures.requests.full).convert('shell', 'wget', { + const result = new HTTPSnippet(fixtures.requests.full).convert('shell', 'wget', { indent: '@' }) diff --git a/test/targets/swift/nsurlsession.js b/test/targets/swift/nsurlsession.js index 1c1da3c46..7cbad68e3 100644 --- a/test/targets/swift/nsurlsession.js +++ b/test/targets/swift/nsurlsession.js @@ -1,36 +1,37 @@ -/* global it */ - 'use strict' require('should') module.exports = function (HTTPSnippet, fixtures) { it('should support an indent option', function () { - var result = new HTTPSnippet(fixtures.requests.short).convert('swift', { + const result = new HTTPSnippet(fixtures.requests.short).convert('swift', { indent: ' ' }) result.should.be.a.String() result.replace(/\n/g, '').should.eql('import Foundationlet request = NSMutableURLRequest(url: NSURL(string: "http://mockbin.com/har")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0)request.httpMethod = "GET"let session = URLSession.sharedlet dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) }})dataTask.resume()') }) + it('should support a timeout option', function () { - var result = new HTTPSnippet(fixtures.requests.short).convert('swift', { + const result = new HTTPSnippet(fixtures.requests.short).convert('swift', { timeout: 5 }) result.should.be.a.String() result.replace(/\n/g, '').should.eql('import Foundationlet request = NSMutableURLRequest(url: NSURL(string: "http://mockbin.com/har")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 5.0)request.httpMethod = "GET"let session = URLSession.sharedlet dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) }})dataTask.resume()') }) + it('should support pretty option', function () { - var result = new HTTPSnippet(fixtures.requests.full).convert('swift', { + const result = new HTTPSnippet(fixtures.requests.full).convert('swift', { pretty: false }) result.should.be.a.String() result.replace(/\n/g, '').should.eql('import Foundationlet headers = ["cookie": "foo=bar; bar=baz", "accept": "application/json", "content-type": "application/x-www-form-urlencoded"]let postData = NSMutableData(data: "foo=bar".data(using: String.Encoding.utf8)!)let request = NSMutableURLRequest(url: NSURL(string: "http://mockbin.com/har?foo=bar&foo=baz&baz=abc&key=value")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0)request.httpMethod = "POST"request.allHTTPHeaderFields = headersrequest.httpBody = postData as Datalet session = URLSession.sharedlet dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) }})dataTask.resume()') }) + it('should support json object with null value', function () { - var result = new HTTPSnippet(fixtures.requests['jsonObj-null-value']).convert('swift', { + const result = new HTTPSnippet(fixtures.requests['jsonObj-null-value']).convert('swift', { pretty: false }) diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 000000000..2390df6e0 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2912 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0": + version "7.12.11" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/helper-validator-identifier@^7.10.4": + version "7.12.11" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz" + integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== + +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@eslint/eslintrc@^0.2.1": + version "0.2.2" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz" + integrity sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + lodash "^4.17.19" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + +"@ungap/promise-all-settled@1.1.2": + version "1.1.2" + resolved "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz" + integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== + +abbrev@1, abbrev@1.0.x: + version "1.0.9" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz" + integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU= + +acorn-jsx@^5.3.1: + version "5.3.1" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz" + integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== + +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +ajv@^6.10.0, ajv@^6.5.5: + version "6.10.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz" + integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^6.10.2: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + 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" + +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + 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" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz" + integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= + +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.0: + version "3.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +array-includes@^3.1.1, array-includes@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.2.tgz" + integrity sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + get-intrinsic "^1.0.1" + is-string "^1.0.5" + +array.prototype.flat@^1.2.3: + version "1.2.4" + resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz" + integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + +array.prototype.flatmap@^1.2.3: + version "1.2.4" + resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz" + integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + function-bind "^1.1.1" + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@^1.0.0, assert-plus@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +async@~1.5.2: + version "1.5.2" + resolved "https://registry.npmjs.org/async/-/async-1.5.2.tgz" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + +async@1.x: + version "1.5.2" + resolved "https://registry.npmjs.org/async/-/async-1.5.2.tgz" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz" + integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + +call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.0.0: + version "6.2.0" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz" + integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@^1.1.1: + version "1.1.3" + resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + 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: + version "2.4.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + 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" + +chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + 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" + +chalk@^4.0.0: + version "4.1.0" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chokidar@3.4.3: + version "3.4.3" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz" + integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.1.2" + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +codeclimate-test-reporter@^0.5.1: + version "0.5.1" + resolved "https://registry.npmjs.org/codeclimate-test-reporter/-/codeclimate-test-reporter-0.5.1.tgz" + integrity sha512-XCzmc8dH+R4orK11BCg5pBbXc35abxq9sept4YvUFRkFl9zb9MIVRrCKENe6U1TKAMTgvGJmrYyHn0y2lerpmg== + dependencies: + async "~1.5.2" + commander "2.9.0" + lcov-parse "0.0.10" + request "~2.88.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + 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.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.7" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz" + integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w== + dependencies: + delayed-stream "~1.0.0" + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.19.0, commander@^2.9.0, commander@~2.20.0: + version "2.20.0" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz" + integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== + +commander@2.9.0: + version "2.9.0" + resolved "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz" + integrity sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q= + dependencies: + graceful-readlink ">= 1.0.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= + +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +debug-log@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz" + integrity sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8= + +debug@^2.2.0, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + integrity sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8= + dependencies: + ms "2.0.0" + +debug@^4.0.1: + version "4.3.1" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + +debug@^4.1.1: + version "4.3.1" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + +debug@4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz" + integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== + dependencies: + ms "2.1.2" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@^0.1.3, deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +diff@4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +dotenv@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz" + integrity sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g== + +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + +duplexer@~0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz" + integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +echint@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/echint/-/echint-4.0.2.tgz" + integrity sha512-iUEHrTxUqpZ0V6ayTmjyf9/f3Iz/Pp3EGKhmfFpnZQ4tjTk3ZyO9bO2qGwgr3coSknzXdieYrcCe3JDsiI/Uvw== + dependencies: + chalk "^2.4.2" + commander "^2.19.0" + dotenv "^7.0.0" + glob "^7.1.3" + lintspaces "0.6.3" + minimatch "^3.0.4" + pkg-config "^1.1.1" + +editorconfig@^0.15.0: + version "0.15.3" + resolved "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz" + integrity sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g== + dependencies: + commander "^2.19.0" + lru-cache "^4.1.5" + semver "^5.6.0" + sigmund "^1.0.1" + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.18.0-next.1: + version "1.18.0-next.2" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.2.tgz" + integrity sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.2" + is-negative-zero "^2.0.1" + is-regex "^1.1.1" + object-inspect "^1.9.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.3" + string.prototype.trimstart "^1.0.3" + +es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escape-string-regexp@4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escodegen@1.8.x: + version "1.8.1" + resolved "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz" + integrity sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg= + dependencies: + esprima "^2.7.1" + estraverse "^1.9.1" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.2.0" + +eslint-config-standard-jsx@10.0.0: + version "10.0.0" + resolved "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-10.0.0.tgz" + integrity sha512-hLeA2f5e06W1xyr/93/QJulN/rLbUVUmqTlexv9PRKHFwEC9ffJcH2LvJhMoEqYQBEYafedgGZXH2W8NUpt5lA== + +eslint-config-standard@16.0.2: + version "16.0.2" + resolved "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.2.tgz" + integrity sha512-fx3f1rJDsl9bY7qzyX8SAtP8GBSk6MfXFaTfaGgk12aAYW4gJSyRm7dM790L6cbXv63fvjY4XeSzXnb4WM+SKw== + +eslint-import-resolver-node@^0.3.4: + version "0.3.4" + resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz" + integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== + dependencies: + debug "^2.6.9" + resolve "^1.13.1" + +eslint-module-utils@^2.6.0: + version "2.6.0" + resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz" + integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== + dependencies: + debug "^2.6.9" + pkg-dir "^2.0.0" + +eslint-plugin-es@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz" + integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== + dependencies: + eslint-utils "^2.0.0" + regexpp "^3.0.0" + +eslint-plugin-import@^2.22.1, eslint-plugin-import@~2.22.1: + version "2.22.1" + resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz" + integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw== + dependencies: + array-includes "^3.1.1" + array.prototype.flat "^1.2.3" + contains-path "^0.1.0" + debug "^2.6.9" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.4" + eslint-module-utils "^2.6.0" + has "^1.0.3" + minimatch "^3.0.4" + object.values "^1.1.1" + read-pkg-up "^2.0.0" + resolve "^1.17.0" + tsconfig-paths "^3.9.0" + +eslint-plugin-node@^11.1.0, eslint-plugin-node@~11.1.0: + version "11.1.0" + resolved "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz" + integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g== + dependencies: + eslint-plugin-es "^3.0.0" + eslint-utils "^2.0.0" + ignore "^5.1.1" + minimatch "^3.0.4" + resolve "^1.10.1" + semver "^6.1.0" + +eslint-plugin-promise@^4.2.1, eslint-plugin-promise@~4.2.1: + version "4.2.1" + resolved "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz" + integrity sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw== + +eslint-plugin-react@^7.21.5, eslint-plugin-react@~7.21.5: + version "7.21.5" + resolved "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.21.5.tgz" + integrity sha512-8MaEggC2et0wSF6bUeywF7qQ46ER81irOdWS4QWxnnlAEsnzeBevk1sWh7fhpCghPpXb+8Ks7hvaft6L/xsR6g== + dependencies: + array-includes "^3.1.1" + array.prototype.flatmap "^1.2.3" + doctrine "^2.1.0" + has "^1.0.3" + jsx-ast-utils "^2.4.1 || ^3.0.0" + object.entries "^1.1.2" + object.fromentries "^2.0.2" + object.values "^1.1.1" + prop-types "^15.7.2" + resolve "^1.18.1" + string.prototype.matchall "^4.0.2" + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-utils@^2.0.0, eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.1.0: + version "1.3.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz" + integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + +"eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0", "eslint@^3 || ^4 || ^5 || ^6 || ^7", eslint@^7.12.1, eslint@>=4.19.1, eslint@>=5.16.0, eslint@~7.13.0: + version "7.13.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-7.13.0.tgz" + integrity sha512-uCORMuOO8tUzJmsdRtrvcGq5qposf7Rw0LwkTJkoDbOycVQtQjmnhZSuLQnozLE4TmAzlMVV45eCHmQ1OpDKUQ== + dependencies: + "@babel/code-frame" "^7.0.0" + "@eslint/eslintrc" "^0.2.1" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.0" + esquery "^1.2.0" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash "^4.17.19" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^5.2.3" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^7.3.0: + version "7.3.1" + resolved "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" + +esprima@^2.7.1, esprima@2.7.x: + version "2.7.3" + resolved "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz" + integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.2.0: + version "1.3.1" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz" + integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^1.9.1: + version "1.9.3" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz" + integrity sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q= + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0: + version "5.2.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + +estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz" + integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= + +event-stream@3.3.4: + version "3.3.4" + resolved "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz" + integrity sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE= + 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" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extsprintf@^1.2.0, extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz" + integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= + +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== + dependencies: + flat-cache "^2.0.1" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-root@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz" + integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +flatted@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/form-data/-/form-data-3.0.4.tgz" + integrity sha512-f0cRzm6dkyVYV3nPoooP8XlccPQukegwhAnpoLcXy+X+A8KfpGOoXwDr9FLZd3wzgLaBGQBE3lY93Zm/i1JvIQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + hasown "^2.0.2" + mime-types "^2.1.35" + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +from@~0: + version "0.1.7" + resolved "https://registry.npmjs.org/from/-/from-0.1.7.tgz" + integrity sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4= + +fs-readfile-promise@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/fs-readfile-promise/-/fs-readfile-promise-2.0.1.tgz" + integrity sha1-gAI4I5gfn//+AWCei+Zo9prknnA= + dependencies: + graceful-fs "^4.1.2" + +fs-writefile-promise@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/fs-writefile-promise/-/fs-writefile-promise-1.0.3.tgz" + integrity sha1-4C+bWP/CVe2CKtx6ARFPRF1I0GM= + dependencies: + mkdirp-promise "^1.0.0" + pinkie-promise "^1.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + +function-bind@^1.1.1, function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.1, get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.2.6: + version "1.3.0" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz" + integrity sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg== + +get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + +get-stdin@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz" + integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg== + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob-parent@^5.0.0, glob-parent@~5.1.0: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@^5.0.15: + version "5.0.15" + resolved "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz" + integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^6.0.1: + version "6.0.4" + resolved "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz" + integrity sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI= + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.3: + version "7.1.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz" + integrity sha1-OWCDLT8VdBCDQtr9OmezMsCWnfE= + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@7.1.6: + version "7.1.6" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^12.1.0: + version "12.4.0" + resolved "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz" + integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== + dependencies: + type-fest "^0.8.1" + +gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + +graceful-fs@^4.1.15, graceful-fs@^4.1.2: + version "4.1.15" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz" + integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== + +"graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz" + integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU= + +growl@1.10.5: + version "1.10.5" + resolved "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz" + integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== + +handlebars@^4.0.1: + version "4.7.7" + resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz" + integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.0" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@^5.0.0, har-validator@~5.1.0: + version "5.1.3" + resolved "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz" + integrity sha1-HvievT5JllV2de7ZiTEQ3DUPoIA= + dependencies: + ajv "^6.5.5" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz" + integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.0, has-symbols@^1.0.1, has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +he@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +ignore@^5.1.1: + version "5.1.8" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.3" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@~1.3.0: + version "1.3.8" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +internal-slot@^1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-callable@^1.1.4, is-callable@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz" + integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== + +is-core-module@^2.1.0: + version "2.2.0" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz" + integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== + dependencies: + has "^1.0.3" + +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz" + integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-negative-zero@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-regex@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz" + integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== + dependencies: + has-symbols "^1.0.1" + +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz" + integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= + +is-string@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz" + integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== + +is-symbol@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz" + integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== + dependencies: + has-symbols "^1.0.0" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +isarray@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +istanbul@^0.4.0: + version "0.4.5" + resolved "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz" + integrity sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs= + dependencies: + abbrev "1.0.x" + async "1.x" + escodegen "1.8.x" + esprima "2.7.x" + glob "^5.0.15" + handlebars "^4.0.1" + js-yaml "3.x" + mkdirp "0.5.x" + nopt "3.x" + once "1.x" + resolve "1.1.x" + supports-color "^3.1.0" + which "^1.1.1" + wordwrap "^1.0.0" + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1, js-yaml@3.x: + version "3.13.1" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@3.14.0: + version "3.14.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz" + integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +"jsx-ast-utils@^2.4.1 || ^3.0.0": + version "3.2.0" + resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz" + integrity sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q== + dependencies: + array-includes "^3.1.2" + object.assign "^4.1.2" + +lcov-parse@0.0.10: + version "0.0.10" + resolved "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz" + integrity sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM= + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lintspaces@0.6.3: + version "0.6.3" + resolved "https://registry.npmjs.org/lintspaces/-/lintspaces-0.6.3.tgz" + integrity sha512-nUwq/jK+gUhpILtV9Ms2cuF16LB9a8nnecowSQD5LRNX3+h1Bl1zIvPZNQgJYeK9xxuoR+HuWnjagQsvyJbS4w== + dependencies: + deep-extend "^0.6.0" + editorconfig "^0.15.0" + rc "^1.2.8" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +load-json-file@^5.2.0: + version "5.3.0" + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz" + integrity sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw== + dependencies: + graceful-fs "^4.1.15" + parse-json "^4.0.0" + pify "^4.0.1" + strip-bom "^3.0.0" + type-fest "^0.3.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz" + integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== + dependencies: + chalk "^4.0.0" + +loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lru-cache@^4.1.5: + version "4.1.5" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +map-stream@~0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz" + integrity sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ= + +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@^2.1.35, mime-types@~2.1.19: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +minimatch@^3.0.4, "minimatch@2 || 3", minimatch@3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +mkdirp-promise@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-1.1.0.tgz" + integrity sha1-LISJPtZ24NmPsY+5piEv0bK5qBk= + +mkdirp@^0.5.1, mkdirp@>=0.5.0, mkdirp@0.5.x: + version "0.5.1" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + +mocha@^8.2.1: + version "8.2.1" + resolved "https://registry.npmjs.org/mocha/-/mocha-8.2.1.tgz" + integrity sha512-cuLBVfyFfFqbNR0uUKbDGXKGk+UDFe6aR4os78XIrMQpZl/nv7JYHcvP5MFIAb374b2zFXsdgEGwmzMtP0Xg8w== + dependencies: + "@ungap/promise-all-settled" "1.1.2" + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.4.3" + debug "4.2.0" + diff "4.0.2" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.1.6" + growl "1.10.5" + he "1.2.0" + js-yaml "3.14.0" + log-symbols "4.0.0" + minimatch "3.0.4" + ms "2.1.2" + nanoid "3.1.12" + serialize-javascript "5.0.1" + strip-json-comments "3.1.1" + supports-color "7.2.0" + which "2.0.2" + wide-align "1.1.3" + workerpool "6.0.2" + yargs "13.3.2" + yargs-parser "13.1.2" + yargs-unparser "2.0.0" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +nanoid@3.1.12: + version "3.1.12" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.1.12.tgz" + integrity sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +neo-async@^2.6.0: + version "2.6.0" + resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz" + integrity sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA== + +nopt@3.x: + version "3.0.6" + resolved "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz" + integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= + dependencies: + abbrev "1" + +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-inspect@^1.9.0: + version "1.9.0" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz" + integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== + +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +object.entries@^1.1.2: + version "1.1.3" + resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz" + integrity sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + has "^1.0.3" + +object.fromentries@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.3.tgz" + integrity sha512-IDUSMXs6LOSJBWE++L0lzIbSqHl9KDCfff2x/JSEIDtEUavUnyMYC2ZGay/04Zq4UT8lvd4xNhU4/YHKibAOlw== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + has "^1.0.3" + +object.values@^1.1.1: + version "1.1.2" + resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz" + integrity sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + has "^1.0.3" + +once@^1.3.0, once@1.x: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +optionator@^0.8.1: + version "0.8.2" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz" + integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0: + version "2.3.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.6: + version "1.0.7" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + dependencies: + pify "^2.0.0" + +pause-stream@0.0.11: + version "0.0.11" + resolved "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz" + integrity sha1-/lo0sMvOErWqaitAPuLnO2AvFEU= + dependencies: + through "~2.3" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-1.0.0.tgz" + integrity sha1-0dpn9UglY7t89X8oauKCLs+/NnA= + dependencies: + pinkie "^1.0.0" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== + dependencies: + pinkie "^2.0.0" + +pinkie@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/pinkie/-/pinkie-1.0.0.tgz" + integrity sha1-Wkfyi6EBXQIBvae/DzWOR77Ix+Q= + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" + integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== + +pkg-conf@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/pkg-conf/-/pkg-conf-3.1.0.tgz" + integrity sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ== + dependencies: + find-up "^3.0.0" + load-json-file "^5.2.0" + +pkg-config@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz" + integrity sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q= + dependencies: + debug-log "^1.0.0" + find-root "^1.0.0" + xtend "^4.0.1" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + dependencies: + find-up "^2.1.0" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +prop-types@^15.7.2: + version "15.7.2" + resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz" + integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.8.1" + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +psl@^1.1.24: + version "1.1.31" + resolved "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz" + integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw== + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +rc@^1.2.8: + version "1.2.8" + resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-is@^16.8.1: + version "16.13.1" + resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + +regexp.prototype.flags@^1.3.0: + version "1.3.1" + resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz" + integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +regexpp@^3.0.0, regexpp@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== + +request@~2.88.0: + version "2.88.0" + resolved "https://registry.npmjs.org/request/-/request-2.88.0.tgz" + integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.0" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.4.3" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve@^1.10.0: + version "1.19.0" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz" + integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== + dependencies: + is-core-module "^2.1.0" + path-parse "^1.0.6" + +resolve@^1.10.1: + version "1.19.0" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz" + integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== + dependencies: + is-core-module "^2.1.0" + path-parse "^1.0.6" + +resolve@^1.13.1: + version "1.19.0" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz" + integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== + dependencies: + is-core-module "^2.1.0" + path-parse "^1.0.6" + +resolve@^1.17.0: + version "1.19.0" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz" + integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== + dependencies: + is-core-module "^2.1.0" + path-parse "^1.0.6" + +resolve@^1.18.1: + version "1.19.0" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz" + integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== + dependencies: + is-core-module "^2.1.0" + path-parse "^1.0.6" + +resolve@1.1.x: + version "1.1.7" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz" + integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= + +rimraf@2.6.3: + version "2.6.3" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +semver@^5.6.0: + version "5.7.0" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz" + integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== + +semver@^6.1.0: + version "6.3.0" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.2.1: + version "7.3.4" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" + +"semver@2 || 3 || 4 || 5": + version "5.7.1" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +serialize-javascript@5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz" + integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== + dependencies: + randombytes "^2.1.0" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +should-equal@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz" + integrity sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA== + dependencies: + should-type "^1.4.0" + +should-format@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz" + integrity sha1-m/yPdPo5IFxT04w01xcwPidxJPE= + 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.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz" + 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.npmjs.org/should-type/-/should-type-1.4.0.tgz" + integrity sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM= + +should-util@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/should-util/-/should-util-1.0.0.tgz" + integrity sha1-yYzaN0qmsZDfi6h8mInCtNtiAGM= + +should@^13.2.3: + version "13.2.3" + resolved "https://registry.npmjs.org/should/-/should-13.2.3.tgz" + 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" + +side-channel@^1.0.3, side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +sigmund@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz" + integrity sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA= + +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@~0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz" + integrity sha1-2rc/vPwrqBm03gO9b26qSBZLP50= + dependencies: + amdefine ">=0.0.4" + +source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.7" + resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz" + integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== + +split@0.3: + version "0.3.3" + resolved "https://registry.npmjs.org/split/-/split-0.3.3.tgz" + integrity sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8= + dependencies: + through "2" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +standard-engine@^14.0.1: + version "14.0.1" + resolved "https://registry.npmjs.org/standard-engine/-/standard-engine-14.0.1.tgz" + integrity sha512-7FEzDwmHDOGva7r9ifOzD3BGdTbA7ujJ50afLVdW/tK14zQEptJjbFuUfn50irqdHDcTbNh0DTIoMPynMCXb0Q== + dependencies: + get-stdin "^8.0.0" + minimist "^1.2.5" + pkg-conf "^3.1.0" + xdg-basedir "^4.0.0" + +standard@^16.0.3: + version "16.0.3" + resolved "https://registry.npmjs.org/standard/-/standard-16.0.3.tgz" + integrity sha512-70F7NH0hSkNXosXRltjSv6KpTAOkUkSfyu3ynyM5dtRUiLtR+yX9EGZ7RKwuGUqCJiX/cnkceVM6HTZ4JpaqDg== + dependencies: + eslint "~7.13.0" + eslint-config-standard "16.0.2" + eslint-config-standard-jsx "10.0.0" + eslint-plugin-import "~2.22.1" + eslint-plugin-node "~11.1.0" + eslint-plugin-promise "~4.2.1" + eslint-plugin-react "~7.21.5" + standard-engine "^14.0.1" + +stream-combiner@~0.0.4: + version "0.0.4" + resolved "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz" + integrity sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ= + dependencies: + duplexer "~0.1.1" + +"string-width@^1.0.2 || 2": + version "2.1.1" + resolved "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string.prototype.matchall@^4.0.2: + version "4.0.3" + resolved "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.3.tgz" + integrity sha512-OBxYDA2ifZQ2e13cP82dWFMaCV9CGF8GzmN4fljBVw5O5wep0lu4gacm1OL6MjROoUnB8VbkWRThqkV2YFLNxw== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + has-symbols "^1.0.1" + internal-slot "^1.0.2" + regexp.prototype.flags "^1.3.0" + side-channel "^1.0.3" + +string.prototype.trimend@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz" + integrity sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +string.prototype.trimstart@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz" + integrity sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +stringify-object@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz" + 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: + version "3.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-json-comments@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +strip-json-comments@3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^3.1.0: + version "3.2.3" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz" + integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= + dependencies: + has-flag "^1.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@7.2.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +table@^5.2.3: + version "5.4.6" + resolved "https://registry.npmjs.org/table/-/table-5.4.6.tgz" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +through@~2.3, through@~2.3.1, through@2: + version "2.3.8" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tough-cookie@~2.4.3: + version "2.4.3" + resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz" + integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== + dependencies: + psl "^1.1.24" + punycode "^1.4.1" + +tsconfig-paths@^3.9.0: + version "3.9.0" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz" + integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-fest@^0.3.0: + version "0.3.1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz" + integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +uglify-js@^3.1.4: + version "3.5.8" + resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.8.tgz" + integrity sha512-GFSjB1nZIzoIq70qvDRtWRORHX3vFkAnyK/rDExc0BN7r9+/S+Voz3t/fwJuVfjppAMz+ceR2poE7tkhvnVwQQ== + dependencies: + commander "~2.20.0" + source-map "~0.6.1" + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + +uuid@^3.3.2: + version "3.3.2" + resolved "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + +v8-compile-cache@^2.0.3: + version "2.2.0" + resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz" + integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.1.1: + version "1.3.1" + resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +which@2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wide-align@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wordwrap@^1.0.0, wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + +workerpool@6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.0.2.tgz" + integrity sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q== + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write@1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/write/-/write-1.0.3.tgz" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== + dependencies: + mkdirp "^0.5.1" + +xdg-basedir@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz" + integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== + +xtend@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= + +y18n@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz" + integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@^13.1.2, yargs-parser@13.1.2: + version "13.1.2" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@13.3.2: + version "13.3.2" + resolved "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.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 "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==