From 66306783bbda704832c1918ae943453c78e665fc Mon Sep 17 00:00:00 2001 From: Honza Javorek Date: Tue, 14 May 2019 18:30:10 +0200 Subject: [PATCH 1/5] feat: add CLI Close https://github.com/apiaryio/dredd-hooks-template/issues/20, close https://github.com/apiaryio/dredd-hooks-template/issues/4, close https://github.com/apiaryio/dredd-hooks-template/issues/3, close https://github.com/apiaryio/dredd-hooks-template/issues/19 --- .circleci/config.yml | 2 +- .gitignore | 2 +- README.md | 126 ++++++++++++++++++++++++++++-------------- cli/copyFeatures.js | 24 ++++++++ cli/index.js | 98 ++++++++++++++++++++++++++++++++ cli/replaceDredd.js | 9 +++ cli/run.js | 13 +++++ package.json | 21 +++++-- passing.png | Bin 0 -> 88238 bytes scripts/smoke-test.js | 66 ++++++++++++++++++++++ scripts/test.js | 56 ------------------- 11 files changed, 313 insertions(+), 104 deletions(-) create mode 100644 cli/copyFeatures.js create mode 100755 cli/index.js create mode 100644 cli/replaceDredd.js create mode 100644 cli/run.js create mode 100644 passing.png create mode 100644 scripts/smoke-test.js delete mode 100644 scripts/test.js diff --git a/.circleci/config.yml b/.circleci/config.yml index b8ab751..00a8d5e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -16,7 +16,7 @@ jobs: steps: - checkout - run: - name: Install dev dependencies (Node.js) + name: Install dependencies (Node.js) command: npm install - run: name: Install the reference hooks implementation (Python) diff --git a/.gitignore b/.gitignore index f05b1f2..6afe2b3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ node_modules -test +dredd-hooks-template-*.tgz diff --git a/README.md b/README.md index 787ab3d..c1a763b 100644 --- a/README.md +++ b/README.md @@ -1,63 +1,109 @@ -# Cross-Language Test Suite for Dredd Hooks +# Cross-Language Test Suite for Dredd Hooks Handlers -[![Build Status](https://travis-ci.org/apiaryio/dredd-hooks-template.svg?branch=master)](https://travis-ci.org/apiaryio/dredd-hooks-template) [![Greenkeeper badge](https://badges.greenkeeper.io/apiaryio/dredd-hooks-template.svg)](https://greenkeeper.io/) +[![Build Status](https://travis-ci.org/apiaryio/dredd-hooks-template.svg?branch=master)](https://travis-ci.org/apiaryio/dredd-hooks-template) -Language-agnostic BDD test suite for boilerplating implementation of [Dredd][] [hooks][] handler for a new language. It tests the public interface of the hooks handler and ensures it will work as Dredd expects. It's written in [Gherkin][] and ran by [Aruba][]. - - [Aruba]: https://github.com/cucumber/aruba - [Gherkin]: https://github.com/cucumber/cucumber/wiki/Gherkin - [Dredd]: https://github.com/apiaryio/dredd - [hooks]: https://dredd.readthedocs.io/en/latest/hooks/ +[Dredd](https://dredd.org) is a tool for testing web APIs. It supports [hooks](http://dredd.org/en/latest/hooks/index.html) written in [many languages](http://dredd.org/en/latest/hooks/index.html#supported-languages). To support a particular language, it needs an adapter, so-called hooks handler. This [BDD](https://en.wikipedia.org/wiki/Behavior-driven_development) test suite ensures that the public interface of each hooks handler works as Dredd expects. The test suite is written in [Gherkin](https://github.com/cucumber/cucumber/wiki/Gherkin) and uses [Cucumber](https://github.com/cucumber/cucumber-js) as a test runner. ## Usage -### Install the features dependencies +First read the docs about [how to create a new hooks handler](http://dredd.org/en/latest/hooks/new-language.html) for Dredd. Implement your hooks handler and then make sure it passes this test suite. -```bash -npm install -g dredd -git clone https://github.com/apiaryio/dredd-hooks-template.git -cd dredd-hooks-template -bundle install -``` +### Installation + +1. Make sure you have [Node.js](https://nodejs.org/) and [npm](https://www.npmjs.com/package/npm) available. +1. Create a `package.json` file in the root of your project. This is where your JavaScript dependencies are going to be specified: + + ```json + { + "scripts": { "test": "dredd-hooks-template test" }, + "private": true + } + ``` + +1. Run `npm install dredd-hooks-template --save-dev` to install and declare this test suite as your development dependency. +1. Run `npx dredd-hooks-template init` to get a copy of the test suite in the `./features` directory. +1. Open the feature files in `./features/*.feature` and in all of them + + - replace `dredd-hooks-{{mylanguage}}` with a path to your hooks handler executable which you want to get tested (e.g. `./bin/dredd_hooks`) + - replace `{{myextension}}` by the extension of the hooks handler language (e.g. `.py`), + - uncomment the code blocks and rewrite them to the hooks handler language. + +Now you have the test suite ready. + +### Usage -### Enable the features for your language +Every time you run `npx dredd-hooks-template test` (or `npm test`), you should see the test suite running. The end goal is that all the tests pass: -1. Open the feature files in `./features/*.feature` -1. In all of them, replace: - - `{{mylanguage}}` by the hooks handler command for you language - - `{{myextension}}` by the extension for your language -1. Implement the code examples in your language -1. Run the test suite: `bundle exec cucumber` +![test suite passing](passing.png) + +You should add the `package.json` file to Git. When starting from scratch, you can run `npm install` to install the JavaScript dependencies. + + + +### Upgrading + +Watch for newer versions of the [dredd-hooks-template package](https://www.npmjs.com/package/dredd-hooks-template) and upgrade regularly to keep up with development of Dredd and the test suite itself. To upgrade, run: + +``` +$ npx dredd-hooks-template upgrade +``` -### Add the features to your project +It upgrades the package to the latest version and copies the latest feature files to the project's `./features/` directory. It won't overwrite the existing files as the names of the new files get suffixed with version. Then it's up to you to compare the old and new files, spot changes, and update the project's test suite. -If the test suite did run as expected, you can now add the features to your project. -To do so, copy to your project: +### Reference Implementations -1. the entire `features/` directory -1. the `Gemfile`, `Gemfile.lock` and `.ruby-version` +The [Python hooks](https://github.com/apiaryio/dredd-hooks-python) and the [Ruby hooks](https://github.com/apiaryio/dredd-hooks-ruby) can be used as examples of how to use this cross-language test suite. -Your should now be able to install the features dependencies and run the test suite in your project. +### Keep Tests Running with CI -Finally, make `bundle exec cucumber` part of your test suite and CI (see `.travis.example.yml` if you are using [Travis CI][travis]). +To make sure the hooks handler will always work correctly with Dredd and the expectations won't get accidentally broken, put the tests into [Travis CI](https://travis-ci.org), which runs the tests for each change on your repository. See existing configuration files for inspiration: - [travis]: https://travis-ci.org +- Python: [.travis.yml](https://github.com/apiaryio/dredd-hooks-python/blob/master/.travis.yml) +- Ruby: [.travis.yml](https://github.com/apiaryio/dredd-hooks-ruby/blob/master/.travis.yml) ## Development -The feature files syntax is validated automatically. To perform the validation locally: +Clone the repository and install dependencies: -```bash -# Install the dependencies -npm install +``` +$ git clone "https://github.com/apiaryio/dredd-hooks-template.git" +$ cd ./dredd-hooks-template +$ npm install +``` + +### Smoke Test + +There is a [smoke test](https://en.wikipedia.org/wiki/Smoke_testing_(software)), which ensures everything works as described in the tutorial above. It uses the [Python hooks handler](https://github.com/apiaryio/dredd-hooks-python) as the reference implementation, so have it installed: + +``` +$ pip install dredd_hooks +``` -# Run the linter -npm test +Then you can run the smoke test: + +``` +$ npm test +``` + +### Feature Files Linter + +The feature files syntax is validated automatically. To perform the validation locally, use the `lint` script: + +``` +$ npm run lint ``` -## Examples +### Introducing Changes -The [Dredd Hooks Ruby gem][ruby] and the [Dredd Hooks Python package][python] can be used as references to use this cross-language test suite. +The test suite uses the [Python hooks](https://github.com/apiaryio/dredd-hooks-python) as a reference implementation. To introduce a change to this test suite, follow these steps: - [ruby]: https://github.com/apiaryio/dredd-hooks-ruby - [python]: https://github.com/apiaryio/dredd-hooks-python +1. Implement the new behavior in the Python hooks. +1. Change the feature files living in the Python hooks repo to describe the new behavior. If needed, add a local `steps.js` file implementing missing test steps. +1. Make sure the Python hooks pass that changed test suite. +1. Release a new version of the Python hooks. +1. Generalize the changed (or added) feature files with placeholders, comment-out the code examples, and copy the files over to this repository. Add missing test steps implementations to the `steps.js`. Create a Pull Request. +1. Make sure the smoke test passes under the Pull Request. +1. Merge the Pull Request and let Semantic Release to produce a new version of the test suite package. +1. Go to Python hooks repository and [upgrade](#upgrading) the test suite package there. Remove any local `steps.js` as the necessary steps should already be implemented in the new version of the test suite package. +1. Go to Ruby hooks repository and [upgrade](#upgrading) the test suite package there. +1. Go to all remaining repositories with hooks handlers and issue Pull Requests for the maintainers which help them to kick-off the upgrade. It's okay if they're incomplete, their purpose is to advertise the changes, to initiate the upgrade, and to be helpful to the maintainers. diff --git a/cli/copyFeatures.js b/cli/copyFeatures.js new file mode 100644 index 0000000..ee21c0a --- /dev/null +++ b/cli/copyFeatures.js @@ -0,0 +1,24 @@ +const fs = require('fs'); +const path = require('path'); +const glob = require('glob'); + + +/** + * Copies all '*.feature' files from the 'srcDir' directory to the 'dstDir' + * directory, allowing for a transformation of the file basename and + * the content on the way using the 'transform()' function + */ +module.exports = function copyFeatures(srcDir, dstDir, transform) { + glob.sync(path.join(srcDir, '*.feature')).forEach((featureSrcPath) => { + const featureSrcContent = fs.readFileSync(featureSrcPath, { encoding: 'utf-8' }); + const { + basename: featureBasename, + content: featureContent, + } = transform({ + basename: path.basename(featureSrcPath), + content: featureSrcContent, + }); + const featurePath = path.join(dstDir, featureBasename); + fs.writeFileSync(featurePath, featureContent, { encoding: 'utf-8' }); + }); +} diff --git a/cli/index.js b/cli/index.js new file mode 100755 index 0000000..528ea91 --- /dev/null +++ b/cli/index.js @@ -0,0 +1,98 @@ +#!/usr/bin/env node + +const fs = require('fs-extra'); +const path = require('path'); + +const run = require('./run'); +const copyFeatures = require('./copyFeatures'); +const replaceDredd = require('./replaceDredd'); + + +PROJECT_DIR = process.cwd(); +NODE_MODULES_DIR = path.join(PROJECT_DIR, 'node_modules'); + +FEATURES_SRC_DIR = path.join(NODE_MODULES_DIR, 'dredd-hooks-template', 'features'); +FEATURES_DIR = path.join(PROJECT_DIR, 'features'); +STEPS_DIR = path.join(FEATURES_SRC_DIR, 'support'); + +NODE_BIN = process.execPath; +DREDD_BIN = path.join(NODE_MODULES_DIR, '.bin', 'dredd'); +CUCUMBER_BIN = path.join(NODE_MODULES_DIR, '.bin', 'cucumber-js'); + + +function init() { + // create a 'features' directory in the project we're initializing + fs.mkdirSync(FEATURES_DIR); + + // copy '*.feature' files from the template to the project, process each + // file so it references the right Dredd executable + copyFeatures(FEATURES_SRC_DIR, FEATURES_DIR, ({ basename, content }) => ( + { + basename, + content: replaceDredd(content, DREDD_BIN), + } + )); +} + + +function test() { + // use cucumber executable installed with the template package and run it + // with the 'features' directory in the project (also use steps from + // the template package) + run(NODE_BIN, [CUCUMBER_BIN, FEATURES_DIR, '--require', STEPS_DIR], { cwd: PROJECT_DIR }); +} + + +function upgrade() { + // read the project's package.json and get currently installed version + // of the 'dredd-hooks-template' package + const packageDataPath = path.join(PROJECT_DIR, 'package.json'); + const packageData = JSON.parse(fs.readFileSync(packageDataPath, { encoding: 'utf-8' })); + const currentVersion = packageData.devDependencies['dredd-hooks-template']; + + // ask npm about the latest published version of the 'dredd-hooks-template' + // package + const proc = run('npm', ['view', 'dredd-hooks-template', 'version'], { cwd: PROJECT_DIR }); + const version = proc.stdout.toString().trim(); + + // halt in case the project already depends on the latest version + if (currentVersion === version) { + console.log(`The test suite template is up to date!`); + return; + } + + // upgrade the package + const package = `dredd-hooks-template@${version}`; + run('npm', ['install', package, '--save-dev'], { cwd: PROJECT_DIR }); + + // copy '*.feature' files from the upgraded 'dredd-hooks-template' package + // to the project, but don't overwrite the existing feature files, add these + // as new ones, suffixed with the 'dredd-hooks-template' version + copyFeatures(FEATURES_SRC_DIR, FEATURES_DIR, ({ basename, content }) => ( + { + basename: `${basename}~${version}`, + content: replaceDredd(content, DREDD_BIN), + } + )); +} + + +// poor man's CLI implementation (it's just three commands, so not worth +// a dedicated library) +if (process.argv.length > 3) { + process.exitCode = 1; + console.error('Wrong number of arguments'); +} else { + const command = process.argv[2]; + if (command === 'init') { + init(); + } else if (command === 'test') { + test(); + } else if (command === 'upgrade') { + upgrade(); + } else { + process.exitCode = 1; + console.error('Available commands: init, test, upgrade'); + console.error('See https://github.com/apiaryio/dredd-hooks-template README') + } +} diff --git a/cli/replaceDredd.js b/cli/replaceDredd.js new file mode 100644 index 0000000..17b5c83 --- /dev/null +++ b/cli/replaceDredd.js @@ -0,0 +1,9 @@ +/** + * Replaces mentions of the 'dredd' command in given '*.feature' file + * content with a specific path to Dredd executable + */ +module.exports = function replaceDredd(text, dreddBin) { + return text + .replace(/I have "dredd"/g, `I have "${dreddBin}"`) + .replace(/I run `dredd /g, `I run \`${dreddBin} `); +}; diff --git a/cli/run.js b/cli/run.js new file mode 100644 index 0000000..036f848 --- /dev/null +++ b/cli/run.js @@ -0,0 +1,13 @@ +const { spawnSync } = require('child_process'); + + +/** + * Like 'spawnSync()', but prints the stdout/stderr of the subprocess + * by default and throws in case the command failed + */ +module.exports = function run(command, args, options) { + const proc = spawnSync(command, args, { ...options, stdio: 'inherit' }); + if (proc.error) throw error; + if (proc.status) throw new Error(`'${[command].concat(args).join(' ')}' failed`); + return proc; +}; diff --git a/package.json b/package.json index dd7f359..57808ab 100644 --- a/package.json +++ b/package.json @@ -1,29 +1,38 @@ { "name": "dredd-hooks-template", "version": "1.0.0", - "description": "A meta-package to install the testing dependencies of the Dredd Hooks template test suite", + "description": "Test suite template for Dredd hooks handler implementations", + "bin": { + "dredd-hooks-template": "cli/index.js" + }, "engines": { "node": ">=8" }, - "devDependencies": { + "dependencies": { "chai": "4.2.0", "cucumber": "5.1.0", "dredd": "11.1.0", "fs-extra": "7.0.1", - "gherkin-lint": "3.3.0", "glob": "7.1.3", "tree-kill": "1.2.1", "which": "1.3.1" }, + "devDependencies": { + "gherkin-lint": "3.3.0" + }, "scripts": { - "test": "node scripts/test.js", + "test": "node scripts/smoke-test.js", "lint": "gherkin-lint features/" }, "repository": { "type": "git", "url": "https://github.com/apiaryio/dredd-hooks-template" }, + "files": [ + "cli/*.js", + "features/support/steps.js", + "features/*.feature" + ], "author": "Apiary Czech Republic, s.r.o. ", - "license": "MIT", - "private": true + "license": "MIT" } diff --git a/passing.png b/passing.png new file mode 100644 index 0000000000000000000000000000000000000000..39214548135f61b71e4587a0dc998f8b69711476 GIT binary patch literal 88238 zcmeFYi$BwG^gphPBuS-GiAiZGEQDNFNszuuSEIj?h`=lMKhZkrm4?m50kKtMp$ z=*Be*0Rh2y0fB8UyLa)AY)c)l6cE^J@yxTecm^ zwy`jJ62AL}Fe=6(*I4+Y!TyAEL%WS+J~k!nzqX_hx2M?l+GX3Gy9Xo!{RJO=`{HK1 zGX#G2Q+c`45%(|kM%!!|A(T)G3_r#qc53qE(?ckG1+=Pk3NA|Y3(A;T$iyLbJD3=m zI3@nrw*6MPy37tmX^4_Dw%K6E*+vGYW6|yR@pfkkxj`_IS2!;m>7yrb<3!W3?V4b* zX^6m2;|&YzZ35Q-Uuv>#W$sS9?w4$}f3e^A?Iq(k{9pQS3h$`LP)|fN1TN=MgUS^I zDs4Vw-)-%Fp);Z(6YzF-(?J2h*8M`O20GiC689t8Ix;>t{oZ%!5v(DZu7P`fz*HLK zwzJU9Tv+ptLfYKw92-ey;*-(}kH$L)37MRZdu=tamlbfzyvi^Qll zWtW}Bly4rEmrd?l{~`~;h3oFP6>Te6|NCsT$;o|bGcDKL){do5KT~RY_VRMM$-ztL(EOjJ75hOrIm0o%2Z=I?k1pJsJ3pcem`UvO$*Wb;UzK z?Bya+Wy|d3{hzBF++z(g-#JL8%i5)5M4Q5{8eNNi56DQA7eNdTb*#=b(jAQr96ev} zvXY2CcuGwtgsF3vdwqY+Zn>pg2kDQnn`_S$w>vy}_amT4|E$rUzBqp)k*m{cXi#pg z_wkU-bDeK)lfKEQzm+)i1V;V2{ku#*JLq+#jFNd4Fgvj;<7hrk2(-QD`HrjGM9xmO z3RGNH-(SN}V>CcW>Cb-dP)QJs{ArMLZ2g9L*NsWFZHFSjCl7Alh=xQzy|;VMM=l}y zUa0@J^smEL-x}@<+UYGFy}fp&=IX56v6$4o(pTRw0X-WR1|MEZ@#XcEeLV9Z$9ylX z-0ziQj6>6H$J5H0^U)cT;org1q9qN_z7zDmQ=U~L$-;=;S&>4Kg^^0Xy3(f)4qMSn zf1ds=cq-EEDUMnGcx+#J@bt+bftjeWOX3>al$b$BW8Mfg3}xT$=y_CJ#C2Q7^sg8U zss$Xf+H>=mfpFd>7`cF)OV<4LX=x!%%7XY_`HvN@wR4cF3GsU%Krx5dI2xC6hFq5} z1su_iRNHYR;E-E`l6}0b(tRD))myV{^6=r}0+9}bSYV@RnO+A@TU!?yAR$xUjs=cUN zD_c!K2(ayE5Xahuvt3WRP~g&7gH`LEeyxYllLF^{hnuA+Ul1Djxov>3ul_lB_bvx} z*=WHSnZupWZI3k26?RlK=#(B!3Exw?r%0&ZUSw!jKsca5@Auw);e<(zXVQMp3n$ed z>grC)&kL0_$h?p_9T|UNzf;rpGK0(mflWff*M22DIW28u@F!8>+KaOZ&{mBbg5|pk zu2;*_Tf1AY%v|z0vT)5)mXT;TBe*KveEay*=kGrT%wOsga?UY-BC93Ub(PlRSb4}c z{N6|ZdFe`F-S}+7l25ktmVN>|-W_RaQc#xY6e8G{-9Mfh(^e{YU-Mo}zr&mR=h;Y* zlkI)L`aam&9C?O@3mw_R7rZoN~scwC|bUW4@;ay&f`JIsM~ed>x@`Q>#9<*@!$5@xV$ngGyRMU%Zk$q{c*@v+csXwEHK>j&GMD; z#UDF@_v&h(?xS>2v%z(A97(qaxG=g9wIH%)Os`o${-!*(-|Mz3s=)=;IE1^@Jg+Qs zd`R+{Xu0UQyZ&e;m{CG%hA z9oN<3e_SNJ>3Nc4f9j)oZI4|};dROz>lTL=&6dJ98E+`>C(oFkNj7<$;jXUf{6}NN zzLNKZJHOh)x{g;dFv+?_Fd@G8R7Kfq*+2F?;&4W7^hv<4qV7yrY4>aoG>#n&EfH*# z{e9KF3^)Cy8K9tlB;#$zSI4YJbes1Nu0J@ZQ1hVLX5WKh8#(K@_sLa1+)S$0%W#!; zF5{2Ky__6W+a70|M06?I#C}73YYm7XyN+rEtOv*k7%#miXAemZ`;z0xl1r3JzolNB zSd}83D86)1D)fZ!2@TDFOCL?MO=a_s=f~l`RHRi5L6d!nM}Hl~D<>)YI~CXcemJD` zQb|;afmOj?M<^Z})mb0Dl;Q14xQEczT~02{cPm~D7##K7^b{YzIrd=O?z?s^ZQO0F zB62>>u23-5Q>taRQ8k;mU3+T$HWUsnop%R*)~! zTC)3oH|SoFeh@s;rD-hMDKWD3OKX4PVD00FdNtXj;GU3ab__7*iMgvqD=H^6c8OF|HIa=wLG(CN~W(=vGRNAx|@WR2zXO>KZ zvW_NwSD^+Z=_kn+C|U!d4}3ybGg5x1sL9(}wwR=YXJKEBzFw-5dy|ryS$)dG{^?L3 z-7+K(YI;5+z~cvJ?bCvb%e&6jEbpK^+^vaD&O+o`%G&q>AgHWfYvS@QjU4qHWcQTU zB>3=7kpbc0m)m}+{lcbiOLtR2KH`IxF4AGam~#f9j`80guywRmLX6ilGKVs=H1%uc zYeQ(Q&;_WF+-A~=wl?dzirB~gH?uxF|0#xH*z^rf`Pt!pnzBeGFZm14CD%pv2sPKl zvR;P2RD0>=0_>iE1+q&t%tRhBn3EtyJi1Ut-4^QUDRXxnGh>zgvi$5-Uj(3dNP{o->)LsBMp9k}R z^r5RcdMrtJ8Rzr50O2xJ{LjVw0*rOvSbx&UALz5`hU$B~fgPB5jz95ahrU{rs91^4 zRb7kVNApjpJ>gD&oI^ie{_eooPT6U~)#jcO zt8(2mip}aK{Pmv^+PcOvy1foh9Ir>s@0&8+upO^^%eY19=X6jZA$9dX_Tj})@Tn`m zB1XsA%lTrnV&JtDy-(n;Fn8*AZVW3~A2o%Ng5Tog5DV58>>>jxve+VRIR<8&Nxe1RcP0f^zamp5FApV$M_!K3N)$Uj5T7wYNf5Txkod+Ogs z{_{H5oPC{qT%Y;5dU?uhUDv_U%im8|R(9(~|Ml$-mP4jbo{Qom;YvkXwzwh<$b~;-Z)4J^%QdbpGDv{}}o2 z2mK#2@BjBq<%=r++tmLt^gpIzf7#RM;CQOUO?cofYG%pcY?Mpp+-wQ21D^0h@jTS#>Tj7v8f8?7RPPM zPY=CS$PdrDg!_DB9GxrZb6~&B6`Mm($a>7?&{n|jxrWfzWJ3OSgYfO%tlw*L8pQ3R z(d3Kq<65P&#xwV2Wf;uAE@A zkQ)aUC-mAZ^GvnZP`{PE)V9@=%{=AV5WfxS`1-&ogLb^~+f!Ei!cQF0?cEIi) zNE3NpO?rARo|#erG%%C~kRAlg7$DbUHqWJ$35PKQi!TA6zTeO&0e+th2mC3*EP*>; zE@5czpZLwNHHRf9UxaRV$iCx^=-SAjX%H!uDi6igoH;>AV7I=mD-NHD>3o^__w=Fx z5$J&McC)(=oiyRN0Pc6I#>KK`0EuOyxA)<(9h_g^%j0)4vmKvz)z}Ff%haO#M_k87 z1i3DW=`Fe0R`pwn?jj)cE2im3nU_~=kRvS-8q6s$&CAZLSaRUz0Kom0gb8tX{UcsF zQN;H&3smuF!Z82O<}iVM@?}LPSX@jKPJ}j&UCul|3t0g_deEetY zV3g?K#_V;I*wP+o!N)iBdHQhq`Lc=iD!z&PHz%WbofubP`XX@AYeJP|m&5_Gyl}`3 z{iYq?@nF*Xwhe8HTrK>TYKvwff9XJb*I0(j09v*=ObmK|ejp1go>{L8Sg3 zT}NGiQeU#{h$TFhm~)h2D!pyNsJlR$pf@ZJ+i$R+S1 z?F@@jpFhL4Cdv}KD+9kHE!sC!$HjcP#gv?EQ0D=nF%G}=c#a00ZgPy0bdjJoj+>sP zFYf`-5y=3}9b=!H>7icx^)q&x5-5?Cu}vc?xWJ$GtWl=QE<{6t^xOPQ^S&&P-+XU_ zfX^27!VB#@?1p4FWg(&Wqm-Dc-79h~&rV_AYHw8IR5Cy5|KfENob#U0+kNX?1Dx?)UxY}g?w({Z5ag})yi+@7-n`rCiI8H{W0Cn^Q`%jp; z$0|p|J7voTMS^k+N=!`L1cno32Q>*!Q@JgHwbhDb6_48Oz5#{P!}lK1kj#?Ta)?0z{`MFM2uH=wv+L%;b|al`KS)Q%o7)X(vY#y7nPFzpOzCI8E**#$vc zCi1>_nEAiJoyt#P0f*ndVAdK@s0_ zVRp9)T{o?XH`kHvot^wQh!G(k;QPxk97WIs-CE2}q7j$1;HkLhu5_XcA35Z!OgeAV zKO&C!VX_TQs#2v~E%Klbb{h5!2&mm8x4D%lF-uoH6AdkBQ}F2moD?y6Z~NUjeC5ET z0lKv#?MD&#KD6c%;zpMX$3&;UmHRvprOFTcfliW zZdqCurRQ2YYeUED8b!HwlSge1*YHVKc0d5k+zM4fe+t028-jlLI!h zL~q|k66!wuQ>a{dQu|Aq@M>z8{t@Vsu05$aMJrP9)tWQCZ=TnctHedCp+CPlL` z9@BP;H!ynL&Iq-)&8w;($B2O}l}!nAo5C~IZr4 zR2AZ@>FX96A0Jnb+%7fzGMMUP`=rm+MXGup8h-#!9Rhc(;k|u6w8@Qqbjch@UR{$! zoFG{8m<>q(>VB(cug9l~*HgZwxmYefP1gxKucyUX=+OJE;jgHDlMLFk*sNStoZ2P? zX1j1re4ke}y>I1X6|BxPP#0Gl`Pt{s{4qJcgF`Myvx9K&A6RwF_;TmiTVNnfGhr(X zXA0NCrLmmkpm1XCVy{o(@orBFI5%^a6%C$@fXdv1^W5*A-)0q(Qhf#SE-Alw0=%Re zEZwfN**mB_J(@o--s-IKb0+$s^p0D8O@bsx11kyD;C3`%RcSs|iYBeVY?5xceiAVe z3`+nSc%eLc&d;BvNJ1WJ$XQ6U3?8sLjvm-_&+b63E7p}Omv~W|3J5v-sE`9~ zgTd_$$XZceXY_(&+C~~ZjpL#RAIq@@%vA797x~-yBEW}hs?*0ZSOzQ|sfEvSHM@3% z4bZP>@*~-f@2wokBR)JFgM#95yx0+Hlph*&PKDK~%s{#!g&`dB1O<1n86Bw84yI5P zwdcwP!Sc*aon5e&$GivXJ~wvNS4tl|g$C|=_%P+&B;6@Vg`TVAM^k!or3@KgsqQ9p7_Ka?Ty|yX#HFDBy ztW{zxlD9EE_3&iZ-#DGj(I9riipzm~vutIDg344q?EYcWtt>X zx?yn0W4410`=w?~f+JCCu=Xa2Q37>Os5{ARnrLi1IuD<@y!QfBHp=0$C+d+(`eL)> zoijBeDR*p0``e?*59jAA2X{%m5cQvQ)BgeD>pR;Ty$AGOV6R(JUGv}Qy?|zEu ze^8YpGptj1zy`OKfmIHJmzveOlp%%<*Hzb24wFd}k0$~~hIWDbyaS%--_#x**@g1& zuP!j`!3Fs9`t2k~@4)zMR!EuWN_G?o}I9c~R@47oP0s!oOv z!?$*R`tn{)_^@)Gs(*VIOL#VzvJy|=oF{s10pUfr+~V|1OmF-jINy;Hx4>R4yc8_m z%ZaOtryizgjV^P3rft9Q3=>}rPk-k>n}Y2 zup_sfxhR(0*L>w|ay8_HX&7B$=T4M(b~(4zDNc$WEe|CHRSr^InVmb>^H$*M8c5fp zwQeDC|H=b^y`zcwZ)k3kX!QFH5@j#J5;7klCX)O!F7xGIbm3~t2hohqCCtCnp2!-6 zsV5MYbAtj`m0o7+B(aFF)SrgS_|gkT%Y0z*toxam!{ZsQCgoTye8PrdHUXTjZDj-b z+gamr1Zr^`ikyan;EvF@*;dVC2}8c>W)&^Z(|m!? zve*ZAcI)^j+IOEWCYLq<0(9uIaT7e2aYy{skdd{pFMXg5X{454w0w~L9d^xyCoj5O znf(Zl8wW^1sV$IE!L3NuwFq8BjGtnOh47OGnF!G}%v8Rx@yQHN;=P!$(l{072K9LFn1xY@Z|tdMgEH6=qVdt=>S%pMwGkHrdP z@POXg(KB0RPItdbzV%-xD@O9|GUv;$wP2pXY5xWIa11OA(aEqvgAp67QEe$&<(}Z3 zx^FQ>XU---Zocq$i`P{wWYocnQ%!ZM5eaKH<-XqA zClS_?$3ST&i+lSd%cf@ioNvuxTrrg9e(Obho*i(Ai(c4%)i5g{)u?9*Gmtze;fgS` zhV_nIhk@#TjCuR1bnCLxX2bpk%Me%sxQQ9@pE*6#ix-I3 z_!d%4e9pqKE>#bm+=9%Hd0pI$Eky0Ijd*pLk0j^{a!3ji>UqI%oyyrl_JGl4z_L+p zi|SYoDY%FMAs&)1Cvyu+3blAmfx71FVW!zaC%+Mzv#FY%?K)L&2!oJ9yHUKGHGKXn zQV!-W>tg>iCgjx_Mpc3M_{+}IMah3+JV>Ye?N&*SzgrGTjwZioyXt*1VG!WaWQdK3 zKh%@Io*WRW{M6}Od{~oEnodTlj(zW_M!&3H@HNadJ(SELivTcthNc;=D}zLHCUO98 zK!ndB3n@?6kt+bMvkVK4!*IuHGHGBU9A!x4CbPr>F=ITXbxs;9tp+j1uL-nRoH#nc zy2)!yw#ENOXkT)0e$PHBpH6l!crz|R>oLW7sWCpv`$M2km8~Vxja?a+`AYyKS1!5Z z*3C1D$(3_%ZltW%`L5(&RRsYwuc~NU9ADUeuM0LatnW%v;VI>0uRH)phfDF`sBI%97yuK99X>uYzH52laK zC{EAFewIGzg%U?b^)U|Lb$w z-}tn~Fq~uB_V3LW+#e~fjN35`18#M{sR-lssxv_MziXi3$FSDZ;2{<_%W}TcGBA~s zR(%)%jt+aRX?_L~UGhe2k!}c9?}D#IhtXq9!84~s_C|gXv@pG6dPxsABP=DJVbs!M zOd?!gYVx{UXylrG2Qx$UsGYtobOsT;Ivp|Pbzv#iOfob-ASHor{L|6U6kqoa~HOrdWZ?T0mG$9va?WeG<`E zYYOdUi||Utx#`9_>2TVE_RS1j`VzP|^BG=^4=`y-v?$9*4?ww^a0dr;+8nn`4;Vko zI>o?1v*-A`2#@mN(QWYBOVt!O=9snc1U>Jra+Zrr40vdH2#5Jh?H%kG;!R4hrA1)1 zL|yU^-Vjcm`2|V};WlHHERH68`E;{dSpa0JVClaxO-WtTbFM>a89j$07jONWf|?huLE# z#bw0c$KHH@O+MEGV6Sx7|3f*x8$^D&x8-BLTz>8Hmo5XjG&qOx=J;Sh$ah(Rir^Og zxWS$+q9KMvm}|q|J3p?V(%KMZau$Bk^&fMjn*ex~-JeVY~2qk$4TkLsd1d7eln z(|4~`I7r=fB|or3yS9k26_vAgSo0B0rs9oteu>r1)6c>bqcY)|ynj(yn_RaA2!3A1 z;bZvK&0Iye=2U1KOPuvG1V}tPYfAuce($8!_3yHA(iem4^>u5Wj%0Ei#`R3aiODNQbfgjSK%B+32S){4o;6BemGsvlh= zCXFRI7EzwUm;$R%WsE4GNGnec=54}=p$si8s>3`=_VB)9`EOD@$Dw#}>hc1t;pzOJ z%)?veVf}zV;?;&MLx%Zwap84ur17%~j|1aY2u&ywh;{Mw_Te}0vgNolwO*u6q>d^0 zn|Mx33NBWxrt->4p;zx$AY#owf6CG~NEY9Vdx|>o z$?1hW3beT5^s{D@UtPs~<6{<&8)++2E``z@$40okuLNvFmg|Q9!)(U#-Kl@@pkB~! zre2k({~Ax05a?dFB4)?;t!)xF{-XSh?mg?`>(RCh{1SLcw%6JqIGreVe+n?r2*>eU zr62LhiIwEg6W$0JBnz(vsO8Oa(^&XTyF?bA1Le(Tt`rTeiFkF2E*~F)^6m`YNekl% ziVtHsSgNY@j-DClA?yRJ*|;ln^=1gI(uwj>;T80|Kcu|4;QGSohljtAMU-CTK_Bow zd`#n`7ec_-$#Hii&pgOV8PT9W{j@HgphC{d9r}8zgkrm5{iNy}bNv9kkM=?TXLIp% zor5_h5@8zJ<@F1T2&$Ww+?nSU-$uQ23;U`|kJ@nc1n|;yGBMH6;{_N~c)dFow7T+g zX)9|srTLzxd1agZ!)KDN={no}zM$s^KBSMTlZ3&-&HfeQm^3`m_H@;Fq{%Yfb@KGk2 zaGZ&bdvt z-*vI+eVQ*evXbF3kT}4wWnGgl^Juw3}gGamyU0?OQ|zI;_i%};YQ$FwWi`OvKz0?As6H54%xMdbPXi)?>%60+axOFftk?k;dYb;@o9sUy9&5!cFiF{?lYpWVs3;E=7wg4ZRM_L|a3AwZ> zhw@k+6Ici=s_#^o?}r-E1tqG)h*vOgb3_8ofLnSm1}Ee`GbVl4-eka6pE5GXvW$>W}s_TqJX*yFii->RMbwT*G3{lFU4Ei`0?Y< z1eYKQ*I~j}PUDk$G~};pYo7E9Y0vZ8Nvyy>2Q6et)Pk|6vQamjLRz>!-8k zVhLew*b)Ghi;LY_JbI0Y9%Yd017D^VU;#cO>>^_%Q-02tih!LiDAuPf|7B;KN#p#q8c?1%eoNm7n>0 zwOZL31C|4L2YzY<5A%6X-d2XJ4VmSWXpN!j{4x!)9>E8dni{Jd)vmX3FnFWWIzEK& zLcB+|&$5-8A@73~m#2=85I5=~#g+}0;hpA@hj`JU;68R#vI!N$lJUybSwnDTSg&~| z(iAH4)&%Ry!(7k$TStK@;$teX5Bl%yqm$!dbO$Ld7^!e1fkL%?S6TBW`F@t(*$6X~ z_(Zw?P^{P2u7i5KtHnz%N_e)^GMisfLTj%9Jpd@yP+BMS_CVTt>bDAbUiI6!Y@TgP ziJ0;dGBn3M>w8|cD0fY%kp~M>(NN*#RW+Io>2Ned)Pk{}Puki>9Ln zp{|5MPxqh_Zo<0|e^`8n_o@Yyx*H0-W|C!}aprk2aQ~ItoMcj5Flhd8#atEH(!I%b zSj`+EN?v~{wwtS@5*C{92Sa-e2QZ&CJ@$Ufw9@5H68Y*#jmZaLw`~rPFB@U_@j))o zlnHQ!5OmmPnHLOIcoU&wqk|hr8i)wl0z?;XcW1uu<`;c6;3!}2twlk*)N8tn(R53K z*ic;_pMN8QVEwxJbF*LbqTa*Tawx{lpW|0unSG~-P~K)9Dk$`;=;pap6ObexohgWi zBvg`hleJD&BwP$Am4X}^wv#FOiJd#+>)5dCV%%~3AYw%+V0uFOoR zM9O(}=g}m?b9#DDjCrMXz*#$~ql8uG)q{tDJDq{Ap%%d1AY}b?SMGwzM5whdLh>*Uq8 z4X|>9&Q{F@D(o{dzbho8WFvvbL~ZihcHRNXd3SKetRMCN*VUw@=U>(Icl~qmn zz=k)xz{Rx7Ml3KLURugMDF{r5pHeJT+v1slEJ~$Wsmc)GQd+{6h(+SgZ#?K8dtZ}X ztFJv{SIbjAGT6dTc7yxLB&}aU)7h3A2B2L~ZukMP-hfAATA(F6QwX3i5@Yg17@+Hj zTF4!bM?h+SO5bvpL?3-C;-9y9@^F+^ZhYai4WcUvuoj5AJc2rdz6Lq&3`8f_#9L>H ze;i0OM2O{XUIFeBIizIbnxhynZ`8whVG16wX*nW=HsZ_KIbd>=T0f8+%y<8u>UA^B zP>k7xcLLTdKmN`g(u5n8-o9pf1G<0kFw}1tZts|F$Y9GhRtfU^J--QRiZr_{Uir&>DS^|s&97g9{)tCf{j>&XBr1`!rirE zaWh}4db(!m{Rix>9w5|j-4Z45QPdl+&Unqdy8L$AMiS}tq@e74P}%F@w2^YBi5Q2F zwK=7aEyq^!SKF3eru%9FvhcHZY=g zFj8Xn5pA|#*}@7^EFRm}HhJx9ToEx=g}-hNEMQJQ@75p2mXp_9zGfwts!0K> znI|3%$qdcslfL*a4gH35l%||=;O^b3Vag9^2Skv1j>(>lHHrb1cUQW;o6rqW-0CSy zVgzKhx)Jolc4M$uP4g}MLQ`3HYN!`egx{}Xr)jpiVW#UpQsq7eA^h~;sS#aYyZ+E? z_31FbjM`%9aje+ICjX}Q)AgPFAj}s>>P_!U6dmYJ%miOZq78IwS_L?WHH*2NU#?&nxf@Z-7}J0~7~bs~)0BbGe^-h5IE z;V}(o+Ppv5{D5oOaqd@V4NWhkl@qWGC6<_nt9~p>c9%2tTb;`vt;ss*?fT0=A!shB zFdvtOi%i_H)I&?CDMIEQ_rLWRK3cQsr}C*W%9&H>bvKS_YPa;WQg?kl{0?lbZZgj8 zX5D8hgK5727sd<_lFP#unRM?1Fg8Klf$h0>^EwDJ-KRn)wT+s&!@%)KtrkaCs_hI0 zfLZ4s*Xv6b<2DJMcnN>pbP=C*n26T$f?YK(fvq>&`$jR&Ihx%2wP{FHz0V!V# z+X5pIQpyam_3ho!W0*NwN-dweP}ovxh+!1`$}keVbY&jeYNaX0V=~ajvG*qec$(++ z);9&6MmZVYnx@$A9=v9NPbyXX)K|^{AuuVe1tArT)o+hT_?1ruvd@l0_onp^s#l{H z|AaW~fBg}CyS@IjpQ+ty{97&HTTq%70Qg3{>E-yX>pf{6=1GHStdJPeG*cQ`Js0B%gkT}iUr}7#3rq(yW09)MV5Tgxz=!n0(zZAn zH9NzAk&j>>T)@Iug|Drf-uoSyR+5FXSzUP+$ zWukt-?_ylW;qy7&N-O}u9&X7OgxD|SLJO$K5wj8M2mP5nEIt+`m5yqJfx{TStN|Ir zZGl$o5vviIc=);T&)}0pPYJtdP!00d{5OVN(x<>*BS%m#;#HC*`1I#dQ+JM=VeGyT zrkvSLYZSMKAfy}h+G4RM2Ei|Rhh*}n2tqLFN0NHg)9*bc!TjDZcl+CR$9a4X-uj^> zbt+cqKm^;BP{X|l3w1!OG1tss9;Llty8UgvZl+B|**A2A*eP1WKP@{?ZA$uzJgd8s z!l&Z@aiRZM-jETY?;t3+mC@}NII_+WvC_GL#+;F6b8(D8PdudM%ncMGVf8yGarJ|f zUXpAb4y^3nsC{)MLd<)UUSh|7V8*hg+McTBFNz0qBw4m@vg1H#i}Y|LKbN~61Ngv3 zHlu8$BU8#W&rrV&?m}^TQxAn!HFJv(8r2nQp?(i*og^9G={B}7^KE}Up604s02?qJ{m^8<9yl_9LnX3Of0Vf$U1UMCeu;XG2`pre5V-n%g1qiIedze0)x-6&f}3$ zT&_BoF#gDr9j-0nAI9@V_NVr-6nzImM1Oo{?pWVV&sZs2AcB8XOlr`+QGqOBZ2lX- zQt!$!vCx2r@yJ63M^masUwKI`nKcIL6s{gAzMbkj(2fg#F2xBnhsXc*V_Iv$qwWnCY3<^kOZ6?TrY*$430 zZviYMSAMn&3B4;hnsiUPvaDqD3dEzw=8Tv21&_M(==FF2gtS6_wuFe>^!4JS{u+{#w7{8((Y458I_OhkXTN(#iB zhJ&&(OWR(TA%#+;N{BJeBWrlx&}5V$>wQV)(>g_N&)Dl1Vx{|^CCah6?7`Ia_^v}X zo24RQsy1(2T-os*hgh*O+2}Q`_R*DwgJOWH`iopS_JF&n1Ypw9I2NE>aCh9_b|+IvJ8iT@(u$ zC5em|6KdY*J&|O)n*LON*atN@Cd?NY*?!BH(tbO0yXr4kWr8~81hX>RPWo?Aty@yW z*18wrn}<$~o3+&i{z&`Ov7t(vw%ZQUgxfnLZS{|ScljQ5LDh%X&gsylsZb#HDq;;f zZtU>tC30>n6o-j5%XaByvY0~E#h+7A`_Y7z}j5HP-u2`O>z{ml4bRnQMWr z>;~jS^G7`VADz3dv0l3bALjY;)uwL#rWM1z7{gpT?91zBn4x*AoH|Wz(sYCX>Nx9qF+7L zSVg#?D}v^z3G$0u38c5Z;RDL`b${_NRe&I*QqJJ3ZkYV3X|vCDlfW#@=+30^&LDa8 z9jwD}+FabJZx$UxS|8h3A9~~ag!kyZh{p;e_DKdc3pwh#9tMj3@L&$~qNf)Tm1u0m zWP~w4)Nl3|V{61l)T|1d9VA<f4l3~K^)3)aGqHE0g2FB_@IpvpO)c8SkroBEIE5T4{!4rBR-X?rn zuS|KLJN5I0S7Gb{0zxYno3Bv3fL@_S?EKp|=5}(CGR`Vt#k;N}q1}Fz$c&0*-Y`60 z4H%We@8{)ivXFnrmcYx$^0qeI3_Ay!)(2!|85!{KXBd9+NL+}K~=#0q8T7}=v`9Hn}X{2oK3GeH$qPFz~YWN6F&c&b7YsdhH&!BIHgFI ziaN@k-XCA4@)+w8`{t@PP=}6wxW+aX5=RZhLL1jv1Ox94Q$==1JFnMBkL+9n^EWjyca8T`AB8ar3B) z$(8XnsZu%BU4C){ABWVragziIVQzmtj}K1&5e8oCkh#lmGkL0#wY+*3m(0;%U}h;| zj5~i!7?d$gp4u5JT5QIpicESMeGtyWo3Oe%H8nI;0Zc$h!n))+?M=v zuG0J`FgpjZ%3+nzR~1S&ElL3Gd#dl27LZft0HH&Cy{m9KxrEslS0bfl;BK*$y3)g7 zR!SIRnDbOcrxGcs0jyoki_`OYzu(gKp54j)X?JK&vu$FeQ136D$yglM}TDE$Kb zEE=#|KKWIf$htcFo^CbpvlQALVaC2)UF>Z20v{_T?Z}dYv1u|xnvdIO$mhSO1Reu> z>|a^p(+`;+6@rF2cy~7uwOQh%jMfnUfV3Bs9Oj<26-* zkT1nGq6+H0K(=G_nvcCPT_Sy-c~=SN4GgDV+-jlu-&%&>c^Yn|%5)Z^60k~6q#zbD z6!4H-0P=$2;iaz-0??Q_zXa54)mC3+7BIw^gtQ}71>`CUwd&+& z9`p2PcUwLSf$s;rt`y zWeycTcI%NBR1us5hU|M)$HDi9+6-43;dA(nLHK`y-mSLpEx=3c;v`ElU_2ltRQn(5 zb+Z%O;64g`w`{hQu`Is)QH|SBKb3vO7Uh*m=en}Dfmk*cMyUZK*M{+eV-FrS}MFy&YrDZ$nhDau#h=(2*5G^Pq6zg*a_B_Mm4 zjyV-21EXntoxk1Q+$^L$Z$@KE+m7>~TCB2)@5)eWY0iW%rghczECU$E9 z|8?C_mnleofgSq7SDi0Z;{^HYSi>(E-ac%Gt48x)Vt^(j%C<+Mk9!?G{Q0%iv7QIqF!ily^RQ9^)oXvv()}}^vsk*&j-kcD%7W`X zrkFm}csbbd`3`E~sb&dsX-^5~z+h$i>lacl?C==_0ChcGy|5XKDVI)2~BD@Em;a%M@Aq$N4zuvLo6si=sUEN5#;&XBVWNyofv;e;}4*1v!N#4hf ze{KLNKUGNELrB80IVPfzjZflQr^97Yq|;PmzA@W|{vS1|3(fzJKjfys6(+M-f2{|= zP{2gN`&{V!mq^tvUELC;-*k@O61L1!c(dw5}hYf1@pR3!#c7*xoP z4-YG3%!7?p+t%JCK-Y7S4zu|80ZOcM&6ZWWF^v+YIixCUswyaAxj%O*e}UPf^8VbQ zZivLLut3|LZ7+OaUqWhklO7crqxw=AO+AL5yyPF9+m@%!kE}hhqe%&(5S(2yW?{iO z6)?&QXH5ho4T^;F0oMM$dKUeSj`0~WhP(^3Ruvb1w?c>WT!pYvK;MrQAKU}N0O<%X zhr=-T(N?jQW)QwFm2TMop&*>$6NTJZ<*<-ujDW8IQ!{!Q#k(Yd=6D}5BAiPHcLI{o z_!7bYX+b7<2oWn8cHMXw6a5`?n zd7BU4{I%X2xWZZ9aTtI!0q3RX@_R*$S*GsK>^p z+V#G4<+>;mID^#HCz2ALKiUi#enXWu-xMVcwlkgr5NHervf>2uzJb~*^_yYMRpR*@ zw}yJ64PuCL+W%!i%P5TbuLGLao0kGaCb*7O?4Q=*Pbe~}YU>LqDBQJ%C9oWY(L8(x$Z)rP~@5+$9Lk{hm~F3q+s zt)0J?arL?qbW#;m^L}X{@FEQOg}%V#Dq2ounPj=6pUGW7i{_$A&8ie!0gWCiABf@1 z9)`zv@*CQF;-ZWylg=w|c-%SZ7a2FB@!E8Sa^gT-p6c6q2bihx8B7kRpt8m^>OQ!Y;GYDS&Y-zUmJMfYjdI4M6UpbDP1#k91udhZzS?W+0lg-PQL@!3+J_pZ{NhL4> z-@2F9aN}R5*Xzj-sK{?CqVE(o8zK8IMrssy(H#aE`1xTSTyo9yJN zf?3f-S7>04pZ3O{pOM^31v|v<2ao+}Ex}Jq%(NaR)*ei$D(-TDIcT22UeVmm9>0vz z?A`_W0$fSn-b!haNE%Xhx6Cp*N)p0(faA5|c>Z0cOW(1zY>GckP=t*151oAB7(D>P zL{`?ErP{7^lTm< zYe+*aVP8#C8ERS0@WK+Tufpmv{k=a)gl?JjW2KMHBx}zz{Y?|^RLtoz;(hgC@r0gQ zlHn1@jVD&?Pae4C8$_aafS`kM**I;hIrrj18I{sg4z2GLRdTrdy0wDE27Rm|7pz!J zI>Ff8u^FS`Za?UT+lZIJve(F00sa-30CE|l@0o|kz8aO2B)32azPuT4==zWyiob*t zlsNN|{E>x?k;MYST7kJsX=6K>U|Pc@D(z4-^w{@zYp#imAM0nV}Ie3wGWA>&FAbO{ZVgU$KYD zKRWd~1oUO;dL_mwvq zBFZ)GHq;r0iBJyQ#tp@6CUAqGt3i$6jUQlf7;juIhK-Svrw9;l($DM_ZV{MF*!biiX?R43ioE6z1|)wn~%jGf#1~U zpLII-peeF0l5XM=S~c*bq{$gqlf!r`F*AV=VCYa;iA?N2ro#gQvK{XWKOptS>R2qb-+zf&(Z_a1*n61b_nKGE{jq^_gwHs#XW1=ul!(xLdI3b!V{SQC8 zM8~GhH~BYbt-#-oo38XZ;5O<(ym~n_HxTx&*DZ}Pqqnt2K>q^4dRt-Mx-a{N2Vc*f!3)jxfY#oE)@s>?iGmEaNDE=f3btndkXS0SdV3$hkTyw zv3fc-avokq!Ig0m*%>V`|IEF&uF}1Ugl?^gb&eatVW~o#d14&d2W}Q5^j{+A@GUoX z)gl7Gwt664yT*Y$#yJIo7W#RuV7BD&`)tx){kjX7y~A==*Y0FG^`%d5+pABpGxMBn znX{q-1<-*++hI`-KkevJ`avee6qB9yN#>mCy5BWi$K4KZl`>!oFivle+h0qs>6yJ1 zxz>y0*Tc9kU|c@63MmN_tPS`o{r#!73#E2$!fSb4Zu$t}w%YOY$qy{4@au_AvL1zn zSiy~$Wu~FWjp;-}kL>1NP6mfavxs6hqOYPT4#GHj6;F6H2VdBg>zs%M-aE6;$z3~3 zQP4DX;qe1dRNp4>nIB-c=+kb`#B+W`lRn9`q*}Vnh3S@0d)~knfnR^BZK^9~pHiA_ zHPP~kQIX`={bJ@*AJINqV9KSb=!b9b$Eix=c!_MyLy$(o3~DKZmZSWyXK^HM(mmvH zh0*1RLe6cicZLIRWhMg{zr+TsGGiK_Xv3H3Kf z+1VGc-H%33ok5(l$&6*{WYY#7@+RDxE9dD>Bw%;F{YOVTEs%=7T58kaoOP!nn(3rpw!+WP~ z_dx)P|*c`*eI8a&0V795*Ht>@N*2rz$_8O={6*l8r!q5>L3G?0&{p#F5 z_H|S%3tvd^OSq|C2mD#z*5ZB0pT*F+R=i@U8qG+2q@`@y^SWXdFk^eu5t zcXLnoq==-1-;_g9ub^0*T^Yw7(g4>J^+z%6*dkr{|r6zs!xXVpx)jwAJ_9G8gXMVI&E1EvO%JZ!isN_z3EywHZZ z-32B5q1sxPm3K2y7b1@+syb^8#Sn)kK&<`1V$4#&qPkbB$^PZ>fR-hHdQP9C3y}nG z8j+h4efP~s$At3H0Sn_N8|I^1<_bI=Ipx2YT2$LwZ3trzZy)=?F~s)cDKJHhgXP~s z9=Hs3myWr=j_;JFjqCo7mN*5#zJxhne^dttv@%hVJz|PTAXLmNsydycfya^Mav~;e z<1(0>!;lp-Gy?whN$;z|M3@q#KW*RSYEpmsu6iK66#@{g@hX%<~X3 z-0HJ%P^)_R`>dFn@U~da^X36J!Fcc0hy$YG8*>>3+bcbuoONxsEP=8rl4{-UB3I52 zp+6u${wqd|4hhF16+n8wy}pZ?NuI8WA5?5WPAh^P2wMCpBnudWLio|PmqyIqWg50o z68A7-(B*q@eUOXOL9!@apE*vSt8=(#9paIg^1fd}VXb<0nU5U2(^H$`-zMmI0M^RT za(qG&*vXoa-;8@^D02Oa!bKXKy;ume{bJd5K%>(!Ix1Rp6^}NAGxvGkR>Gs;!7oX>ouF^cN z#ki@2&1YKAgl(5{8Tgd#ZV70GsG3Zzg(p~@6sZWxTmi`vo7^Uj_y-QYG3umnG{lk@ zUwsvX(aR!}KCf|<=;nE5o{`c7^STD%deGVvBrh?1{v+WD5+!jsVEGawW6hP*r#)Vf z4d$FJ!SIenL-;;sm4mUgPpR5cxA!#Eso8$od;eI|-Wj!yO-1`1V%+WAS3B75?GABG zS)?5kISmAG)NV6l%17i-|NePqg~t1$6gL#bSaxyJ5k&&r(UvC66&nTARu|q?<=O6k z-bdYIC+DAp%HnldOKSfn;J^h_%RaD?crNpRO#Mp*_}oi`4AnrIdCCU zNL7_N99~F7oxu@DCW7|Sk^VN*s3I#QNiu?W4XF~oO@%`QHCOOQ^B;kfXSQw{mx3MA zikf=Ld+BPkcX@EHRC9cjNd6hCS7-cttu0*Uc|~q_w;OAwaBO$+mOhZcr{5?lt@*+# z{6F@mHRVZ2gT6gPGJ7t`;_j?yLj<1ZnH77Y4E|YLt;M7S`wXJx1+OkR@T|TuOB6Bc z{IgU=K|?WdyRY3h0QZDYvSnySINge?6;BA4VqlajC{!F){GkdYw6w&DI*#pF{?4>x z`n#}F46_=P5FxIO?vgHR+7fGNcl4>?hmjxi&l6`C(iPcKsC;NC_uB+w5_@34bmwLP1*{ zd(k5H9`l1CG9ckt7~@c8<#?|uZ976b zG8xc{tW^GDHW$_|Ch|x3X^DvVZ4!&E&$tj9d6d!mERA9r5ayfQnN#PjkznBQmUI;m zlSFcJJX~TVOFu4LRSq6E(JJqW;S9!O#U&BSCDl3G0rGecOvPaEm~OL$+`m8?sp)>; zv2mx^z@y8=y4bh<)p9^K2F@EgyBkP8>e0f&TE;nR`oFzC3j8do6iFW3j+Yn{uDXr- z1Y5+(Deu8mbIx?TctZ=20j0qSR-8fQ%k%T6PT9WJ3timb{At4dz|e$7jOl5Wha;F% z9}GB+hTw<0BW9&H>~oVWd274o_BUY}cr#$k4Ps>OuFx6e?D=CWPPuQI;)-hPw^V@! z|1)v|#N-A0raWJ_SIb6fgn0490PTvC0z!&%CFA|EkfzS2Y%}bnDomM20pA7q3x8;S zi9z2GXg=S(O1n0ssCDov?YVX>on(l$Uz(M8Mov=M`o?IR)v-%@=iFkWDkR2Rmo7i- zUI&W+6gHT)TZ55oY`_{{_h=rF0C7qtfH88R$-dG-=x$s0X zsiq>}UqpT@w?TYCq8{D5|j2SB&WiRt0>5}=85AYL4pFt zia)RG6GO`pwRV*XoVONEga6B^-lV#(UPV#tnN-~4-FG3ow9}u5`I!iPt~t34nk3}H zGk*uRFrDqbMoeYvn5>oBap>E~C-p0B_b*0X8jrV3ukoa)w5P%{0Hmg+y8`=8_{FHX}txPQ>A_8F=N|%`Qh3;m^$GtB+h=0ubZJk;hnx zU(AD1Wsk7mHuCATM|PkO=04uIIIBbB4rKC|sP}j0kDWbjldin8sV~*?+B3Xmx#9f+ zP>Vz9+f499T%W()6IGYUUSegz2;ai& z4w(aoN~~XE;@{f2KhtC|6IV~5d5b;+pHkIBCXRLQZ6s~BlI6@CR41?B@i#g5@b=xx z`lK4ImEeG>0ua?$;V?Yv8+K*X!+aLG&%vTp14jK&mUS65*YqQo3>T^ddIHP!{Sd}K zfk2x4(GbtW-#_W~`>Ob)$~q*|+6vsxe5AV)(5aiRuj z^86Jmu(*KtST2TEvoZT(d9@exS(o>D;j2E+k`^4qX%SIX&Z^n=qH&SOFlkIBu%{LU zysrb%7^YHH42{Q9a{NJ<1AW!~$(b)2d%N)YM9s8`s`ALvU>~6hR;yRDVTqKW@ficr zhUg9UA{lhuMo|3d`Tgksc>&<+7NMpFKe2Xs`FizbQ%bVtL3=u~$mj{9RIT%Bv%Cr# z!0XT)>r5sT)t%LscF78mdI%34$VxjE4vz}79BBd7++ zV2?oykZml2lhj*Fk)@S8v_xIeEZ|T^MU_y=<4bK55vre0@CIX`$9c_pS;~;L2YE3W zh9KV?tChb&MsI)F&bf)I3SJDjsnjl4lt>CDGP)!&tDj562phBhsXwL{xQmHngmpWb zAy1Pgm|1)(X$JWjK4CFOTN$GWbq}@>dVNq!MPp#X8gX&5q~O)(zT2Q*htIKYrcbV#&@>>W;JlA^t})YYUjZER`g)%lxyKC^oHL$6C|n(QL!Mj$agxR`oI%Uzg^d}# z#uZIfq#451v;0bN)sc}&dY^The50Ec1uI$2&mjN;Mm0KZX5 zvQ@sj-BVX9#nPMC0}%B}s&wS&4XdynG-Jx%!NoUnQI!)BC`R9$Ij*l48tHuN;}uK` z$okMw%$6J763SvNr(d>2iNVASCbUmk??d%eYKptecBlNXji4Uyf8s<;(qW*&%pi(L}< zsnBZf?JyY${DQL*rD9cVAY;QDgbwAT=eg7^3pNtR@^Bj$kkzRyYz6HYAIG1=N?@Vf z!P|_nm-q?kj=wVMEu075hW>ZNq$u0tJN}~v$3Wc!lnezcy zG@Y45NExpnSNSIrNJ&Y@*LI@9+%%2E7H?j{NeF77)Q~efFyFa)*TjE`*M(G7NlUb>A zfNQ2*t;7u#&`OUng+wZ>T^aazHF%JfK^%9;L#|nj;KxXi@_8p<`4|e2^$R$s{xa&3nZAX0}n#z?A4 zwVWUAj0II%F;T8l&=1|GUSBNMxjR@DKN>Z{TgX zT_Q;`<({<1C7@X!^;!&i3(Sh6?^E-rgrG`88>8E%CLcm#vB*UQB}s#Fe66P>80UlO z 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 UO=n3E4e+CV&p^FY^=a_`19<8$UH||9 literal 0 HcmV?d00001 diff --git a/scripts/smoke-test.js b/scripts/smoke-test.js new file mode 100644 index 0000000..cbc9f3b --- /dev/null +++ b/scripts/smoke-test.js @@ -0,0 +1,66 @@ +const os = require('os'); +const fs = require('fs-extra'); +const path = require('path'); +const glob = require('glob'); + +const packageData = require('../package'); +const run = require('../cli/run'); + + +function replacePlaceholders(content) { + return content + .replace(/dredd-hooks-\{\{mylanguage\}\}/g, 'dredd-hooks-python') + .replace(/import hooks/g, "import dredd_hooks as hooks") + .replace(/\.\{\{myextension\}\}/g, '.py'); +} + +function uncommentPythonCodeBlocks(content) { + let insidePythonCodeBlock = false; + let quotationMarksSeen = 0; + + return content + .split(/\r?\n/) + .map((line) => { + if (insidePythonCodeBlock) { + line = line.replace(/^ \#/, ' '); + quotationMarksSeen += /^ """/.test(line) ? 1 : 0; + insidePythonCodeBlock = quotationMarksSeen < 2; + } else { + quotationMarksSeen = 0; + insidePythonCodeBlock = /(Given|And) a file named ".+\.py"/i.test(line); + }; + return line; + }) + .join('\n'); +} + + +// create a temporary directory and init an npm package there +const testDir = fs.mkdtempSync(path.join(os.tmpdir(), 'dredd-hooks-template-test-')); +run('npm', ['init', '--yes'], { cwd: testDir }); + +// run 'npm pack' in the 'dredd-hooks-template' project directory and install +// the template from the resulting tarball as a dev dep in the test package +const projectDir = path.join(__dirname, '..'); +run('npm', ['pack'], { cwd: projectDir }); +const tgzBasename = `${packageData.name}-${packageData.version}.tgz`; +const tgzPath = path.join(projectDir, tgzBasename); +run('npm', ['install', tgzPath, '--save-dev'], { cwd: testDir }); + +// initialize the test suite template +run('npx', ['dredd-hooks-template', 'init'], { cwd: testDir }); + +// make custom changes to the '*.feature' files so they're able to test +// the Python hooks (reference implementation) +glob.sync(path.join(testDir, '**/*.feature')).forEach((featurePath) => { + const content = fs.readFileSync(featurePath, { encoding: 'utf-8' }); + const modifiedContent = uncommentPythonCodeBlocks(replacePlaceholders(content)); + fs.writeFileSync(featurePath, modifiedContent, { encoding: 'utf-8' }); +}); + +// run 'dredd-hooks-template test', should pass +run('npx', ['dredd-hooks-template', 'test'], { cwd: testDir }); + +// cleanup (intentionally doesn't cleanup on exception, as then one can 'cd' +// to the temporary directory and play with it to debug problems) +fs.removeSync(testDir); diff --git a/scripts/test.js b/scripts/test.js deleted file mode 100644 index 66c8d8d..0000000 --- a/scripts/test.js +++ /dev/null @@ -1,56 +0,0 @@ -const fs = require('fs-extra'); -const path = require('path'); -const glob = require('glob'); -const { spawnSync } = require('child_process'); - - -const PROJECT_DIR = path.join(__dirname, '..'); -const TEST_DIR = path.join(PROJECT_DIR, 'test'); - - -function replacePlaceholders(content) { - return content - .replace(/dredd-hooks\-\{\{mylanguage\}\}/g, 'dredd-hooks-python') - .replace(/import hooks/g, "import dredd_hooks as hooks") - .replace(/\.\{\{myextension\}\}/g, '.py'); -} - - -function uncommentPythonCodeBlocks(content) { - let insidePythonCodeBlock = false; - let quotationMarksSeen = 0; - - return content - .split(/\r?\n/) - .map((line) => { - if (insidePythonCodeBlock) { - line = line.replace(/^ \#/, ' '); - quotationMarksSeen += /^ """/.test(line) ? 1 : 0; - insidePythonCodeBlock = quotationMarksSeen < 2; - } else { - quotationMarksSeen = 0; - insidePythonCodeBlock = /(Given|And) a file named ".+\.py"/i.test(line); - }; - return line; - }) - .join('\n'); -} - - -fs.removeSync(TEST_DIR); -fs.mkdirSync(TEST_DIR); -fs.copySync(path.join(PROJECT_DIR, 'features'), path.join(TEST_DIR, 'features')); - -glob.sync(path.join(TEST_DIR, '**/*.feature')).forEach((featurePath) => { - const content = fs.readFileSync(featurePath, { encoding: 'utf-8' }); - const modifiedContent = uncommentPythonCodeBlocks(replacePlaceholders(content)); - fs.writeFileSync(featurePath, modifiedContent, { encoding: 'utf-8' }); -}) - -const binDir = path.join(PROJECT_DIR, 'node_modules', '.bin'); -const featuresDir = path.join(TEST_DIR, 'features'); - -const PATH = process.env.PATH.split(path.delimiter).concat([binDir]).join(path.delimiter); -const env = { ...process.env, PATH }; - -spawnSync('cucumber-js', [featuresDir], { cwd: TEST_DIR, env, stdio: 'inherit' }); From 5c9edd170c4bcfe635079fed3e80836ae1f51a7b Mon Sep 17 00:00:00 2001 From: Honza Javorek Date: Thu, 16 May 2019 17:14:05 +0200 Subject: [PATCH 2/5] chore: upgrade dependencies Close https://github.com/apiaryio/dredd-hooks-template/pull/41, close https://github.com/apiaryio/dredd-hooks-template/pull/38 --- package-lock.json | 672 +++++++++++++--------------------------------- package.json | 4 +- 2 files changed, 196 insertions(+), 480 deletions(-) diff --git a/package-lock.json b/package-lock.json index 921725e..cf604d2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,6 @@ "version": "7.4.3", "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.4.3.tgz", "integrity": "sha512-rkv8WIvJshA5Ev8iNMGgz5WZkRtgtiPexiT7w5qevGTuT7ZBfM3de9ox1y9JR5/OXb/sWGBbWlHNa7vQKqku3Q==", - "dev": true, "requires": { "core-js": "^2.6.5", "regenerator-runtime": "^0.13.2" @@ -17,14 +16,12 @@ "JSONSelect": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/JSONSelect/-/JSONSelect-0.4.0.tgz", - "integrity": "sha1-oI7cxn6z/L6Z7WMIVTRKDPKCu40=", - "dev": true + "integrity": "sha1-oI7cxn6z/L6Z7WMIVTRKDPKCu40=" }, "ajv": { "version": "6.10.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", - "dev": true, "requires": { "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", @@ -35,26 +32,22 @@ "amanda": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/amanda/-/amanda-1.0.1.tgz", - "integrity": "sha512-DJZMA1t7skqQgH5yq4NxBfqun+jDQUSYJRYGg+AqnKc3I0/hs8eX3PDdlfgiADkHgo4HlesD5QuoqFcCYA280Q==", - "dev": true + "integrity": "sha512-DJZMA1t7skqQgH5yq4NxBfqun+jDQUSYJRYGg+AqnKc3I0/hs8eX3PDdlfgiADkHgo4HlesD5QuoqFcCYA280Q==" }, "ansi-escapes": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" }, "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -62,20 +55,17 @@ "any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", - "dev": true + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" }, "api-blueprint-http-formatter": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/api-blueprint-http-formatter/-/api-blueprint-http-formatter-0.0.1.tgz", - "integrity": "sha1-Kn6zz4LewX2jYi/tt+oLLTBpybc=", - "dev": true + "integrity": "sha1-Kn6zz4LewX2jYi/tt+oLLTBpybc=" }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "requires": { "sprintf-js": "~1.0.2" } @@ -84,7 +74,6 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, "requires": { "safer-buffer": "~2.1.0" } @@ -92,20 +81,17 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, "assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" }, "assertion-error-formatter": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/assertion-error-formatter/-/assertion-error-formatter-2.0.1.tgz", "integrity": "sha512-cjC3jUCh9spkroKue5PDSKH5RFQ/KNuZJhk3GwHYmB/8qqETxLOmMdLH+ohi/VukNzxDlMvIe7zScvLoOdhb6Q==", - "dev": true, "requires": { "diff": "^3.0.0", "pad-right": "^0.2.2", @@ -116,7 +102,6 @@ "version": "2.6.2", "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", - "dev": true, "requires": { "lodash": "^4.17.11" } @@ -124,32 +109,27 @@ "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": { "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 + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", - "dev": true + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, "requires": { "tweetnacl": "^0.14.3" } @@ -157,20 +137,17 @@ "becke-ch--regex--s0-0-v1--base--pl--lib": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/becke-ch--regex--s0-0-v1--base--pl--lib/-/becke-ch--regex--s0-0-v1--base--pl--lib-1.4.0.tgz", - "integrity": "sha1-Qpzuu/pffpNueNc/vcfacWKyDiA=", - "dev": true + "integrity": "sha1-Qpzuu/pffpNueNc/vcfacWKyDiA=" }, "bluebird": { "version": "3.5.4", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.4.tgz", - "integrity": "sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw==", - "dev": true + "integrity": "sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw==" }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -179,26 +156,22 @@ "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 + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" }, "call-me-maybe": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", - "dev": true + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, "chai": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", - "dev": true, "requires": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", @@ -212,7 +185,6 @@ "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", @@ -222,26 +194,22 @@ "chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, "check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" }, "cjson": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/cjson/-/cjson-0.2.1.tgz", - "integrity": "sha1-c82KrWXZ4VBfmvF0TTt5wVJ2gqU=", - "dev": true + "integrity": "sha1-c82KrWXZ4VBfmvF0TTt5wVJ2gqU=" }, "cli-cursor": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, "requires": { "restore-cursor": "^2.0.0" } @@ -250,7 +218,6 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", - "dev": true, "requires": { "colors": "^1.1.2", "object-assign": "^4.1.0", @@ -261,7 +228,6 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==", - "dev": true, "optional": true } } @@ -269,20 +235,17 @@ "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 + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" }, "clone": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "requires": { "color-name": "1.1.3" } @@ -290,20 +253,17 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "colors": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/colors/-/colors-0.5.1.tgz", - "integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=", - "dev": true + "integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=" }, "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==", - "dev": true, "requires": { "delayed-stream": "~1.0.0" } @@ -311,20 +271,17 @@ "commander": { "version": "2.18.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.18.0.tgz", - "integrity": "sha512-6CYPa+JP2ftfRU2qkDK+UTVeQYosOg/2GbcjIcKPHfinyOLPVGXu/ovN86RP49Re5ndJK1N0kuiidFFuepc4ZQ==", - "dev": true + "integrity": "sha512-6CYPa+JP2ftfRU2qkDK+UTVeQYosOg/2GbcjIcKPHfinyOLPVGXu/ovN86RP49Re5ndJK1N0kuiidFFuepc4ZQ==" }, "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 + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "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.0.0", "inherits": "^2.0.3", @@ -335,26 +292,22 @@ "content-type": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, "core-js": { "version": "2.6.5", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", - "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==", - "dev": true + "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==" }, "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 + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, "requires": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -367,7 +320,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/cucumber/-/cucumber-5.1.0.tgz", "integrity": "sha512-zrl2VYTBRgvxucwV2GKAvLqcfA1Naeax8plPvWgPEzl3SCJiuPPv3WxBHIRHtPYcEdbHDR6oqLpZP4bJ8UIdmA==", - "dev": true, "requires": { "@babel/polyfill": "^7.2.3", "assertion-error-formatter": "^2.0.1", @@ -403,8 +355,7 @@ "colors": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", - "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==", - "dev": true + "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==" } } }, @@ -412,7 +363,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/cucumber-expressions/-/cucumber-expressions-6.0.1.tgz", "integrity": "sha1-R8nFc3gcL/ch161bLNHJf0OZq44=", - "dev": true, "requires": { "becke-ch--regex--s0-0-v1--base--pl--lib": "^1.2.0" } @@ -420,14 +370,12 @@ "cucumber-tag-expressions": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/cucumber-tag-expressions/-/cucumber-tag-expressions-1.1.1.tgz", - "integrity": "sha1-f1x7cACbwrZmWRv+ZIVFeL7e6Fo=", - "dev": true + "integrity": "sha1-f1x7cACbwrZmWRv+ZIVFeL7e6Fo=" }, "curl-trace-parser": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/curl-trace-parser/-/curl-trace-parser-0.0.10.tgz", "integrity": "sha1-yJfM5E5gfzEF2ktcCMhlQtB79qU=", - "dev": true, "requires": { "api-blueprint-http-formatter": "0.0.1", "commander": "2.14.1", @@ -437,22 +385,19 @@ "commander": { "version": "2.14.1", "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz", - "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==", - "dev": true + "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==" } } }, "cycle": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", - "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=", - "dev": true + "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=" }, "d": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, "requires": { "es5-ext": "^0.10.9" } @@ -461,7 +406,6 @@ "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" } @@ -470,7 +414,6 @@ "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" } @@ -479,7 +422,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, "requires": { "type-detect": "^4.0.0" } @@ -487,20 +429,17 @@ "deep-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", - "dev": true + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" }, "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 + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" }, "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.0.12" } @@ -508,26 +447,22 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, "diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" }, "drange": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/drange/-/drange-1.1.1.tgz", - "integrity": "sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==", - "dev": true + "integrity": "sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==" }, "dredd": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/dredd/-/dredd-11.1.0.tgz", "integrity": "sha512-VB4/e1j3FvsE5rNqmYBM3sXVTmt8JkL2BfM19TnQbLo8d+/T2NJOSx3Isl7wW5sMiG8SHORYOx7r85U2/7y2xg==", - "dev": true, "requires": { "async": "2.6.2", "caseless": "0.12.0", @@ -558,7 +493,6 @@ "version": "7.1.4", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -574,7 +508,6 @@ "version": "8.1.3", "resolved": "https://registry.npmjs.org/dredd-transactions/-/dredd-transactions-8.1.3.tgz", "integrity": "sha512-+utgc8QwFOq52yE5RxEknFW8luKqpBS2O41dZYe0XF8+CCPWPFmsW8rUNFRAzYWbAySxjjGc9Y9Htrdi412j1Q==", - "dev": true, "requires": { "fury": "3.0.0-beta.10", "fury-adapter-apib-parser": "0.14.0", @@ -585,26 +518,22 @@ "dependencies": { "deckardcain": { "version": "0.4.1", - "bundled": true, - "dev": true + "bundled": true }, "drafter": { "version": "2.0.0-pre.1", "bundled": true, - "dev": true, "requires": { "drafter.js": "^3.0.0-pre.2" } }, "drafter.js": { "version": "3.0.0-pre.4", - "bundled": true, - "dev": true + "bundled": true }, "fury-adapter-apib-parser": { "version": "0.14.0", "bundled": true, - "dev": true, "requires": { "deckardcain": "^0.4.0", "drafter": "2.0.0-pre.1" @@ -616,7 +545,6 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/duration/-/duration-0.2.2.tgz", "integrity": "sha512-06kgtea+bGreF5eKYgI/36A6pLXggY7oR4p1pq4SmdFBn1ReOL5D8RhG64VrqfTTKNucqqtBAwEj8aB88mcqrg==", - "dev": true, "requires": { "d": "1", "es5-ext": "~0.10.46" @@ -625,14 +553,12 @@ "ebnf-parser": { "version": "0.1.10", "resolved": "https://registry.npmjs.org/ebnf-parser/-/ebnf-parser-0.1.10.tgz", - "integrity": "sha1-zR9rpHfFY4xAyX7ZtXLbW6tdgzE=", - "dev": true + "integrity": "sha1-zR9rpHfFY4xAyX7ZtXLbW6tdgzE=" }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -641,14 +567,12 @@ "entities": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" }, "error-stack-parser": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.2.tgz", "integrity": "sha512-E1fPutRDdIj/hohG0UpT5mayXNCxXP9d+snxFsPU9X0XgccOumKraa3juDMwTUyi7+Bu5+mCGagjg4IYeNbOdw==", - "dev": true, "requires": { "stackframe": "^1.0.4" } @@ -657,7 +581,6 @@ "version": "1.13.0", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", - "dev": true, "requires": { "es-to-primitive": "^1.2.0", "function-bind": "^1.1.1", @@ -671,7 +594,6 @@ "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==", - "dev": true, "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -682,7 +604,6 @@ "version": "0.10.49", "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.49.tgz", "integrity": "sha512-3NMEhi57E31qdzmYp2jwRArIUsj1HI/RxbQ4bgnSB+AIKIxsAmTiK83bYMifIcpWvEc3P1X30DhUKOqEtF/kvg==", - "dev": true, "requires": { "es6-iterator": "~2.0.3", "es6-symbol": "~3.1.1", @@ -693,7 +614,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, "requires": { "d": "1", "es5-ext": "^0.10.35", @@ -704,7 +624,6 @@ "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", "es5-ext": "~0.10.14" @@ -713,14 +632,12 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "escodegen": { "version": "0.0.21", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-0.0.21.tgz", "integrity": "sha1-U9ZSz6EDA4gnlFilJmxf/HCcY8M=", - "dev": true, "requires": { "esprima": "~1.0.2", "estraverse": "~0.0.4", @@ -730,40 +647,34 @@ "esprima": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", - "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=", - "dev": true + "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=" } } }, "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 + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "estraverse": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-0.0.4.tgz", - "integrity": "sha1-AaCTLf7ldGhKWYr1pnw7+bZCjbI=", - "dev": true + "integrity": "sha1-AaCTLf7ldGhKWYr1pnw7+bZCjbI=" }, "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "external-editor": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", - "dev": true, "requires": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -773,38 +684,32 @@ "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "eyes": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=", - "dev": true + "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=" }, "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=", - "dev": true + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" }, "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=", - "dev": true + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" }, "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 + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, "figures": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, "requires": { "escape-string-regexp": "^1.0.5" } @@ -813,7 +718,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/fill-keys/-/fill-keys-1.0.2.tgz", "integrity": "sha1-mo+jb06K1jTjv2tPPIiCVRRS6yA=", - "dev": true, "requires": { "is-object": "~1.0.1", "merge-descriptors": "~1.0.0" @@ -822,20 +726,17 @@ "foreach": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -845,14 +746,12 @@ "format-util": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/format-util/-/format-util-1.0.3.tgz", - "integrity": "sha1-Ay3KShFiYqEsQ/TD7IVmQWxbLZU=", - "dev": true + "integrity": "sha1-Ay3KShFiYqEsQ/TD7IVmQWxbLZU=" }, "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.0.1.tgz", + "integrity": "sha512-W+XLrggcDzlle47X/XnS7FXrXu9sDo+Ze9zpndeBxdgv88FHLm1HtmkhEwavruS6koanBjp098rUpHs65EmG7A==", "requires": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -862,20 +761,17 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "fury": { "version": "3.0.0-beta.10", "resolved": "https://registry.npmjs.org/fury/-/fury-3.0.0-beta.10.tgz", "integrity": "sha512-FMB0tVX4IIk2RUnnnqK1LqCaw2gcB1FWK5l9ccaFlR/esb3moiiWGHL446ouEs0mLROTNVqI3pfTnLXPgfVr0w==", - "dev": true, "requires": { "minim": "^0.23.1", "minim-parse-result": "^0.11.1" @@ -885,7 +781,6 @@ "version": "0.7.4", "resolved": "https://registry.npmjs.org/fury-adapter-oas3-parser/-/fury-adapter-oas3-parser-0.7.4.tgz", "integrity": "sha512-NP7uef3+z6+ws/KEJXMAVEeNPiwGbND0yUOZFPkpH13j1aMK5KZrq9JC9dUhWJOzH2uOmVg2uJ/lvkEvv2GnaQ==", - "dev": true, "requires": { "media-typer": "^1.0.1", "ramda": "0.26.1", @@ -896,7 +791,6 @@ "version": "0.25.1", "resolved": "https://registry.npmjs.org/fury-adapter-swagger/-/fury-adapter-swagger-0.25.1.tgz", "integrity": "sha512-k1kYXEbJPoDB4Fa+vHWQfFAlk5Gpc2XjZSqGMTTSYscZZSH/DPETEPbozXubNmWxGj5feekhBPqb5qRlXsiStA==", - "dev": true, "requires": { "content-type": "^1.0.4", "js-yaml": "^3.12.0", @@ -913,7 +807,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/gavel/-/gavel-3.0.1.tgz", "integrity": "sha512-bTgst1vQmK9s4gc+cC6PmSLXDB9dxmM+pZxQsCs9bO2e4MAugTF6u5xgvKDHdYGS+4C9bOnftLEJDIwG2EglpA==", - "dev": true, "requires": { "amanda": "1.0.1", "async": "2.6.1", @@ -935,7 +828,6 @@ "version": "2.6.1", "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "dev": true, "requires": { "lodash": "^4.17.10" } @@ -943,28 +835,24 @@ "commander": { "version": "2.20.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", - "dev": true + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==" }, "media-typer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.0.2.tgz", - "integrity": "sha512-/ky7iFD18Y2mN5BdOS4zotSSgu11BsIR2l3L7eK2bTaRWQidoSBmSxGgMFd/XOSGyivlhtQUdDLoUzlr1PWb1g==", - "dev": true + "integrity": "sha512-/ky7iFD18Y2mN5BdOS4zotSSgu11BsIR2l3L7eK2bTaRWQidoSBmSxGgMFd/XOSGyivlhtQUdDLoUzlr1PWb1g==" } } }, "get-func-name": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" }, "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" } @@ -972,8 +860,7 @@ "gherkin": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/gherkin/-/gherkin-5.1.0.tgz", - "integrity": "sha1-aEu7A63STq9731RPWAM+so+zxtU=", - "dev": true + "integrity": "sha1-aEu7A63STq9731RPWAM+so+zxtU=" }, "gherkin-lint": { "version": "3.3.0", @@ -985,13 +872,28 @@ "gherkin": "5.1.0", "glob": "7.1.3", "lodash": "4.17.11" + }, + "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.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1004,26 +906,22 @@ "googlediff": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/googlediff/-/googlediff-0.1.0.tgz", - "integrity": "sha1-mazwXMBiI+tmwpAI2B+bLRjCRT0=", - "dev": true + "integrity": "sha1-mazwXMBiI+tmwpAI2B+bLRjCRT0=" }, "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==", - "dev": true + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" }, "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" }, "har-validator": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, "requires": { "ajv": "^6.5.5", "har-schema": "^2.0.0" @@ -1033,7 +931,6 @@ "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" } @@ -1041,20 +938,17 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "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 + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" }, "html": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/html/-/html-1.0.0.tgz", "integrity": "sha1-pUT6nqVJK/s6LMqCEKEL57WvH2E=", - "dev": true, "requires": { "concat-stream": "^1.4.7" } @@ -1062,14 +956,12 @@ "htmlencode": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/htmlencode/-/htmlencode-0.0.4.tgz", - "integrity": "sha1-9+LWr74YqHp45jujMI51N2Z0Dj8=", - "dev": true + "integrity": "sha1-9+LWr74YqHp45jujMI51N2Z0Dj8=" }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, "requires": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -1079,14 +971,12 @@ "http-string-parser": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/http-string-parser/-/http-string-parser-0.0.6.tgz", - "integrity": "sha1-QIihq6K4kVXOE5GLz7XLvqbE5+k=", - "dev": true + "integrity": "sha1-QIihq6K4kVXOE5GLz7XLvqbE5+k=" }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -1094,14 +984,12 @@ "indent-string": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "dev": true + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=" }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -1110,14 +998,12 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "inquirer": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.3.1.tgz", "integrity": "sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA==", - "dev": true, "requires": { "ansi-escapes": "^3.2.0", "chalk": "^2.4.2", @@ -1137,44 +1023,37 @@ "is-callable": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "dev": true + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" }, "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 + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" }, "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 + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "is-generator": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-generator/-/is-generator-1.0.3.tgz", - "integrity": "sha1-wUwhBX7TbjKNuANHlmxpP4hjifM=", - "dev": true + "integrity": "sha1-wUwhBX7TbjKNuANHlmxpP4hjifM=" }, "is-object": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=", - "dev": true + "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" }, "is-regex": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, "requires": { "has": "^1.0.1" } @@ -1182,14 +1061,12 @@ "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, "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" } @@ -1197,32 +1074,27 @@ "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "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 + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "jison": { "version": "0.4.13", "resolved": "https://registry.npmjs.org/jison/-/jison-0.4.13.tgz", "integrity": "sha1-kEFwfWIkE2f1iDRTK58ZwsNvrHg=", - "dev": true, "requires": { "JSONSelect": "0.4.0", "cjson": "~0.2.1", @@ -1237,8 +1109,7 @@ "esprima": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", - "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=", - "dev": true + "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=" } } }, @@ -1246,7 +1117,6 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/jison-lex/-/jison-lex-0.2.1.tgz", "integrity": "sha1-rEuBXozOUTLrErXfz+jXB7iETf4=", - "dev": true, "requires": { "lex-parser": "0.1.x", "nomnom": "1.5.2" @@ -1255,14 +1125,12 @@ "jju": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", - "integrity": "sha1-o6vicYryQaKykE+EpiWXDzia4yo=", - "dev": true + "integrity": "sha1-o6vicYryQaKykE+EpiWXDzia4yo=" }, "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.7", "esprima": "^4.0.0" @@ -1271,14 +1139,12 @@ "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, "json-parse-helpfulerror": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz", "integrity": "sha1-E/FM4C7tTpgSl7ZOueO5MuLdE9w=", - "dev": true, "requires": { "jju": "^1.1.0" } @@ -1287,7 +1153,6 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/json-pointer/-/json-pointer-0.6.0.tgz", "integrity": "sha1-jlAFUKaqxUZKRzN32leqbMIoKNc=", - "dev": true, "requires": { "foreach": "^2.0.4" } @@ -1295,14 +1160,12 @@ "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" }, "json-schema-faker": { "version": "0.5.0-rc16", "resolved": "https://registry.npmjs.org/json-schema-faker/-/json-schema-faker-0.5.0-rc16.tgz", "integrity": "sha512-pDGpYWf3UjwhEBDfRot8q9eWQdekTb2BmykpX0QCqSV/pkniyIWnRa8+/oUWyK4h+1wRqUKoKx14JqIIrTW9LA==", - "dev": true, "requires": { "json-schema-ref-parser": "^5.0.0", "jsonpath": "^1.0.0", @@ -1313,7 +1176,6 @@ "version": "5.1.3", "resolved": "https://registry.npmjs.org/json-schema-ref-parser/-/json-schema-ref-parser-5.1.3.tgz", "integrity": "sha512-CpDFlBwz/6la78hZxyB9FECVKGYjIIl3Ms3KLqFj99W7IIb7D00/RDgc++IGB4BBALl0QRhh5m4q5WNSopvLtQ==", - "dev": true, "requires": { "call-me-maybe": "^1.0.1", "debug": "^3.1.0", @@ -1324,20 +1186,17 @@ "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "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 + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, "requires": { "graceful-fs": "^4.1.6" } @@ -1346,7 +1205,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.0.1.tgz", "integrity": "sha512-HY5kSg82LHIs0r0h9gYBwpNc1w1qGY0qJ7al01W1bJltsN2lp+mjjA/a79gXWuvD6Xf8oPkD2d5uKMZQXTGzqA==", - "dev": true, "requires": { "esprima": "1.2.2", "jison": "0.4.13", @@ -1357,28 +1215,24 @@ "esprima": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz", - "integrity": "sha1-dqD9Zvz+FU/SkmZ9wmQBl1CxZXs=", - "dev": true + "integrity": "sha1-dqD9Zvz+FU/SkmZ9wmQBl1CxZXs=" } } }, "jsonschema": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.4.tgz", - "integrity": "sha512-lz1nOH69GbsVHeVgEdvyavc/33oymY1AZwtePMiMj4HZPMbP5OIKK3zT9INMWjwua/V4Z4yq7wSlBbSG+g4AEw==", - "dev": true + "integrity": "sha512-lz1nOH69GbsVHeVgEdvyavc/33oymY1AZwtePMiMj4HZPMbP5OIKK3zT9INMWjwua/V4Z4yq7wSlBbSG+g4AEw==" }, "jsonschema-draft4": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/jsonschema-draft4/-/jsonschema-draft4-1.0.0.tgz", - "integrity": "sha1-8K8gBQVPDwrefqIRhhS2ncUS2GU=", - "dev": true + "integrity": "sha1-8K8gBQVPDwrefqIRhhS2ncUS2GU=" }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -1390,7 +1244,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/knuth-shuffle-seeded/-/knuth-shuffle-seeded-1.0.6.tgz", "integrity": "sha1-AfG2VzOqdUDuCNiwF0Fk0iCB5OE=", - "dev": true, "requires": { "seed-random": "~2.2.0" } @@ -1399,7 +1252,6 @@ "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" @@ -1408,14 +1260,12 @@ "lex-parser": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/lex-parser/-/lex-parser-0.1.4.tgz", - "integrity": "sha1-ZMTwJfF/1Tv7RXY/rrFvAVp0dVA=", - "dev": true + "integrity": "sha1-ZMTwJfF/1Tv7RXY/rrFvAVp0dVA=" }, "linkify-it": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.1.0.tgz", "integrity": "sha512-4REs8/062kV2DSHxNfq5183zrqXMl7WP0WzABH9IeJI+NLm429FgE1PDecltYfnOoFDFlZGh2T8PfZn0r+GTRg==", - "dev": true, "requires": { "uc.micro": "^1.0.1" } @@ -1423,32 +1273,27 @@ "lodash": { "version": "4.17.11", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" }, "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", - "dev": true + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" }, "lodash.isequal": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", - "dev": true + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" }, "lower-case": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", - "dev": true + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" }, "make-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz", "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==", - "dev": true, "requires": { "semver": "^6.0.0" }, @@ -1456,8 +1301,7 @@ "semver": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", - "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", - "dev": true + "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==" } } }, @@ -1465,7 +1309,6 @@ "version": "8.4.2", "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz", "integrity": "sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==", - "dev": true, "requires": { "argparse": "^1.0.7", "entities": "~1.1.1", @@ -1477,32 +1320,27 @@ "mdurl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", - "dev": true + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" }, "media-typer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", - "dev": true + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==" }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, "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==", - "dev": true + "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==", - "dev": true, "requires": { "mime-db": "1.40.0" } @@ -1510,14 +1348,12 @@ "mimic-fn": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" }, "minim": { "version": "0.23.3", "resolved": "https://registry.npmjs.org/minim/-/minim-0.23.3.tgz", "integrity": "sha512-izjIa8+KsQUBugaDlDQtcQ8hoWx7OOzSzZy6iDWprL38LwUTDSmrWkBKtnyjXNdt/xq9hjF51UmYQ3bcmSJ8gw==", - "dev": true, "requires": { "lodash": "^4.15.0" } @@ -1525,14 +1361,12 @@ "minim-api-description": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/minim-api-description/-/minim-api-description-0.9.1.tgz", - "integrity": "sha512-quwtvcbd5X75Z60GYwgLOcSlKZyr+cnwzusCMXHmSInn0mHBwTBB63Vfk753wLs6g/yR+mt8/WYgiTVMzpA+XA==", - "dev": true + "integrity": "sha512-quwtvcbd5X75Z60GYwgLOcSlKZyr+cnwzusCMXHmSInn0mHBwTBB63Vfk753wLs6g/yR+mt8/WYgiTVMzpA+XA==" }, "minim-parse-result": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/minim-parse-result/-/minim-parse-result-0.11.1.tgz", "integrity": "sha512-M2OcK3kAncIEoL7dHpWH6ICjVbgVQJjU45Wf35/8xExlRhUXOMgw9cg8BPSA4/DSk5KAntMpfM+HOqQsYp/OeA==", - "dev": true, "requires": { "minim-api-description": "^0.9.1" } @@ -1541,7 +1375,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -1549,32 +1382,27 @@ "minimist": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", - "dev": true + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" }, "module-not-found-error": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/module-not-found-error/-/module-not-found-error-1.0.1.tgz", - "integrity": "sha1-z4tP9PKWQGdNbN0CsOO8UjwrvcA=", - "dev": true + "integrity": "sha1-z4tP9PKWQGdNbN0CsOO8UjwrvcA=" }, "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 + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" }, "mute-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" }, "mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, "requires": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", @@ -1584,20 +1412,17 @@ "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 + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, "no-case": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", - "dev": true, "requires": { "lower-case": "^1.1.1" } @@ -1606,7 +1431,6 @@ "version": "1.5.2", "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.5.2.tgz", "integrity": "sha1-9DRUSKhTz71cDSYyDyR3qwUm/i8=", - "dev": true, "requires": { "colors": "0.5.x", "underscore": "1.1.x" @@ -1615,34 +1439,29 @@ "underscore": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.1.7.tgz", - "integrity": "sha1-QLq4S60Z0jAJbo1u9ii/8FXYPbA=", - "dev": true + "integrity": "sha1-QLq4S60Z0jAJbo1u9ii/8FXYPbA=" } } }, "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 + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" }, "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 + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "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 + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "object.values": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", - "dev": true, "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.12.0", @@ -1654,7 +1473,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1" } @@ -1663,7 +1481,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, "requires": { "mimic-fn": "^1.0.0" } @@ -1672,7 +1489,6 @@ "version": "4.0.11", "resolved": "https://registry.npmjs.org/ono/-/ono-4.0.11.tgz", "integrity": "sha512-jQ31cORBFE6td25deYeD80wxKBMj+zBmHTrVxnc6CKhx8gho6ipmWM5zj/oeoqioZ99yqBls9Z/9Nss7J26G2g==", - "dev": true, "requires": { "format-util": "^1.0.3" } @@ -1681,7 +1497,6 @@ "version": "0.4.2", "resolved": "https://registry.npmjs.org/openapi-schema-validation/-/openapi-schema-validation-0.4.2.tgz", "integrity": "sha512-K8LqLpkUf2S04p2Nphq9L+3bGFh/kJypxIG2NVGKX0ffzT4NQI9HirhiY6Iurfej9lCu7y4Ndm4tv+lm86Ck7w==", - "dev": true, "requires": { "jsonschema": "1.2.4", "jsonschema-draft4": "^1.0.0", @@ -1692,7 +1507,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, "requires": { "minimist": "~0.0.1", "wordwrap": "~0.0.2" @@ -1701,8 +1515,7 @@ "wordwrap": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" } } }, @@ -1710,7 +1523,6 @@ "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.4", @@ -1723,14 +1535,12 @@ "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, "pad-right": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/pad-right/-/pad-right-0.2.2.tgz", "integrity": "sha1-b7ySQEXSRPKiokRQMGDTv8YAl3Q=", - "dev": true, "requires": { "repeat-string": "^1.5.2" } @@ -1738,62 +1548,52 @@ "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 + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" }, "path-parse": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" }, "pathval": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", - "dev": true + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=" }, "pct-encode": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pct-encode/-/pct-encode-1.0.2.tgz", - "integrity": "sha1-uZt7BE1r18OeSDmnqAEirXUVyqU=", - "dev": true + "integrity": "sha1-uZt7BE1r18OeSDmnqAEirXUVyqU=" }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, "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 + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, "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 + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, "proxyquire": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/proxyquire/-/proxyquire-2.1.0.tgz", "integrity": "sha512-kptdFArCfGRtQFv3Qwjr10lwbEV0TBJYvfqzhwucyfEXqVgmnAkyEw/S3FYzR5HI9i5QOq4rcqQjZ6AlknlCDQ==", - "dev": true, "requires": { "fill-keys": "^1.0.2", "module-not-found-error": "^1.0.0", @@ -1803,32 +1603,27 @@ "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 + "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, "ramda": { "version": "0.26.1", "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.26.1.tgz", - "integrity": "sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==", - "dev": true + "integrity": "sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==" }, "randexp": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.5.3.tgz", "integrity": "sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==", - "dev": true, "requires": { "drange": "^1.0.2", "ret": "^0.2.0" @@ -1838,7 +1633,6 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -1852,20 +1646,17 @@ "regenerator-runtime": { "version": "0.13.2", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", - "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==", - "dev": true + "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, "request": { "version": "2.88.0", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "dev": true, "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -1893,7 +1684,6 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", - "dev": true, "requires": { "path-parse": "^1.0.5" } @@ -1902,7 +1692,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, "requires": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" @@ -1911,14 +1700,12 @@ "ret": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz", - "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==", - "dev": true + "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==" }, "run-async": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, "requires": { "is-promise": "^2.1.0" } @@ -1927,7 +1714,6 @@ "version": "6.5.2", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", - "dev": true, "requires": { "tslib": "^1.9.0" } @@ -1935,38 +1721,32 @@ "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 + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "seed-random": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/seed-random/-/seed-random-2.2.0.tgz", - "integrity": "sha1-KpsZ4lCoFwmSMaW5mk2vgLf77VQ=", - "dev": true + "integrity": "sha1-KpsZ4lCoFwmSMaW5mk2vgLf77VQ=" }, "semver": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "dev": true + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" }, "serialize-error": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-3.0.0.tgz", - "integrity": "sha512-+y3nkkG/go1Vdw+2f/+XUXM1DXX1XcxTl99FfiD/OEPUNw4uo0i6FKABfTAN5ZcgGtjTRZcEbxcE/jtXbEY19A==", - "dev": true + "integrity": "sha512-+y3nkkG/go1Vdw+2f/+XUXM1DXX1XcxTl99FfiD/OEPUNw4uo0i6FKABfTAN5ZcgGtjTRZcEbxcE/jtXbEY19A==" }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, "requires": { "shebang-regex": "^1.0.0" } @@ -1974,39 +1754,33 @@ "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 + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "source-map": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, "optional": true }, "spawn-args": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/spawn-args/-/spawn-args-0.2.0.tgz", - "integrity": "sha1-+30L0dcP1DFr2ePew4nmX51jYbs=", - "dev": true + "integrity": "sha1-+30L0dcP1DFr2ePew4nmX51jYbs=" }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "sshpk": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -2022,14 +1796,12 @@ "stack-chain": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/stack-chain/-/stack-chain-2.0.0.tgz", - "integrity": "sha512-GGrHXePi305aW7XQweYZZwiRwR7Js3MWoK/EHzzB9ROdc75nCnjSJVi21rdAGxFl+yCx2L2qdfl5y7NO4lTyqg==", - "dev": true + "integrity": "sha512-GGrHXePi305aW7XQweYZZwiRwR7Js3MWoK/EHzzB9ROdc75nCnjSJVi21rdAGxFl+yCx2L2qdfl5y7NO4lTyqg==" }, "stack-generator": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.3.tgz", "integrity": "sha512-kdzGoqrnqsMxOEuXsXyQTmvWXZmG0f3Ql2GDx5NtmZs59sT2Bt9Vdyq0XdtxUi58q/+nxtbF9KOQ9HkV1QznGg==", - "dev": true, "requires": { "stackframe": "^1.0.4" } @@ -2037,20 +1809,17 @@ "stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", - "dev": true + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" }, "stackframe": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.0.4.tgz", - "integrity": "sha512-to7oADIniaYwS3MhtCa/sQhrxidCCQiF/qp4/m5iN3ipf0Y7Xlri0f6eG29r08aL7JYl8n32AF3Q5GYBZ7K8vw==", - "dev": true + "integrity": "sha512-to7oADIniaYwS3MhtCa/sQhrxidCCQiF/qp4/m5iN3ipf0Y7Xlri0f6eG29r08aL7JYl8n32AF3Q5GYBZ7K8vw==" }, "stacktrace-gps": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.0.2.tgz", "integrity": "sha512-9o+nWhiz5wFnrB3hBHs2PTyYrS60M1vvpSzHxwxnIbtY2q9Nt51hZvhrG1+2AxD374ecwyS+IUwfkHRE/2zuGg==", - "dev": true, "requires": { "source-map": "0.5.6", "stackframe": "^1.0.4" @@ -2059,8 +1828,7 @@ "source-map": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", - "dev": true + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" } } }, @@ -2068,7 +1836,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-2.0.0.tgz", "integrity": "sha1-d2ymRqlbxsayuQd2U2p/xyxt21g=", - "dev": true, "requires": { "error-stack-parser": "^2.0.1", "stack-generator": "^2.0.1", @@ -2079,7 +1846,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", - "dev": true, "requires": { "escodegen": "^1.8.1" }, @@ -2088,7 +1854,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz", "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==", - "dev": true, "requires": { "esprima": "^3.1.3", "estraverse": "^4.2.0", @@ -2100,20 +1865,17 @@ "esprima": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" }, "estraverse": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=" }, "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 } } @@ -2121,14 +1883,12 @@ "string-argv": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.1.1.tgz", - "integrity": "sha512-El1Va5ehZ0XTj3Ekw4WFidXvTmt9SrC0+eigdojgtJMVtPkF0qbBe9fyNSl9eQf+kUHnTSQxdQYzuHfZy8V+DQ==", - "dev": true + "integrity": "sha512-El1Va5ehZ0XTj3Ekw4WFidXvTmt9SrC0+eigdojgtJMVtPkF0qbBe9fyNSl9eQf+kUHnTSQxdQYzuHfZy8V+DQ==" }, "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" @@ -2138,7 +1898,6 @@ "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" } @@ -2149,7 +1908,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -2158,7 +1916,6 @@ "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" }, @@ -2166,8 +1923,7 @@ "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 + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" } } }, @@ -2175,7 +1931,6 @@ "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" } @@ -2183,14 +1938,12 @@ "swagger-methods": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/swagger-methods/-/swagger-methods-1.0.8.tgz", - "integrity": "sha512-G6baCwuHA+C5jf4FNOrosE4XlmGsdjbOjdBK4yuiDDj/ro9uR4Srj3OR84oQMT8F3qKp00tYNv0YN730oTHPZA==", - "dev": true + "integrity": "sha512-G6baCwuHA+C5jf4FNOrosE4XlmGsdjbOjdBK4yuiDDj/ro9uR4Srj3OR84oQMT8F3qKp00tYNv0YN730oTHPZA==" }, "swagger-parser": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/swagger-parser/-/swagger-parser-6.0.5.tgz", "integrity": "sha512-UL47eu4+GRm5y+N7J+W6QQiqAJn2lojyqgMwS0EZgA55dXd5xmpQCsjUmH/Rf0eKDiG1kULc9VS515PxAyTDVw==", - "dev": true, "requires": { "call-me-maybe": "^1.0.1", "json-schema-ref-parser": "^6.0.3", @@ -2205,7 +1958,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/json-schema-ref-parser/-/json-schema-ref-parser-6.1.0.tgz", "integrity": "sha512-pXe9H1m6IgIpXmE5JSb8epilNTGsmTb2iPohAXpOdhqGFbQjNeHHsZxU+C8w6T81GZxSPFLeUoqDJmzxx5IGuw==", - "dev": true, "requires": { "call-me-maybe": "^1.0.1", "js-yaml": "^3.12.1", @@ -2217,14 +1969,12 @@ "swagger-schema-official": { "version": "2.0.0-bab6bed", "resolved": "https://registry.npmjs.org/swagger-schema-official/-/swagger-schema-official-2.0.0-bab6bed.tgz", - "integrity": "sha1-cAcEaNbSl3ylI3suUZyn0Gouo/0=", - "dev": true + "integrity": "sha1-cAcEaNbSl3ylI3suUZyn0Gouo/0=" }, "thenify": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", - "dev": true, "requires": { "any-promise": "^1.0.0" } @@ -2233,7 +1983,6 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", - "dev": true, "requires": { "thenify": ">= 3.1.0 < 4" } @@ -2241,14 +1990,12 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "title-case": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", "integrity": "sha1-PhJyFtpY0rxb7PE3q5Ha46fNj6o=", - "dev": true, "requires": { "no-case": "^2.2.0", "upper-case": "^1.0.3" @@ -2258,7 +2005,6 @@ "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, "requires": { "os-tmpdir": "~1.0.2" } @@ -2267,7 +2013,6 @@ "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.24", "punycode": "^1.4.1" @@ -2276,28 +2021,24 @@ "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" } } }, "tree-kill": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.1.tgz", - "integrity": "sha512-4hjqbObwlh2dLyW4tcz0Ymw0ggoaVDMveUB9w8kFSQScdRLo0gxO9J7WFcUBo+W3C1TLdFIEwNOWebgZZ0RH9Q==", - "dev": true + "integrity": "sha512-4hjqbObwlh2dLyW4tcz0Ymw0ggoaVDMveUB9w8kFSQScdRLo0gxO9J7WFcUBo+W3C1TLdFIEwNOWebgZZ0RH9Q==" }, "tslib": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", - "dev": true + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, "requires": { "safe-buffer": "^5.0.1" } @@ -2305,20 +2046,17 @@ "tv4": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/tv4/-/tv4-1.3.0.tgz", - "integrity": "sha1-0CDIRvrdUMhVq7JeuuzGj8EPeWM=", - "dev": true + "integrity": "sha1-0CDIRvrdUMhVq7JeuuzGj8EPeWM=" }, "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, "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" } @@ -2326,50 +2064,42 @@ "type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "uc.micro": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", - "dev": true + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" }, "underscore": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", - "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=", - "dev": true + "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=" }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" }, "untildify": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==" }, "upper-case": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", - "dev": true + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=" }, "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==", - "dev": true, "requires": { "punycode": "^2.1.0" } @@ -2378,7 +2108,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/uri-template/-/uri-template-1.0.1.tgz", "integrity": "sha1-FKklo35Nk/diVDKqEWsF5Qyuga0=", - "dev": true, "requires": { "pct-encode": "~1.0.0" } @@ -2386,32 +2115,27 @@ "util-arity": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/util-arity/-/util-arity-1.1.0.tgz", - "integrity": "sha1-WdAa8f2z/t4KxOYysKtfbOl8kzA=", - "dev": true + "integrity": "sha1-WdAa8f2z/t4KxOYysKtfbOl8kzA=" }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "uuid": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" }, "validator": { "version": "10.11.0", "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz", - "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==", - "dev": true + "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==" }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -2422,7 +2146,6 @@ "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" } @@ -2431,7 +2154,6 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.0.tgz", "integrity": "sha1-gIBQuT1SZh7Z+2wms/DIJnCLCu4=", - "dev": true, "requires": { "async": "~1.0.0", "colors": "1.0.x", @@ -2444,40 +2166,34 @@ "async": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", - "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=", - "dev": true + "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=" }, "colors": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", - "dev": true + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" } } }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "yaml-js": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/yaml-js/-/yaml-js-0.2.3.tgz", - "integrity": "sha512-6xUQtVKl1qcd0EXtTEzUDVJy9Ji1fYa47LtkDtYKlIjhibPE9knNPmoRyf6SGREFHlOAUyDe9OdYqRP4DuSi5Q==", - "dev": true + "integrity": "sha512-6xUQtVKl1qcd0EXtTEzUDVJy9Ji1fYa47LtkDtYKlIjhibPE9knNPmoRyf6SGREFHlOAUyDe9OdYqRP4DuSi5Q==" }, "z-schema": { "version": "3.25.1", "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-3.25.1.tgz", "integrity": "sha512-7tDlwhrBG+oYFdXNOjILSurpfQyuVgkRe3hB2q8TEssamDHB7BbLWYkYO98nTn0FibfdFroFKDjndbgufAgS/Q==", - "dev": true, "requires": { "commander": "^2.7.1", "core-js": "^2.5.7", diff --git a/package.json b/package.json index 57808ab..e9a6d63 100644 --- a/package.json +++ b/package.json @@ -12,8 +12,8 @@ "chai": "4.2.0", "cucumber": "5.1.0", "dredd": "11.1.0", - "fs-extra": "7.0.1", - "glob": "7.1.3", + "fs-extra": "8.0.1", + "glob": "7.1.4", "tree-kill": "1.2.1", "which": "1.3.1" }, From 27cc517524ab3a8613c786a2c4b77d0a3c8646ac Mon Sep 17 00:00:00 2001 From: Honza Javorek Date: Fri, 17 May 2019 16:42:24 +0200 Subject: [PATCH 3/5] docs: specify Node version, link releases --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c1a763b..e5ad2e6 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ First read the docs about [how to create a new hooks handler](http://dredd.org/e ### Installation -1. Make sure you have [Node.js](https://nodejs.org/) and [npm](https://www.npmjs.com/package/npm) available. +1. Make sure you have [Node.js](https://nodejs.org/) (ideally version 10 or higher) and [npm](https://www.npmjs.com/package/npm) available. 1. Create a `package.json` file in the root of your project. This is where your JavaScript dependencies are going to be specified: ```json @@ -42,7 +42,7 @@ You should add the `package.json` file to Git. When starting from scratch, you c ### Upgrading -Watch for newer versions of the [dredd-hooks-template package](https://www.npmjs.com/package/dredd-hooks-template) and upgrade regularly to keep up with development of Dredd and the test suite itself. To upgrade, run: +[Watch for newer versions](https://github.com/apiaryio/dredd-hooks-template/releases) of the [dredd-hooks-template package](https://www.npmjs.com/package/dredd-hooks-template) and upgrade regularly to keep up with development of Dredd and the test suite itself. To upgrade, run: ``` $ npx dredd-hooks-template upgrade From 448acb33c239a125ee29fadd1fc2d2c6338ab22d Mon Sep 17 00:00:00 2001 From: Honza Javorek Date: Fri, 17 May 2019 16:45:24 +0200 Subject: [PATCH 4/5] docs: split README and CONTRIBUTING --- CONTRIBUTING.md | 46 +++++++++++++++++++++++++++++++++++++ README.md | 61 +++++-------------------------------------------- 2 files changed, 52 insertions(+), 55 deletions(-) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..7982bbd --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,46 @@ +# Contributing + +Clone the repository and install dependencies: + +``` +$ git clone "https://github.com/apiaryio/dredd-hooks-template.git" +$ cd ./dredd-hooks-template +$ npm install +``` + +## Smoke Test + +There is a [smoke test](https://en.wikipedia.org/wiki/Smoke_testing_(software)), which ensures everything works as described in the tutorial above. It uses the [Python hooks handler](https://github.com/apiaryio/dredd-hooks-python) as the reference implementation, so have it installed: + +``` +$ pip install dredd_hooks +``` + +Then you can run the smoke test: + +``` +$ npm test +``` + +## Feature Files Linter + +The feature files syntax is validated automatically. To perform the validation locally, use the `lint` script: + +``` +$ npm run lint +``` + +## Introducing Changes + +The test suite uses the [Python hooks](https://github.com/apiaryio/dredd-hooks-python) as a reference implementation. To introduce a change to this test suite, follow these steps: + +1. Implement the new behavior in the Python hooks. +1. Change the feature files living in the Python hooks repo to describe the new behavior. If needed, add a local `steps.js` file implementing missing test steps. +1. Make sure the Python hooks pass that changed test suite. +1. Release a new version of the Python hooks. +1. Generalize the changed (or added) feature files with placeholders, comment-out the code examples, and copy the files over to this repository. Add missing test steps implementations to the `steps.js`. Create a Pull Request. +1. Make sure the smoke test passes under the Pull Request. +1. Merge the Pull Request and let Semantic Release to produce a new version of the test suite package. +1. Go to Python hooks repository and [upgrade](#upgrading) the test suite package there. Remove any local `steps.js` as the necessary steps should already be implemented in the new version of the test suite package. +1. Go to Ruby hooks repository and [upgrade](#upgrading) the test suite package there. +1. Go to all remaining repositories with hooks handlers and issue Pull Requests for the maintainers which help them to kick-off the upgrade. It's okay if they're incomplete, their purpose is to advertise the changes, to initiate the upgrade, and to be helpful to the maintainers. diff --git a/README.md b/README.md index e5ad2e6..46ccf2c 100644 --- a/README.md +++ b/README.md @@ -4,11 +4,9 @@ [Dredd](https://dredd.org) is a tool for testing web APIs. It supports [hooks](http://dredd.org/en/latest/hooks/index.html) written in [many languages](http://dredd.org/en/latest/hooks/index.html#supported-languages). To support a particular language, it needs an adapter, so-called hooks handler. This [BDD](https://en.wikipedia.org/wiki/Behavior-driven_development) test suite ensures that the public interface of each hooks handler works as Dredd expects. The test suite is written in [Gherkin](https://github.com/cucumber/cucumber/wiki/Gherkin) and uses [Cucumber](https://github.com/cucumber/cucumber-js) as a test runner. -## Usage - -First read the docs about [how to create a new hooks handler](http://dredd.org/en/latest/hooks/new-language.html) for Dredd. Implement your hooks handler and then make sure it passes this test suite. +To use the test suite, first read the docs about [how to create a new hooks handler](http://dredd.org/en/latest/hooks/new-language.html) for Dredd. Implement your hooks handler and then continue with the following guide. -### Installation +## Installation 1. Make sure you have [Node.js](https://nodejs.org/) (ideally version 10 or higher) and [npm](https://www.npmjs.com/package/npm) available. 1. Create a `package.json` file in the root of your project. This is where your JavaScript dependencies are going to be specified: @@ -30,7 +28,7 @@ First read the docs about [how to create a new hooks handler](http://dredd.org/e Now you have the test suite ready. -### Usage +## Usage Every time you run `npx dredd-hooks-template test` (or `npm test`), you should see the test suite running. The end goal is that all the tests pass: @@ -40,7 +38,7 @@ You should add the `package.json` file to Git. When starting from scratch, you c -### Upgrading +## Upgrading [Watch for newer versions](https://github.com/apiaryio/dredd-hooks-template/releases) of the [dredd-hooks-template package](https://www.npmjs.com/package/dredd-hooks-template) and upgrade regularly to keep up with development of Dredd and the test suite itself. To upgrade, run: @@ -50,60 +48,13 @@ $ npx dredd-hooks-template upgrade It upgrades the package to the latest version and copies the latest feature files to the project's `./features/` directory. It won't overwrite the existing files as the names of the new files get suffixed with version. Then it's up to you to compare the old and new files, spot changes, and update the project's test suite. -### Reference Implementations +## Reference Implementations The [Python hooks](https://github.com/apiaryio/dredd-hooks-python) and the [Ruby hooks](https://github.com/apiaryio/dredd-hooks-ruby) can be used as examples of how to use this cross-language test suite. -### Keep Tests Running with CI +## Keep Tests Running with CI To make sure the hooks handler will always work correctly with Dredd and the expectations won't get accidentally broken, put the tests into [Travis CI](https://travis-ci.org), which runs the tests for each change on your repository. See existing configuration files for inspiration: - Python: [.travis.yml](https://github.com/apiaryio/dredd-hooks-python/blob/master/.travis.yml) - Ruby: [.travis.yml](https://github.com/apiaryio/dredd-hooks-ruby/blob/master/.travis.yml) - -## Development - -Clone the repository and install dependencies: - -``` -$ git clone "https://github.com/apiaryio/dredd-hooks-template.git" -$ cd ./dredd-hooks-template -$ npm install -``` - -### Smoke Test - -There is a [smoke test](https://en.wikipedia.org/wiki/Smoke_testing_(software)), which ensures everything works as described in the tutorial above. It uses the [Python hooks handler](https://github.com/apiaryio/dredd-hooks-python) as the reference implementation, so have it installed: - -``` -$ pip install dredd_hooks -``` - -Then you can run the smoke test: - -``` -$ npm test -``` - -### Feature Files Linter - -The feature files syntax is validated automatically. To perform the validation locally, use the `lint` script: - -``` -$ npm run lint -``` - -### Introducing Changes - -The test suite uses the [Python hooks](https://github.com/apiaryio/dredd-hooks-python) as a reference implementation. To introduce a change to this test suite, follow these steps: - -1. Implement the new behavior in the Python hooks. -1. Change the feature files living in the Python hooks repo to describe the new behavior. If needed, add a local `steps.js` file implementing missing test steps. -1. Make sure the Python hooks pass that changed test suite. -1. Release a new version of the Python hooks. -1. Generalize the changed (or added) feature files with placeholders, comment-out the code examples, and copy the files over to this repository. Add missing test steps implementations to the `steps.js`. Create a Pull Request. -1. Make sure the smoke test passes under the Pull Request. -1. Merge the Pull Request and let Semantic Release to produce a new version of the test suite package. -1. Go to Python hooks repository and [upgrade](#upgrading) the test suite package there. Remove any local `steps.js` as the necessary steps should already be implemented in the new version of the test suite package. -1. Go to Ruby hooks repository and [upgrade](#upgrading) the test suite package there. -1. Go to all remaining repositories with hooks handlers and issue Pull Requests for the maintainers which help them to kick-off the upgrade. It's okay if they're incomplete, their purpose is to advertise the changes, to initiate the upgrade, and to be helpful to the maintainers. From fa1e3da1cf1484287030a19319999d4ee0d94878 Mon Sep 17 00:00:00 2001 From: Honza Javorek Date: Fri, 17 May 2019 16:46:02 +0200 Subject: [PATCH 5/5] docs: fix links --- CONTRIBUTING.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7982bbd..2367d69 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -41,6 +41,6 @@ The test suite uses the [Python hooks](https://github.com/apiaryio/dredd-hooks-p 1. Generalize the changed (or added) feature files with placeholders, comment-out the code examples, and copy the files over to this repository. Add missing test steps implementations to the `steps.js`. Create a Pull Request. 1. Make sure the smoke test passes under the Pull Request. 1. Merge the Pull Request and let Semantic Release to produce a new version of the test suite package. -1. Go to Python hooks repository and [upgrade](#upgrading) the test suite package there. Remove any local `steps.js` as the necessary steps should already be implemented in the new version of the test suite package. -1. Go to Ruby hooks repository and [upgrade](#upgrading) the test suite package there. +1. Go to Python hooks repository and [upgrade](README.md#upgrading) the test suite package there. Remove any local `steps.js` as the necessary steps should already be implemented in the new version of the test suite package. +1. Go to Ruby hooks repository and [upgrade](README.md#upgrading) the test suite package there. 1. Go to all remaining repositories with hooks handlers and issue Pull Requests for the maintainers which help them to kick-off the upgrade. It's okay if they're incomplete, their purpose is to advertise the changes, to initiate the upgrade, and to be helpful to the maintainers.