From b5dd6135e0a70899cf627aa8bf71ead5b8d150ea Mon Sep 17 00:00:00 2001 From: Charlike Mike Reagent Date: Thu, 8 Nov 2018 16:21:35 +0200 Subject: [PATCH 01/21] major: complete rewrite from scratch Signed-off-by: Charlike Mike Reagent --- .all-contributorsrc | 27 + .babelrc | 32 - .circleci/config.yml | 32 +- .editorconfig | 2 +- .eslintignore | 94 +- .eslintrc.js | 3 + .flowconfig | 13 + .gitignore | 66 +- .nycrc.json | 3 + .prettierrc.js | 3 + .verb.md | 427 +- CODE_OF_CONDUCT.md | 4 +- CONTRIBUTING.md | 4 +- LICENSE | 2 +- README.md | 533 +- babel-register-ts.js | 4 - index.js | 18 + package.json | 131 +- shrinkwrap.yaml | 7357 ----------------- src/commit.js | 94 + src/header.js | 98 + src/index.js | 154 + src/index.ts | 14 - src/lib/increment.ts | 31 - src/lib/mentions.ts | 14 - src/lib/parse.ts | 63 - src/main.js | 95 + src/plugins/increment.js | 38 + src/plugins/index.js | 4 + src/plugins/mentions.js | 24 + src/types/index.ts | 23 - src/types/modules.d.ts | 1 - src/utils.js | 30 + test/commit.test.js | 14 + test/header.test.js | 14 + test/index.ts | 144 - test/main.test.js | 24 + test/modules.d.ts | 1 - test/plugins/increment.test.js | 6 + test/plugins/mentions.test.js | 6 + .../snapshots/increment.test.snapshot.json | 1 + .../snapshots/mentions.test.snapshot.json | 1 + test/snapshots/commit.test.snapshot.json | 1 + test/snapshots/index.snapshot.json | 1 - test/snapshots/main.test.snapshot.json | 1 + test/utils.test.js | 11 + tsconfig.json | 27 - yarn.lock | 2531 ++++++ 48 files changed, 4167 insertions(+), 8054 deletions(-) create mode 100644 .all-contributorsrc delete mode 100644 .babelrc create mode 100644 .eslintrc.js create mode 100644 .flowconfig create mode 100644 .nycrc.json create mode 100644 .prettierrc.js delete mode 100644 babel-register-ts.js create mode 100644 index.js delete mode 100644 shrinkwrap.yaml create mode 100644 src/commit.js create mode 100644 src/header.js create mode 100644 src/index.js delete mode 100644 src/index.ts delete mode 100644 src/lib/increment.ts delete mode 100644 src/lib/mentions.ts delete mode 100644 src/lib/parse.ts create mode 100644 src/main.js create mode 100644 src/plugins/increment.js create mode 100644 src/plugins/index.js create mode 100644 src/plugins/mentions.js delete mode 100644 src/types/index.ts delete mode 100644 src/types/modules.d.ts create mode 100644 src/utils.js create mode 100644 test/commit.test.js create mode 100644 test/header.test.js delete mode 100644 test/index.ts create mode 100644 test/main.test.js delete mode 100644 test/modules.d.ts create mode 100644 test/plugins/increment.test.js create mode 100644 test/plugins/mentions.test.js create mode 100644 test/plugins/snapshots/increment.test.snapshot.json create mode 100644 test/plugins/snapshots/mentions.test.snapshot.json create mode 100644 test/snapshots/commit.test.snapshot.json delete mode 100644 test/snapshots/index.snapshot.json create mode 100644 test/snapshots/main.test.snapshot.json create mode 100644 test/utils.test.js delete mode 100644 tsconfig.json create mode 100644 yarn.lock diff --git a/.all-contributorsrc b/.all-contributorsrc new file mode 100644 index 0000000..9969319 --- /dev/null +++ b/.all-contributorsrc @@ -0,0 +1,27 @@ +{ + "projectName": "parse-commit-message", + "projectOwner": "tunnckoCoreLabs", + "repoType": "github", + "repoHost": "https://github.com", + "files": [ + "README.md" + ], + "imageSize": 120, + "commit": false, + "contributorsPerLine": 6, + "contributors": [ + { + "login": "tunnckoCore", + "name": "Charlike Mike Reagent", + "avatar_url": "https://avatars3.githubusercontent.com/u/5038030?v=4", + "profile": "https://tunnckocore.com", + "contributions": [ + "code", + "doc", + "question", + "review", + "fundingFinding" + ] + } + ] +} diff --git a/.babelrc b/.babelrc deleted file mode 100644 index 3218407..0000000 --- a/.babelrc +++ /dev/null @@ -1,32 +0,0 @@ -{ - "env": { - "v7": { - "presets": [ - "@babel/preset-typescript", - "@babel/preset-stage-3", - [ - "@babel/preset-env", - { - "targets": { - "node": "8.9" - } - } - ] - ] - }, - "v6": { - "presets": [ - "flow", - "stage-3", - [ - "env", - { - "targets": { - "node": "8.9" - } - } - ] - ] - } - } -} diff --git a/.circleci/config.yml b/.circleci/config.yml index 912ff73..5d6c8db 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -26,9 +26,9 @@ node10linux: &node10linux restore_modules_cache: &restore_modules_cache restore_cache: keys: - - parse-commit-message-{{ checksum "shrinkwrap.yaml" }} - # fallback to using the latest cache if no exact match is found - - parse-commit-message- + - parse-commit-message-{{ checksum "yarn.lock" }} + # fallback to using the latest cache if no exact match is found + - parse-commit-message- # jobinstall: &jobinstall # steps: @@ -41,7 +41,7 @@ restore_modules_cache: &restore_modules_cache # name: Installing project dependencies # command: pnpm run inst # - save_cache: -# key: parse-commit-message-{{ checksum "shrinkwrap.yaml" }} +# key: parse-commit-message-{{ checksum "yarn.lock" }} # paths: node_modules # - run: # name: Remove node_modules to cleanup workspace @@ -51,23 +51,19 @@ jobtest: &jobtest steps: - checkout - *restore_modules_cache - - run: - name: Installing PNPM package manager - command: npm i --no-save pnpm - run: name: Installing project dependencies - command: npm run inst + command: yarn install --prefer-offline || yarn install - run: - name: Testing your project - command: npm test + name: Linting and testing your project + command: yarn global add nyc@latest && yarn run lint && yarn test - save_cache: - key: parse-commit-message-{{ checksum "shrinkwrap.yaml" }} + key: parse-commit-message-{{ checksum "yarn.lock" }} paths: node_modules - run: name: Sending test coverage to CodeCov command: bash <(curl -s https://codecov.io/bash) - jobs: # install-node8linux: # <<: *node8linux @@ -78,8 +74,8 @@ jobs: <<: *jobtest # install-node10linux: - # <<: *node10linux - # <<: *jobinstall + # <<: *node10linux + # <<: *jobinstall test-node10linux: <<: *node10linux @@ -101,17 +97,17 @@ jobs: # <<: *node10osx # <<: *jobtest - release: + publish: <<: *node10linux steps: - checkout - *restore_modules_cache - run: name: Bundling your awesome project - command: npm run build + command: yarn run build || echo "No build step." - run: name: Releasing and publishing - command: npm run release + command: yarn run release || (yarn global add @tunnckocore/release-cli && yarn run release) workflows: version: 2 @@ -141,7 +137,7 @@ workflows: # Release and NPM publish # Executed only on master - - release: + - publish: requires: # - test-node8osx # - test-node10osx diff --git a/.editorconfig b/.editorconfig index bddd96d..90576db 100644 --- a/.editorconfig +++ b/.editorconfig @@ -9,4 +9,4 @@ trim_trailing_whitespace = true insert_final_newline = true [*.md] -trim_trailing_whitespace = false +trim_trailing_whitespace = false \ No newline at end of file diff --git a/.eslintignore b/.eslintignore index 16fbdc8..5d2699a 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,8 +1,92 @@ -node_modules +dist +parse-commit-message + +# Lockfiles. We use Yarn (https://yarnpkg.com/) +package-lock.json +npm-shrinkwrap.json +shrinkwrap.yaml + +# Archives and packages # +# ########## +*.7z +*.dmg +*.iso +*.jar +*.rar +*.tar +*.zip + +# node-waf configuration +.lock-wscript + +# OS, Logs and databases # +# ######################### +logs +*.log +*.log* +*.dat +*.sql +*.sqlite +*~ +~* +.DS_Store* + +# dotenv environment variables file +.env +.pem +*.pem + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul coverage + +# nyc test coverage .nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache .eslintcache -.cache -dist -parse-commit-message -*.d.ts + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + +# next.js build output +.next diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..796bc1f --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('@tunnckocore/config/eslint'); diff --git a/.flowconfig b/.flowconfig new file mode 100644 index 0000000..b01ca13 --- /dev/null +++ b/.flowconfig @@ -0,0 +1,13 @@ +[ignore] +.*/node_modules +.*/dist + +[include] + +[libs] + +[lints] + +[options] + +[strict] diff --git a/.gitignore b/.gitignore index 4130a7b..5d2699a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,17 +1,12 @@ -node_modules -coverage -.nyc_output -.eslintcache -.cache dist parse-commit-message -# Ignore lockfiles, we use PNPM's shrinkwrap.yaml lockfile -yarn.lock +# Lockfiles. We use Yarn (https://yarnpkg.com/) package-lock.json npm-shrinkwrap.json +shrinkwrap.yaml -# Packages # +# Archives and packages # # ########## *.7z *.dmg @@ -40,3 +35,58 @@ logs .env .pem *.pem + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + +# next.js build output +.next diff --git a/.nycrc.json b/.nycrc.json new file mode 100644 index 0000000..c0168b2 --- /dev/null +++ b/.nycrc.json @@ -0,0 +1,3 @@ +{ + "extends": "./node_modules/@tunnckocore/config/nyc.json" +} diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 0000000..2af89e1 --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('@tunnckocore/config/prettier'); diff --git a/.verb.md b/.verb.md index af82a35..95833b3 100644 --- a/.verb.md +++ b/.verb.md @@ -1,19 +1,12 @@ # {%= name %} [![npm version][npmv-img]][npmv-url] [![github release][ghrelease-img]][ghrelease-url] [![License][license-img]][license-url] - - > {%= description %} +Please consider following this project's author, [Charlike Mike Reagent](https://github.com/tunnckoCore), and :star: the project to show your :heart: and support. +
-[![XAXA code style][codestyle-img]][codestyle-url] +[![Code style][codestyle-img]][codestyle-url] [![CircleCI linux build][linuxbuild-img]][linuxbuild-url] [![CodeCov coverage status][codecoverage-img]][codecoverage-url] [![DavidDM dependency status][dependencies-img]][dependencies-url] @@ -22,30 +15,36 @@ [![Semantically Released][new-release-img]][new-release-url] If you have any _how-to_ kind of questions, please read the [Contributing Guide](./CONTRIBUTING.md) and [Code of Conduct](./CODE_OF_CONDUCT.md) documents. -For bugs reports and feature requests, [please create an issue][open-issue-url] or ping [@tunnckoCore](https://twitter.com/tunnckoCore) at Twitter. +For bugs reports and feature requests, [please create an issue][open-issue-url] or ping +[@tunnckoCore](https://twitter.com/tunnckoCore) at Twitter. +[![Become a Patron][patreon-img]][patreon-url] [![Conventional Commits][ccommits-img]][ccommits-url] -[![PayPal Author Support][paypal-donate-img]][paypal-donate-url] -[![Share Love Tweet][shareb]][shareu] [![NPM Downloads Weekly][downloads-weekly-img]][npmv-url] [![NPM Downloads Monthly][downloads-monthly-img]][npmv-url] [![NPM Downloads Total][downloads-total-img]][npmv-url] +[![Share Love Tweet][shareb]][shareu] -Project is [semantically](https://semver.org) & automatically released on [CircleCI][codecoverage-url] with [new-release][] and its [New Release](https://github.com/apps/new-release) GitHub App. +Project is [semantically](https://semver.org) & automatically released on [CircleCI](https://circleci.com) with [new-release][] and its [New Release](https://github.com/apps/new-release) GitHub App. -## Highlights + ## Table of Contents + ## Install -This project requires [**Node.js**](https://nodejs.org) **{%= engines.node %}**. Install it using [**yarn**](https://yarnpkg.com) or [**npm**](https://npmjs.com). + +This project requires [**Node.js**](https://nodejs.org) **{%= engines.node %}**. Install it using +[**yarn**](https://yarnpkg.com) or [**npm**](https://npmjs.com). _We highly recommend to use Yarn when you think to contribute to this project._ ```bash @@ -53,68 +52,380 @@ $ yarn add {%= name %} ``` ## API -{%= apidocs('src/index.js') %} + + +_Generated using [docks](http://npm.im/docks)._ + +### [src/commit.js](/src/commit.js) + +#### [.parseCommit](/src/commit.js#L18) +Receives a full commit message `string` and parses it into an `Commit` object +and returns it. + +_The `parse*` methods are not doing checking and validation, +so you may want to pass the result to `validateCommit` or `checkCommit`, +or to `validateCommit` with `ret` option set to `true`._ + +**Params** +- `commit` **{string}** a message like `'fix(foo): bar baz\n\nSome awesome body!'` + +**Returns** +- `Commit` a standard object like `{ header: HeaderObject, body, footer }` + +#### [.stringifyCommit](/src/commit.js#L36) +Receives a `Commit` object, validates it using `validateCommit`, +builds a "commit" string and returns it. + +**Params** +- `header` **{Commit}** a `Commit` object like `{ header: HeaderObject, body, footer }` + +**Returns** +- `string` a commit nessage stirng like `'fix(foo): bar baz'` + +#### [.validateCommit](/src/commit.js#L58) +Validates given `Commit` object and returns `boolean`. +You may want to set `ret` to `true` return an object instead of throwing. + +**Params** +- `header` **{Commit}** a `Commit` like `{ header: HeaderObject, body, footer }` +- `[ret]` **{boolean}** to return result instead of throwing, default `false` + +**Returns** +- `undefined` if `ret` is `true` then returns `{ value, error }` object, + where `value` is `Commit` and `error` a standard `Error` + +#### [.checkCommit](/src/commit.js#L70) +Receives a `Commit` and checks if it is valid. + +**Params** +- `header` **{Commit}** a `Commit` like `{ type, scope?, subject }` + +**Returns** +- `Commit` returns the same as given if no problems, otherwise it will throw. + +### [src/header.js](/src/header.js) + +#### [.parseHeader](/src/header.js#L16) +Parses given `header` string into an header object. + +_The `parse*` methods are not doing checking and validation, +so you may want to pass the result to `validateHeader` or `checkHeader`, +or to `validateHeader` with `ret` option set to `true`._ + +**Params** +- `header` **{string}** a header stirng like `'fix(foo): bar baz'` + +**Returns** +- `HeaderObject` a `HeaderObject` like `{ type, scope?, subject }` + +#### [.stringifyHeader](/src/header.js#L47) +Receives a `header` object, validates it using `validateHeader`, +builds a "header" string and returns it. + +**Params** +- `header` **{HeaderObject}** a `HeaderObject` like `{ type, scope?, subject }` + +**Returns** +- `string` a header stirng like `'fix(foo): bar baz'` + +#### [.validateHeader](/src/header.js#L68) +Validates given `header` object and returns `boolean`. +You may want to pass `ret` to return an object instead of throwing. + +**Params** +- `header` **{HeaderObject}** a `HeaderObject` like `{ type, scope?, subject }` +- `[ret]` **{boolean}** to return result instead of throwing, default `false` + +**Returns** +- `undefined` if `ret` is `true` then returns `{ value, error }` object, + where `value` is `HeaderObject` and `error` a standard `Error` + +#### [.checkHeader](/src/header.js#L80) +Receives a `HeaderObject` and checks if it is valid. + +**Params** +- `header` **{HeaderObject}** a `HeaderObject` like `{ type, scope?, subject }` + +**Returns** +- `HeaderObject` returns the same as given if no problems, otherwise it will throw. + +### [src/index.js](/src/index.js) + +#### [.applyPlugins](/src/index.js#L35) +Apply a set of `plugins` over all of the given `commits`. +A plugin is a simple function passed with `Commit` object, +which may be returned to modify and set additional properties +to the `Commit` object. + +_The `commits` should be coming from `parse`, `validate` (with `ret` option) +or the `check` methods._ + +**Params** +- `plugins` **{Array<Function>}** a simple function like `(commit) => {}` +- `commits` **{object|array}** a value which should already be gone through `parse` + +**Returns** +- `Array` plus the modified or added properties from each function in `plugins` + +#### [.plugins](/src/index.js#L103) +An array which includes `mentions` and `increment` built-in plugins. +The `mentions` is an array of objects. Basically what's returned from +the [collect-mentions][] package. + +**Examples** +```javascript +import { plugins, applyPlugins, parse } from 'parse-commit-message'; + +console.log(plugins); // => [mentions, increment] +console.log(plugins[0]); // => [Function mentions] +console.log(plugins[0]); // => [Function increment] + +const cmts = parse([ + 'fix: foo @bar @qux haha', + 'feat(cli): awesome @tunnckoCore feature\n\nSuper duper baz!' + 'fix: ooh\n\nBREAKING CHANGE: some awful api change' +]); + +const commits = applyPlugins(plugins, cmts); +console.log(commits); +// => [ +// { +// header: { type: 'fix', scope: '', subject: 'foo bar baz' }, +// body: '', +// footer: '', +// increment: 'patch', +// isBreaking: false, +// mentions: [ +// { handle: '@bar', mention: 'bar', index: 8 }, +// { handle: '@qux', mention: 'qux', index: 13 }, +// ] +// }, +// { +// header: { type: 'feat', scope: 'cli', subject: 'awesome feature' }, +// body: 'Super duper baz!', +// footer: '', +// increment: 'minor', +// isBreaking: false, +// mentions: [ +// { handle: '@tunnckoCore', mention: 'tunnckoCore', index: 18 }, +// ] +// }, +// { +// header: { type: 'fix', scope: '', subject: 'ooh' }, +// body: 'BREAKING CHANGE: some awful api change', +// footer: '', +// increment: 'major', +// isBreaking: true, +// mentions: [], +// }, +// ] +``` + +#### [.mappers](/src/index.js#L136) +An object (named set) which includes `mentions` and `increment` built-in plugins. + +**Examples** +```javascript +import { mappers, applyPlugins, parse } from 'parse-commit-message'; + +console.log(mappers); // => { mentions, increment } +console.log(mappers.mentions); // => [Function mentions] +console.log(mappers.increment); // => [Function increment] + +const flat = true; +const parsed = parse('fix: bar', flat); +console.log(parsed); +// => { +// header: { type: 'feat', scope: 'cli', subject: 'awesome feature' }, +// body: 'Super duper baz!', +// footer: '', +// } + +const commit = applyPlugins([mappers.increment], parsed); +console.log(commit) +// => [{ +// header: { type: 'feat', scope: 'cli', subject: 'awesome feature' }, +// body: 'Super duper baz!', +// footer: '', +// increment: 'patch', +// }] +``` + +### [src/main.js](/src/main.js) + +#### [.parse](/src/main.js#L18) +Receives and parses a single or multiple commit message(s) in form of string, +object, array of strings, array of objects or mixed. + +_The `parse*` methods are not doing checking and validation, +so you may want to pass the result to `validate` or `check`, +or to `validate` with `ret` option set to `true`._ + +**Params** +- `commits` **{string|object|array}** a value to be parsed into an object like `Commit` type +- `[flat]` **{boolean}** if the returned result length is 1, then returns the first item + +**Returns** +- `Array` if `flat` is true, returns a `Commit` + +#### [.stringify](/src/main.js#L43) +Receives a `Commit` object, validates it using `validate`, +builds a "commit" message string and returns it. + +**Params** +- `commit` **{Commit}** a `Commit` object + +**Returns** +- `string` a commit stirng like `'fix(foo): bar baz'` + +#### [.validate](/src/main.js#L68) +Validates a single or multiple commit message(s) in form of string, +object, array of strings, array of objects or mixed. +You may want to pass `ret` to return an object instead of throwing. + +**Params** +- `commits` **{string|object|array}** a value to be parsed & validated into an object like `Commit` type +- `[ret]` **{boolean}** to return result instead of throwing, default `false` + +**Returns** +- `undefined` if `ret` is `true` then returns `{ value, error }` object, + where `value` is `Commit|Commit[]` and `error` a standard `Error` + +#### [.check](/src/main.js#L83) +Receives a single or multiple commit message(s) in form of string, +object, array of strings, array of objects or mixed. + +**Params** +- `commits` **{string|object|array}** a value to be parsed & validated into an object like `Commit` type +- `[flat]` **{boolean}** if the returned result length is 1, then returns the first item + +**Returns** +- `Array` returns the same as given if no problems, otherwise it will throw; + if `flat: true`, returns a `Commit` + +### [src/plugins/increment.js](/src/plugins/increment.js) + +#### [increment](/src/plugins/increment.js#L13) +A plugin that adds `increment` and `isBreaking` properties +to the `commit`. It is already included in the `plugins` named export, +and in `mappers` named export. + +_See the [.plugins](#plugins) and [.mappers](#mappers) examples._ + +**Params** +- `commit` **{Commit}** a standard `Commit` object + +**Returns** +- `Commit` plus `{ increment: string, isBreaking: boolean }` + +### [src/plugins/mentions.js](/src/plugins/mentions.js) + +#### [mentions](/src/plugins/mentions.js#L17) +A plugin that adds `mentions` array property to the `commit`. +It is already included in the `plugins` named export, +and in `mappers` named export. +Basically each entry in that array is an object, +directly returned from the [collect-mentions][]. + +_See the [.plugins](#plugins) and [.mappers](#mappers) examples._ + +**Params** +- `commit` **{Commit}** a standard `Commit` object + +**Returns** +- `Commit` plus `{ mentions: Array }` + + **[back to top](#thetop)** {% if (verb.related && verb.related.list && verb.related.list.length) { %} -## Related Projects -Some of these projects are used here or were inspiration for this one, others are just related. So, thanks for your existance! -{%= related(verb.related.list, { words: 11 }) %} +## See Also + +Some of these projects are used here or were inspiration for this one, others are just related. So, thanks for your +existance! +{%= related(verb.related.list, { words: 12 }) %} **[back to top](#thetop)** {% } %} ## Contributing + +### Follow the Guidelines + Please read the [Contributing Guide](./CONTRIBUTING.md) and [Code of Conduct](./CODE_OF_CONDUCT.md) documents for advices. -For bugs reports and feature requests, [please create an issue][open-issue-url] or ping [@tunnckoCore](https://twitter.com/tunnckoCore) at Twitter. +For bugs reports and feature requests, [please create an issue][open-issue-url] or ping +[@tunnckoCore](https://twitter.com/tunnckoCore) at Twitter. -## Contributors -Thanks to the hard work of [these wonderful people](./CONTRIBUTORS.md) this project is alive and it also follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification. -[Pull requests](https://github.com/tunnckoCore/contributing#opening-a-pull-request), stars and all kind of [contributions](https://opensource.guide/how-to-contribute/#what-it-means-to-contribute) are always welcome. :stars: +### Support the project -## Users -You can see who uses `{%= name %}` in the [USERS.md](./USERS.md) file. Please feel free adding this file if it not exists. -If you or your organization are using this project, consider adding yourself to the list of users. -**Thank You!** :heart: +[Become a Partner or Sponsor?][patreon-url] :dollar: Check the **Partner**, **Sponsor** or **Omega-level** tiers! :tada: You can get your company logo, link & name on this file. It's also rendered on package page in [npmjs.com][npmv-url] and [yarnpkg.com](https://yarnpkg.com/en/package/{%= name %}) sites too! :rocket: -## License -Copyright (c) {%= licenseStart %}-present, [Charlike Mike Reagent][author-link] ``. -Released under the [{%= license %} License][license-url]. +Not financial support? Okey! [Pull requests](https://github.com/tunnckoCoreLabs/contributing#opening-a-pull-request), stars and all kind of [contributions](https://opensource.guide/how-to-contribute/#what-it-means-to-contribute) are always +welcome. :sparkles: + +### OPEN Open Source + +This project is following [OPEN Open Source](http://openopensource.org) model + +> Individuals making significant and valuable contributions are given commit-access to the project to contribute as they see fit. This project is built on collective efforts and it's not strongly guarded by its founders. + +There are a few basic ground-rules for its contributors + +1. Any **significant modifications** must be subject to a pull request to get feedback from other contributors. +2. [Pull requests](https://github.com/tunnckoCoreLabs/contributing#opening-a-pull-request) to get feedback are _encouraged_ for any other trivial contributions, but are not required. +3. Contributors should attempt to adhere to the prevailing code-style and development workflow. ---- +### Wonderful Contributors -{%= include('footer') %} +Thanks to the hard work of these wonderful people this project is alive! It follows the +[all-contributors](https://github.com/kentcdodds/all-contributors) specification. +Don't hesitate to add yourself to that list if you have made any contribution! ;) [See how, +here](https://github.com/jfmengels/all-contributors-cli#usage). + + + +| [
Charlike Mike Reagent](https://tunnckocore.com)
[💻](https://github.com/tunnckoCoreLabs/parse-commit-message/commits?author=tunnckoCore "Code") [📖](https://github.com/tunnckoCoreLabs/parse-commit-message/commits?author=tunnckoCore "Documentation") [💬](#question-tunnckoCore "Answering Questions") [👀](#review-tunnckoCore "Reviewed Pull Requests") [🔍](#fundingFinding-tunnckoCore "Funding Finding") | +| :---: | + + + +Consider showing your [support](#support-the-project) to them. :sparkling_heart: + +## License + +Copyright (c) 2018-present, [Charlike Mike Reagent](https://tunnckocore.com) `` & [contributors](#wonderful-contributors). +Released under the [Apache-2.0 License][license-url]. + [npmv-url]: https://www.npmjs.com/package/{%= name %} -[npmv-img]: https://badgen.net/npm/v/{%= name %}?label=npm%20version +[npmv-img]: https://badgen.net/npm/v/{%= name %}?icon=npm -[ghrelease-url]: https://github.com/{%= repository %}/releases/latest -[ghrelease-img]: https://badgen.net/github/release/{%= repository %}?label=github%20release +[ghrelease-url]: https://github.com/tunnckoCoreLabs/parse-commit-message/releases/latest +[ghrelease-img]: https://badgen.net/github/release/tunnckoCoreLabs/parse-commit-message?icon=github -[license-url]: https://github.com/{%= repository %}/blob/master/LICENSE +[license-url]: https://github.com/tunnckoCoreLabs/parse-commit-message/blob/master/LICENSE [license-img]: https://badgen.net/npm/license/{%= name %} -[codestyle-url]: https://github.com/olstenlarck/xaxa -[codestyle-img]: https://badgen.net/badge/code%20style/xaxa/green +[codestyle-url]: https://github.com/airbnb/javascript +[codestyle-img]: https://badgen.net/badge/code%20style/airbnb/ff5a5f?icon=airbnb -[linuxbuild-url]: https://circleci.com/gh/{%= repository %}/tree/master -[linuxbuild-img]: https://badgen.net/circleci/github/{%= repository %}/master +[linuxbuild-url]: https://circleci.com/gh/tunnckoCoreLabs/parse-commit-message/tree/master +[linuxbuild-img]: https://badgen.net/circleci/github/tunnckoCoreLabs/parse-commit-message/master?label=build&icon=circleci -[codecoverage-url]: https://codecov.io/gh/{%= repository %} -[codecoverage-img]: https://codecov.io/gh/{%= repository %}/branch/master/graph/badge.svg +[codecoverage-url]: https://codecov.io/gh/tunnckoCoreLabs/parse-commit-message +[codecoverage-img]: https://badgen.net/codecov/c/github/tunnckoCoreLabs/parse-commit-message?icon=codecov -[dependencies-url]: https://david-dm.org/{%= repository %} -[dependencies-img]: https://badgen.net/david/dep/{%= repository %} +[dependencies-url]: https://david-dm.org/tunnckoCoreLabs/parse-commit-message +[dependencies-img]: https://badgen.net/david/dep/tunnckoCoreLabs/parse-commit-message?label=deps [ccommits-url]: https://conventionalcommits.org/ [ccommits-img]: https://badgen.net/badge/conventional%20commits/v1.0.0/dfb317 - -[new-release-url]: https://github.com/tunnckoCore/new-release +[new-release-url]: https://ghub.io/new-release [new-release-img]: https://badgen.net/badge/semantically/released/05c5ff [downloads-weekly-img]: https://badgen.net/npm/dw/{%= name %} @@ -123,14 +434,14 @@ Released under the [{%= license %} License][license-url]. [renovateapp-url]: https://renovatebot.com [renovateapp-img]: https://badgen.net/badge/renovate/enabled/green - [prs-welcome-img]: https://badgen.net/badge/PRs/welcome/green [prs-welcome-url]: http://makeapullrequest.com - [paypal-donate-url]: https://paypal.me/tunnckoCore/10 [paypal-donate-img]: https://badgen.net/badge/$/support/purple +[patreon-url]: https://www.patreon.com/bePatron?u=5579781 +[patreon-img]: https://badgen.net/badge/patreon/tunnckoCore/F96854?icon=patreon +[patreon-sponsor-img]: https://badgen.net/badge/become/a%20sponsor/F96854?icon=patreon -[shareu]: https://twitter.com/intent/tweet?text=https://github.com/{%= repository %}&via=tunnckoCore -[shareb]: https://badgen.net/badge/twitter/share/1da1f2 -[open-issue-url]: https://github.com/{%= repository %}/issues/new -[author-link]: https://i.am.charlike.online +[shareu]: https://twitter.com/intent/tweet?text=https://github.com/tunnckoCoreLabs/parse-commit-message&via=tunnckoCore +[shareb]: https://badgen.net/badge/twitter/share/1da1f2?icon=twitter +[open-issue-url]: https://github.com/tunnckoCoreLabs/parse-commit-message/issues/new diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 14c906a..2e5caef 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -55,7 +55,7 @@ further defined and clarified by project maintainers. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the project team at `olsten.larck@gmail.com` mail address. All +reported by contacting the project team at `mameto2011@gmail.com` mail address. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. @@ -71,4 +71,4 @@ This Code of Conduct is adapted from the [Contributor Covenant][homepage], versi available at [http://contributor-covenant.org/version/1/4][version] [homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ \ No newline at end of file +[version]: http://contributor-covenant.org/version/1/4/ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 35a550a..fab5d22 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,7 +1,7 @@ # Contributing Guide :100: > _Hello stranger! :sparkles: Please, read the [Code Of Conduct](./CODE_OF_CONDUCT.md) and the full guide at -> [tunnckoCore/contributing](https://github.com/tunnckoCore/contributing)! +> [tunnckoCore/contributing](https://github.com/tunnckoCoreLabs/contributing)! > Even if you are an experienced developer or active open source maintainer, it worth look over there._ ![welcome-teal](https://cloud.githubusercontent.com/assets/194400/22215755/76cb4dbc-e194-11e6-95ed-7def95e68f14.png) @@ -25,4 +25,4 @@ overlooked. You’ll do the project a _huge favor_ by offering to pitch in with **Even if you like to write code**, other types of contributions are a great way to get involved with a project and meet other community members. Building those relationships will give you opportunities to work on -other parts of the project. \ No newline at end of file +other parts of the project. diff --git a/LICENSE b/LICENSE index 8535252..22bf1ba 100644 --- a/LICENSE +++ b/LICENSE @@ -186,7 +186,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright (c) 2017-present, Charlike Mike Reagent (https://i.am.charlike.online) + Copyright (c) 2018-present, Charlike Mike Reagent & contributors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/README.md b/README.md index 98ec825..146f294 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,12 @@ # parse-commit-message [![npm version][npmv-img]][npmv-url] [![github release][ghrelease-img]][ghrelease-url] [![License][license-img]][license-url] - +> Extensible parser for git commit messages following Conventional Commits Specification -> An extensible parser for commit message that follows Conventional Commits v1 spec +Please consider following this project's author, [Charlike Mike Reagent](https://github.com/tunnckoCore), and :star: the project to show your :heart: and support.
-[![XAXA code style][codestyle-img]][codestyle-url] +[![Code style][codestyle-img]][codestyle-url] [![CircleCI linux build][linuxbuild-img]][linuxbuild-url] [![CodeCov coverage status][codecoverage-img]][codecoverage-url] [![DavidDM dependency status][dependencies-img]][dependencies-url] @@ -22,39 +15,69 @@ [![Semantically Released][new-release-img]][new-release-url] If you have any _how-to_ kind of questions, please read the [Contributing Guide](./CONTRIBUTING.md) and [Code of Conduct](./CODE_OF_CONDUCT.md) documents. -For bugs reports and feature requests, [please create an issue][open-issue-url] or ping [@tunnckoCore](https://twitter.com/tunnckoCore) at Twitter. +For bugs reports and feature requests, [please create an issue][open-issue-url] or ping +[@tunnckoCore](https://twitter.com/tunnckoCore) at Twitter. +[![Become a Patron][patreon-img]][patreon-url] [![Conventional Commits][ccommits-img]][ccommits-url] -[![PayPal Author Support][paypal-donate-img]][paypal-donate-url] -[![Share Love Tweet][shareb]][shareu] [![NPM Downloads Weekly][downloads-weekly-img]][npmv-url] [![NPM Downloads Monthly][downloads-monthly-img]][npmv-url] [![NPM Downloads Total][downloads-total-img]][npmv-url] +[![Share Love Tweet][shareb]][shareu] -Project is [semantically](https://semver.org) & automatically released on [CircleCI][codecoverage-url] with [new-release][] and its [New Release](https://github.com/apps/new-release) GitHub App. +Project is [semantically](https://semver.org) & automatically released on [CircleCI](https://circleci.com) with [new-release][] and its [New Release](https://github.com/apps/new-release) GitHub App. -## Highlights + ## Table of Contents + - [Install](#install) - [API](#api) - * [.parse](#parse) - * [.mappers](#mappers) - * [.plugins](#plugins) -- [Related Projects](#related-projects) + * [src/commit.js](#srccommitjs) + + [.parseCommit](#parsecommit) + + [.stringifyCommit](#stringifycommit) + + [.validateCommit](#validatecommit) + + [.checkCommit](#checkcommit) + * [src/header.js](#srcheaderjs) + + [.parseHeader](#parseheader) + + [.stringifyHeader](#stringifyheader) + + [.validateHeader](#validateheader) + + [.checkHeader](#checkheader) + * [src/index.js](#srcindexjs) + + [.applyPlugins](#applyplugins) + + [.plugins](#plugins) + + [.mappers](#mappers) + * [src/main.js](#srcmainjs) + + [.parse](#parse) + + [.stringify](#stringify) + + [.validate](#validate) + + [.check](#check) + * [src/plugins/increment.js](#srcpluginsincrementjs) + + [increment](#increment) + * [src/plugins/mentions.js](#srcpluginsmentionsjs) + + [mentions](#mentions) +- [See Also](#see-also) - [Contributing](#contributing) -- [Contributors](#contributors) -- [Users](#users) + * [Follow the Guidelines](#follow-the-guidelines) + * [Support the project](#support-the-project) + * [OPEN Open Source](#open-open-source) + * [Wonderful Contributors](#wonderful-contributors) - [License](#license) +_(TOC generated by [verb](https://github.com/verbose/verb) using [markdown-toc](https://github.com/jonschlinkert/markdown-toc))_ + ## Install -This project requires [**Node.js**](https://nodejs.org) **^6.9.0 || ^8.9.0 || ^10.6.0**. Install it using [**yarn**](https://yarnpkg.com) or [**npm**](https://npmjs.com). + +This project requires [**Node.js**](https://nodejs.org) **^8.11.0 || >=10.13.0**. Install it using +[**yarn**](https://yarnpkg.com) or [**npm**](https://npmjs.com). _We highly recommend to use Yarn when you think to contribute to this project._ ```bash @@ -63,185 +86,384 @@ $ yarn add parse-commit-message ## API -### [.parse](src/index.js#L72) -Parses given `commitMessage` to an object which can be populated with more things if needed, through `plugins`. + +_Generated using [docks](http://npm.im/docks)._ + +### [src/commit.js](/src/commit.js) + +#### [.parseCommit](/src/commit.js#L18) +Receives a full commit message `string` and parses it into an `Commit` object +and returns it. -Plugins are functions like `(commit) => {}` and can return object with additional -properties that will be included in the returned "commit" object. -There are two built-in plugins - `increment` and `mentions` which are exposed -as array at exposed `plugins` named export. -The `commit.header` has also a `toString()` method concatinates -the `header.scope`, `header.type` and `header.subject` properties. +_The `parse*` methods are not doing checking and validation, +so you may want to pass the result to `validateCommit` or `checkCommit`, +or to `validateCommit` with `ret` option set to `true`._ **Params** +- `commit` **{string}** a message like `'fix(foo): bar baz\n\nSome awesome body!'` -* `commitMessage` **{string}**: required, a whole commit message -* `plugins` **{Array}**: optional, a list of functions that are passed with `commit` object -* `returns` **{Object}**: with `{ header: { type, scope, subject }, body, footer }` +**Returns** +- `Commit` a standard object like `{ header: HeaderObject, body, footer }` -**Example** +#### [.stringifyCommit](/src/commit.js#L36) +Receives a `Commit` object, validates it using `validateCommit`, +builds a "commit" string and returns it. -```js -import { parse } from 'parse-commit-message'; +**Params** +- `header` **{Commit}** a `Commit` object like `{ header: HeaderObject, body, footer }` -const commit = parse(`fix(crit): some huge change +**Returns** +- `string` a commit nessage stirng like `'fix(foo): bar baz'` -Some awesome -body here. +#### [.validateCommit](/src/commit.js#L58) +Validates given `Commit` object and returns `boolean`. +You may want to set `ret` to `true` return an object instead of throwing. -resolves #333 -`); +**Params** +- `header` **{Commit}** a `Commit` like `{ header: HeaderObject, body, footer }` +- `[ret]` **{boolean}** to return result instead of throwing, default `false` -console.log(commit) -// => { -// header: { -// type: 'fix', -// scope: 'crit', -// subject: 'some huge change' -// toString: [Function: toString], -// }, -// body: 'Some awesome\nbody here.', -// footer: 'resolves #333', -// } +**Returns** +- `undefined` if `ret` is `true` then returns `{ value, error }` object, + where `value` is `Commit` and `error` a standard `Error` -console.log(commit.header.toString()) -// => 'fix(crit): some huge change' - -// or adding one more plugin to the builtin ones -const customPlugin = (commit) => { - if (commit.header.type === 'fix') { - return { fixed: 'yeah' }; - } - return null; -}; -const commit = parse('fix(wat): foo bar baz', plugins.concat(customPlugin)); - -console.log(commit.isBreaking) // => false -console.log(commit.increment) // => 'patch' -console.log(commit.header); // => { type: 'fix', subject: 'wat', subject: 'foo bar baz' } -console.log(commit.fixed); // => 'yeah' -``` +#### [.checkCommit](/src/commit.js#L70) +Receives a `Commit` and checks if it is valid. -### [.mappers](src/index.js#L228) -An object with all mappers, such as `plugins` array, but named. This objects is like `{ increment, mentions }` where they are plugins that can be passed as second argument to `.parse`. +**Params** +- `header` **{Commit}** a `Commit` like `{ type, scope?, subject }` -1. The `mappers.increment` adds `isBreaking` and `increment` properties -to the final returned "commit" object: -- `isBreaking` is `Boolean` that indicates if commit is containing `BREAKING CHANGE: ` or -the `type` of the commit is `break`, `breaking` or `major` -- `increment` is a `String` that can be `'patch'`, `'minor'` or `'major'` -2. The `mappers.mentions` adds `mentions` property to the end result object -- `mentions` is an array of objects like `{ handle: String, mention: String, index: Number }`, -see [collect-mentions][] +**Returns** +- `Commit` returns the same as given if no problems, otherwise it will throw. -**Example** +### [src/header.js](/src/header.js) -```js -import { parse, mappers } from 'parse-commit-message'; +#### [.parseHeader](/src/header.js#L16) +Parses given `header` string into an header object. -const commit = parse('fix: BREAKING CHANGE: huge refactor', mappers.increment); +_The `parse*` methods are not doing checking and validation, +so you may want to pass the result to `validateHeader` or `checkHeader`, +or to `validateHeader` with `ret` option set to `true`._ -console.log(commit); -// => { -// header: { type: 'fix', scope: undefined, subject: 'BREAKING CHANGE: huge refactor' }, -// body: null, -// footer: null, -// isBreaking: true, -// increment: 'major' -// } +**Params** +- `header` **{string}** a header stirng like `'fix(foo): bar baz'` + +**Returns** +- `HeaderObject` a `HeaderObject` like `{ type, scope?, subject }` + +#### [.stringifyHeader](/src/header.js#L47) +Receives a `header` object, validates it using `validateHeader`, +builds a "header" string and returns it. + +**Params** +- `header` **{HeaderObject}** a `HeaderObject` like `{ type, scope?, subject }` + +**Returns** +- `string` a header stirng like `'fix(foo): bar baz'` -const str = `feat(whoa): thanks to @foobie for this +#### [.validateHeader](/src/header.js#L68) +Validates given `header` object and returns `boolean`. +You may want to pass `ret` to return an object instead of throwing. + +**Params** +- `header` **{HeaderObject}** a `HeaderObject` like `{ type, scope?, subject }` +- `[ret]` **{boolean}** to return result instead of throwing, default `false` + +**Returns** +- `undefined` if `ret` is `true` then returns `{ value, error }` object, + where `value` is `HeaderObject` and `error` a standard `Error` + +#### [.checkHeader](/src/header.js#L80) +Receives a `HeaderObject` and checks if it is valid. + +**Params** +- `header` **{HeaderObject}** a `HeaderObject` like `{ type, scope?, subject }` -awesome @zazzy and @quxie make this release to happen +**Returns** +- `HeaderObject` returns the same as given if no problems, otherwise it will throw. -resolves #123 -` -const cmt = parse(str, mappers.mentions); +### [src/index.js](/src/index.js) -console.log(cmt.header.type); // => 'feat' -console.log(cmt.header.scope); // => 'whoa' -console.log(cmt.header.subject); // => 'hanks to @foobie for this' -console.log(cmt.body); // => 'awesome @zazzy and @quxie make this release to happen' -console.log(cmt.footer); // => 'resolves #123' -console.log(cmt.mentions[0]); // => { handle: '@foobie', mention: 'foobie' } -console.log(cmt.mentions[1]); // => { handle: '@zazzy', mention: 'zazzy' } -console.log(cmt.mentions[2]); // => { handle: '@quxie', mention: 'quxie' } +#### [.applyPlugins](/src/index.js#L35) +Apply a set of `plugins` over all of the given `commits`. +A plugin is a simple function passed with `Commit` object, +which may be returned to modify and set additional properties +to the `Commit` object. + +_The `commits` should be coming from `parse`, `validate` (with `ret` option) +or the `check` methods._ + +**Params** +- `plugins` **{Array<Function>}** a simple function like `(commit) => {}` +- `commits` **{object|array}** a value which should already be gone through `parse` + +**Returns** +- `Array` plus the modified or added properties from each function in `plugins` + +#### [.plugins](/src/index.js#L103) +An array which includes `mentions` and `increment` built-in plugins. +The `mentions` is an array of objects. Basically what's returned from +the [collect-mentions][] package. + +**Examples** +```javascript +import { plugins, applyPlugins, parse } from 'parse-commit-message'; + +console.log(plugins); // => [mentions, increment] +console.log(plugins[0]); // => [Function mentions] +console.log(plugins[0]); // => [Function increment] + +const cmts = parse([ + 'fix: foo @bar @qux haha', + 'feat(cli): awesome @tunnckoCore feature\n\nSuper duper baz!' + 'fix: ooh\n\nBREAKING CHANGE: some awful api change' +]); + +const commits = applyPlugins(plugins, cmts); +console.log(commits); +// => [ +// { +// header: { type: 'fix', scope: '', subject: 'foo bar baz' }, +// body: '', +// footer: '', +// increment: 'patch', +// isBreaking: false, +// mentions: [ +// { handle: '@bar', mention: 'bar', index: 8 }, +// { handle: '@qux', mention: 'qux', index: 13 }, +// ] +// }, +// { +// header: { type: 'feat', scope: 'cli', subject: 'awesome feature' }, +// body: 'Super duper baz!', +// footer: '', +// increment: 'minor', +// isBreaking: false, +// mentions: [ +// { handle: '@tunnckoCore', mention: 'tunnckoCore', index: 18 }, +// ] +// }, +// { +// header: { type: 'fix', scope: '', subject: 'ooh' }, +// body: 'BREAKING CHANGE: some awful api change', +// footer: '', +// increment: 'major', +// isBreaking: true, +// mentions: [], +// }, +// ] ``` -### [.plugins](src/index.js#L250) -A list of all plugins, such as `mappers` but no names, so can be passed directly to the `.parse` as second argument. +#### [.mappers](/src/index.js#L136) +An object (named set) which includes `mentions` and `increment` built-in plugins. -**Example** +**Examples** +```javascript +import { mappers, applyPlugins, parse } from 'parse-commit-message'; -```js -import { parse, plugins } from 'parse-commit-message'; +console.log(mappers); // => { mentions, increment } +console.log(mappers.mentions); // => [Function mentions] +console.log(mappers.increment); // => [Function increment] -const commit = parse('fix: okey', plugins) +const flat = true; +const parsed = parse('fix: bar', flat); +console.log(parsed); +// => { +// header: { type: 'feat', scope: 'cli', subject: 'awesome feature' }, +// body: 'Super duper baz!', +// footer: '', +// } + +const commit = applyPlugins([mappers.increment], parsed); console.log(commit) +// => [{ +// header: { type: 'feat', scope: 'cli', subject: 'awesome feature' }, +// body: 'Super duper baz!', +// footer: '', +// increment: 'patch', +// }] ``` +### [src/main.js](/src/main.js) + +#### [.parse](/src/main.js#L18) +Receives and parses a single or multiple commit message(s) in form of string, +object, array of strings, array of objects or mixed. + +_The `parse*` methods are not doing checking and validation, +so you may want to pass the result to `validate` or `check`, +or to `validate` with `ret` option set to `true`._ + +**Params** +- `commits` **{string|object|array}** a value to be parsed into an object like `Commit` type +- `[flat]` **{boolean}** if the returned result length is 1, then returns the first item + +**Returns** +- `Array` if `flat` is true, returns a `Commit` + +#### [.stringify](/src/main.js#L43) +Receives a `Commit` object, validates it using `validate`, +builds a "commit" message string and returns it. + +**Params** +- `commit` **{Commit}** a `Commit` object + +**Returns** +- `string` a commit stirng like `'fix(foo): bar baz'` + +#### [.validate](/src/main.js#L68) +Validates a single or multiple commit message(s) in form of string, +object, array of strings, array of objects or mixed. +You may want to pass `ret` to return an object instead of throwing. + +**Params** +- `commits` **{string|object|array}** a value to be parsed & validated into an object like `Commit` type +- `[ret]` **{boolean}** to return result instead of throwing, default `false` + +**Returns** +- `undefined` if `ret` is `true` then returns `{ value, error }` object, + where `value` is `Commit|Commit[] + +#### [.check](/src/main.js#L83) +Receives a single or multiple commit message(s) in form of string, +object, array of strings, array of objects or mixed. + +**Params** +- `commits` **{string|object|array}** a value to be parsed & validated into an object like `Commit` type +- `[flat]` **{boolean}** if the returned result length is 1, then returns the first item + +**Returns** +- `Array` returns the same as given if no problems, otherwise it will throw; + if `flat: true`, returns a `Commit` + +### [src/plugins/increment.js](/src/plugins/increment.js) + +#### [increment](/src/plugins/increment.js#L13) +A plugin that adds `increment` and `isBreaking` properties +to the `commit`. It is already included in the `plugins` named export, +and in `mappers` named export. + +_See the [.plugins](#plugins) and [.mappers](#mappers) examples._ + +**Params** +- `commit` **{Commit}** a standard `Commit` object + +**Returns** +- `Commit` plus `{ increment: string, isBreaking: boolean }` + +### [src/plugins/mentions.js](/src/plugins/mentions.js) + +#### [mentions](/src/plugins/mentions.js#L17) +A plugin that adds `mentions` array property to the `commit`. +It is already included in the `plugins` named export, +and in `mappers` named export. +Basically each entry in that array is an object, +directly returned from the [collect-mentions][]. + +_See the [.plugins](#plugins) and [.mappers](#mappers) examples._ + +**Params** +- `commit` **{Commit}** a standard `Commit` object + +**Returns** +- `Commit` plus `{ mentions: Array }` + + + **[back to top](#thetop)** -## Related Projects -Some of these projects are used here or were inspiration for this one, others are just related. So, thanks for your existance! +## See Also + +Some of these projects are used here or were inspiration for this one, others are just related. So, thanks for your +existance! +- [@tunnckocore/config](https://www.npmjs.com/package/@tunnckocore/config): All the configs for all the tools, in one place | [homepage](https://github.com/tunnckoCoreLabs/config "All the configs for all the tools, in one place") +- [@tunnckocore/create-project](https://www.npmjs.com/package/@tunnckocore/create-project): Create and scaffold a new project, its GitHub repository and contents | [homepage](https://github.com/tunnckoCoreLabs/create-project "Create and scaffold a new project, its GitHub repository and contents") +- [@tunnckocore/execa](https://www.npmjs.com/package/@tunnckocore/execa): Thin layer on top of [execa][] that allows executing multiple commands in… [more](https://github.com/tunnckoCoreLabs/execa) | [homepage](https://github.com/tunnckoCoreLabs/execa "Thin layer on top of [execa][] that allows executing multiple commands in parallel or in sequence") +- [@tunnckocore/scripts](https://www.npmjs.com/package/@tunnckocore/scripts): Universal and minimalist scripts & tasks runner. | [homepage](https://github.com/tunnckoCoreLabs/scripts "Universal and minimalist scripts & tasks runner.") +- [@tunnckocore/update](https://www.npmjs.com/package/@tunnckocore/update): Update a repository with latest templates from `charlike`. | [homepage](https://github.com/tunnckoCoreLabs/update "Update a repository with latest templates from `charlike`.") - [asia](https://www.npmjs.com/package/asia): Blazingly fast, magical and minimalist testing framework, for Today and Tomorrow | [homepage](https://github.com/olstenlarck/asia#readme "Blazingly fast, magical and minimalist testing framework, for Today and Tomorrow") -- [charlike](https://www.npmjs.com/package/charlike): Small, fast, simple and streaming project scaffolder for myself, but not… [more](https://github.com/tunnckoCore/charlike) | [homepage](https://github.com/tunnckoCore/charlike "Small, fast, simple and streaming project scaffolder for myself, but not only. Supports hundreds of template engines through the @JSTransformers API or if you want custom `render` function passed through options") -- [collect-mentions](https://www.npmjs.com/package/collect-mentions): Collect mentions from a given text string, using battle-tested `mentions-regex` package | [homepage](https://github.com/olstenlarck/collect-mentions "Collect mentions from a given text string, using battle-tested `mentions-regex` package") +- [charlike](https://www.npmjs.com/package/charlike): Small & fast project scaffolder with sane defaults. Supports hundreds of template… [more](https://github.com/tunnckoCoreLabs/charlike) | [homepage](https://github.com/tunnckoCoreLabs/charlike "Small & fast project scaffolder with sane defaults. Supports hundreds of template engines through the @JSTransformers API or if you want custom `render` function passed through options") +- [docks](https://www.npmjs.com/package/docks): Extensible system for parsing and generating documentation. It just freaking works! | [homepage](https://github.com/tunnckoCore/docks "Extensible system for parsing and generating documentation. It just freaking works!") - [gitcommit](https://www.npmjs.com/package/gitcommit): Lightweight and joyful `git commit` replacement. Conventional Commits compliant. | [homepage](https://github.com/tunnckoCore/gitcommit "Lightweight and joyful `git commit` replacement. Conventional Commits compliant.") -- [new-release](https://www.npmjs.com/package/new-release): A stable alternative to [semantic-release][]. Only handles NPM publishing and nothing… [more](https://github.com/tunnckoCore/new-release#readme) | [homepage](https://github.com/tunnckoCore/new-release#readme "A stable alternative to [semantic-release][]. Only handles NPM publishing and nothing more. For creating GitHub releases use the Semantic Release GitHub App") -- [xaxa](https://www.npmjs.com/package/xaxa): Zero-config linting, powered by few amazing unicorns, AirBnB & Prettier. | [homepage](https://github.com/olstenlarck/xaxa "Zero-config linting, powered by few amazing unicorns, AirBnB & Prettier.") **[back to top](#thetop)** ## Contributing + +### Follow the Guidelines + Please read the [Contributing Guide](./CONTRIBUTING.md) and [Code of Conduct](./CODE_OF_CONDUCT.md) documents for advices. -For bugs reports and feature requests, [please create an issue][open-issue-url] or ping [@tunnckoCore](https://twitter.com/tunnckoCore) at Twitter. +For bugs reports and feature requests, [please create an issue][open-issue-url] or ping +[@tunnckoCore](https://twitter.com/tunnckoCore) at Twitter. -## Contributors -Thanks to the hard work of [these wonderful people](./CONTRIBUTORS.md) this project is alive and it also follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification. -[Pull requests](https://github.com/tunnckoCore/contributing#opening-a-pull-request), stars and all kind of [contributions](https://opensource.guide/how-to-contribute/#what-it-means-to-contribute) are always welcome. :stars: +### Support the project -## Users -You can see who uses `parse-commit-message` in the [USERS.md](./USERS.md) file. Please feel free adding this file if it not exists. -If you or your organization are using this project, consider adding yourself to the list of users. -**Thank You!** :heart: +[Become a Partner or Sponsor?][patreon-url] :dollar: Check the **Partner**, **Sponsor** or **Omega-level** tiers! :tada: You can get your company logo, link & name on this file. It's also rendered on package page in [npmjs.com][npmv-url] and [yarnpkg.com](https://yarnpkg.com/en/package/parse-commit-message) sites too! :rocket: -## License -Copyright (c) 2017-present, [Charlike Mike Reagent][author-link] ``. -Released under the [Apache-2.0 License][license-url]. +Not financial support? Okey! [Pull requests](https://github.com/tunnckoCoreLabs/contributing#opening-a-pull-request), stars and all kind of [contributions](https://opensource.guide/how-to-contribute/#what-it-means-to-contribute) are always +welcome. :sparkles: + +### OPEN Open Source + +This project is following [OPEN Open Source](http://openopensource.org) model + +> Individuals making significant and valuable contributions are given commit-access to the project to contribute as they see fit. This project is built on collective efforts and it's not strongly guarded by its founders. + +There are a few basic ground-rules for its contributors ---- +1. Any **significant modifications** must be subject to a pull request to get feedback from other contributors. +2. [Pull requests](https://github.com/tunnckoCoreLabs/contributing#opening-a-pull-request) to get feedback are _encouraged_ for any other trivial contributions, but are not required. +3. Contributors should attempt to adhere to the prevailing code-style and development workflow. -_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.7.0, on July 25, 2018._ +### Wonderful Contributors + +Thanks to the hard work of these wonderful people this project is alive! It follows the +[all-contributors](https://github.com/kentcdodds/all-contributors) specification. +Don't hesitate to add yourself to that list if you have made any contribution! ;) [See how, +here](https://github.com/jfmengels/all-contributors-cli#usage). + + + +| [
Charlike Mike Reagent](https://tunnckocore.com)
[💻](https://github.com/tunnckoCoreLabs/parse-commit-message/commits?author=tunnckoCore "Code") [📖](https://github.com/tunnckoCoreLabs/parse-commit-message/commits?author=tunnckoCore "Documentation") [💬](#question-tunnckoCore "Answering Questions") [👀](#review-tunnckoCore "Reviewed Pull Requests") [🔍](#fundingFinding-tunnckoCore "Funding Finding") | +| :---: | + + + +Consider showing your [support](#support-the-project) to them. :sparkling_heart: + +## License + +Copyright (c) 2018-present, [Charlike Mike Reagent](https://tunnckocore.com) `` & [contributors](#wonderful-contributors). +Released under the [Apache-2.0 License][license-url]. + [npmv-url]: https://www.npmjs.com/package/parse-commit-message -[npmv-img]: https://badgen.net/npm/v/parse-commit-message?label=npm%20version +[npmv-img]: https://badgen.net/npm/v/parse-commit-message?icon=npm -[ghrelease-url]: https://github.com/tunnckoCore/parse-commit-message/releases/latest -[ghrelease-img]: https://badgen.net/github/release/tunnckoCore/parse-commit-message?label=github%20release +[ghrelease-url]: https://github.com/tunnckoCoreLabs/parse-commit-message/releases/latest +[ghrelease-img]: https://badgen.net/github/release/tunnckoCoreLabs/parse-commit-message?icon=github -[license-url]: https://github.com/tunnckoCore/parse-commit-message/blob/master/LICENSE +[license-url]: https://github.com/tunnckoCoreLabs/parse-commit-message/blob/master/LICENSE [license-img]: https://badgen.net/npm/license/parse-commit-message -[codestyle-url]: https://github.com/tunnckoCore/xaxa -[codestyle-img]: https://badgen.net/badge/code%20style/xaxa/green +[codestyle-url]: https://github.com/airbnb/javascript +[codestyle-img]: https://badgen.net/badge/code%20style/airbnb/ff5a5f?icon=airbnb -[linuxbuild-url]: https://circleci.com/gh/tunnckoCore/parse-commit-message/tree/master -[linuxbuild-img]: https://badgen.net/circleci/github/tunnckoCore/parse-commit-message/master +[linuxbuild-url]: https://circleci.com/gh/tunnckoCoreLabs/parse-commit-message/tree/master +[linuxbuild-img]: https://badgen.net/circleci/github/tunnckoCoreLabs/parse-commit-message/master?label=build&icon=circleci -[codecoverage-url]: https://codecov.io/gh/tunnckoCore/parse-commit-message -[codecoverage-img]: https://badgen.net/codecov/c/github/tunnckoCore/parse-commit-message +[codecoverage-url]: https://codecov.io/gh/tunnckoCoreLabs/parse-commit-message +[codecoverage-img]: https://badgen.net/codecov/c/github/tunnckoCoreLabs/parse-commit-message?icon=codecov -[dependencies-url]: https://david-dm.org/tunnckoCore/parse-commit-message -[dependencies-img]: https://badgen.net/david/dep/tunnckoCore/parse-commit-message +[dependencies-url]: https://david-dm.org/tunnckoCoreLabs/parse-commit-message +[dependencies-img]: https://badgen.net/david/dep/tunnckoCoreLabs/parse-commit-message?label=deps [ccommits-url]: https://conventionalcommits.org/ [ccommits-img]: https://badgen.net/badge/conventional%20commits/v1.0.0/dfb317 - -[new-release-url]: https://github.com/tunnckoCore/new-release +[new-release-url]: https://ghub.io/new-release [new-release-img]: https://badgen.net/badge/semantically/released/05c5ff [downloads-weekly-img]: https://badgen.net/npm/dw/parse-commit-message @@ -250,18 +472,19 @@ _This file was generated by [verb-generate-readme](https://github.com/verbose/ve [renovateapp-url]: https://renovatebot.com [renovateapp-img]: https://badgen.net/badge/renovate/enabled/green - [prs-welcome-img]: https://badgen.net/badge/PRs/welcome/green [prs-welcome-url]: http://makeapullrequest.com - [paypal-donate-url]: https://paypal.me/tunnckoCore/10 [paypal-donate-img]: https://badgen.net/badge/$/support/purple +[patreon-url]: https://www.patreon.com/bePatron?u=5579781 +[patreon-img]: https://badgen.net/badge/patreon/tunnckoCore/F96854?icon=patreon +[patreon-sponsor-img]: https://badgen.net/badge/become/a%20sponsor/F96854?icon=patreon -[shareu]: https://twitter.com/intent/tweet?text=https://github.com/olstenlarck/parse-commit-message&via=tunnckoCore -[shareb]: https://badgen.net/badge/twitter/share/1da1f2 -[open-issue-url]: https://github.com/olstenlarck/parse-commit-message/issues/new -[author-link]: https://i.am.charlike.online +[shareu]: https://twitter.com/intent/tweet?text=https://github.com/tunnckoCoreLabs/parse-commit-message&via=tunnckoCore +[shareb]: https://badgen.net/badge/twitter/share/1da1f2?icon=twitter +[open-issue-url]: https://github.com/tunnckoCoreLabs/parse-commit-message/issues/new [collect-mentions]: https://github.com/olstenlarck/collect-mentions +[execa]: https://github.com/sindresorhus/execa [new-release]: https://github.com/tunnckoCore/new-release -[semantic-release]: https://github.com/semantic-release/semantic-release +[semantic-release]: https://github.com/semantic-release/semantic-release \ No newline at end of file diff --git a/babel-register-ts.js b/babel-register-ts.js deleted file mode 100644 index d92ab37..0000000 --- a/babel-register-ts.js +++ /dev/null @@ -1,4 +0,0 @@ -// externalize -require('@babel/register')({ - extensions: ['.ts', '.tsx', '.js', '.jsx', '.mjs'], -}); diff --git a/index.js b/index.js new file mode 100644 index 0000000..aa21399 --- /dev/null +++ b/index.js @@ -0,0 +1,18 @@ +'use strict'; + +const path = require('path'); +const esmLoader = require('esm'); +const pkg = require('./package.json'); + +const esmRequire = esmLoader(module); + +function interop(x) { + if (Object.keys(x).length === 1 && x.default) { + return x.default; + } + return x; +} + +const mod = esmRequire(path.join(__dirname, pkg.module)); + +module.exports = interop(mod); diff --git a/package.json b/package.json index d0d94db..d9b05f7 100644 --- a/package.json +++ b/package.json @@ -1,113 +1,54 @@ { "name": "parse-commit-message", - "description": "An extensible parser for commit message that follows Conventional Commits v1 spec", + "description": "Extensible parser for git commit messages following Conventional Commits Specification", "license": "Apache-2.0", - "licenseStart": "2017", + "licenseStart": "2018", "scripts": { - "inst": "pnpm i --side-effects-cache-readonly --shamefully-flatten --prefer-offline --prefer-frozen-shrinkwrap", - "lint": "eslint '**/*.ts' --fix --format codeframe", - "test": "BABEL_ENV=v7 nyc --require ./babel-register-ts asia 'test/**/*.ts'", - "gitadd": "git status --porcelain && git add -A", - "commit-dry": "npm run gitadd && gitcommit -sS", - "precommit": "npm run lint && npm test && npm run gitadd", - "commit": "gitcommit -sS", - "types": "tsc --emitDeclarationOnly --declaration", - "parcel:cli": "BABEL_ENV=v6 parcel build src/index.ts --no-source-maps --detailed-report --experimental-scope-hoisting", - "parcel:umd": "BABEL_ENV=v6 parcel build src/index.ts --no-source-maps --detailed-report --experimental-scope-hoisting --target browser -d dist/umd --global parseCommitMessage", - "parcel:cjs": "BABEL_ENV=v6 parcel build src/index.ts --no-source-maps --detailed-report --experimental-scope-hoisting --target node -d dist/cjs --no-minify", - "prebuild": "rm -rf dist && npm run types", - "build": "npm run parcel:umd && npm run parcel:cjs", - "release": "new-release" + "docs": "docks --outfile .verb.md && verb", + "lint": "eslint '**/*.js' --cache --fix --quiet --format codeframe", + "test": "nyc asia", + "commit": "yarn lint && yarn test && yarn dry", + "dry": "git add -A && git status --porcelain && gitcommit -sS", + "release": "tunnckocore-release" }, "engines": { - "node": "^8.9.0 || ^10.6.0" + "node": "^8.11.0 || >=10.13.0" }, "dependencies": { - "collect-mentions": "^1.0.1" + "collect-mentions": "^1.0.2", + "dedent": "^0.7.0", + "esm": "^3.0.84", + "joi": "^14.0.4", + "mixin-deep": "^2.0.0" }, "devDependencies": { - "@babel/core": "^7.0.0-beta.54", - "@babel/preset-env": "^7.0.0-beta.54", - "@babel/preset-stage-3": "^7.0.0-beta.54", - "@babel/preset-typescript": "^7.0.0-beta.54", - "@babel/register": "^7.0.0-beta.54", - "@types/node": "^10.5.3", - "babel-core": "^6.26.3", - "babel-preset-env": "^1.7.0", - "babel-preset-flow": "^6.23.0", - "babel-preset-stage-3": "^6.24.1", - "babel-register": "^6.26.0", - "asia": "^0.19.7", - "gitcommit": "^1.0.8", - "new-release": "^4.0.3", - "nyc": "^12.0.2", - "parcel-bundler": "^1.9.7", - "typescript": "^2.9.2", - "xaxa": "^2.0.0" + "@tunnckocore/config": "^1.0.0", + "asia": "^0.19.7" }, "files": [ - "dist" + "src", + "index.js" ], - "main": "dist/cjs/index.js", - "unpkg": "dist/umd/index.js", - "typings": "dist/typings/index.d.ts", - "version": "0.0.0-semantically-released", - "repository": "olstenlarck/parse-commit-message", - "homepage": "https://github.com/olstenlarck/parse-commit-message", - "author": "Charlike Mike Reagent (https://i.am.charlike.online)", + "main": "index.js", + "module": "src/index.js", + "typings": "src/index.d.ts", + "version": "3.0.0-next.rc2", + "repository": "tunnckoCoreLabs/parse-commit-message", + "homepage": "https://github.com/tunnckoCoreLabs/parse-commit-message", + "author": "Charlike Mike Reagent (https://tunnckocore.com)", "publishConfig": { - "access": "public" - }, - "eslintConfig": { - "extends": "xaxa", - "settings": { - "import/resolver": { - "node": { - "extensions": [ - ".mjs", - ".js", - ".jsx", - ".ts", - ".tsx" - ] - } - } - } + "access": "public", + "tag": "next" }, "renovate": { "extends": "tunnckocore" }, - "nyc": { - "statements": 100, - "functions": 100, - "branches": 100, - "lines": 100, - "cache": true, - "check-coverage": true, - "reporter": [ - "lcov", - "text" - ], - "exclude": [ - "node_modules", - "test", - "babel-register*" - ], - "extension": [ - ".js", - ".ts", - ".jsx", - ".tsx", - ".mjs" - ] - }, "verb": { "run": true, "toc": { "render": true, "method": "preWrite", - "maxdepth": 3, - "footer": "" + "maxdepth": 4 }, "layout": "empty", "tasks": [ @@ -116,11 +57,15 @@ "related": { "list": [ "asia", + "charlike", + "docks", "gitcommit", - "new-release", - "xaxa", - "collect-mentions", - "charlike" + "@tunnckocore/execa", + "@tunnckocore/package-json", + "@tunnckocore/create-project", + "@tunnckocore/update", + "@tunnckocore/config", + "@tunnckocore/scripts" ] }, "lint": { @@ -128,7 +73,9 @@ }, "reflinks": [ "new-release", - "semantic-release" + "semantic-release", + "collect-mentions", + "execa" ] } } diff --git a/shrinkwrap.yaml b/shrinkwrap.yaml deleted file mode 100644 index 16138ce..0000000 --- a/shrinkwrap.yaml +++ /dev/null @@ -1,7357 +0,0 @@ -dependencies: - collect-mentions: 1.0.2 -devDependencies: - '@babel/core': 7.0.0-beta.54 - '@babel/preset-env': 7.0.0-beta.54 - '@babel/preset-stage-3': 7.0.0-beta.54 - '@babel/preset-typescript': 7.0.0-beta.54 - '@babel/register': 7.0.0-beta.54 - '@types/node': 10.5.3 - asia: 0.19.7 - babel-core: 6.26.3 - babel-preset-env: 1.7.0 - babel-preset-flow: 6.23.0 - babel-preset-stage-3: 6.24.1 - babel-register: 6.26.0 - gitcommit: 1.0.9 - new-release: 4.0.3 - nyc: 12.0.2 - parcel-bundler: 1.9.7 - typescript: 2.9.2 - xaxa: 2.0.2 -packages: - /@babel/code-frame/7.0.0-beta.44: - dependencies: - '@babel/highlight': 7.0.0-beta.44 - dev: true - resolution: - integrity: sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g== - /@babel/code-frame/7.0.0-beta.51: - dependencies: - '@babel/highlight': 7.0.0-beta.51 - dev: true - resolution: - integrity: sha1-vXHZsZKvl435FYKdOdQJRFZDmgw= - /@babel/code-frame/7.0.0-beta.54: - dependencies: - '@babel/highlight': 7.0.0-beta.54 - dev: true - resolution: - integrity: sha1-ACT5b99wKKIdaOJzr9TpUyFKHq0= - /@babel/core/7.0.0-beta.54: - dependencies: - '@babel/code-frame': 7.0.0-beta.54 - '@babel/generator': 7.0.0-beta.54 - '@babel/helpers': 7.0.0-beta.54 - '@babel/parser': 7.0.0-beta.54 - '@babel/template': 7.0.0-beta.54 - '@babel/traverse': 7.0.0-beta.54 - '@babel/types': 7.0.0-beta.54 - convert-source-map: 1.5.1 - debug: 3.1.0 - json5: 0.5.1 - lodash: 4.17.10 - resolve: 1.8.1 - semver: 5.5.0 - source-map: 0.5.7 - dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha1-JTxU0AlUA6XPp2Tn2bRYGUaS0Cs= - /@babel/generator/7.0.0-beta.44: - dependencies: - '@babel/types': 7.0.0-beta.44 - jsesc: 2.5.1 - lodash: 4.17.10 - source-map: 0.5.7 - trim-right: 1.0.1 - dev: true - resolution: - integrity: sha512-5xVb7hlhjGcdkKpMXgicAVgx8syK5VJz193k0i/0sLP6DzE6lRrU1K3B/rFefgdo9LPGMAOOOAWW4jycj07ShQ== - /@babel/generator/7.0.0-beta.51: - dependencies: - '@babel/types': 7.0.0-beta.51 - jsesc: 2.5.1 - lodash: 4.17.10 - source-map: 0.5.7 - trim-right: 1.0.1 - dev: true - resolution: - integrity: sha1-bHV1/952HQdIXgS67cA5LG2eMPY= - /@babel/generator/7.0.0-beta.54: - dependencies: - '@babel/types': 7.0.0-beta.54 - jsesc: 2.5.1 - lodash: 4.17.10 - source-map: 0.5.7 - trim-right: 1.0.1 - dev: true - resolution: - integrity: sha1-wEPH7r7r/X5mXZXCgaSq/IPU4ck= - /@babel/helper-annotate-as-pure/7.0.0-beta.54: - dependencies: - '@babel/types': 7.0.0-beta.54 - dev: true - resolution: - integrity: sha1-FiYSaj+fxO0oCslCNyx9OWU9cSE= - /@babel/helper-builder-binary-assignment-operator-visitor/7.0.0-beta.54: - dependencies: - '@babel/helper-explode-assignable-expression': 7.0.0-beta.54 - '@babel/types': 7.0.0-beta.54 - dev: true - resolution: - integrity: sha1-0KGWdjW57ryv26gEkZF+5JgcEvo= - /@babel/helper-call-delegate/7.0.0-beta.54: - dependencies: - '@babel/helper-hoist-variables': 7.0.0-beta.54 - '@babel/traverse': 7.0.0-beta.54 - '@babel/types': 7.0.0-beta.54 - dev: true - resolution: - integrity: sha1-9rcs/YMvsm6yqAbhjeBfiNOo8wI= - /@babel/helper-define-map/7.0.0-beta.54: - dependencies: - '@babel/helper-function-name': 7.0.0-beta.54 - '@babel/types': 7.0.0-beta.54 - lodash: 4.17.10 - dev: true - resolution: - integrity: sha1-IDbXxJNlmH8JHblwLOLztV9ndzA= - /@babel/helper-explode-assignable-expression/7.0.0-beta.54: - dependencies: - '@babel/traverse': 7.0.0-beta.54 - '@babel/types': 7.0.0-beta.54 - dev: true - resolution: - integrity: sha1-zwZ/MzCWXCBIvwh+oG9ix22Up5I= - /@babel/helper-function-name/7.0.0-beta.44: - dependencies: - '@babel/helper-get-function-arity': 7.0.0-beta.44 - '@babel/template': 7.0.0-beta.44 - '@babel/types': 7.0.0-beta.44 - dev: true - resolution: - integrity: sha512-MHRG2qZMKMFaBavX0LWpfZ2e+hLloT++N7rfM3DYOMUOGCD8cVjqZpwiL8a0bOX3IYcQev1ruciT0gdFFRTxzg== - /@babel/helper-function-name/7.0.0-beta.51: - dependencies: - '@babel/helper-get-function-arity': 7.0.0-beta.51 - '@babel/template': 7.0.0-beta.51 - '@babel/types': 7.0.0-beta.51 - dev: true - resolution: - integrity: sha1-IbSHSiJ8+Z7K/MMKkDAtpaJkBWE= - /@babel/helper-function-name/7.0.0-beta.54: - dependencies: - '@babel/helper-get-function-arity': 7.0.0-beta.54 - '@babel/template': 7.0.0-beta.54 - '@babel/types': 7.0.0-beta.54 - dev: true - resolution: - integrity: sha1-MHh1UHoe2iSCoJqaTfaiVjL/s0s= - /@babel/helper-get-function-arity/7.0.0-beta.44: - dependencies: - '@babel/types': 7.0.0-beta.44 - dev: true - resolution: - integrity: sha512-w0YjWVwrM2HwP6/H3sEgrSQdkCaxppqFeJtAnB23pRiJB5E/O9Yp7JAAeWBl+gGEgmBFinnTyOv2RN7rcSmMiw== - /@babel/helper-get-function-arity/7.0.0-beta.51: - dependencies: - '@babel/types': 7.0.0-beta.51 - dev: true - resolution: - integrity: sha1-MoGy0EWvlcFyzpGyCCXYXqRnZBE= - /@babel/helper-get-function-arity/7.0.0-beta.54: - dependencies: - '@babel/types': 7.0.0-beta.54 - dev: true - resolution: - integrity: sha1-dXvRibB3B0oAQCjP3l8IPDBsxsQ= - /@babel/helper-hoist-variables/7.0.0-beta.54: - dependencies: - '@babel/types': 7.0.0-beta.54 - dev: true - resolution: - integrity: sha1-hjW+gJUTX/c/dT7RieRJ9otPQ8s= - /@babel/helper-member-expression-to-functions/7.0.0-beta.54: - dependencies: - '@babel/types': 7.0.0-beta.54 - dev: true - resolution: - integrity: sha1-vOndxIQxexPSYVuv4rUk0NVtmd8= - /@babel/helper-module-imports/7.0.0-beta.54: - dependencies: - '@babel/types': 7.0.0-beta.54 - lodash: 4.17.10 - dev: true - resolution: - integrity: sha1-wtjhT/A0Ilv0MTVtt370Z7jTWqw= - /@babel/helper-module-transforms/7.0.0-beta.54: - dependencies: - '@babel/helper-module-imports': 7.0.0-beta.54 - '@babel/helper-simple-access': 7.0.0-beta.54 - '@babel/helper-split-export-declaration': 7.0.0-beta.54 - '@babel/template': 7.0.0-beta.54 - '@babel/types': 7.0.0-beta.54 - lodash: 4.17.10 - dev: true - resolution: - integrity: sha1-jMV+sNtfCUXYZlJNVVq9CE4wzDU= - /@babel/helper-optimise-call-expression/7.0.0-beta.54: - dependencies: - '@babel/types': 7.0.0-beta.54 - dev: true - resolution: - integrity: sha1-SvjdT/kNvSmzvPhf/0OVLirhAW4= - /@babel/helper-plugin-utils/7.0.0-beta.54: - dev: true - resolution: - integrity: sha1-YdKpoPmj4xg4pFjeu57r173SSbQ= - /@babel/helper-regex/7.0.0-beta.54: - dependencies: - lodash: 4.17.10 - dev: true - resolution: - integrity: sha1-isVi+FXxMvxo39ELEyVSVVrIcNk= - /@babel/helper-remap-async-to-generator/7.0.0-beta.54: - dependencies: - '@babel/helper-annotate-as-pure': 7.0.0-beta.54 - '@babel/helper-wrap-function': 7.0.0-beta.54 - '@babel/template': 7.0.0-beta.54 - '@babel/traverse': 7.0.0-beta.54 - '@babel/types': 7.0.0-beta.54 - dev: true - resolution: - integrity: sha1-OaUAUqrddNQMc7fFjrljuQ+sVtM= - /@babel/helper-replace-supers/7.0.0-beta.54: - dependencies: - '@babel/helper-member-expression-to-functions': 7.0.0-beta.54 - '@babel/helper-optimise-call-expression': 7.0.0-beta.54 - '@babel/traverse': 7.0.0-beta.54 - '@babel/types': 7.0.0-beta.54 - dev: true - resolution: - integrity: sha1-kB9aFJOkEHmf06s+DA0p0YBxyJ8= - /@babel/helper-simple-access/7.0.0-beta.54: - dependencies: - '@babel/template': 7.0.0-beta.54 - '@babel/types': 7.0.0-beta.54 - lodash: 4.17.10 - dev: true - resolution: - integrity: sha1-X3YKGViam28H6Apl70vL1PuowlM= - /@babel/helper-split-export-declaration/7.0.0-beta.44: - dependencies: - '@babel/types': 7.0.0-beta.44 - dev: true - resolution: - integrity: sha512-aQ7QowtkgKKzPGf0j6u77kBMdUFVBKNHw2p/3HX/POt5/oz8ec5cs0GwlgM8Hz7ui5EwJnzyfRmkNF1Nx1N7aA== - /@babel/helper-split-export-declaration/7.0.0-beta.51: - dependencies: - '@babel/types': 7.0.0-beta.51 - dev: true - resolution: - integrity: sha1-imw/ZsTSZTUvwHdIT59ugKUauXg= - /@babel/helper-split-export-declaration/7.0.0-beta.54: - dependencies: - '@babel/types': 7.0.0-beta.54 - dev: true - resolution: - integrity: sha1-ic2IM8lUgaCCesahv8zduSt1oQk= - /@babel/helper-wrap-function/7.0.0-beta.54: - dependencies: - '@babel/helper-function-name': 7.0.0-beta.54 - '@babel/template': 7.0.0-beta.54 - '@babel/traverse': 7.0.0-beta.54 - '@babel/types': 7.0.0-beta.54 - dev: true - resolution: - integrity: sha1-3Bt6SDowdKNTGzZSPgMVbZEKOio= - /@babel/helpers/7.0.0-beta.54: - dependencies: - '@babel/template': 7.0.0-beta.54 - '@babel/traverse': 7.0.0-beta.54 - '@babel/types': 7.0.0-beta.54 - dev: true - resolution: - integrity: sha1-uGqZqA79gWaMrvMHYQuWEZdEanQ= - /@babel/highlight/7.0.0-beta.44: - dependencies: - chalk: 2.4.1 - esutils: 2.0.2 - js-tokens: 3.0.2 - dev: true - resolution: - integrity: sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ== - /@babel/highlight/7.0.0-beta.51: - dependencies: - chalk: 2.4.1 - esutils: 2.0.2 - js-tokens: 3.0.2 - dev: true - resolution: - integrity: sha1-6IRK4loVlcz9QriWI7Q3bKBtIl0= - /@babel/highlight/7.0.0-beta.54: - dependencies: - chalk: 2.4.1 - esutils: 2.0.2 - js-tokens: 3.0.2 - dev: true - resolution: - integrity: sha1-FV1Qc1gym45waJcAF8P9dKmwhYQ= - /@babel/parser/7.0.0-beta.51: - dev: true - engines: - node: '>=6.0.0' - hasBin: true - resolution: - integrity: sha1-J87C30Cd9gr1gnDtj2qlVAnqhvY= - /@babel/parser/7.0.0-beta.54: - dev: true - engines: - node: '>=6.0.0' - hasBin: true - resolution: - integrity: sha1-wBqmO1fJyNzodEeWyB2d8SHyDbQ= - /@babel/plugin-proposal-async-generator-functions/7.0.0-beta.54: - dependencies: - '@babel/helper-plugin-utils': 7.0.0-beta.54 - '@babel/helper-remap-async-to-generator': 7.0.0-beta.54 - '@babel/plugin-syntax-async-generators': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-GYcb1lW110iwrj6ezr4ke+i3+Ds= - /@babel/plugin-proposal-class-properties/7.0.0-beta.54: - dependencies: - '@babel/helper-function-name': 7.0.0-beta.54 - '@babel/helper-member-expression-to-functions': 7.0.0-beta.54 - '@babel/helper-optimise-call-expression': 7.0.0-beta.54 - '@babel/helper-plugin-utils': 7.0.0-beta.54 - '@babel/helper-replace-supers': 7.0.0-beta.54 - '@babel/plugin-syntax-class-properties': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-WVPwSZweaecy0zpVC86HmaprdvM= - /@babel/plugin-proposal-json-strings/7.0.0-beta.54: - dependencies: - '@babel/helper-plugin-utils': 7.0.0-beta.54 - '@babel/plugin-syntax-json-strings': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-NSkuBxazWsjCedZDCDbOdBwy/l0= - /@babel/plugin-proposal-object-rest-spread/7.0.0-beta.54: - dependencies: - '@babel/helper-plugin-utils': 7.0.0-beta.54 - '@babel/plugin-syntax-object-rest-spread': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-VIEmmgIN0NOHFagJT+0BXTDvTCo= - /@babel/plugin-proposal-optional-catch-binding/7.0.0-beta.54: - dependencies: - '@babel/helper-plugin-utils': 7.0.0-beta.54 - '@babel/plugin-syntax-optional-catch-binding': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-kx9pKY+gxBGyWWYWz1odgpJbh6k= - /@babel/plugin-proposal-unicode-property-regex/7.0.0-beta.54: - dependencies: - '@babel/helper-plugin-utils': 7.0.0-beta.54 - '@babel/helper-regex': 7.0.0-beta.54 - regexpu-core: 4.2.0 - dev: true - engines: - node: '>=4' - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-FiRjH69oi8veSRhxK9CvcYb30kU= - /@babel/plugin-syntax-async-generators/7.0.0-beta.54: - dependencies: - '@babel/helper-plugin-utils': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-/6yPZJJ2FHYol8yWQ0lf04CX3UE= - /@babel/plugin-syntax-class-properties/7.0.0-beta.54: - dependencies: - '@babel/helper-plugin-utils': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-XnDyLcNijB01QCtj/xqPjgBb2HE= - /@babel/plugin-syntax-dynamic-import/7.0.0-beta.54: - dependencies: - '@babel/helper-plugin-utils': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-yWJif04aFdptCEIwbUIeex5S9Yc= - /@babel/plugin-syntax-import-meta/7.0.0-beta.54: - dependencies: - '@babel/helper-plugin-utils': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-PFTQeq/glxQwO5laxK1rELD9vDA= - /@babel/plugin-syntax-json-strings/7.0.0-beta.54: - dependencies: - '@babel/helper-plugin-utils': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-f1PDU2LzWeWIHiEnjKM1ncC7cFU= - /@babel/plugin-syntax-object-rest-spread/7.0.0-beta.54: - dependencies: - '@babel/helper-plugin-utils': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-4PRFYSCBq1c+JTWturx7cQ0XlAw= - /@babel/plugin-syntax-optional-catch-binding/7.0.0-beta.54: - dependencies: - '@babel/helper-plugin-utils': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-Lrjd3hnd9zo0PQh6CHFZ7UTlSAk= - /@babel/plugin-syntax-typescript/7.0.0-beta.54: - dependencies: - '@babel/helper-plugin-utils': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-ewHd68y6j3hpO/KJjh9pW7inan4= - /@babel/plugin-transform-arrow-functions/7.0.0-beta.54: - dependencies: - '@babel/helper-plugin-utils': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-RKl3uOYeTvzHZYu74mDyBMobz3I= - /@babel/plugin-transform-async-to-generator/7.0.0-beta.54: - dependencies: - '@babel/helper-module-imports': 7.0.0-beta.54 - '@babel/helper-plugin-utils': 7.0.0-beta.54 - '@babel/helper-remap-async-to-generator': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-0DXmXFCISTfWTb5o0WSYwDL4u+w= - /@babel/plugin-transform-block-scoped-functions/7.0.0-beta.54: - dependencies: - '@babel/helper-plugin-utils': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-k4p3+xLw4RZhvfU4bkrspH8MBTs= - /@babel/plugin-transform-block-scoping/7.0.0-beta.54: - dependencies: - '@babel/helper-plugin-utils': 7.0.0-beta.54 - lodash: 4.17.10 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-vK4cL/rkzDt7PlRV8KmNrswJo8Y= - /@babel/plugin-transform-classes/7.0.0-beta.54: - dependencies: - '@babel/helper-annotate-as-pure': 7.0.0-beta.54 - '@babel/helper-define-map': 7.0.0-beta.54 - '@babel/helper-function-name': 7.0.0-beta.54 - '@babel/helper-optimise-call-expression': 7.0.0-beta.54 - '@babel/helper-plugin-utils': 7.0.0-beta.54 - '@babel/helper-replace-supers': 7.0.0-beta.54 - '@babel/helper-split-export-declaration': 7.0.0-beta.54 - globals: 11.7.0 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-sVeB0uSZziVDjnP+ovpaCYWFaP8= - /@babel/plugin-transform-computed-properties/7.0.0-beta.54: - dependencies: - '@babel/helper-plugin-utils': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-soSUlCuU+4bQGZR2PStcQ73Zhq8= - /@babel/plugin-transform-destructuring/7.0.0-beta.54: - dependencies: - '@babel/helper-plugin-utils': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-gfZJo+T8tiwrKtSX94OoALmURy8= - /@babel/plugin-transform-dotall-regex/7.0.0-beta.54: - dependencies: - '@babel/helper-plugin-utils': 7.0.0-beta.54 - '@babel/helper-regex': 7.0.0-beta.54 - regexpu-core: 4.2.0 - dev: true - engines: - node: '>=4' - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-KDW39BQbGfoGSOuW/+PE/M0eyiA= - /@babel/plugin-transform-duplicate-keys/7.0.0-beta.54: - dependencies: - '@babel/helper-plugin-utils': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-S49Ps0mQKoAGeRkfWdD6U/yklAA= - /@babel/plugin-transform-exponentiation-operator/7.0.0-beta.54: - dependencies: - '@babel/helper-builder-binary-assignment-operator-visitor': 7.0.0-beta.54 - '@babel/helper-plugin-utils': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-EBcJY2b7Q+vKjtjY0M3R69ZP67I= - /@babel/plugin-transform-for-of/7.0.0-beta.54: - dependencies: - '@babel/helper-plugin-utils': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-Jh0pkgWKngkjS5/2eCAFT/xV95w= - /@babel/plugin-transform-function-name/7.0.0-beta.54: - dependencies: - '@babel/helper-function-name': 7.0.0-beta.54 - '@babel/helper-plugin-utils': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-zHIvmXOTEzfe89HmxVE4WB7dNx4= - /@babel/plugin-transform-literals/7.0.0-beta.54: - dependencies: - '@babel/helper-plugin-utils': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-cPB+zC87e8n1QqV46C7sGKVQQJg= - /@babel/plugin-transform-modules-amd/7.0.0-beta.54: - dependencies: - '@babel/helper-module-transforms': 7.0.0-beta.54 - '@babel/helper-plugin-utils': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-+1B0B0FCC7SF7hMV0uETPbTkM9I= - /@babel/plugin-transform-modules-commonjs/7.0.0-beta.54: - dependencies: - '@babel/helper-module-transforms': 7.0.0-beta.54 - '@babel/helper-plugin-utils': 7.0.0-beta.54 - '@babel/helper-simple-access': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-B9kSp6JNrS2b9dRM4yLdxFeo2zc= - /@babel/plugin-transform-modules-systemjs/7.0.0-beta.54: - dependencies: - '@babel/helper-hoist-variables': 7.0.0-beta.54 - '@babel/helper-plugin-utils': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-CSPwEqwlLgN0ZyRf8n+JVPTOaAM= - /@babel/plugin-transform-modules-umd/7.0.0-beta.54: - dependencies: - '@babel/helper-module-transforms': 7.0.0-beta.54 - '@babel/helper-plugin-utils': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-OvDiz49TOymEqMptoxYkaFDDrto= - /@babel/plugin-transform-new-target/7.0.0-beta.54: - dependencies: - '@babel/helper-plugin-utils': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-Y07lf6gFcgGVzTEIbJc/H8XJlJs= - /@babel/plugin-transform-object-super/7.0.0-beta.54: - dependencies: - '@babel/helper-plugin-utils': 7.0.0-beta.54 - '@babel/helper-replace-supers': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-0l+tZu/5DeA+5i+DhPCvV7zQZdk= - /@babel/plugin-transform-parameters/7.0.0-beta.54: - dependencies: - '@babel/helper-call-delegate': 7.0.0-beta.54 - '@babel/helper-get-function-arity': 7.0.0-beta.54 - '@babel/helper-plugin-utils': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-djBvGbmsrGzxNyGvFey584KGT/c= - /@babel/plugin-transform-regenerator/7.0.0-beta.54: - dependencies: - regenerator-transform: 0.13.3 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-i0bhkvO/4Ja7v4bid2TnZi5fmg8= - /@babel/plugin-transform-shorthand-properties/7.0.0-beta.54: - dependencies: - '@babel/helper-plugin-utils': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-UOc8KvxYmLEFVRDd9g7hOmMBUX8= - /@babel/plugin-transform-spread/7.0.0-beta.54: - dependencies: - '@babel/helper-plugin-utils': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-TwhS3w9LHbJCbED6zY/l8Cij28k= - /@babel/plugin-transform-sticky-regex/7.0.0-beta.54: - dependencies: - '@babel/helper-plugin-utils': 7.0.0-beta.54 - '@babel/helper-regex': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-Vo8161EYrpb62C6sNjdNeSO0eIM= - /@babel/plugin-transform-template-literals/7.0.0-beta.54: - dependencies: - '@babel/helper-annotate-as-pure': 7.0.0-beta.54 - '@babel/helper-plugin-utils': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-yx9jA8r7hEKmxsaaDfu2BpnzJ7w= - /@babel/plugin-transform-typeof-symbol/7.0.0-beta.54: - dependencies: - '@babel/helper-plugin-utils': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-bQaGhiOcnrr1NNHA2AMpU/e1Ibw= - /@babel/plugin-transform-typescript/7.0.0-beta.54: - dependencies: - '@babel/helper-plugin-utils': 7.0.0-beta.54 - '@babel/plugin-syntax-typescript': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-e2FLoNvqiLcK6C35xCnhKJKMklE= - /@babel/plugin-transform-unicode-regex/7.0.0-beta.54: - dependencies: - '@babel/helper-plugin-utils': 7.0.0-beta.54 - '@babel/helper-regex': 7.0.0-beta.54 - regexpu-core: 4.2.0 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-HcfpFQs5qusZ/KHIY+CC9glq/GA= - /@babel/preset-env/7.0.0-beta.54: - dependencies: - '@babel/helper-module-imports': 7.0.0-beta.54 - '@babel/helper-plugin-utils': 7.0.0-beta.54 - '@babel/plugin-proposal-async-generator-functions': 7.0.0-beta.54 - '@babel/plugin-proposal-object-rest-spread': 7.0.0-beta.54 - '@babel/plugin-proposal-optional-catch-binding': 7.0.0-beta.54 - '@babel/plugin-proposal-unicode-property-regex': 7.0.0-beta.54 - '@babel/plugin-syntax-async-generators': 7.0.0-beta.54 - '@babel/plugin-syntax-object-rest-spread': 7.0.0-beta.54 - '@babel/plugin-syntax-optional-catch-binding': 7.0.0-beta.54 - '@babel/plugin-transform-arrow-functions': 7.0.0-beta.54 - '@babel/plugin-transform-async-to-generator': 7.0.0-beta.54 - '@babel/plugin-transform-block-scoped-functions': 7.0.0-beta.54 - '@babel/plugin-transform-block-scoping': 7.0.0-beta.54 - '@babel/plugin-transform-classes': 7.0.0-beta.54 - '@babel/plugin-transform-computed-properties': 7.0.0-beta.54 - '@babel/plugin-transform-destructuring': 7.0.0-beta.54 - '@babel/plugin-transform-dotall-regex': 7.0.0-beta.54 - '@babel/plugin-transform-duplicate-keys': 7.0.0-beta.54 - '@babel/plugin-transform-exponentiation-operator': 7.0.0-beta.54 - '@babel/plugin-transform-for-of': 7.0.0-beta.54 - '@babel/plugin-transform-function-name': 7.0.0-beta.54 - '@babel/plugin-transform-literals': 7.0.0-beta.54 - '@babel/plugin-transform-modules-amd': 7.0.0-beta.54 - '@babel/plugin-transform-modules-commonjs': 7.0.0-beta.54 - '@babel/plugin-transform-modules-systemjs': 7.0.0-beta.54 - '@babel/plugin-transform-modules-umd': 7.0.0-beta.54 - '@babel/plugin-transform-new-target': 7.0.0-beta.54 - '@babel/plugin-transform-object-super': 7.0.0-beta.54 - '@babel/plugin-transform-parameters': 7.0.0-beta.54 - '@babel/plugin-transform-regenerator': 7.0.0-beta.54 - '@babel/plugin-transform-shorthand-properties': 7.0.0-beta.54 - '@babel/plugin-transform-spread': 7.0.0-beta.54 - '@babel/plugin-transform-sticky-regex': 7.0.0-beta.54 - '@babel/plugin-transform-template-literals': 7.0.0-beta.54 - '@babel/plugin-transform-typeof-symbol': 7.0.0-beta.54 - '@babel/plugin-transform-unicode-regex': 7.0.0-beta.54 - browserslist: 3.2.8 - invariant: 2.2.4 - js-levenshtein: 1.1.3 - semver: 5.5.0 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-SwXE46rtZKUJCY5OhU38DgLt8FM= - /@babel/preset-stage-3/7.0.0-beta.54: - dependencies: - '@babel/helper-plugin-utils': 7.0.0-beta.54 - '@babel/plugin-proposal-async-generator-functions': 7.0.0-beta.54 - '@babel/plugin-proposal-class-properties': 7.0.0-beta.54 - '@babel/plugin-proposal-json-strings': 7.0.0-beta.54 - '@babel/plugin-proposal-object-rest-spread': 7.0.0-beta.54 - '@babel/plugin-proposal-optional-catch-binding': 7.0.0-beta.54 - '@babel/plugin-proposal-unicode-property-regex': 7.0.0-beta.54 - '@babel/plugin-syntax-dynamic-import': 7.0.0-beta.54 - '@babel/plugin-syntax-import-meta': 7.0.0-beta.54 - deprecated: "\U0001F44B We've deprecated any official stage presets in favor of users explicitly opt-ing into the proposals they want to use versus any perceived convenience. You can also check https://github.com/babel/babel/issues/7770 for more information." - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-knW06pCAEaLa5U1ZFUo4BnNmjMY= - /@babel/preset-typescript/7.0.0-beta.54: - dependencies: - '@babel/helper-plugin-utils': 7.0.0-beta.54 - '@babel/plugin-transform-typescript': 7.0.0-beta.54 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-dJHffA8g0IymPEH3jSxyLJJHA5E= - /@babel/register/7.0.0-beta.54: - dependencies: - core-js: 2.5.7 - find-cache-dir: 1.0.0 - home-or-tmp: 3.0.0 - lodash: 4.17.10 - mkdirp: 0.5.1 - pirates: 4.0.0 - source-map-support: 0.4.18 - dev: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.50 <7.0.0-rc.0' - resolution: - integrity: sha1-EIKEqzlHiMuGaHCHhxrY6Umr77g= - /@babel/template/7.0.0-beta.44: - dependencies: - '@babel/code-frame': 7.0.0-beta.44 - '@babel/types': 7.0.0-beta.44 - babylon: 7.0.0-beta.44 - lodash: 4.17.10 - dev: true - resolution: - integrity: sha512-w750Sloq0UNifLx1rUqwfbnC6uSUk0mfwwgGRfdLiaUzfAOiH0tHJE6ILQIUi3KYkjiCDTskoIsnfqZvWLBDng== - /@babel/template/7.0.0-beta.51: - dependencies: - '@babel/code-frame': 7.0.0-beta.51 - '@babel/parser': 7.0.0-beta.51 - '@babel/types': 7.0.0-beta.51 - lodash: 4.17.10 - dev: true - resolution: - integrity: sha1-lgKkCuvPNXrpZ34lMu9fyBD1+/8= - /@babel/template/7.0.0-beta.54: - dependencies: - '@babel/code-frame': 7.0.0-beta.54 - '@babel/parser': 7.0.0-beta.54 - '@babel/types': 7.0.0-beta.54 - lodash: 4.17.10 - dev: true - resolution: - integrity: sha1-1bDS0tVcDniwSMYaBY82z9fZGvM= - /@babel/traverse/7.0.0-beta.44: - dependencies: - '@babel/code-frame': 7.0.0-beta.44 - '@babel/generator': 7.0.0-beta.44 - '@babel/helper-function-name': 7.0.0-beta.44 - '@babel/helper-split-export-declaration': 7.0.0-beta.44 - '@babel/types': 7.0.0-beta.44 - babylon: 7.0.0-beta.44 - debug: 3.1.0 - globals: 11.7.0 - invariant: 2.2.4 - lodash: 4.17.10 - dev: true - resolution: - integrity: sha512-UHuDz8ukQkJCDASKHf+oDt3FVUzFd+QYfuBIsiNu/4+/ix6pP/C+uQZJ6K1oEfbCMv/IKWbgDEh7fcsnIE5AtA== - /@babel/traverse/7.0.0-beta.51: - dependencies: - '@babel/code-frame': 7.0.0-beta.51 - '@babel/generator': 7.0.0-beta.51 - '@babel/helper-function-name': 7.0.0-beta.51 - '@babel/helper-split-export-declaration': 7.0.0-beta.51 - '@babel/parser': 7.0.0-beta.51 - '@babel/types': 7.0.0-beta.51 - debug: 3.1.0 - globals: 11.7.0 - invariant: 2.2.4 - lodash: 4.17.10 - dev: true - resolution: - integrity: sha1-mB2vLOw0emIx06odnhgDsDqqpKg= - /@babel/traverse/7.0.0-beta.54: - dependencies: - '@babel/code-frame': 7.0.0-beta.54 - '@babel/generator': 7.0.0-beta.54 - '@babel/helper-function-name': 7.0.0-beta.54 - '@babel/helper-split-export-declaration': 7.0.0-beta.54 - '@babel/parser': 7.0.0-beta.54 - '@babel/types': 7.0.0-beta.54 - debug: 3.1.0 - globals: 11.7.0 - lodash: 4.17.10 - dev: true - resolution: - integrity: sha1-LBf5jc2/GaqRj94Sjw4aC8CJ4Fo= - /@babel/types/7.0.0-beta.44: - dependencies: - esutils: 2.0.2 - lodash: 4.17.10 - to-fast-properties: 2.0.0 - dev: true - resolution: - integrity: sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ== - /@babel/types/7.0.0-beta.51: - dependencies: - esutils: 2.0.2 - lodash: 4.17.10 - to-fast-properties: 2.0.0 - dev: true - resolution: - integrity: sha1-2AK3tUO1g2x3iqaReXq/APPZfqk= - /@babel/types/7.0.0-beta.54: - dependencies: - esutils: 2.0.2 - lodash: 4.17.10 - to-fast-properties: 2.0.0 - dev: true - resolution: - integrity: sha1-AlrWhJL+1ULBPxTFeaRMhI5TEGM= - /@mrmlnc/readdir-enhanced/2.2.1: - dependencies: - call-me-maybe: 1.0.1 - glob-to-regexp: 0.3.0 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== - /@nodelib/fs.stat/1.1.0: - dev: true - engines: - node: '>= 6' - resolution: - integrity: sha512-LAQ1d4OPfSJ/BMbI2DuizmYrrkD9JMaTdi2hQTlI53lQ4kRQPyZQRS4CYQ7O66bnBBnP/oYdRxbk++X0xuFU6A== - /@sindresorhus/is/0.7.0: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== - /@types/node/10.5.3: - dev: true - resolution: - integrity: sha512-jQ1p+SyF/z8ygPxfSPKZKMWazlCgTBSyIaC1UCUvkLHDdxdmPQtQFk02X4WFM31Z1BKMAS3MSAK0cRP2c92n6Q== - /abbrev/1.1.1: - dev: true - resolution: - integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - /acorn-jsx/3.0.1: - dependencies: - acorn: 3.3.0 - dev: true - resolution: - integrity: sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s= - /acorn/3.3.0: - dev: true - engines: - node: '>=0.4.0' - hasBin: true - resolution: - integrity: sha1-ReN/s56No/JbruP/U2niu18iAXo= - /acorn/5.7.1: - dev: true - engines: - node: '>=0.4.0' - hasBin: true - resolution: - integrity: sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ== - /ajv-keywords/2.1.1/ajv@5.5.2: - dependencies: - ajv: 5.5.2 - dev: true - id: registry.npmjs.org/ajv-keywords/2.1.1 - peerDependencies: - ajv: ^5.0.0 - resolution: - integrity: sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I= - /ajv/5.5.2: - dependencies: - co: 4.6.0 - fast-deep-equal: 1.1.0 - fast-json-stable-stringify: 2.0.0 - json-schema-traverse: 0.3.1 - dev: true - resolution: - integrity: sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= - /alphanum-sort/1.0.2: - dev: true - resolution: - integrity: sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= - /ansi-colors/2.0.5: - dev: true - engines: - node: '>=6' - resolution: - integrity: sha512-yAdfUZ+c2wetVNIFsNRn44THW+Lty6S5TwMpUfLA/UaGhiXbBv/F8E60/1hMLd0cnF/CDoWH8vzVaI5bAcHCjw== - /ansi-escapes/3.1.0: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw== - /ansi-regex/2.1.1: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - /ansi-regex/3.0.0: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - /ansi-styles/2.2.1: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= - /ansi-styles/3.2.1: - dependencies: - color-convert: 1.9.2 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - /ansi-to-html/0.6.6: - dependencies: - entities: 1.1.1 - dev: true - hasBin: true - resolution: - integrity: sha512-90M/2sZna3OsoOEbSyXK46poFnlClBC53Rx6etNKQK7iShsX5fI5E/M9Ld6FurtLaxAWLuAPi0Jp8p3y5oAkxg== - /anymatch/2.0.0: - dependencies: - micromatch: 3.1.10 - normalize-path: 2.1.1 - dev: true - resolution: - integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - /argparse/1.0.10: - dependencies: - sprintf-js: 1.0.3 - dev: true - resolution: - integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - /aria-query/3.0.0: - dependencies: - ast-types-flow: 0.0.7 - commander: 2.16.0 - dev: true - resolution: - integrity: sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w= - /arr-diff/4.0.0: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - /arr-flatten/1.1.0: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - /arr-union/3.1.0: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - /array-includes/3.0.3: - dependencies: - define-properties: 1.1.2 - es-abstract: 1.12.0 - dev: true - engines: - node: '>= 0.4' - resolution: - integrity: sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0= - /array-union/1.0.2: - dependencies: - array-uniq: 1.0.3 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= - /array-uniq/1.0.3: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= - /array-unique/0.3.2: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - /arrayify/1.0.0: - dev: true - resolution: - integrity: sha1-8GqYI1uO8UyhmVmSQRqf77TknPw= - /arrify/1.0.1: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= - /asia/0.19.7: - dependencies: - '@babel/code-frame': 7.0.0-beta.54 - ansi-colors: 2.0.5 - arrayify: 1.0.0 - clean-stacktrace: 1.1.0 - fast-glob: 2.2.2 - globrex: 0.1.1 - is-ci: 1.1.0 - is-observable: 1.1.0 - mkdirp: 0.5.1 - mri: 1.1.1 - observable-to-promise: 0.5.0 - p-map: 1.2.0 - p-map-series: 1.0.0 - p-reflect: 1.0.0 - pretty-ms: 3.2.0 - rimraf: 2.6.2 - serialize-error: 2.1.0 - supports-color: 5.4.0 - dev: true - engines: - node: ^8.9.0 || ^10.6.0 - hasBin: true - resolution: - integrity: sha512-oEfIqKZJrk0+ACnfJoX/OcxEa4aGba/lFt3FMEaWibkgnI5B9V8h4vMte0C5ufIhFDs6KG2tpgeZ4rBQ45QSAg== - /asn1.js/4.10.1: - dependencies: - bn.js: 4.11.8 - inherits: 2.0.3 - minimalistic-assert: 1.0.1 - dev: true - resolution: - integrity: sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== - /assert/1.4.1: - dependencies: - util: 0.10.3 - dev: true - resolution: - integrity: sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE= - /assign-symbols/1.0.0: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - /ast-types-flow/0.0.7: - dev: true - resolution: - integrity: sha1-9wtzXGvKGlycItmCw+Oef+ujva0= - /async-each/1.0.1: - dev: true - resolution: - integrity: sha1-GdOGodntxufByF04iu28xW0zYC0= - /async-limiter/1.0.0: - dev: true - resolution: - integrity: sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== - /atob/2.1.1: - dev: true - engines: - node: '>= 4.5.0' - hasBin: true - resolution: - integrity: sha1-ri1acpR38onWDdf5amMUoi3Wwio= - /autoprefixer/6.7.7: - dependencies: - browserslist: 1.7.7 - caniuse-db: 1.0.30000871 - normalize-range: 0.1.2 - num2fraction: 1.2.2 - postcss: 5.2.18 - postcss-value-parser: 3.3.0 - dev: true - resolution: - integrity: sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ= - /axobject-query/2.0.1: - dependencies: - ast-types-flow: 0.0.7 - dev: true - resolution: - integrity: sha1-Bd+nBa2orZ25k/polvItOVsLCgc= - /babel-code-frame/6.26.0: - dependencies: - chalk: 1.1.3 - esutils: 2.0.2 - js-tokens: 3.0.2 - dev: true - resolution: - integrity: sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= - /babel-core/6.26.3: - dependencies: - babel-code-frame: 6.26.0 - babel-generator: 6.26.1 - babel-helpers: 6.24.1 - babel-messages: 6.23.0 - babel-register: 6.26.0 - babel-runtime: 6.26.0 - babel-template: 6.26.0 - babel-traverse: 6.26.0 - babel-types: 6.26.0 - babylon: 6.18.0 - convert-source-map: 1.5.1 - debug: 2.6.9 - json5: 0.5.1 - lodash: 4.17.10 - minimatch: 3.0.4 - path-is-absolute: 1.0.1 - private: 0.1.8 - slash: 1.0.0 - source-map: 0.5.7 - dev: true - resolution: - integrity: sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== - /babel-eslint/8.2.6: - dependencies: - '@babel/code-frame': 7.0.0-beta.44 - '@babel/traverse': 7.0.0-beta.44 - '@babel/types': 7.0.0-beta.44 - babylon: 7.0.0-beta.44 - eslint-scope: 3.7.1 - eslint-visitor-keys: 1.0.0 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-aCdHjhzcILdP8c9lej7hvXKvQieyRt20SF102SIGyY4cUIiw6UaAtK4j2o3dXX74jEmy0TJ0CEhv4fTIM3SzcA== - /babel-generator/6.26.1: - dependencies: - babel-messages: 6.23.0 - babel-runtime: 6.26.0 - babel-types: 6.26.0 - detect-indent: 4.0.0 - jsesc: 1.3.0 - lodash: 4.17.10 - source-map: 0.5.7 - trim-right: 1.0.1 - dev: true - resolution: - integrity: sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== - /babel-helper-builder-binary-assignment-operator-visitor/6.24.1: - dependencies: - babel-helper-explode-assignable-expression: 6.24.1 - babel-runtime: 6.26.0 - babel-types: 6.26.0 - dev: true - resolution: - integrity: sha1-zORReto1b0IgvK6KAsKzRvmlZmQ= - /babel-helper-builder-react-jsx/6.26.0: - dependencies: - babel-runtime: 6.26.0 - babel-types: 6.26.0 - esutils: 2.0.2 - dev: true - resolution: - integrity: sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA= - /babel-helper-call-delegate/6.24.1: - dependencies: - babel-helper-hoist-variables: 6.24.1 - babel-runtime: 6.26.0 - babel-traverse: 6.26.0 - babel-types: 6.26.0 - dev: true - resolution: - integrity: sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340= - /babel-helper-define-map/6.26.0: - dependencies: - babel-helper-function-name: 6.24.1 - babel-runtime: 6.26.0 - babel-types: 6.26.0 - lodash: 4.17.10 - dev: true - resolution: - integrity: sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8= - /babel-helper-explode-assignable-expression/6.24.1: - dependencies: - babel-runtime: 6.26.0 - babel-traverse: 6.26.0 - babel-types: 6.26.0 - dev: true - resolution: - integrity: sha1-8luCz33BBDPFX3BZLVdGQArCLKo= - /babel-helper-function-name/6.24.1: - dependencies: - babel-helper-get-function-arity: 6.24.1 - babel-runtime: 6.26.0 - babel-template: 6.26.0 - babel-traverse: 6.26.0 - babel-types: 6.26.0 - dev: true - resolution: - integrity: sha1-00dbjAPtmCQqJbSDUasYOZ01gKk= - /babel-helper-get-function-arity/6.24.1: - dependencies: - babel-runtime: 6.26.0 - babel-types: 6.26.0 - dev: true - resolution: - integrity: sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0= - /babel-helper-hoist-variables/6.24.1: - dependencies: - babel-runtime: 6.26.0 - babel-types: 6.26.0 - dev: true - resolution: - integrity: sha1-HssnaJydJVE+rbyZFKc/VAi+enY= - /babel-helper-optimise-call-expression/6.24.1: - dependencies: - babel-runtime: 6.26.0 - babel-types: 6.26.0 - dev: true - resolution: - integrity: sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc= - /babel-helper-regex/6.26.0: - dependencies: - babel-runtime: 6.26.0 - babel-types: 6.26.0 - lodash: 4.17.10 - dev: true - resolution: - integrity: sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI= - /babel-helper-remap-async-to-generator/6.24.1: - dependencies: - babel-helper-function-name: 6.24.1 - babel-runtime: 6.26.0 - babel-template: 6.26.0 - babel-traverse: 6.26.0 - babel-types: 6.26.0 - dev: true - resolution: - integrity: sha1-XsWBgnrXI/7N04HxySg5BnbkVRs= - /babel-helper-replace-supers/6.24.1: - dependencies: - babel-helper-optimise-call-expression: 6.24.1 - babel-messages: 6.23.0 - babel-runtime: 6.26.0 - babel-template: 6.26.0 - babel-traverse: 6.26.0 - babel-types: 6.26.0 - dev: true - resolution: - integrity: sha1-v22/5Dk40XNpohPKiov3S2qQqxo= - /babel-helpers/6.24.1: - dependencies: - babel-runtime: 6.26.0 - babel-template: 6.26.0 - dev: true - resolution: - integrity: sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI= - /babel-messages/6.23.0: - dependencies: - babel-runtime: 6.26.0 - dev: true - resolution: - integrity: sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= - /babel-plugin-check-es2015-constants/6.22.0: - dependencies: - babel-runtime: 6.26.0 - dev: true - resolution: - integrity: sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o= - /babel-plugin-syntax-async-functions/6.13.0: - dev: true - resolution: - integrity: sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU= - /babel-plugin-syntax-async-generators/6.13.0: - dev: true - resolution: - integrity: sha1-a8lj67FuzLrmuStZbrfzXDQqi5o= - /babel-plugin-syntax-exponentiation-operator/6.13.0: - dev: true - resolution: - integrity: sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4= - /babel-plugin-syntax-flow/6.18.0: - dev: true - resolution: - integrity: sha1-TDqyCiryaqIM0lmVw5jE63AxDI0= - /babel-plugin-syntax-jsx/6.18.0: - dev: true - resolution: - integrity: sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= - /babel-plugin-syntax-object-rest-spread/6.13.0: - dev: true - resolution: - integrity: sha1-/WU28rzhODb/o6VFjEkDpZe7O/U= - /babel-plugin-syntax-trailing-function-commas/6.22.0: - dev: true - resolution: - integrity: sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM= - /babel-plugin-transform-async-generator-functions/6.24.1: - dependencies: - babel-helper-remap-async-to-generator: 6.24.1 - babel-plugin-syntax-async-generators: 6.13.0 - babel-runtime: 6.26.0 - dev: true - resolution: - integrity: sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds= - /babel-plugin-transform-async-to-generator/6.24.1: - dependencies: - babel-helper-remap-async-to-generator: 6.24.1 - babel-plugin-syntax-async-functions: 6.13.0 - babel-runtime: 6.26.0 - dev: true - resolution: - integrity: sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E= - /babel-plugin-transform-es2015-arrow-functions/6.22.0: - dependencies: - babel-runtime: 6.26.0 - dev: true - resolution: - integrity: sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE= - /babel-plugin-transform-es2015-block-scoped-functions/6.22.0: - dependencies: - babel-runtime: 6.26.0 - dev: true - resolution: - integrity: sha1-u8UbSflk1wy42OC5ToICRs46YUE= - /babel-plugin-transform-es2015-block-scoping/6.26.0: - dependencies: - babel-runtime: 6.26.0 - babel-template: 6.26.0 - babel-traverse: 6.26.0 - babel-types: 6.26.0 - lodash: 4.17.10 - dev: true - resolution: - integrity: sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8= - /babel-plugin-transform-es2015-classes/6.24.1: - dependencies: - babel-helper-define-map: 6.26.0 - babel-helper-function-name: 6.24.1 - babel-helper-optimise-call-expression: 6.24.1 - babel-helper-replace-supers: 6.24.1 - babel-messages: 6.23.0 - babel-runtime: 6.26.0 - babel-template: 6.26.0 - babel-traverse: 6.26.0 - babel-types: 6.26.0 - dev: true - resolution: - integrity: sha1-WkxYpQyclGHlZLSyo7+ryXolhNs= - /babel-plugin-transform-es2015-computed-properties/6.24.1: - dependencies: - babel-runtime: 6.26.0 - babel-template: 6.26.0 - dev: true - resolution: - integrity: sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM= - /babel-plugin-transform-es2015-destructuring/6.23.0: - dependencies: - babel-runtime: 6.26.0 - dev: true - resolution: - integrity: sha1-mXux8auWf2gtKwh2/jWNYOdlxW0= - /babel-plugin-transform-es2015-duplicate-keys/6.24.1: - dependencies: - babel-runtime: 6.26.0 - babel-types: 6.26.0 - dev: true - resolution: - integrity: sha1-c+s9MQypaePvnskcU3QabxV2Qj4= - /babel-plugin-transform-es2015-for-of/6.23.0: - dependencies: - babel-runtime: 6.26.0 - dev: true - resolution: - integrity: sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE= - /babel-plugin-transform-es2015-function-name/6.24.1: - dependencies: - babel-helper-function-name: 6.24.1 - babel-runtime: 6.26.0 - babel-types: 6.26.0 - dev: true - resolution: - integrity: sha1-g0yJhTvDaxrw86TF26qU/Y6sqos= - /babel-plugin-transform-es2015-literals/6.22.0: - dependencies: - babel-runtime: 6.26.0 - dev: true - resolution: - integrity: sha1-T1SgLWzWbPkVKAAZox0xklN3yi4= - /babel-plugin-transform-es2015-modules-amd/6.24.1: - dependencies: - babel-plugin-transform-es2015-modules-commonjs: 6.26.2 - babel-runtime: 6.26.0 - babel-template: 6.26.0 - dev: true - resolution: - integrity: sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ= - /babel-plugin-transform-es2015-modules-commonjs/6.26.2: - dependencies: - babel-plugin-transform-strict-mode: 6.24.1 - babel-runtime: 6.26.0 - babel-template: 6.26.0 - babel-types: 6.26.0 - dev: true - resolution: - integrity: sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q== - /babel-plugin-transform-es2015-modules-systemjs/6.24.1: - dependencies: - babel-helper-hoist-variables: 6.24.1 - babel-runtime: 6.26.0 - babel-template: 6.26.0 - dev: true - resolution: - integrity: sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM= - /babel-plugin-transform-es2015-modules-umd/6.24.1: - dependencies: - babel-plugin-transform-es2015-modules-amd: 6.24.1 - babel-runtime: 6.26.0 - babel-template: 6.26.0 - dev: true - resolution: - integrity: sha1-rJl+YoXNGO1hdq22B9YCNErThGg= - /babel-plugin-transform-es2015-object-super/6.24.1: - dependencies: - babel-helper-replace-supers: 6.24.1 - babel-runtime: 6.26.0 - dev: true - resolution: - integrity: sha1-JM72muIcuDp/hgPa0CH1cusnj40= - /babel-plugin-transform-es2015-parameters/6.24.1: - dependencies: - babel-helper-call-delegate: 6.24.1 - babel-helper-get-function-arity: 6.24.1 - babel-runtime: 6.26.0 - babel-template: 6.26.0 - babel-traverse: 6.26.0 - babel-types: 6.26.0 - dev: true - resolution: - integrity: sha1-V6w1GrScrxSpfNE7CfZv3wpiXys= - /babel-plugin-transform-es2015-shorthand-properties/6.24.1: - dependencies: - babel-runtime: 6.26.0 - babel-types: 6.26.0 - dev: true - resolution: - integrity: sha1-JPh11nIch2YbvZmkYi5R8U3jiqA= - /babel-plugin-transform-es2015-spread/6.22.0: - dependencies: - babel-runtime: 6.26.0 - dev: true - resolution: - integrity: sha1-1taKmfia7cRTbIGlQujdnxdG+NE= - /babel-plugin-transform-es2015-sticky-regex/6.24.1: - dependencies: - babel-helper-regex: 6.26.0 - babel-runtime: 6.26.0 - babel-types: 6.26.0 - dev: true - resolution: - integrity: sha1-AMHNsaynERLN8M9hJsLta0V8zbw= - /babel-plugin-transform-es2015-template-literals/6.22.0: - dependencies: - babel-runtime: 6.26.0 - dev: true - resolution: - integrity: sha1-qEs0UPfp+PH2g51taH2oS7EjbY0= - /babel-plugin-transform-es2015-typeof-symbol/6.23.0: - dependencies: - babel-runtime: 6.26.0 - dev: true - resolution: - integrity: sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I= - /babel-plugin-transform-es2015-unicode-regex/6.24.1: - dependencies: - babel-helper-regex: 6.26.0 - babel-runtime: 6.26.0 - regexpu-core: 2.0.0 - dev: true - resolution: - integrity: sha1-04sS9C6nMj9yk4fxinxa4frrNek= - /babel-plugin-transform-exponentiation-operator/6.24.1: - dependencies: - babel-helper-builder-binary-assignment-operator-visitor: 6.24.1 - babel-plugin-syntax-exponentiation-operator: 6.13.0 - babel-runtime: 6.26.0 - dev: true - resolution: - integrity: sha1-KrDJx/MJj6SJB3cruBP+QejeOg4= - /babel-plugin-transform-flow-strip-types/6.22.0: - dependencies: - babel-plugin-syntax-flow: 6.18.0 - babel-runtime: 6.26.0 - dev: true - resolution: - integrity: sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988= - /babel-plugin-transform-object-rest-spread/6.26.0: - dependencies: - babel-plugin-syntax-object-rest-spread: 6.13.0 - babel-runtime: 6.26.0 - dev: true - resolution: - integrity: sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY= - /babel-plugin-transform-react-jsx/6.24.1: - dependencies: - babel-helper-builder-react-jsx: 6.26.0 - babel-plugin-syntax-jsx: 6.18.0 - babel-runtime: 6.26.0 - dev: true - resolution: - integrity: sha1-hAoCjn30YN/DotKfDA2R9jduZqM= - /babel-plugin-transform-regenerator/6.26.0: - dependencies: - regenerator-transform: 0.10.1 - dev: true - resolution: - integrity: sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8= - /babel-plugin-transform-strict-mode/6.24.1: - dependencies: - babel-runtime: 6.26.0 - babel-types: 6.26.0 - dev: true - resolution: - integrity: sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g= - /babel-preset-env/1.7.0: - dependencies: - babel-plugin-check-es2015-constants: 6.22.0 - babel-plugin-syntax-trailing-function-commas: 6.22.0 - babel-plugin-transform-async-to-generator: 6.24.1 - babel-plugin-transform-es2015-arrow-functions: 6.22.0 - babel-plugin-transform-es2015-block-scoped-functions: 6.22.0 - babel-plugin-transform-es2015-block-scoping: 6.26.0 - babel-plugin-transform-es2015-classes: 6.24.1 - babel-plugin-transform-es2015-computed-properties: 6.24.1 - babel-plugin-transform-es2015-destructuring: 6.23.0 - babel-plugin-transform-es2015-duplicate-keys: 6.24.1 - babel-plugin-transform-es2015-for-of: 6.23.0 - babel-plugin-transform-es2015-function-name: 6.24.1 - babel-plugin-transform-es2015-literals: 6.22.0 - babel-plugin-transform-es2015-modules-amd: 6.24.1 - babel-plugin-transform-es2015-modules-commonjs: 6.26.2 - babel-plugin-transform-es2015-modules-systemjs: 6.24.1 - babel-plugin-transform-es2015-modules-umd: 6.24.1 - babel-plugin-transform-es2015-object-super: 6.24.1 - babel-plugin-transform-es2015-parameters: 6.24.1 - babel-plugin-transform-es2015-shorthand-properties: 6.24.1 - babel-plugin-transform-es2015-spread: 6.22.0 - babel-plugin-transform-es2015-sticky-regex: 6.24.1 - babel-plugin-transform-es2015-template-literals: 6.22.0 - babel-plugin-transform-es2015-typeof-symbol: 6.23.0 - babel-plugin-transform-es2015-unicode-regex: 6.24.1 - babel-plugin-transform-exponentiation-operator: 6.24.1 - babel-plugin-transform-regenerator: 6.26.0 - browserslist: 3.2.8 - invariant: 2.2.4 - semver: 5.5.0 - dev: true - resolution: - integrity: sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg== - /babel-preset-flow/6.23.0: - dependencies: - babel-plugin-transform-flow-strip-types: 6.22.0 - dev: true - resolution: - integrity: sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0= - /babel-preset-stage-3/6.24.1: - dependencies: - babel-plugin-syntax-trailing-function-commas: 6.22.0 - babel-plugin-transform-async-generator-functions: 6.24.1 - babel-plugin-transform-async-to-generator: 6.24.1 - babel-plugin-transform-exponentiation-operator: 6.24.1 - babel-plugin-transform-object-rest-spread: 6.26.0 - dev: true - resolution: - integrity: sha1-g2raCp56f6N8sTj7kyb4eTSkg5U= - /babel-register/6.26.0: - dependencies: - babel-core: 6.26.3 - babel-runtime: 6.26.0 - core-js: 2.5.7 - home-or-tmp: 2.0.0 - lodash: 4.17.10 - mkdirp: 0.5.1 - source-map-support: 0.4.18 - dev: true - resolution: - integrity: sha1-btAhFz4vy0htestFxgCahW9kcHE= - /babel-runtime/6.26.0: - dependencies: - core-js: 2.5.7 - regenerator-runtime: 0.11.1 - dev: true - resolution: - integrity: sha1-llxwWGaOgrVde/4E/yM3vItWR/4= - /babel-template/6.26.0: - dependencies: - babel-runtime: 6.26.0 - babel-traverse: 6.26.0 - babel-types: 6.26.0 - babylon: 6.18.0 - lodash: 4.17.10 - dev: true - resolution: - integrity: sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= - /babel-traverse/6.26.0: - dependencies: - babel-code-frame: 6.26.0 - babel-messages: 6.23.0 - babel-runtime: 6.26.0 - babel-types: 6.26.0 - babylon: 6.18.0 - debug: 2.6.9 - globals: 9.18.0 - invariant: 2.2.4 - lodash: 4.17.10 - dev: true - resolution: - integrity: sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= - /babel-types/6.26.0: - dependencies: - babel-runtime: 6.26.0 - esutils: 2.0.2 - lodash: 4.17.10 - to-fast-properties: 1.0.3 - dev: true - resolution: - integrity: sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= - /babylon-walk/1.0.2: - dependencies: - babel-runtime: 6.26.0 - babel-types: 6.26.0 - lodash.clone: 4.5.0 - dev: true - resolution: - integrity: sha1-OxWl3btIKni0zpwByLoYFwLZ1s4= - /babylon/6.18.0: - dev: true - hasBin: true - resolution: - integrity: sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== - /babylon/7.0.0-beta.44: - dev: true - engines: - node: '>=4.2.0' - hasBin: true - resolution: - integrity: sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g== - /balanced-match/0.4.2: - dev: true - resolution: - integrity: sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg= - /balanced-match/1.0.0: - dev: true - resolution: - integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - /base/0.11.2: - dependencies: - cache-base: 1.0.1 - class-utils: 0.3.6 - component-emitter: 1.2.1 - define-property: 1.0.0 - isobject: 3.0.1 - mixin-deep: 1.3.1 - pascalcase: 0.1.1 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - /base64-js/1.3.0: - dev: true - resolution: - integrity: sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw== - /binary-extensions/1.11.0: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-RqoXUftqL5PuXmibsQh9SxTGwgU= - /bindings/1.2.1: - dev: true - resolution: - integrity: sha1-FK1hE4EtLTfXLme0ystLtyZQXxE= - /bluebird/3.5.1: - dev: true - resolution: - integrity: sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA== - /bn.js/4.11.8: - dev: true - resolution: - integrity: sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== - /boolbase/1.0.0: - dev: true - resolution: - integrity: sha1-aN/1++YMUes3cl6p4+0xDcwed24= - /brace-expansion/1.1.11: - dependencies: - balanced-match: 1.0.0 - concat-map: 0.0.1 - dev: true - resolution: - integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - /braces/2.3.2: - dependencies: - arr-flatten: 1.1.0 - array-unique: 0.3.2 - extend-shallow: 2.0.1 - fill-range: 4.0.0 - isobject: 3.0.1 - repeat-element: 1.1.2 - snapdragon: 0.8.2 - snapdragon-node: 2.1.1 - split-string: 3.1.0 - to-regex: 3.0.2 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - /brfs/1.6.1: - dependencies: - quote-stream: 1.0.2 - resolve: 1.8.1 - static-module: 2.2.5 - through2: 2.0.3 - dev: true - hasBin: true - resolution: - integrity: sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ== - /brorand/1.1.0: - dev: true - resolution: - integrity: sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= - /browserify-aes/1.2.0: - dependencies: - buffer-xor: 1.0.3 - cipher-base: 1.0.4 - create-hash: 1.2.0 - evp_bytestokey: 1.0.3 - inherits: 2.0.3 - safe-buffer: 5.1.2 - dev: true - resolution: - integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - /browserify-cipher/1.0.1: - dependencies: - browserify-aes: 1.2.0 - browserify-des: 1.0.2 - evp_bytestokey: 1.0.3 - dev: true - resolution: - integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - /browserify-des/1.0.2: - dependencies: - cipher-base: 1.0.4 - des.js: 1.0.0 - inherits: 2.0.3 - safe-buffer: 5.1.2 - dev: true - resolution: - integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - /browserify-rsa/4.0.1: - dependencies: - bn.js: 4.11.8 - randombytes: 2.0.6 - dev: true - resolution: - integrity: sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= - /browserify-sign/4.0.4: - dependencies: - bn.js: 4.11.8 - browserify-rsa: 4.0.1 - create-hash: 1.2.0 - create-hmac: 1.1.7 - elliptic: 6.4.0 - inherits: 2.0.3 - parse-asn1: 5.1.1 - dev: true - resolution: - integrity: sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= - /browserify-zlib/0.2.0: - dependencies: - pako: 1.0.6 - dev: true - resolution: - integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== - /browserslist/1.7.7: - dependencies: - caniuse-db: 1.0.30000871 - electron-to-chromium: 1.3.52 - deprecated: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools. - dev: true - hasBin: true - resolution: - integrity: sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk= - /browserslist/3.2.8: - dependencies: - caniuse-lite: 1.0.30000865 - electron-to-chromium: 1.3.52 - dev: true - hasBin: true - resolution: - integrity: sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ== - /browserslist/4.0.1: - dependencies: - caniuse-lite: 1.0.30000865 - electron-to-chromium: 1.3.52 - node-releases: 1.0.0-alpha.10 - dev: true - hasBin: true - resolution: - integrity: sha512-QqiiIWchEIkney3wY53/huI7ZErouNAdvOkjorUALAwRcu3tEwOV3Sh6He0DnP38mz1JjBpCBb50jQBmaYuHPw== - /buffer-equal/0.0.1: - dev: true - engines: - node: '>=0.4.0' - resolution: - integrity: sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs= - /buffer-from/1.1.0: - dev: true - resolution: - integrity: sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ== - /buffer-xor/1.0.3: - dev: true - resolution: - integrity: sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= - /buffer/4.9.1: - dependencies: - base64-js: 1.3.0 - ieee754: 1.1.12 - isarray: 1.0.0 - dev: true - resolution: - integrity: sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg= - /builtin-modules/1.1.1: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= - /builtin-status-codes/3.0.0: - dev: true - resolution: - integrity: sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= - /cache-base/1.0.1: - dependencies: - collection-visit: 1.0.0 - component-emitter: 1.2.1 - get-value: 2.0.6 - has-value: 1.0.0 - isobject: 3.0.1 - set-value: 2.0.0 - to-object-path: 0.3.0 - union-value: 1.0.0 - unset-value: 1.0.0 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - /cacheable-request/2.1.4: - dependencies: - clone-response: 1.0.2 - get-stream: 3.0.0 - http-cache-semantics: 3.8.1 - keyv: 3.0.0 - lowercase-keys: 1.0.0 - normalize-url: 2.0.1 - responselike: 1.0.2 - dev: true - resolution: - integrity: sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0= - /call-me-maybe/1.0.1: - dev: true - resolution: - integrity: sha1-JtII6onje1y95gJQoV8DHBak1ms= - /caller-path/0.1.0: - dependencies: - callsites: 0.2.0 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8= - /callsites/0.2.0: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo= - /caniuse-api/1.6.1: - dependencies: - browserslist: 1.7.7 - caniuse-db: 1.0.30000871 - lodash.memoize: 4.1.2 - lodash.uniq: 4.5.0 - dev: true - resolution: - integrity: sha1-tTTnxzTE+B7F++isoq0kNUuWLGw= - /caniuse-api/3.0.0: - dependencies: - browserslist: 4.0.1 - caniuse-lite: 1.0.30000865 - lodash.memoize: 4.1.2 - lodash.uniq: 4.5.0 - dev: true - resolution: - integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== - /caniuse-db/1.0.30000871: - dev: true - resolution: - integrity: sha1-8ZlcH+MYkmSadgWVeoDJJRhCPU0= - /caniuse-lite/1.0.30000865: - dev: true - resolution: - integrity: sha512-vs79o1mOSKRGv/1pSkp4EXgl4ZviWeYReXw60XfacPU64uQWZwJT6vZNmxRF9O+6zu71sJwMxLK5JXxbzuVrLw== - /chalk/1.1.3: - dependencies: - ansi-styles: 2.2.1 - escape-string-regexp: 1.0.5 - has-ansi: 2.0.0 - strip-ansi: 3.0.1 - supports-color: 2.0.0 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= - /chalk/2.4.1: - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.4.0 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ== - /chardet/0.4.2: - dev: true - resolution: - integrity: sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= - /chokidar/2.0.4: - dependencies: - anymatch: 2.0.0 - async-each: 1.0.1 - braces: 2.3.2 - glob-parent: 3.1.0 - inherits: 2.0.3 - is-binary-path: 1.0.1 - is-glob: 4.0.0 - lodash.debounce: 4.0.8 - normalize-path: 2.1.1 - path-is-absolute: 1.0.1 - readdirp: 2.1.0 - upath: 1.1.0 - dev: true - optionalDependencies: - fsevents: 1.2.4 - resolution: - integrity: sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ== - /ci-info/1.1.3: - dev: true - resolution: - integrity: sha512-SK/846h/Rcy8q9Z9CAwGBLfCJ6EkjJWdpelWDufQpqVDYq2Wnnv8zlSO6AMQap02jvhVruKKpEtQOufo3pFhLg== - /cipher-base/1.0.4: - dependencies: - inherits: 2.0.3 - safe-buffer: 5.1.2 - dev: true - resolution: - integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - /circular-json/0.3.3: - dev: true - resolution: - integrity: sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== - /clap/1.2.3: - dependencies: - chalk: 1.1.3 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA== - /class-utils/0.3.6: - dependencies: - arr-union: 3.1.0 - define-property: 0.2.5 - isobject: 3.0.1 - static-extend: 0.1.2 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - /clean-regexp/1.0.0: - dependencies: - escape-string-regexp: 1.0.5 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-jffHquUf02h06PjQW5GAvBGj/tc= - /clean-stacktrace/1.1.0: - dependencies: - stack-utils-node-internals: 1.0.1 - dev: true - resolution: - integrity: sha1-i4zch/ZA2qupxZWrbtuJe2OwzjM= - /cli-cursor/2.1.0: - dependencies: - restore-cursor: 2.0.0 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= - /cli-spinners/1.3.1: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg== - /cli-width/2.2.0: - dev: true - resolution: - integrity: sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= - /clone-response/1.0.2: - dependencies: - mimic-response: 1.0.1 - dev: true - resolution: - integrity: sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= - /clone/1.0.4: - dev: true - engines: - node: '>=0.8' - resolution: - integrity: sha1-2jCcwmPfFZlMaIypAheco8fNfH4= - /clone/2.1.1: - dev: true - engines: - node: '>=0.8' - resolution: - integrity: sha1-0hfR6WERjjrJpLi7oyhVU79kfNs= - /clones/1.1.0: - dev: true - engines: - node: '>=4.0.0' - resolution: - integrity: sha1-h+kEEy1hQMXAtyAGwIwNBb17Y7M= - /co/4.6.0: - dev: true - engines: - iojs: '>= 1.0.0' - node: '>= 0.12.0' - resolution: - integrity: sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= - /coa/1.0.4: - dependencies: - q: 1.5.1 - dev: true - engines: - node: '>= 0.8.0' - resolution: - integrity: sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0= - /coa/2.0.1: - dependencies: - q: 1.5.1 - dev: true - engines: - node: '>= 4.0' - resolution: - integrity: sha512-5wfTTO8E2/ja4jFSxePXlG5nRu5bBtL/r1HCIpJW/lzT6yDtKl0u0Z4o/Vpz32IpKmBn7HerheEZQgA9N2DarQ== - /collect-mentions/0.1.1: - dependencies: - mentions-regex: 2.0.3 - dev: true - engines: - node: '>=8' - npm: '>=5' - yarn: '>=1' - resolution: - integrity: sha512-seEeKufgpcHKbW41+o7EoW0hyjLAvjYRbFeAVgPUADTCfDMzFeMlXjFdAa5X5JThp/05Tpn3K2Xl/7r9a5BpHw== - /collect-mentions/1.0.2: - dependencies: - mentions-regex: 2.0.3 - dev: false - engines: - node: ^6.9.0 || ^8.9.0 || ^10.6.0 - resolution: - integrity: sha512-/jRhzWp5bkZnvgtR+agXT0RvYKBXOl4uG+eKA6ip3tp1x+jRAV36jW2TceKutOeuEPjHKaQ6DJjeh5zvZF0fWQ== - /collection-visit/1.0.0: - dependencies: - map-visit: 1.0.0 - object-visit: 1.0.1 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - /color-convert/1.9.2: - dependencies: - color-name: 1.1.1 - dev: true - resolution: - integrity: sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg== - /color-name/1.1.1: - dev: true - resolution: - integrity: sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok= - /color-name/1.1.3: - dev: true - resolution: - integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - /color-string/0.3.0: - dependencies: - color-name: 1.1.3 - dev: true - resolution: - integrity: sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE= - /color-string/1.5.2: - dependencies: - color-name: 1.1.3 - simple-swizzle: 0.2.2 - dev: true - resolution: - integrity: sha1-JuRYFLw8mny9Z1FkikFDRRSnc6k= - /color/0.11.4: - dependencies: - clone: 1.0.4 - color-convert: 1.9.2 - color-string: 0.3.0 - dev: true - resolution: - integrity: sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q= - /color/3.0.0: - dependencies: - color-convert: 1.9.2 - color-string: 1.5.2 - dev: true - resolution: - integrity: sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w== - /colormin/1.1.2: - dependencies: - color: 0.11.4 - css-color-names: 0.0.4 - has: 1.0.3 - dev: true - resolution: - integrity: sha1-6i90IKcrlogaOKrlnsEkpvcpgTM= - /colors/1.1.2: - dev: true - engines: - node: '>=0.1.90' - resolution: - integrity: sha1-FopHAXVran9RoSzgyXv6KMCE7WM= - /command-exists/1.2.7: - dev: true - resolution: - integrity: sha512-doWDvhXCcW5LK0cIUWrOQ8oMFXJv3lEQCkJpGVjM8v9SV0uhqYXB943538tEA2CiaWqSyuYUGAm5ezDwEx9xlw== - /commander/2.13.0: - dev: true - resolution: - integrity: sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA== - /commander/2.16.0: - dev: true - resolution: - integrity: sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew== - /commondir/1.0.1: - dev: true - resolution: - integrity: sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= - /component-emitter/1.2.1: - dev: true - resolution: - integrity: sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= - /concat-map/0.0.1: - dev: true - resolution: - integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - /concat-stream/1.6.2: - dependencies: - buffer-from: 1.1.0 - inherits: 2.0.3 - readable-stream: 2.3.6 - typedarray: 0.0.6 - dev: true - engines: - '0': node >= 0.8 - resolution: - integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - /config-chain/1.1.11: - dependencies: - ini: 1.3.5 - proto-list: 1.2.4 - dev: true - resolution: - integrity: sha1-q6CXR9++TD5w52am5BWG4YWfxvI= - /console-browserify/1.1.0: - dependencies: - date-now: 0.1.4 - dev: true - resolution: - integrity: sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA= - /constants-browserify/1.0.0: - dev: true - resolution: - integrity: sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= - /contains-path/0.1.0: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= - /convert-source-map/1.5.1: - dev: true - resolution: - integrity: sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU= - /copy-descriptor/0.1.1: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - /core-js/2.5.7: - dev: true - resolution: - integrity: sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw== - /core-util-is/1.0.2: - dev: true - resolution: - integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - /cosmiconfig/5.0.5: - dependencies: - is-directory: 0.3.1 - js-yaml: 3.12.0 - parse-json: 4.0.0 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-94j37OtvxS5w7qr7Ta6dt67tWdnOxigBVN4VnSxNXFez9o18PGQ0D33SchKP17r9LAcWVTYV72G6vDayAUBFIg== - /create-ecdh/4.0.3: - dependencies: - bn.js: 4.11.8 - elliptic: 6.4.0 - dev: true - resolution: - integrity: sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== - /create-hash/1.2.0: - dependencies: - cipher-base: 1.0.4 - inherits: 2.0.3 - md5.js: 1.3.4 - ripemd160: 2.0.2 - sha.js: 2.4.11 - dev: true - resolution: - integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - /create-hmac/1.1.7: - dependencies: - cipher-base: 1.0.4 - create-hash: 1.2.0 - inherits: 2.0.3 - ripemd160: 2.0.2 - safe-buffer: 5.1.2 - sha.js: 2.4.11 - dev: true - resolution: - integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - /cross-spawn/5.1.0: - dependencies: - lru-cache: 4.1.3 - shebang-command: 1.2.0 - which: 1.3.1 - dev: true - resolution: - integrity: sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= - /cross-spawn/6.0.5: - dependencies: - nice-try: 1.0.4 - path-key: 2.0.1 - semver: 5.5.0 - shebang-command: 1.2.0 - which: 1.3.1 - dev: true - engines: - node: '>=4.8' - resolution: - integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - /crypto-browserify/3.12.0: - dependencies: - browserify-cipher: 1.0.1 - browserify-sign: 4.0.4 - create-ecdh: 4.0.3 - create-hash: 1.2.0 - create-hmac: 1.1.7 - diffie-hellman: 5.0.3 - inherits: 2.0.3 - pbkdf2: 3.0.16 - public-encrypt: 4.0.2 - randombytes: 2.0.6 - randomfill: 1.0.4 - dev: true - resolution: - integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== - /css-color-names/0.0.4: - dev: true - resolution: - integrity: sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= - /css-declaration-sorter/3.0.1: - dependencies: - postcss: 6.0.23 - timsort: 0.3.0 - dev: true - resolution: - integrity: sha512-jH4024SHZ3e0M7ann9VxpFpH3moplRXNz9ZBqvFMZqi09Yo5ARbs2wdPH8GqN9iRTlQynrbGbraNbBxBLei85Q== - /css-select-base-adapter/0.1.0: - dev: true - resolution: - integrity: sha1-AQKz0UYw34bD65+p9UVicBBs+ZA= - /css-select/1.3.0-rc0: - dependencies: - boolbase: 1.0.0 - css-what: 2.1.0 - domutils: 1.5.1 - nth-check: 1.0.1 - dev: true - resolution: - integrity: sha1-b5MZaqrnN2ZuoQNqjLFKj8t6kjE= - /css-tree/1.0.0-alpha.29: - dependencies: - mdn-data: 1.1.4 - source-map: 0.5.7 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg== - /css-tree/1.0.0-alpha25: - dependencies: - mdn-data: 1.1.4 - source-map: 0.5.7 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-XC6xLW/JqIGirnZuUWHXCHRaAjje2b3OIB0Vj5RIJo6mIi/AdJo30quQl5LxUl0gkXDIrTrFGbMlcZjyFplz1A== - /css-unit-converter/1.1.1: - dev: true - resolution: - integrity: sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY= - /css-url-regex/1.1.0: - dev: true - resolution: - integrity: sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w= - /css-what/2.1.0: - dev: true - resolution: - integrity: sha1-lGfQMsOM+u+58teVASUwYvh/ob0= - /cssnano-preset-default/4.0.0: - dependencies: - css-declaration-sorter: 3.0.1 - cssnano-util-raw-cache: 4.0.0 - postcss: 6.0.23 - postcss-calc: 6.0.1 - postcss-colormin: 4.0.1 - postcss-convert-values: 4.0.0 - postcss-discard-comments: 4.0.0 - postcss-discard-duplicates: 4.0.0 - postcss-discard-empty: 4.0.0 - postcss-discard-overridden: 4.0.0 - postcss-merge-longhand: 4.0.3 - postcss-merge-rules: 4.0.1 - postcss-minify-font-values: 4.0.0 - postcss-minify-gradients: 4.0.0 - postcss-minify-params: 4.0.0 - postcss-minify-selectors: 4.0.0 - postcss-normalize-charset: 4.0.0 - postcss-normalize-display-values: 4.0.0 - postcss-normalize-positions: 4.0.0 - postcss-normalize-repeat-style: 4.0.0 - postcss-normalize-string: 4.0.0 - postcss-normalize-timing-functions: 4.0.0 - postcss-normalize-unicode: 4.0.0 - postcss-normalize-url: 4.0.0 - postcss-normalize-whitespace: 4.0.0 - postcss-ordered-values: 4.0.0 - postcss-reduce-initial: 4.0.1 - postcss-reduce-transforms: 4.0.0 - postcss-svgo: 4.0.0 - postcss-unique-selectors: 4.0.0 - dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha1-wzQoe099SfstFwqS+SFGVXiOO2s= - /cssnano-util-get-arguments/4.0.0: - dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= - /cssnano-util-get-match/4.0.0: - dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= - /cssnano-util-raw-cache/4.0.0: - dependencies: - postcss: 6.0.23 - dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha1-vgooVuJfGF9feivMBiTii38Xmp8= - /cssnano-util-same-parent/4.0.0: - dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha1-0qPeEDmqmLxOwlAB+gUDMMKhbaw= - /cssnano/3.10.0: - dependencies: - autoprefixer: 6.7.7 - decamelize: 1.2.0 - defined: 1.0.0 - has: 1.0.3 - object-assign: 4.1.1 - postcss: 5.2.18 - postcss-calc: 5.3.1 - postcss-colormin: 2.2.2 - postcss-convert-values: 2.6.1 - postcss-discard-comments: 2.0.4 - postcss-discard-duplicates: 2.1.0 - postcss-discard-empty: 2.1.0 - postcss-discard-overridden: 0.1.1 - postcss-discard-unused: 2.2.3 - postcss-filter-plugins: 2.0.3 - postcss-merge-idents: 2.1.7 - postcss-merge-longhand: 2.0.2 - postcss-merge-rules: 2.1.2 - postcss-minify-font-values: 1.0.5 - postcss-minify-gradients: 1.0.5 - postcss-minify-params: 1.2.2 - postcss-minify-selectors: 2.1.1 - postcss-normalize-charset: 1.1.1 - postcss-normalize-url: 3.0.8 - postcss-ordered-values: 2.2.3 - postcss-reduce-idents: 2.4.0 - postcss-reduce-initial: 1.0.1 - postcss-reduce-transforms: 1.0.4 - postcss-svgo: 2.1.6 - postcss-unique-selectors: 2.0.2 - postcss-value-parser: 3.3.0 - postcss-zindex: 2.2.0 - dev: true - resolution: - integrity: sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg= - /cssnano/4.0.4: - dependencies: - cosmiconfig: 5.0.5 - cssnano-preset-default: 4.0.0 - is-resolvable: 1.1.0 - postcss: 6.0.23 - dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha1-ijl7XjB+Bv1+NhvxE0Sxz/h0moY= - /csso/2.3.2: - dependencies: - clap: 1.2.3 - source-map: 0.5.7 - dev: true - engines: - node: '>=0.10.0' - hasBin: true - resolution: - integrity: sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U= - /csso/3.5.1: - dependencies: - css-tree: 1.0.0-alpha.29 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg== - /damerau-levenshtein/1.0.4: - dev: true - resolution: - integrity: sha1-AxkcQyy27qFou3fzpV/9zLiXhRQ= - /date-now/0.1.4: - dev: true - resolution: - integrity: sha1-6vQ5/U1ISK105cx9vvIAZyueNFs= - /deasync/0.1.13: - dependencies: - bindings: 1.2.1 - nan: 2.10.0 - dev: true - engines: - node: '>=0.11.0' - requiresBuild: true - resolution: - integrity: sha512-/6ngYM7AapueqLtvOzjv9+11N2fHDSrkxeMF1YPE20WIfaaawiBg+HZH1E5lHrcJxlKR42t6XPOEmMmqcAsU1g== - /debug/2.6.9: - dependencies: - ms: 2.0.0 - dev: true - resolution: - integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - /debug/3.1.0: - dependencies: - ms: 2.0.0 - dev: true - resolution: - integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - /decamelize/1.2.0: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - /decode-uri-component/0.2.0: - dev: true - engines: - node: '>=0.10' - resolution: - integrity: sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - /decompress-response/3.3.0: - dependencies: - mimic-response: 1.0.1 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= - /deep-extend/0.6.0: - dev: true - engines: - node: '>=4.0.0' - resolution: - integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - /deep-is/0.1.3: - dev: true - resolution: - integrity: sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - /defaults/1.0.3: - dependencies: - clone: 1.0.4 - dev: true - resolution: - integrity: sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= - /define-properties/1.1.2: - dependencies: - foreach: 2.0.5 - object-keys: 1.0.12 - dev: true - engines: - node: '>= 0.4' - resolution: - integrity: sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ= - /define-property/0.2.5: - dependencies: - is-descriptor: 0.1.6 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - /define-property/1.0.0: - dependencies: - is-descriptor: 1.0.2 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - /define-property/2.0.2: - dependencies: - is-descriptor: 1.0.2 - isobject: 3.0.1 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - /defined/1.0.0: - dev: true - resolution: - integrity: sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= - /del/2.2.2: - dependencies: - globby: 5.0.0 - is-path-cwd: 1.0.0 - is-path-in-cwd: 1.0.1 - object-assign: 4.1.1 - pify: 2.3.0 - pinkie-promise: 2.0.1 - rimraf: 2.6.2 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag= - /depd/1.1.2: - dev: true - engines: - node: '>= 0.6' - resolution: - integrity: sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - /des.js/1.0.0: - dependencies: - inherits: 2.0.3 - minimalistic-assert: 1.0.1 - dev: true - resolution: - integrity: sha1-wHTS4qpqipoH29YfmhXCzYPsjsw= - /destroy/1.0.4: - dev: true - resolution: - integrity: sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= - /detect-indent/4.0.0: - dependencies: - repeating: 2.0.1 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-920GQ1LN9Docts5hnE7jqUdd4gg= - /detect-next-version/2.0.2: - dependencies: - parse-commit-message: 1.1.2 - dev: true - engines: - node: '>=8' - npm: '>=5' - yarn: '>=1' - resolution: - integrity: sha512-NDny9xVHzmGm8aJ1zliz3Z2KAb0U1qFopXqWRahR+lowdtPxL34HYM3aICX4yRrFLY+/dExOER/NGVnN7pNLvw== - /diffie-hellman/5.0.3: - dependencies: - bn.js: 4.11.8 - miller-rabin: 4.0.1 - randombytes: 2.0.6 - dev: true - resolution: - integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== - /doctrine/1.5.0: - dependencies: - esutils: 2.0.2 - isarray: 1.0.0 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= - /doctrine/2.1.0: - dependencies: - esutils: 2.0.2 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - /dom-serializer/0.1.0: - dependencies: - domelementtype: 1.1.3 - entities: 1.1.1 - dev: true - resolution: - integrity: sha1-BzxpdUbOB4DOI75KKOKT5AvDDII= - /domain-browser/1.2.0: - dev: true - engines: - node: '>=0.4' - npm: '>=1.2' - resolution: - integrity: sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== - /domelementtype/1.1.3: - dev: true - resolution: - integrity: sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs= - /domelementtype/1.3.0: - dev: true - resolution: - integrity: sha1-sXrtguirWeUt2cGbF1bg/BhyBMI= - /domhandler/2.4.2: - dependencies: - domelementtype: 1.3.0 - dev: true - resolution: - integrity: sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== - /domutils/1.5.1: - dependencies: - dom-serializer: 0.1.0 - domelementtype: 1.3.0 - dev: true - resolution: - integrity: sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= - /domutils/1.7.0: - dependencies: - dom-serializer: 0.1.0 - domelementtype: 1.3.0 - dev: true - resolution: - integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - /dot-prop/4.2.0: - dependencies: - is-obj: 1.0.1 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== - /dotenv/5.0.1: - dev: true - engines: - node: '>=4.6.0' - resolution: - integrity: sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow== - /duplexer2/0.1.4: - dependencies: - readable-stream: 2.3.6 - dev: true - resolution: - integrity: sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= - /duplexer3/0.1.4: - dev: true - resolution: - integrity: sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= - /editorconfig/0.13.3: - dependencies: - bluebird: 3.5.1 - commander: 2.16.0 - lru-cache: 3.2.0 - semver: 5.5.0 - sigmund: 1.0.1 - dev: true - hasBin: true - resolution: - integrity: sha512-WkjsUNVCu+ITKDj73QDvi0trvpdDWdkDyHybDGSXPfekLCqwmpD7CP7iPbvBgosNuLcI96XTDwNa75JyFl7tEQ== - /ee-first/1.1.1: - dev: true - resolution: - integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - /electron-to-chromium/1.3.52: - dev: true - resolution: - integrity: sha1-0tnxJwuko7lnuDHEDvcftNmrXOA= - /elliptic/6.4.0: - dependencies: - bn.js: 4.11.8 - brorand: 1.1.0 - hash.js: 1.1.5 - hmac-drbg: 1.0.1 - inherits: 2.0.3 - minimalistic-assert: 1.0.1 - minimalistic-crypto-utils: 1.0.1 - dev: true - resolution: - integrity: sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8= - /emoji-regex/6.5.1: - dev: true - resolution: - integrity: sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ== - /encodeurl/1.0.2: - dev: true - engines: - node: '>= 0.8' - resolution: - integrity: sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= - /entities/1.1.1: - dev: true - resolution: - integrity: sha1-blwtClYhtdra7O+AuQ7ftc13cvA= - /error-ex/1.3.2: - dependencies: - is-arrayish: 0.2.1 - dev: true - resolution: - integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - /es-abstract/1.12.0: - dependencies: - es-to-primitive: 1.1.1 - function-bind: 1.1.1 - has: 1.0.3 - is-callable: 1.1.4 - is-regex: 1.0.4 - dev: true - engines: - node: '>= 0.4' - resolution: - integrity: sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA== - /es-to-primitive/1.1.1: - dependencies: - is-callable: 1.1.4 - is-date-object: 1.0.1 - is-symbol: 1.0.1 - dev: true - engines: - node: '>= 0.4' - resolution: - integrity: sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0= - /escape-html/1.0.3: - dev: true - resolution: - integrity: sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - /escape-string-regexp/1.0.5: - dev: true - engines: - node: '>=0.8.0' - resolution: - integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - /escodegen/1.11.0: - dependencies: - esprima: 3.1.3 - estraverse: 4.2.0 - esutils: 2.0.2 - optionator: 0.8.2 - dev: true - engines: - node: '>=4.0' - hasBin: true - optionalDependencies: - source-map: 0.6.1 - resolution: - integrity: sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw== - /escodegen/1.9.1: - dependencies: - esprima: 3.1.3 - estraverse: 4.2.0 - esutils: 2.0.2 - optionator: 0.8.2 - dev: true - engines: - node: '>=4.0' - hasBin: true - optionalDependencies: - source-map: 0.6.1 - resolution: - integrity: sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q== - /eslint-ast-utils/1.1.0: - dependencies: - lodash.get: 4.4.2 - lodash.zip: 4.2.0 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-otzzTim2/1+lVrlH19EfQQJEhVJSu0zOb9ygb3iapN6UlyaDtyRq4b5U1FuW0v1lRa9Fp/GJyHkSwm6NqABgCA== - /eslint-config-airbnb-base/13.0.0/208f689e7a5f6be703bcfa701b683883: - dependencies: - eslint: 4.19.1 - eslint-plugin-import: /eslint-plugin-import/2.13.0/eslint@4.19.1 - eslint-restricted-globals: 0.1.1 - object.assign: 4.1.0 - object.entries: 1.0.4 - dev: true - engines: - node: '>= 4' - id: registry.npmjs.org/eslint-config-airbnb-base/13.0.0 - peerDependencies: - eslint: ^4.19.1 - eslint-plugin-import: ^2.12.0 - resolution: - integrity: sha512-hUFXRlE6AY84z0qYh4wKdtSF4EqDnyT8sxrvTpcXCV4ENSLF8li5yNA1yDM26iinH8Ierbpc4lv8Rp62uX6VSQ== - /eslint-config-airbnb/17.0.0/2262bc4d2301b30466765f313cd08edd: - dependencies: - eslint: 4.19.1 - eslint-config-airbnb-base: /eslint-config-airbnb-base/13.0.0/208f689e7a5f6be703bcfa701b683883 - eslint-plugin-import: /eslint-plugin-import/2.13.0/eslint@4.19.1 - eslint-plugin-jsx-a11y: /eslint-plugin-jsx-a11y/6.1.1/eslint@4.19.1 - eslint-plugin-react: /eslint-plugin-react/7.10.0/eslint@4.19.1 - object.assign: 4.1.0 - object.entries: 1.0.4 - dev: true - engines: - node: '>= 4' - id: registry.npmjs.org/eslint-config-airbnb/17.0.0 - peerDependencies: - eslint: ^4.19.1 - eslint-plugin-import: ^2.12.0 - eslint-plugin-jsx-a11y: ^6.0.3 - eslint-plugin-react: ^7.9.1 - resolution: - integrity: sha512-FLaAYKpu9gLw/ca0qXQRT150Nbfvwc8eaCITaJCU25H9x+5CHsBPW1pFB6EF3r3T2PZTnXrHKisLh+GT43ZY5Q== - /eslint-config-prettier/2.9.0/eslint@4.19.1: - dependencies: - eslint: 4.19.1 - get-stdin: 5.0.1 - dev: true - hasBin: true - id: registry.npmjs.org/eslint-config-prettier/2.9.0 - peerDependencies: - eslint: '>=3.14.1' - resolution: - integrity: sha512-ag8YEyBXsm3nmOv1Hz991VtNNDMRa+MNy8cY47Pl4bw6iuzqKbJajXdqUpiw13STdLLrznxgm1hj9NhxeOYq0A== - /eslint-config-xaxa/1.0.6: - dependencies: - babel-eslint: 8.2.6 - eslint: 4.19.1 - eslint-config-airbnb: /eslint-config-airbnb/17.0.0/2262bc4d2301b30466765f313cd08edd - eslint-config-prettier: /eslint-config-prettier/2.9.0/eslint@4.19.1 - eslint-plugin-flowtype: /eslint-plugin-flowtype/2.50.0/eslint@4.19.1 - eslint-plugin-import: /eslint-plugin-import/2.13.0/eslint@4.19.1 - eslint-plugin-jsx-a11y: /eslint-plugin-jsx-a11y/6.1.1/eslint@4.19.1 - eslint-plugin-node: /eslint-plugin-node/6.0.1/eslint@4.19.1 - eslint-plugin-prettier: /eslint-plugin-prettier/2.6.2/prettier@1.13.7 - eslint-plugin-promise: 3.8.0 - eslint-plugin-react: /eslint-plugin-react/7.10.0/eslint@4.19.1 - eslint-plugin-unicorn: /eslint-plugin-unicorn/4.0.3/eslint@4.19.1 - prettier: 1.13.7 - dev: true - resolution: - integrity: sha512-0MZF4CbVo25OmI+vmsxeHFWhFYkU6AIUBudcCks6eR/VBpNt+u2RWRepEo9cZMRE244aa8A4aVDdcn2MqWU0dQ== - /eslint-import-resolver-node/0.3.2: - dependencies: - debug: 2.6.9 - resolve: 1.8.1 - dev: true - resolution: - integrity: sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q== - /eslint-module-utils/2.2.0: - dependencies: - debug: 2.6.9 - pkg-dir: 1.0.0 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-snA2LNiLGkitMIl2zn+lTphBF0Y= - /eslint-plugin-flowtype/2.50.0/eslint@4.19.1: - dependencies: - eslint: 4.19.1 - lodash: 4.17.10 - dev: true - engines: - node: '>=4' - id: registry.npmjs.org/eslint-plugin-flowtype/2.50.0 - peerDependencies: - eslint: '>=2.0.0' - resolution: - integrity: sha512-10FnBXCp8odYcpUFXGAh+Zko7py0hUWutTd3BN/R9riukH360qNPLYPR3/xV9eu9K7OJDjJrsflBnL6RwxFnlw== - /eslint-plugin-import/2.13.0/eslint@4.19.1: - dependencies: - contains-path: 0.1.0 - debug: 2.6.9 - doctrine: 1.5.0 - eslint: 4.19.1 - eslint-import-resolver-node: 0.3.2 - eslint-module-utils: 2.2.0 - has: 1.0.3 - lodash: 4.17.10 - minimatch: 3.0.4 - read-pkg-up: 2.0.0 - resolve: 1.8.1 - dev: true - engines: - node: '>=4' - id: registry.npmjs.org/eslint-plugin-import/2.13.0 - peerDependencies: - eslint: 2.x - 5.x - resolution: - integrity: sha512-t6hGKQDMIt9N8R7vLepsYXgDfeuhp6ZJSgtrLEDxonpSubyxUZHjhm6LsAaZX8q6GYVxkbT3kTsV9G5mBCFR6A== - /eslint-plugin-jsx-a11y/6.1.1/eslint@4.19.1: - dependencies: - aria-query: 3.0.0 - array-includes: 3.0.3 - ast-types-flow: 0.0.7 - axobject-query: 2.0.1 - damerau-levenshtein: 1.0.4 - emoji-regex: 6.5.1 - eslint: 4.19.1 - has: 1.0.3 - jsx-ast-utils: 2.0.1 - dev: true - engines: - node: '>=4.0' - id: registry.npmjs.org/eslint-plugin-jsx-a11y/6.1.1 - peerDependencies: - eslint: ^3 || ^4 || ^5 - resolution: - integrity: sha512-JsxNKqa3TwmPypeXNnI75FntkUktGzI1wSa1LgNZdSOMI+B4sxnr1lSF8m8lPiz4mKiC+14ysZQM4scewUrP7A== - /eslint-plugin-node/6.0.1/eslint@4.19.1: - dependencies: - eslint: 4.19.1 - ignore: 3.3.10 - minimatch: 3.0.4 - resolve: 1.8.1 - semver: 5.5.0 - dev: true - engines: - node: '>=4' - id: registry.npmjs.org/eslint-plugin-node/6.0.1 - peerDependencies: - eslint: '>=3.1.0' - resolution: - integrity: sha512-Q/Cc2sW1OAISDS+Ji6lZS2KV4b7ueA/WydVWd1BECTQwVvfQy5JAi3glhINoKzoMnfnuRgNP+ZWKrGAbp3QDxw== - /eslint-plugin-prettier/2.6.2/prettier@1.13.7: - dependencies: - fast-diff: 1.1.2 - jest-docblock: 21.2.0 - prettier: 1.13.7 - dev: true - engines: - node: '>=4.0.0' - id: registry.npmjs.org/eslint-plugin-prettier/2.6.2 - peerDependencies: - prettier: '>= 0.11.0' - resolution: - integrity: sha512-tGek5clmW5swrAx1mdPYM8oThrBE83ePh7LeseZHBWfHVGrHPhKn7Y5zgRMbU/9D5Td9K4CEmUPjGxA7iw98Og== - /eslint-plugin-promise/3.8.0: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-JiFL9UFR15NKpHyGii1ZcvmtIqa3UTwiDAGb8atSffe43qJ3+1czVGN6UtkklpcJ2DVnqvTMzEKRaJdBkAL2aQ== - /eslint-plugin-react/7.10.0/eslint@4.19.1: - dependencies: - doctrine: 2.1.0 - eslint: 4.19.1 - has: 1.0.3 - jsx-ast-utils: 2.0.1 - prop-types: 15.6.2 - dev: true - engines: - node: '>=4' - id: registry.npmjs.org/eslint-plugin-react/7.10.0 - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 - resolution: - integrity: sha512-18rzWn4AtbSUxFKKM7aCVcj5LXOhOKdwBino3KKWy4psxfPW0YtIbE8WNRDUdyHFL50BeLb6qFd4vpvNYyp7hw== - /eslint-plugin-unicorn/4.0.3/eslint@4.19.1: - dependencies: - clean-regexp: 1.0.0 - eslint: 4.19.1 - eslint-ast-utils: 1.1.0 - import-modules: 1.1.0 - lodash.camelcase: 4.3.0 - lodash.kebabcase: 4.1.1 - lodash.snakecase: 4.1.1 - lodash.upperfirst: 4.3.1 - safe-regex: 1.1.0 - dev: true - engines: - node: '>=4' - id: registry.npmjs.org/eslint-plugin-unicorn/4.0.3 - peerDependencies: - eslint: '>=4' - resolution: - integrity: sha512-F1JMyd42hx4qGhIaVdOSbDyhcxPgTy4BOzctTCkV+hqebPBUOAQn1f5AhMK2LTyiqCmKiTs8huAErbLBSWKoCQ== - /eslint-restricted-globals/0.1.1: - dev: true - resolution: - integrity: sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc= - /eslint-scope/3.7.1: - dependencies: - esrecurse: 4.2.1 - estraverse: 4.2.0 - dev: true - engines: - node: '>=4.0.0' - resolution: - integrity: sha1-PWPD7f2gLgbgGkUq2IyqzHzctug= - /eslint-scope/3.7.3: - dependencies: - esrecurse: 4.2.1 - estraverse: 4.2.0 - dev: true - engines: - node: '>=4.0.0' - resolution: - integrity: sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA== - /eslint-visitor-keys/1.0.0: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== - /eslint/4.19.1: - dependencies: - ajv: 5.5.2 - babel-code-frame: 6.26.0 - chalk: 2.4.1 - concat-stream: 1.6.2 - cross-spawn: 5.1.0 - debug: 3.1.0 - doctrine: 2.1.0 - eslint-scope: 3.7.3 - eslint-visitor-keys: 1.0.0 - espree: 3.5.4 - esquery: 1.0.1 - esutils: 2.0.2 - file-entry-cache: 2.0.0 - functional-red-black-tree: 1.0.1 - glob: 7.1.2 - globals: 11.7.0 - ignore: 3.3.10 - imurmurhash: 0.1.4 - inquirer: 3.3.0 - is-resolvable: 1.1.0 - js-yaml: 3.12.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.3.0 - lodash: 4.17.10 - minimatch: 3.0.4 - mkdirp: 0.5.1 - natural-compare: 1.4.0 - optionator: 0.8.2 - path-is-inside: 1.0.2 - pluralize: 7.0.0 - progress: 2.0.0 - regexpp: 1.1.0 - require-uncached: 1.0.3 - semver: 5.5.0 - strip-ansi: 4.0.0 - strip-json-comments: 2.0.1 - table: 4.0.2 - text-table: 0.2.0 - dev: true - engines: - node: '>=4' - hasBin: true - resolution: - integrity: sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ== - /esm/3.0.72: - dev: true - engines: - node: '>=6' - resolution: - integrity: sha512-xmh7Ay/71Wl41EPM3FVomp/GZKMgEGoo3x/qWdbGi+0DODbte+2l1sSXAiDKahBQn0zioG30ZNJTkxz08pEsMw== - /espree/3.5.4: - dependencies: - acorn: 5.7.1 - acorn-jsx: 3.0.1 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A== - /esprima/2.7.3: - dev: true - engines: - node: '>=0.10.0' - hasBin: true - resolution: - integrity: sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= - /esprima/3.1.3: - dev: true - engines: - node: '>=4' - hasBin: true - resolution: - integrity: sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= - /esprima/4.0.1: - dev: true - engines: - node: '>=4' - hasBin: true - resolution: - integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - /esquery/1.0.1: - dependencies: - estraverse: 4.2.0 - dev: true - engines: - node: '>=0.6' - resolution: - integrity: sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== - /esrecurse/4.2.1: - dependencies: - estraverse: 4.2.0 - dev: true - engines: - node: '>=4.0' - resolution: - integrity: sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== - /estraverse/4.2.0: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= - /esutils/2.0.2: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= - /etag/1.8.1: - dev: true - engines: - node: '>= 0.6' - resolution: - integrity: sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= - /events/1.1.1: - dev: true - engines: - node: '>=0.4.x' - resolution: - integrity: sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= - /evp_bytestokey/1.0.3: - dependencies: - md5.js: 1.3.4 - safe-buffer: 5.1.2 - dev: true - resolution: - integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - /execa-pro/1.0.6: - dependencies: - execa: 0.10.0 - p-map-series: 1.0.0 - split-cmd: 1.0.0 - dev: true - engines: - node: '>=8' - npm: '>=5' - yarn: '>=1' - resolution: - integrity: sha512-fjPXOkOY3eTCPntJKe+T32OG+3u8qBwUTDLkzQEEzR8Zuk5wpA1VaiqWPEUVT+ykOTVl2WrHBAQUmxQo6DOeqQ== - /execa/0.10.0: - dependencies: - cross-spawn: 6.0.5 - get-stream: 3.0.0 - is-stream: 1.1.0 - npm-run-path: 2.0.2 - p-finally: 1.0.0 - signal-exit: 3.0.2 - strip-eof: 1.0.0 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw== - /expand-brackets/2.1.4: - dependencies: - debug: 2.6.9 - define-property: 0.2.5 - extend-shallow: 2.0.1 - posix-character-classes: 0.1.1 - regex-not: 1.0.2 - snapdragon: 0.8.2 - to-regex: 3.0.2 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - /extend-shallow/2.0.1: - dependencies: - is-extendable: 0.1.1 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - /extend-shallow/3.0.2: - dependencies: - assign-symbols: 1.0.0 - is-extendable: 1.0.1 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - /external-editor/2.2.0: - dependencies: - chardet: 0.4.2 - iconv-lite: 0.4.23 - tmp: 0.0.33 - dev: true - engines: - node: '>=0.12' - resolution: - integrity: sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== - /extglob/2.0.4: - dependencies: - array-unique: 0.3.2 - define-property: 1.0.0 - expand-brackets: 2.1.4 - extend-shallow: 2.0.1 - fragment-cache: 0.2.1 - regex-not: 1.0.2 - snapdragon: 0.8.2 - to-regex: 3.0.2 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - /falafel/2.1.0: - dependencies: - acorn: 5.7.1 - foreach: 2.0.5 - isarray: 0.0.1 - object-keys: 1.0.12 - dev: true - engines: - node: '>=0.4.0' - resolution: - integrity: sha1-lrsXdh2rqU9G0AFzizzt86Z/4Gw= - /fast-deep-equal/1.1.0: - dev: true - resolution: - integrity: sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= - /fast-diff/1.1.2: - dev: true - resolution: - integrity: sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig== - /fast-glob/2.2.2: - dependencies: - '@mrmlnc/readdir-enhanced': 2.2.1 - '@nodelib/fs.stat': 1.1.0 - glob-parent: 3.1.0 - is-glob: 4.0.0 - merge2: 1.2.2 - micromatch: 3.1.10 - dev: true - engines: - node: '>=4.0.0' - resolution: - integrity: sha512-TR6zxCKftDQnUAPvkrCWdBgDq/gbqx8A3ApnBrR5rMvpp6+KMJI0Igw7fkWPgeVK0uhRXTXdvO3O+YP0CaUX2g== - /fast-json-stable-stringify/2.0.0: - dev: true - resolution: - integrity: sha1-1RQsDK7msRifh9OnYREGT4bIu/I= - /fast-levenshtein/2.0.6: - dev: true - resolution: - integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - /figures/2.0.0: - dependencies: - escape-string-regexp: 1.0.5 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= - /file-entry-cache/2.0.0: - dependencies: - flat-cache: 1.3.0 - object-assign: 4.1.1 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E= - /filesize/3.6.1: - dev: true - engines: - node: '>= 0.4.0' - resolution: - integrity: sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== - /fill-range/4.0.0: - dependencies: - extend-shallow: 2.0.1 - is-number: 3.0.0 - repeat-string: 1.6.1 - to-regex-range: 2.1.1 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - /find-cache-dir/1.0.0: - dependencies: - commondir: 1.0.1 - make-dir: 1.3.0 - pkg-dir: 2.0.0 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-kojj6ePMN0hxfTnq3hfPcfww7m8= - /find-up/1.1.2: - dependencies: - path-exists: 2.1.0 - pinkie-promise: 2.0.1 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= - /find-up/2.1.0: - dependencies: - locate-path: 2.0.0 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - /flat-cache/1.3.0: - dependencies: - circular-json: 0.3.3 - del: 2.2.2 - graceful-fs: 4.1.11 - write: 0.2.1 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE= - /flatten/1.0.2: - dev: true - resolution: - integrity: sha1-2uRqnXj74lKSJYzB54CkHZXAN4I= - /for-in/1.0.2: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - /foreach/2.0.5: - dev: true - resolution: - integrity: sha1-C+4AUBiusmDQo6865ljdATbsG5k= - /fragment-cache/0.2.1: - dependencies: - map-cache: 0.2.2 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - /fresh/0.5.2: - dev: true - engines: - node: '>= 0.6' - resolution: - integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= - /from2/2.3.0: - dependencies: - inherits: 2.0.3 - readable-stream: 2.3.6 - dev: true - resolution: - integrity: sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= - /fs.realpath/1.0.0: - dev: true - resolution: - integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - /fsevents/1.2.4: - bundledDependencies: - - node-pre-gyp - dependencies: - nan: 2.10.0 - dev: true - engines: - node: '>=0.8.0' - optional: true - requiresBuild: true - resolution: - integrity: sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg== - /fswatcher-child/1.0.5: - dependencies: - chokidar: 2.0.4 - dev: true - resolution: - integrity: sha512-T5BsoXc63WcPKLcQh77g3oJOqCHnXPp/QLuLgD9jhRBwDuOiVXL8PL6Dcy3ByfsdZmHKYQuPYN8PXEphyoS4qA== - /function-bind/1.1.1: - dev: true - resolution: - integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - /functional-red-black-tree/1.0.1: - dev: true - resolution: - integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - /get-port/3.2.0: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw= - /get-stdin/5.0.1: - dev: true - engines: - node: '>=0.12.0' - resolution: - integrity: sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g= - /get-stdin/6.0.0: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== - /get-stream/3.0.0: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= - /get-value/2.0.6: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - /gitcommit/1.0.9: - dependencies: - execa: 0.10.0 - mri: 1.1.1 - prompts: 0.1.13 - dev: true - engines: - node: '>=8.6' - npm: '>=5.2' - yarn: '>=1.3' - hasBin: true - resolution: - integrity: sha512-iJI/2+ZwiauibPPe56hRmysbS+/38BtjyFbZXNHaxBUPea9JTTyW2n+jfyaUyWmg1ywP7gRZVy+g4hyM7L8U0w== - /glob-parent/3.1.0: - dependencies: - is-glob: 3.1.0 - path-dirname: 1.0.2 - dev: true - resolution: - integrity: sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - /glob-to-regexp/0.3.0: - dev: true - resolution: - integrity: sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= - /glob/7.1.2: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.3 - minimatch: 3.0.4 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - resolution: - integrity: sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ== - /globals/11.7.0: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-K8BNSPySfeShBQXsahYB/AbbWruVOTyVpgoIDnl8odPpeSfP2J5QO2oLFFdl2j7GfDCtZj2bMKar2T49itTPCg== - /globals/9.18.0: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== - /globby/5.0.0: - dependencies: - array-union: 1.0.2 - arrify: 1.0.1 - glob: 7.1.2 - object-assign: 4.1.1 - pify: 2.3.0 - pinkie-promise: 2.0.1 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0= - /globrex/0.1.1: - dev: true - resolution: - integrity: sha512-bqKcPhb+ZtrISivpu6oLmwIyINlPlzueO/BDCdfnzUeu7SYxnHTXmWP7uQI5PnQXc5yGXOscGBEGagloA2hcSw== - /got/8.3.2: - dependencies: - '@sindresorhus/is': 0.7.0 - cacheable-request: 2.1.4 - decompress-response: 3.3.0 - duplexer3: 0.1.4 - get-stream: 3.0.0 - into-stream: 3.1.0 - is-retry-allowed: 1.1.0 - isurl: 1.0.0 - lowercase-keys: 1.0.1 - mimic-response: 1.0.1 - p-cancelable: 0.4.1 - p-timeout: 2.0.1 - pify: 3.0.0 - safe-buffer: 5.1.2 - timed-out: 4.0.1 - url-parse-lax: 3.0.0 - url-to-options: 1.0.1 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw== - /graceful-fs/4.1.11: - dev: true - engines: - node: '>=0.4.0' - resolution: - integrity: sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg= - /grapheme-breaker/0.3.2: - dependencies: - brfs: 1.6.1 - unicode-trie: 0.3.1 - dev: true - resolution: - integrity: sha1-W55reMODJFLSuiuxy4MPlidkEKw= - /has-ansi/2.0.0: - dependencies: - ansi-regex: 2.1.1 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= - /has-flag/1.0.0: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= - /has-flag/3.0.0: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - /has-symbol-support-x/1.4.2: - dev: true - resolution: - integrity: sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== - /has-symbols/1.0.0: - dev: true - engines: - node: '>= 0.4' - resolution: - integrity: sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= - /has-to-string-tag-x/1.4.1: - dependencies: - has-symbol-support-x: 1.4.2 - dev: true - resolution: - integrity: sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== - /has-value/0.3.1: - dependencies: - get-value: 2.0.6 - has-values: 0.1.4 - isobject: 2.1.0 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - /has-value/1.0.0: - dependencies: - get-value: 2.0.6 - has-values: 1.0.0 - isobject: 3.0.1 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - /has-values/0.1.4: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-bWHeldkd/Km5oCCJrThL/49it3E= - /has-values/1.0.0: - dependencies: - is-number: 3.0.0 - kind-of: 4.0.0 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - /has/1.0.3: - dependencies: - function-bind: 1.1.1 - dev: true - engines: - node: '>= 0.4.0' - resolution: - integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - /hash-base/3.0.4: - dependencies: - inherits: 2.0.3 - safe-buffer: 5.1.2 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= - /hash.js/1.1.5: - dependencies: - inherits: 2.0.3 - minimalistic-assert: 1.0.1 - dev: true - resolution: - integrity: sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA== - /hex-color-regex/1.1.0: - dev: true - resolution: - integrity: sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== - /hmac-drbg/1.0.1: - dependencies: - hash.js: 1.1.5 - minimalistic-assert: 1.0.1 - minimalistic-crypto-utils: 1.0.1 - dev: true - resolution: - integrity: sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= - /home-or-tmp/2.0.0: - dependencies: - os-homedir: 1.0.2 - os-tmpdir: 1.0.2 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-42w/LSyufXRqhX440Y1fMqeILbg= - /home-or-tmp/3.0.0: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-V6j+JM8zzdUkhgoVgh3cJchmcfs= - /hosted-git-info/2.7.1: - dev: true - resolution: - integrity: sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== - /hsl-regex/1.0.0: - dev: true - resolution: - integrity: sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= - /hsla-regex/1.0.0: - dev: true - resolution: - integrity: sha1-wc56MWjIxmFAM6S194d/OyJfnDg= - /html-comment-regex/1.1.1: - dev: true - resolution: - integrity: sha1-ZouTd26q5V696POtRkswekljYl4= - /htmlnano/0.1.9: - dependencies: - cssnano: 3.10.0 - object-assign: 4.1.1 - posthtml: 0.11.3 - posthtml-render: 1.1.4 - svgo: 1.0.5 - uglify-es: 3.3.9 - dev: true - resolution: - integrity: sha512-lVV5h1BOz5LUWSew6S0o0DeXC7kNyRoBP+JP37mXS/Wrgr7nSrOPsuhob9prMz09a/6G+3tdwuKrixwwqSl8/Q== - /htmlparser2/3.9.2: - dependencies: - domelementtype: 1.3.0 - domhandler: 2.4.2 - domutils: 1.7.0 - entities: 1.1.1 - inherits: 2.0.3 - readable-stream: 2.3.6 - dev: true - resolution: - integrity: sha1-G9+HrMoPP55T+k/M6w9LTLsAszg= - /http-cache-semantics/3.8.1: - dev: true - resolution: - integrity: sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== - /http-errors/1.6.3: - dependencies: - depd: 1.1.2 - inherits: 2.0.3 - setprototypeof: 1.1.0 - statuses: 1.5.0 - dev: true - engines: - node: '>= 0.6' - resolution: - integrity: sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= - /https-browserify/1.0.0: - dev: true - resolution: - integrity: sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= - /iconv-lite/0.4.23: - dependencies: - safer-buffer: 2.1.2 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA== - /ieee754/1.1.12: - dev: true - resolution: - integrity: sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA== - /ignore/3.3.10: - dev: true - resolution: - integrity: sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== - /import-modules/1.1.0: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-dI23nFzEK7lwHvq0JPiU5yYA6dw= - /imurmurhash/0.1.4: - dev: true - engines: - node: '>=0.8.19' - resolution: - integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o= - /indexes-of/1.0.1: - dev: true - resolution: - integrity: sha1-8w9xbI4r00bHtn0985FVZqfAVgc= - /indexof/0.0.1: - dev: true - resolution: - integrity: sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= - /inflight/1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - dev: true - resolution: - integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - /inherits/2.0.1: - dev: true - resolution: - integrity: sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= - /inherits/2.0.3: - dev: true - resolution: - integrity: sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - /ini/1.3.5: - dev: true - resolution: - integrity: sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== - /inquirer/3.3.0: - dependencies: - ansi-escapes: 3.1.0 - chalk: 2.4.1 - cli-cursor: 2.1.0 - cli-width: 2.2.0 - external-editor: 2.2.0 - figures: 2.0.0 - lodash: 4.17.10 - mute-stream: 0.0.7 - run-async: 2.3.0 - rx-lite: 4.0.8 - rx-lite-aggregates: 4.0.8 - string-width: 2.1.1 - strip-ansi: 4.0.0 - through: 2.3.8 - dev: true - resolution: - integrity: sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ== - /into-stream/3.1.0: - dependencies: - from2: 2.3.0 - p-is-promise: 1.1.0 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY= - /invariant/2.2.4: - dependencies: - loose-envify: 1.4.0 - dev: true - resolution: - integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== - /is-absolute-url/2.1.0: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= - /is-accessor-descriptor/0.1.6: - dependencies: - kind-of: 3.2.2 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - /is-accessor-descriptor/1.0.0: - dependencies: - kind-of: 6.0.2 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - /is-arrayish/0.2.1: - dev: true - resolution: - integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - /is-arrayish/0.3.2: - dev: true - resolution: - integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - /is-binary-path/1.0.1: - dependencies: - binary-extensions: 1.11.0 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= - /is-buffer/1.1.6: - dev: true - resolution: - integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - /is-builtin-module/1.0.0: - dependencies: - builtin-modules: 1.1.1 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-VAVy0096wxGfj3bDDLwbHgN6/74= - /is-callable/1.1.4: - dev: true - engines: - node: '>= 0.4' - resolution: - integrity: sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== - /is-ci/1.1.0: - dependencies: - ci-info: 1.1.3 - dev: true - hasBin: true - resolution: - integrity: sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg== - /is-color-stop/1.1.0: - dependencies: - css-color-names: 0.0.4 - hex-color-regex: 1.1.0 - hsl-regex: 1.0.0 - hsla-regex: 1.0.0 - rgb-regex: 1.0.1 - rgba-regex: 1.0.0 - dev: true - resolution: - integrity: sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= - /is-data-descriptor/0.1.4: - dependencies: - kind-of: 3.2.2 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - /is-data-descriptor/1.0.0: - dependencies: - kind-of: 6.0.2 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - /is-date-object/1.0.1: - dev: true - engines: - node: '>= 0.4' - resolution: - integrity: sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= - /is-descriptor/0.1.6: - dependencies: - is-accessor-descriptor: 0.1.6 - is-data-descriptor: 0.1.4 - kind-of: 5.1.0 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - /is-descriptor/1.0.2: - dependencies: - is-accessor-descriptor: 1.0.0 - is-data-descriptor: 1.0.0 - kind-of: 6.0.2 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - /is-directory/0.3.1: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= - /is-extendable/0.1.1: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - /is-extendable/1.0.1: - dependencies: - is-plain-object: 2.0.4 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - /is-extglob/2.1.1: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - /is-finite/1.0.2: - dependencies: - number-is-nan: 1.0.1 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= - /is-fullwidth-code-point/2.0.0: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - /is-glob/3.1.0: - dependencies: - is-extglob: 2.1.1 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= - /is-glob/4.0.0: - dependencies: - is-extglob: 2.1.1 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A= - /is-number/3.0.0: - dependencies: - kind-of: 3.2.2 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - /is-obj/1.0.1: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-PkcprB9f3gJc19g6iW2rn09n2w8= - /is-object/1.0.1: - dev: true - resolution: - integrity: sha1-iVJojF7C/9awPsyF52ngKQMINHA= - /is-observable/0.2.0: - dependencies: - symbol-observable: 0.2.4 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-s2ExHYPG5dcmyr9eJQsCNxBvWuI= - /is-observable/1.1.0: - dependencies: - symbol-observable: 1.2.0 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA== - /is-path-cwd/1.0.0: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= - /is-path-in-cwd/1.0.1: - dependencies: - is-path-inside: 1.0.1 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== - /is-path-inside/1.0.1: - dependencies: - path-is-inside: 1.0.2 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-jvW33lBDej/cprToZe96pVy0gDY= - /is-plain-obj/1.1.0: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-caUMhCnfync8kqOQpKA7OfzVHT4= - /is-plain-object/2.0.4: - dependencies: - isobject: 3.0.1 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - /is-promise/2.1.0: - dev: true - resolution: - integrity: sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= - /is-regex/1.0.4: - dependencies: - has: 1.0.3 - dev: true - engines: - node: '>= 0.4' - resolution: - integrity: sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= - /is-resolvable/1.1.0: - dev: true - resolution: - integrity: sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== - /is-retry-allowed/1.1.0: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-EaBgVotnM5REAz0BJaYaINVk+zQ= - /is-stream/1.1.0: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - /is-svg/2.1.0: - dependencies: - html-comment-regex: 1.1.1 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk= - /is-svg/3.0.0: - dependencies: - html-comment-regex: 1.1.1 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ== - /is-symbol/1.0.1: - dev: true - engines: - node: '>= 0.4' - resolution: - integrity: sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI= - /is-url/1.2.4: - dev: true - resolution: - integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== - /is-windows/1.0.2: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - /is-wsl/1.1.0: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= - /isarray/0.0.1: - dev: true - resolution: - integrity: sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= - /isarray/1.0.0: - dev: true - resolution: - integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - /isexe/2.0.0: - dev: true - resolution: - integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - /isobject/2.1.0: - dependencies: - isarray: 1.0.0 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - /isobject/3.0.1: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - /istanbul-lib-coverage/2.0.1: - dev: true - engines: - node: '>=6' - resolution: - integrity: sha512-nPvSZsVlbG9aLhZYaC3Oi1gT/tpyo3Yt5fNyf6NmcKIayz4VV/txxJFFKAK/gU4dcNn8ehsanBbVHVl0+amOLA== - /istanbul-lib-instrument/2.3.2: - dependencies: - '@babel/generator': 7.0.0-beta.51 - '@babel/parser': 7.0.0-beta.51 - '@babel/template': 7.0.0-beta.51 - '@babel/traverse': 7.0.0-beta.51 - '@babel/types': 7.0.0-beta.51 - istanbul-lib-coverage: 2.0.1 - semver: 5.5.0 - dev: true - engines: - node: '>=6' - resolution: - integrity: sha512-l7TD/VnBsIB2OJvSyxaLW/ab1+92dxZNH9wLH7uHPPioy3JZ8tnx2UXUdKmdkgmP2EFPzg64CToUP6dAS3U32Q== - /isurl/1.0.0: - dependencies: - has-to-string-tag-x: 1.4.1 - is-object: 1.0.1 - dev: true - engines: - node: '>= 4' - resolution: - integrity: sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== - /jest-docblock/21.2.0: - dev: true - resolution: - integrity: sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw== - /js-base64/2.4.8: - dev: true - resolution: - integrity: sha512-hm2nYpDrwoO/OzBhdcqs/XGT6XjSuSSCVEpia+Kl2J6x4CYt5hISlVL/AYU1khoDXv0AQVgxtdJySb9gjAn56Q== - /js-beautify/1.7.5: - dependencies: - config-chain: 1.1.11 - editorconfig: 0.13.3 - mkdirp: 0.5.1 - nopt: 3.0.6 - dev: true - hasBin: true - resolution: - integrity: sha512-9OhfAqGOrD7hoQBLJMTA+BKuKmoEtTJXzZ7WDF/9gvjtey1koVLuZqIY6c51aPDjbNdNtIXAkiWKVhziawE9Og== - /js-levenshtein/1.1.3: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-/812MXr9RBtMObviZ8gQBhHO8MOrGj8HlEE+4ccMTElNA/6I3u39u+bhny55Lk921yn44nSZFy9naNLElL5wgQ== - /js-tokens/3.0.2: - dev: true - resolution: - integrity: sha1-mGbfOVECEw449/mWvOtlRDIJwls= - /js-tokens/4.0.0: - dev: true - resolution: - integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - /js-yaml/3.10.0: - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - dev: true - hasBin: true - resolution: - integrity: sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA== - /js-yaml/3.12.0: - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - dev: true - hasBin: true - resolution: - integrity: sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A== - /js-yaml/3.7.0: - dependencies: - argparse: 1.0.10 - esprima: 2.7.3 - dev: true - hasBin: true - resolution: - integrity: sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A= - /jsesc/0.5.0: - dev: true - hasBin: true - resolution: - integrity: sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= - /jsesc/1.3.0: - dev: true - hasBin: true - resolution: - integrity: sha1-RsP+yMGJKxKwgz25vHYiF226s0s= - /jsesc/2.5.1: - dev: true - engines: - node: '>=4' - hasBin: true - resolution: - integrity: sha1-5CGiqOINawgZ3yiQj3glJrlt0f4= - /json-buffer/3.0.0: - dev: true - resolution: - integrity: sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= - /json-parse-better-errors/1.0.2: - dev: true - resolution: - integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - /json-schema-traverse/0.3.1: - dev: true - resolution: - integrity: sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= - /json-stable-stringify-without-jsonify/1.0.1: - dev: true - resolution: - integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - /json5/0.5.1: - dev: true - hasBin: true - resolution: - integrity: sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= - /json5/1.0.1: - dependencies: - minimist: 1.2.0 - dev: true - hasBin: true - resolution: - integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== - /jsx-ast-utils/2.0.1: - dependencies: - array-includes: 3.0.3 - dev: true - engines: - node: '>=4.0' - resolution: - integrity: sha1-6AGxs5mF4g//yHtA43SAgOLcrH8= - /keyv/3.0.0: - dependencies: - json-buffer: 3.0.0 - dev: true - resolution: - integrity: sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA== - /kind-of/3.2.2: - dependencies: - is-buffer: 1.1.6 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - /kind-of/4.0.0: - dependencies: - is-buffer: 1.1.6 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - /kind-of/5.1.0: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - /kind-of/6.0.2: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== - /kleur/2.0.1: - dev: true - engines: - node: '>=6' - resolution: - integrity: sha512-Zq/jyANIJ2uX8UZjWlqLwbyhcxSXJtT/Y89lClyeZd3l++3ztL1I5SSCYrbcbwSunTjC88N3WuMk0kRDQD6gzA== - /latest-version/4.0.0: - dependencies: - package-json: 5.0.0 - dev: true - engines: - node: '>=6' - resolution: - integrity: sha512-b4Myk7aQiQJvgssw2O8yITjELdqKRX4JQJUF1IUplgLaA8unv7s+UsAOwH6Q0/a09czSvlxEm306it2LBXrCzg== - /levn/0.3.0: - dependencies: - prelude-ls: 1.1.2 - type-check: 0.3.2 - dev: true - engines: - node: '>= 0.8.0' - resolution: - integrity: sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - /load-json-file/2.0.0: - dependencies: - graceful-fs: 4.1.11 - parse-json: 2.2.0 - pify: 2.3.0 - strip-bom: 3.0.0 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= - /locate-path/2.0.0: - dependencies: - p-locate: 2.0.0 - path-exists: 3.0.0 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - /lodash.camelcase/4.3.0: - dev: true - resolution: - integrity: sha1-soqmKIorn8ZRA1x3EfZathkDMaY= - /lodash.clone/4.5.0: - dev: true - resolution: - integrity: sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y= - /lodash.debounce/4.0.8: - dev: true - resolution: - integrity: sha1-gteb/zCmfEAF/9XiUVMArZyk168= - /lodash.get/4.4.2: - dev: true - resolution: - integrity: sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= - /lodash.kebabcase/4.1.1: - dev: true - resolution: - integrity: sha1-hImxyw0p/4gZXM7KRI/21swpXDY= - /lodash.memoize/4.1.2: - dev: true - resolution: - integrity: sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= - /lodash.snakecase/4.1.1: - dev: true - resolution: - integrity: sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40= - /lodash.uniq/4.5.0: - dev: true - resolution: - integrity: sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= - /lodash.upperfirst/4.3.1: - dev: true - resolution: - integrity: sha1-E2Xt9DFIBIHvDRxolXpe2Z1J984= - /lodash.zip/4.2.0: - dev: true - resolution: - integrity: sha1-7GZi5IlkCO1KtsVCo5kLcswIACA= - /lodash/4.17.10: - dev: true - resolution: - integrity: sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg== - /log-symbols/2.2.0: - dependencies: - chalk: 2.4.1 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== - /loose-envify/1.4.0: - dependencies: - js-tokens: 4.0.0 - dev: true - hasBin: true - resolution: - integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - /lowercase-keys/1.0.0: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-TjNms55/VFfjXxMkvfb4jQv8cwY= - /lowercase-keys/1.0.1: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - /lru-cache/3.2.0: - dependencies: - pseudomap: 1.0.2 - dev: true - resolution: - integrity: sha1-cXibO39Tmb7IVl3aOKow0qCX7+4= - /lru-cache/4.1.3: - dependencies: - pseudomap: 1.0.2 - yallist: 2.1.2 - dev: true - resolution: - integrity: sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA== - /magic-string/0.22.5: - dependencies: - vlq: 0.2.3 - dev: true - resolution: - integrity: sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w== - /make-dir/1.3.0: - dependencies: - pify: 3.0.0 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== - /map-cache/0.2.2: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - /map-visit/1.0.0: - dependencies: - object-visit: 1.0.1 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - /math-expression-evaluator/1.2.17: - dev: true - resolution: - integrity: sha1-3oGf282E3M2PrlnGrreWFbnSZqw= - /md5.js/1.3.4: - dependencies: - hash-base: 3.0.4 - inherits: 2.0.3 - dev: true - resolution: - integrity: sha1-6b296UogpawYsENA/Fdk1bCdkB0= - /mdn-data/1.1.4: - dev: true - resolution: - integrity: sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA== - /mentions-regex/2.0.3: - resolution: - integrity: sha1-RCcXoASOU8LS4q5eY6TlSlXKlgM= - /merge-source-map/1.0.4: - dependencies: - source-map: 0.5.7 - dev: true - resolution: - integrity: sha1-pd5GU42uhNQRTMXqArR3KmNGcB8= - /merge2/1.2.2: - dev: true - engines: - node: '>= 4.5.0' - resolution: - integrity: sha512-bgM8twH86rWni21thii6WCMQMRMmwqqdW3sGWi9IipnVAszdLXRjwDwAnyrVXo6DuP3AjRMMttZKUB48QWIFGg== - /micromatch/3.1.10: - dependencies: - arr-diff: 4.0.0 - array-unique: 0.3.2 - braces: 2.3.2 - define-property: 2.0.2 - extend-shallow: 3.0.2 - extglob: 2.0.4 - fragment-cache: 0.2.1 - kind-of: 6.0.2 - nanomatch: 1.2.13 - object.pick: 1.3.0 - regex-not: 1.0.2 - snapdragon: 0.8.2 - to-regex: 3.0.2 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - /miller-rabin/4.0.1: - dependencies: - bn.js: 4.11.8 - brorand: 1.1.0 - dev: true - hasBin: true - resolution: - integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== - /mime/1.4.1: - dev: true - hasBin: true - resolution: - integrity: sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ== - /mimic-fn/1.2.0: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - /mimic-response/1.0.1: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - /minimalistic-assert/1.0.1: - dev: true - resolution: - integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - /minimalistic-crypto-utils/1.0.1: - dev: true - resolution: - integrity: sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= - /minimatch/3.0.4: - dependencies: - brace-expansion: 1.1.11 - dev: true - resolution: - integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - /minimist/0.0.8: - dev: true - resolution: - integrity: sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - /minimist/1.2.0: - dev: true - resolution: - integrity: sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= - /mixin-deep/1.3.1: - dependencies: - for-in: 1.0.2 - is-extendable: 1.0.1 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ== - /mkdirp/0.5.1: - dependencies: - minimist: 0.0.8 - dev: true - hasBin: true - resolution: - integrity: sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= - /mri/1.1.1: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-haom09ru7t+A3FmEr5XMXKXK2fE= - /ms/2.0.0: - dev: true - resolution: - integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - /mute-stream/0.0.7: - dev: true - resolution: - integrity: sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= - /nan/2.10.0: - dev: true - resolution: - integrity: sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA== - /nanomatch/1.2.13: - dependencies: - arr-diff: 4.0.0 - array-unique: 0.3.2 - define-property: 2.0.2 - extend-shallow: 3.0.2 - fragment-cache: 0.2.1 - is-windows: 1.0.2 - kind-of: 6.0.2 - object.pick: 1.3.0 - regex-not: 1.0.2 - snapdragon: 0.8.2 - to-regex: 3.0.2 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - /natural-compare/1.4.0: - dev: true - resolution: - integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - /new-release/4.0.3: - dependencies: - detect-next-version: 2.0.2 - execa-pro: 1.0.6 - is-ci: 1.1.0 - latest-version: 4.0.0 - minimist: 1.2.0 - parse-git-log: 0.2.1 - semver: 5.5.0 - dev: true - engines: - node: '>=8' - npm: '>=5' - yarn: '>=1' - hasBin: true - resolution: - integrity: sha512-3dt6slK8OcodHfqi3QmREx2dEJI41qPVjXYOWdQYqfYWVy1syaKnPeraJI0bPZYF1MkM9R1n5qApDc7voIfVeA== - /nice-try/1.0.4: - dev: true - resolution: - integrity: sha512-2NpiFHqC87y/zFke0fC0spBXL3bBsoh/p5H1EFhshxjCR5+0g2d6BiXbUFz9v1sAcxsk2htp2eQnNIci2dIYcA== - /node-forge/0.7.5: - dev: true - resolution: - integrity: sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ== - /node-libs-browser/2.1.0: - dependencies: - assert: 1.4.1 - browserify-zlib: 0.2.0 - buffer: 4.9.1 - console-browserify: 1.1.0 - constants-browserify: 1.0.0 - crypto-browserify: 3.12.0 - domain-browser: 1.2.0 - events: 1.1.1 - https-browserify: 1.0.0 - os-browserify: 0.3.0 - path-browserify: 0.0.0 - process: 0.11.10 - punycode: 1.4.1 - querystring-es3: 0.2.1 - readable-stream: 2.3.6 - stream-browserify: 2.0.1 - stream-http: 2.8.3 - string_decoder: 1.1.1 - timers-browserify: 2.0.10 - tty-browserify: 0.0.0 - url: 0.11.0 - util: 0.10.4 - vm-browserify: 0.0.4 - dev: true - resolution: - integrity: sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg== - /node-modules-regexp/1.0.0: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= - /node-releases/1.0.0-alpha.10: - dependencies: - semver: 5.5.0 - dev: true - resolution: - integrity: sha512-BSQrRgOfN6L/MoKIa7pRUc7dHvflCXMcqyTBvphixcSsgJTuUd24vAFONuNfVsuwTyz28S1HEc9XN6ZKylk4Hg== - /nopt/3.0.6: - dependencies: - abbrev: 1.1.1 - dev: true - hasBin: true - resolution: - integrity: sha1-xkZdvwirzU2zWTF/eaxopkayj/k= - /normalize-package-data/2.4.0: - dependencies: - hosted-git-info: 2.7.1 - is-builtin-module: 1.0.0 - semver: 5.5.0 - validate-npm-package-license: 3.0.3 - dev: true - resolution: - integrity: sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw== - /normalize-path/2.1.1: - dependencies: - remove-trailing-separator: 1.1.0 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - /normalize-range/0.1.2: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= - /normalize-url/1.9.1: - dependencies: - object-assign: 4.1.1 - prepend-http: 1.0.4 - query-string: 4.3.4 - sort-keys: 1.1.2 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= - /normalize-url/2.0.1: - dependencies: - prepend-http: 2.0.0 - query-string: 5.1.1 - sort-keys: 2.0.0 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw== - /normalize-url/3.2.0: - dev: true - engines: - node: '>=6' - resolution: - integrity: sha512-WvF3Myk0NhXkG8S9bygFM4IC1KOvnVJGq0QoGeoqOYOBeinBZp5ybW3QuYbTc89lkWBMM9ZBO4QGRoc0353kKA== - /npm-run-path/2.0.2: - dependencies: - path-key: 2.0.1 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - /nth-check/1.0.1: - dependencies: - boolbase: 1.0.0 - dev: true - resolution: - integrity: sha1-mSms32KPwsQQmN6rgqxYDPFJquQ= - /num2fraction/1.2.2: - dev: true - resolution: - integrity: sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= - /number-is-nan/1.0.1: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= - /nyc/12.0.2: - bundledDependencies: - - archy - - arrify - - caching-transform - - convert-source-map - - debug-log - - default-require-extensions - - find-cache-dir - - find-up - - foreground-child - - glob - - istanbul-lib-coverage - - istanbul-lib-hook - - istanbul-lib-report - - istanbul-lib-source-maps - - istanbul-reports - - md5-hex - - merge-source-map - - micromatch - - mkdirp - - resolve-from - - rimraf - - signal-exit - - spawn-wrap - - test-exclude - - yargs - - yargs-parser - dependencies: - istanbul-lib-instrument: 2.3.2 - dev: true - hasBin: true - resolution: - integrity: sha1-ikpO1pCWbBHsWH/4fuoMEsl0upk= - /object-assign/4.1.1: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - /object-copy/0.1.0: - dependencies: - copy-descriptor: 0.1.1 - define-property: 0.2.5 - kind-of: 3.2.2 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - /object-inspect/1.4.1: - dev: true - resolution: - integrity: sha512-wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw== - /object-keys/1.0.12: - dev: true - engines: - node: '>= 0.4' - resolution: - integrity: sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag== - /object-visit/1.0.1: - dependencies: - isobject: 3.0.1 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - /object.assign/4.1.0: - dependencies: - define-properties: 1.1.2 - function-bind: 1.1.1 - has-symbols: 1.0.0 - object-keys: 1.0.12 - dev: true - engines: - node: '>= 0.4' - resolution: - integrity: sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - /object.entries/1.0.4: - dependencies: - define-properties: 1.1.2 - es-abstract: 1.12.0 - function-bind: 1.1.1 - has: 1.0.3 - dev: true - engines: - node: '>= 0.4' - resolution: - integrity: sha1-G/mk3SKI9bM/Opk9JXZh8F0WGl8= - /object.getownpropertydescriptors/2.0.3: - dependencies: - define-properties: 1.1.2 - es-abstract: 1.12.0 - dev: true - engines: - node: '>= 0.8' - resolution: - integrity: sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= - /object.pick/1.3.0: - dependencies: - isobject: 3.0.1 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - /object.values/1.0.4: - dependencies: - define-properties: 1.1.2 - es-abstract: 1.12.0 - function-bind: 1.1.1 - has: 1.0.3 - dev: true - engines: - node: '>= 0.4' - resolution: - integrity: sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo= - /observable-to-promise/0.5.0: - dependencies: - is-observable: 0.2.0 - symbol-observable: 1.2.0 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-yCjw8NxH6fhq+KSXfF1VB2znqR8= - /on-finished/2.3.0: - dependencies: - ee-first: 1.1.1 - dev: true - engines: - node: '>= 0.8' - resolution: - integrity: sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= - /once/1.4.0: - dependencies: - wrappy: 1.0.2 - dev: true - resolution: - integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - /onetime/2.0.1: - dependencies: - mimic-fn: 1.2.0 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - /opn/5.3.0: - dependencies: - is-wsl: 1.1.0 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g== - /optionator/0.8.2: - dependencies: - deep-is: 0.1.3 - fast-levenshtein: 2.0.6 - levn: 0.3.0 - prelude-ls: 1.1.2 - type-check: 0.3.2 - wordwrap: 1.0.0 - dev: true - engines: - node: '>= 0.8.0' - resolution: - integrity: sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= - /ora/2.1.0: - dependencies: - chalk: 2.4.1 - cli-cursor: 2.1.0 - cli-spinners: 1.3.1 - log-symbols: 2.2.0 - strip-ansi: 4.0.0 - wcwidth: 1.0.1 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-hNNlAd3gfv/iPmsNxYoAPLvxg7HuPozww7fFonMZvL84tP6Ox5igfk5j/+a9rtJJwqMgKK+JgWsAQik5o0HTLA== - /os-browserify/0.3.0: - dev: true - resolution: - integrity: sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= - /os-homedir/1.0.2: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - /os-tmpdir/1.0.2: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - /p-cancelable/0.4.1: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ== - /p-finally/1.0.0: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - /p-is-promise/1.1.0: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4= - /p-limit/1.3.0: - dependencies: - p-try: 1.0.0 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - /p-locate/2.0.0: - dependencies: - p-limit: 1.3.0 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - /p-map-series/1.0.0: - dependencies: - p-reduce: 1.0.0 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco= - /p-map/1.2.0: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== - /p-reduce/1.0.0: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= - /p-reflect/1.0.0: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-9Poe4btUbY6z7AMhFI3+CnkTe7g= - /p-timeout/2.0.1: - dependencies: - p-finally: 1.0.0 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA== - /p-try/1.0.0: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - /package-json/5.0.0: - dependencies: - got: 8.3.2 - registry-auth-token: 3.3.2 - registry-url: 3.1.0 - semver: 5.5.0 - dev: true - engines: - node: '>=6' - resolution: - integrity: sha512-EeHQFFTlEmLrkIQoxbE9w0FuAWHoc1XpthDqnZ/i9keOt701cteyXwAxQFLpVqVjj3feh2TodkihjLaRUtIgLg== - /pako/0.2.9: - dev: true - resolution: - integrity: sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU= - /pako/1.0.6: - dev: true - resolution: - integrity: sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg== - /parcel-bundler/1.9.7: - dependencies: - ansi-to-html: 0.6.6 - babel-code-frame: 6.26.0 - babel-core: 6.26.3 - babel-generator: 6.26.1 - babel-plugin-transform-es2015-modules-commonjs: 6.26.2 - babel-plugin-transform-react-jsx: 6.24.1 - babel-preset-env: 1.7.0 - babel-template: 6.26.0 - babel-traverse: 6.26.0 - babel-types: 6.26.0 - babylon: 6.18.0 - babylon-walk: 1.0.2 - browserslist: 3.2.8 - chalk: 2.4.1 - clone: 2.1.1 - command-exists: 1.2.7 - commander: 2.16.0 - cross-spawn: 6.0.5 - cssnano: 4.0.4 - deasync: 0.1.13 - dotenv: 5.0.1 - fast-glob: 2.2.2 - filesize: 3.6.1 - fswatcher-child: 1.0.5 - get-port: 3.2.0 - grapheme-breaker: 0.3.2 - htmlnano: 0.1.9 - is-glob: 4.0.0 - is-url: 1.2.4 - js-yaml: 3.12.0 - json5: 1.0.1 - micromatch: 3.1.10 - mkdirp: 0.5.1 - node-forge: 0.7.5 - node-libs-browser: 2.1.0 - opn: 5.3.0 - ora: 2.1.0 - physical-cpu-count: 2.0.0 - postcss: 6.0.23 - postcss-value-parser: 3.3.0 - posthtml: 0.11.3 - posthtml-parser: 0.4.1 - posthtml-render: 1.1.4 - resolve: 1.8.1 - semver: 5.5.0 - serialize-to-js: 1.2.1 - serve-static: 1.13.2 - source-map: 0.6.1 - strip-ansi: 4.0.0 - terser: 3.8.1 - toml: 2.3.3 - tomlify-j0.4: 3.0.0 - v8-compile-cache: 2.0.0 - ws: 5.2.2 - dev: true - engines: - node: '>= 6.0.0' - hasBin: true - requiresBuild: true - resolution: - integrity: sha512-x+RiXe/C+aOoFuw+acH/NKjKmUJ/2zbFWFUS/KE5jBk2ErsN0Dc3OxLpmEaeIMU4oMPWFeNm5mRXcXdeUwf7GA== - /parse-asn1/5.1.1: - dependencies: - asn1.js: 4.10.1 - browserify-aes: 1.2.0 - create-hash: 1.2.0 - evp_bytestokey: 1.0.3 - pbkdf2: 3.0.16 - dev: true - resolution: - integrity: sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw== - /parse-commit-message/1.1.2: - dependencies: - arrayify: 1.0.0 - collect-mentions: 0.1.1 - dev: true - engines: - node: '>=8' - npm: '>=5' - yarn: '>=1' - resolution: - integrity: sha512-Qbo5hsgyHUklbDJeBMelKUKN9PEpJ1leEUSLziPPuC0NDNI5RCtynihLvQhhZUSv49aey+x6fdXLQlIIAuT4OQ== - /parse-git-log/0.2.1: - dependencies: - cross-spawn: 5.1.0 - split2: 2.2.0 - through2: 2.0.3 - vfile: 2.3.0 - dev: true - engines: - node: '>=4' - npm: '>=2' - resolution: - integrity: sha1-HMjGPIOQov2/ATaCVfQ5N/iiPuE= - /parse-json/2.2.0: - dependencies: - error-ex: 1.3.2 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= - /parse-json/4.0.0: - dependencies: - error-ex: 1.3.2 - json-parse-better-errors: 1.0.2 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= - /parse-ms/1.0.1: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-VjRtR0nXjyNDDKDHE4UK75GqNh0= - /parseurl/1.3.2: - dev: true - engines: - node: '>= 0.8' - resolution: - integrity: sha1-/CidTtiZMRlGDBViUyYs3I3mW/M= - /pascalcase/0.1.1: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - /path-browserify/0.0.0: - dev: true - resolution: - integrity: sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo= - /path-dirname/1.0.2: - dev: true - resolution: - integrity: sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - /path-exists/2.1.0: - dependencies: - pinkie-promise: 2.0.1 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= - /path-exists/3.0.0: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - /path-is-absolute/1.0.1: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - /path-is-inside/1.0.2: - dev: true - resolution: - integrity: sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= - /path-key/2.0.1: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - /path-parse/1.0.5: - dev: true - resolution: - integrity: sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME= - /path-type/2.0.0: - dependencies: - pify: 2.3.0 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= - /pbkdf2/3.0.16: - dependencies: - create-hash: 1.2.0 - create-hmac: 1.1.7 - ripemd160: 2.0.2 - safe-buffer: 5.1.2 - sha.js: 2.4.11 - dev: true - engines: - node: '>=0.12' - resolution: - integrity: sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA== - /physical-cpu-count/2.0.0: - dev: true - resolution: - integrity: sha1-GN4vl+S/epVRrXURlCtUlverpmA= - /pify/2.3.0: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - /pify/3.0.0: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - /pinkie-promise/2.0.1: - dependencies: - pinkie: 2.0.4 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-ITXW36ejWMBprJsXh3YogihFD/o= - /pinkie/2.0.4: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-clVrgM+g1IqXToDnckjoDtT3+HA= - /pirates/4.0.0: - dependencies: - node-modules-regexp: 1.0.0 - dev: true - engines: - node: '>= 6' - resolution: - integrity: sha512-8t5BsXy1LUIjn3WWOlOuFDuKswhQb/tkak641lvBgmPOBUQHXveORtlMCp6OdPV1dtuTaEahKA8VNz6uLfKBtA== - /pkg-dir/1.0.0: - dependencies: - find-up: 1.1.2 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-ektQio1bstYp1EcFb/TpyTFM89Q= - /pkg-dir/2.0.0: - dependencies: - find-up: 2.1.0 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= - /pluralize/7.0.0: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow== - /posix-character-classes/0.1.1: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - /postcss-calc/5.3.1: - dependencies: - postcss: 5.2.18 - postcss-message-helpers: 2.0.0 - reduce-css-calc: 1.3.0 - dev: true - resolution: - integrity: sha1-d7rnypKK2FcW4v2kLyYb98HWW14= - /postcss-calc/6.0.1: - dependencies: - css-unit-converter: 1.1.1 - postcss: 6.0.23 - postcss-selector-parser: 2.2.3 - reduce-css-calc: 2.1.4 - dev: true - resolution: - integrity: sha1-PSQXG79udinUIqQ26/5t2VEfQzA= - /postcss-colormin/2.2.2: - dependencies: - colormin: 1.1.2 - postcss: 5.2.18 - postcss-value-parser: 3.3.0 - dev: true - resolution: - integrity: sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks= - /postcss-colormin/4.0.1: - dependencies: - browserslist: 4.0.1 - color: 3.0.0 - has: 1.0.3 - postcss: 6.0.23 - postcss-value-parser: 3.3.0 - dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha1-bxwYoBVbxpYT8v8ThD4uSuj/C74= - /postcss-convert-values/2.6.1: - dependencies: - postcss: 5.2.18 - postcss-value-parser: 3.3.0 - dev: true - resolution: - integrity: sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0= - /postcss-convert-values/4.0.0: - dependencies: - postcss: 6.0.23 - postcss-value-parser: 3.3.0 - dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha1-d9d9mu0dxOaVbmUcw0nVMwWHb2I= - /postcss-discard-comments/2.0.4: - dependencies: - postcss: 5.2.18 - dev: true - resolution: - integrity: sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0= - /postcss-discard-comments/4.0.0: - dependencies: - postcss: 6.0.23 - dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha1-loSimedrPpMmPvj9KtvxocCP2I0= - /postcss-discard-duplicates/2.1.0: - dependencies: - postcss: 5.2.18 - dev: true - resolution: - integrity: sha1-uavye4isGIFYpesSq8riAmO5GTI= - /postcss-discard-duplicates/4.0.0: - dependencies: - postcss: 6.0.23 - dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha1-QvPCZ/hfqQngQsNXZ+z9Zcsr1yw= - /postcss-discard-empty/2.1.0: - dependencies: - postcss: 5.2.18 - dev: true - resolution: - integrity: sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU= - /postcss-discard-empty/4.0.0: - dependencies: - postcss: 6.0.23 - dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha1-VeGKWcdBKOOMfSgEvPpAVmEfuX8= - /postcss-discard-overridden/0.1.1: - dependencies: - postcss: 5.2.18 - dev: true - resolution: - integrity: sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg= - /postcss-discard-overridden/4.0.0: - dependencies: - postcss: 6.0.23 - dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha1-Sgv4WXh4TPH4HtLBwf2dlkodofo= - /postcss-discard-unused/2.2.3: - dependencies: - postcss: 5.2.18 - uniqs: 2.0.0 - dev: true - resolution: - integrity: sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM= - /postcss-filter-plugins/2.0.3: - dependencies: - postcss: 5.2.18 - dev: true - resolution: - integrity: sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ== - /postcss-merge-idents/2.1.7: - dependencies: - has: 1.0.3 - postcss: 5.2.18 - postcss-value-parser: 3.3.0 - dev: true - resolution: - integrity: sha1-TFUwMTwI4dWzu/PSu8dH4njuonA= - /postcss-merge-longhand/2.0.2: - dependencies: - postcss: 5.2.18 - dev: true - resolution: - integrity: sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg= - /postcss-merge-longhand/4.0.3: - dependencies: - css-color-names: 0.0.4 - postcss: 6.0.23 - postcss-value-parser: 3.3.0 - stylehacks: 4.0.0 - dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha1-F/k7cdih26BDt/tDf44mQwTmSrA= - /postcss-merge-rules/2.1.2: - dependencies: - browserslist: 1.7.7 - caniuse-api: 1.6.1 - postcss: 5.2.18 - postcss-selector-parser: 2.2.3 - vendors: 1.0.2 - dev: true - resolution: - integrity: sha1-0d9d+qexrMO+VT8OnhDofGG19yE= - /postcss-merge-rules/4.0.1: - dependencies: - browserslist: 4.0.1 - caniuse-api: 3.0.0 - cssnano-util-same-parent: 4.0.0 - postcss: 6.0.23 - postcss-selector-parser: 3.1.1 - vendors: 1.0.2 - dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha1-Qw/Vmz8u0uivzQsxJ47aOYVKuxA= - /postcss-message-helpers/2.0.0: - dev: true - resolution: - integrity: sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4= - /postcss-minify-font-values/1.0.5: - dependencies: - object-assign: 4.1.1 - postcss: 5.2.18 - postcss-value-parser: 3.3.0 - dev: true - resolution: - integrity: sha1-S1jttWZB66fIR0qzUmyv17vey2k= - /postcss-minify-font-values/4.0.0: - dependencies: - postcss: 6.0.23 - postcss-value-parser: 3.3.0 - dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha1-TMM9KD1qgXWQNudX75gdksvYW+0= - /postcss-minify-gradients/1.0.5: - dependencies: - postcss: 5.2.18 - postcss-value-parser: 3.3.0 - dev: true - resolution: - integrity: sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE= - /postcss-minify-gradients/4.0.0: - dependencies: - cssnano-util-get-arguments: 4.0.0 - is-color-stop: 1.1.0 - postcss: 6.0.23 - postcss-value-parser: 3.3.0 - dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha1-P8ORZDnSepu4Bm23za2AFlDrCQ4= - /postcss-minify-params/1.2.2: - dependencies: - alphanum-sort: 1.0.2 - postcss: 5.2.18 - postcss-value-parser: 3.3.0 - uniqs: 2.0.0 - dev: true - resolution: - integrity: sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM= - /postcss-minify-params/4.0.0: - dependencies: - alphanum-sort: 1.0.2 - cssnano-util-get-arguments: 4.0.0 - postcss: 6.0.23 - postcss-value-parser: 3.3.0 - uniqs: 2.0.0 - dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha1-BekWbuSMBa9lGYnOhNOcG015BnQ= - /postcss-minify-selectors/2.1.1: - dependencies: - alphanum-sort: 1.0.2 - has: 1.0.3 - postcss: 5.2.18 - postcss-selector-parser: 2.2.3 - dev: true - resolution: - integrity: sha1-ssapjAByz5G5MtGkllCBFDEXNb8= - /postcss-minify-selectors/4.0.0: - dependencies: - alphanum-sort: 1.0.2 - has: 1.0.3 - postcss: 6.0.23 - postcss-selector-parser: 3.1.1 - dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha1-sen2xGNBbT/Nyybnt4XZX2FXiq0= - /postcss-normalize-charset/1.1.1: - dependencies: - postcss: 5.2.18 - dev: true - resolution: - integrity: sha1-757nEhLX/nWceO0WL2HtYrXLk/E= - /postcss-normalize-charset/4.0.0: - dependencies: - postcss: 6.0.23 - dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha1-JFJyknAtXoEp6vo9HeSe1RpqtzA= - /postcss-normalize-display-values/4.0.0: - dependencies: - cssnano-util-get-match: 4.0.0 - postcss: 6.0.23 - postcss-value-parser: 3.3.0 - dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha1-lQ4Me+NEV3ChYP/9a2ZEw8DNj4k= - /postcss-normalize-positions/4.0.0: - dependencies: - cssnano-util-get-arguments: 4.0.0 - has: 1.0.3 - postcss: 6.0.23 - postcss-value-parser: 3.3.0 - dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha1-7pNDq5gbgixjq3JhXszNCFZERaM= - /postcss-normalize-repeat-style/4.0.0: - dependencies: - cssnano-util-get-arguments: 4.0.0 - cssnano-util-get-match: 4.0.0 - postcss: 6.0.23 - postcss-value-parser: 3.3.0 - dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha1-txHFks8W+vn/V15C+hALZ5kIPv8= - /postcss-normalize-string/4.0.0: - dependencies: - has: 1.0.3 - postcss: 6.0.23 - postcss-value-parser: 3.3.0 - dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha1-cYy20wpvrGrGqDDjLAbAfbxm/l0= - /postcss-normalize-timing-functions/4.0.0: - dependencies: - cssnano-util-get-match: 4.0.0 - postcss: 6.0.23 - postcss-value-parser: 3.3.0 - dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha1-A1HymIaqmB1D2RssK9GuptCvbSM= - /postcss-normalize-unicode/4.0.0: - dependencies: - postcss: 6.0.23 - postcss-value-parser: 3.3.0 - dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha1-Ws1dR7rqXRdnSyzMSuUWb6iM35c= - /postcss-normalize-url/3.0.8: - dependencies: - is-absolute-url: 2.1.0 - normalize-url: 1.9.1 - postcss: 5.2.18 - postcss-value-parser: 3.3.0 - dev: true - resolution: - integrity: sha1-EI90s/L82viRov+j6kWSJ5/HgiI= - /postcss-normalize-url/4.0.0: - dependencies: - is-absolute-url: 2.1.0 - normalize-url: 3.2.0 - postcss: 6.0.23 - postcss-value-parser: 3.3.0 - dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha1-t6nIrSbPJmlMFG6y1ovQz0mVbw0= - /postcss-normalize-whitespace/4.0.0: - dependencies: - postcss: 6.0.23 - postcss-value-parser: 3.3.0 - dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha1-HafnaxCuY8EYJ/oE/Du0oe/pnMA= - /postcss-ordered-values/2.2.3: - dependencies: - postcss: 5.2.18 - postcss-value-parser: 3.3.0 - dev: true - resolution: - integrity: sha1-7sbCpntsQSqNsgQud/6NpD+VwR0= - /postcss-ordered-values/4.0.0: - dependencies: - cssnano-util-get-arguments: 4.0.0 - postcss: 6.0.23 - postcss-value-parser: 3.3.0 - dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha1-WLQMdPcuAi6zQVLBLksPk1RIL8I= - /postcss-reduce-idents/2.4.0: - dependencies: - postcss: 5.2.18 - postcss-value-parser: 3.3.0 - dev: true - resolution: - integrity: sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM= - /postcss-reduce-initial/1.0.1: - dependencies: - postcss: 5.2.18 - dev: true - resolution: - integrity: sha1-aPgGlfBF0IJjqHmtJA343WT2ROo= - /postcss-reduce-initial/4.0.1: - dependencies: - browserslist: 4.0.1 - caniuse-api: 3.0.0 - has: 1.0.3 - postcss: 6.0.23 - dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha1-8tWPUM6isMXcEnjW6l7Q/1gpwpM= - /postcss-reduce-transforms/1.0.4: - dependencies: - has: 1.0.3 - postcss: 5.2.18 - postcss-value-parser: 3.3.0 - dev: true - resolution: - integrity: sha1-/3b02CEkN7McKYpC0uFEQCV3GuE= - /postcss-reduce-transforms/4.0.0: - dependencies: - cssnano-util-get-match: 4.0.0 - has: 1.0.3 - postcss: 6.0.23 - postcss-value-parser: 3.3.0 - dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha1-9kX8dEDDUnT0DegQThStcWPt8Yg= - /postcss-selector-parser/2.2.3: - dependencies: - flatten: 1.0.2 - indexes-of: 1.0.1 - uniq: 1.0.1 - dev: true - resolution: - integrity: sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A= - /postcss-selector-parser/3.1.1: - dependencies: - dot-prop: 4.2.0 - indexes-of: 1.0.1 - uniq: 1.0.1 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU= - /postcss-svgo/2.1.6: - dependencies: - is-svg: 2.1.0 - postcss: 5.2.18 - postcss-value-parser: 3.3.0 - svgo: 0.7.2 - dev: true - resolution: - integrity: sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0= - /postcss-svgo/4.0.0: - dependencies: - is-svg: 3.0.0 - postcss: 6.0.23 - postcss-value-parser: 3.3.0 - svgo: 1.0.5 - dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha1-wLutAlIPxjbJ14sOhAPi5RXDIoU= - /postcss-unique-selectors/2.0.2: - dependencies: - alphanum-sort: 1.0.2 - postcss: 5.2.18 - uniqs: 2.0.0 - dev: true - resolution: - integrity: sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0= - /postcss-unique-selectors/4.0.0: - dependencies: - alphanum-sort: 1.0.2 - postcss: 6.0.23 - uniqs: 2.0.0 - dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha1-BMHpdkx1h0JhMDQCxB8Ol2n8VQE= - /postcss-value-parser/3.3.0: - dev: true - resolution: - integrity: sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU= - /postcss-zindex/2.2.0: - dependencies: - has: 1.0.3 - postcss: 5.2.18 - uniqs: 2.0.0 - dev: true - resolution: - integrity: sha1-0hCd3AVbka9n/EyzsCWUZjnSryI= - /postcss/5.2.18: - dependencies: - chalk: 1.1.3 - js-base64: 2.4.8 - source-map: 0.5.7 - supports-color: 3.2.3 - dev: true - engines: - node: '>=0.12' - resolution: - integrity: sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg== - /postcss/6.0.23: - dependencies: - chalk: 2.4.1 - source-map: 0.6.1 - supports-color: 5.4.0 - dev: true - engines: - node: '>=4.0.0' - resolution: - integrity: sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== - /posthtml-parser/0.3.3: - dependencies: - htmlparser2: 3.9.2 - isobject: 2.1.0 - object-assign: 4.1.1 - dev: true - resolution: - integrity: sha512-H/Z/yXGwl49A7hYQLV1iQ3h87NE0aZ/PMZhFwhw3lKeCAN+Ti4idrHvVvh4/GX10I7u77aQw+QB4vV5/Lzvv5A== - /posthtml-parser/0.4.1: - dependencies: - htmlparser2: 3.9.2 - object-assign: 4.1.1 - dev: true - resolution: - integrity: sha512-h7vXIQ21Ikz2w5wPClPakNP6mJeJCK6BT0GpqnQrNNABdR7/TchNlFyryL1Bz6Ww53YWCKkr6tdZuHlxY1AVdQ== - /posthtml-render/1.1.4: - dev: true - resolution: - integrity: sha512-jL6eFIzoN3xUEvbo33OAkSDE2VIKU4JQ1wENOows1DpfnrdapR/K3Q1/fB43Mq7wQlcSgRm23nFrvoioufM7eA== - /posthtml/0.11.3: - dependencies: - object-assign: 4.1.1 - posthtml-parser: 0.3.3 - posthtml-render: 1.1.4 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-quMHnDckt2DQ9lRi6bYLnuyBDnVzK+McHa8+ar4kTdYbWEo/92hREOu3h70ZirudOOp/my2b3r0m5YtxY52yrA== - /prelude-ls/1.1.2: - dev: true - engines: - node: '>= 0.8.0' - resolution: - integrity: sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - /prepend-http/1.0.4: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= - /prepend-http/2.0.0: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= - /prettier/1.13.7: - dev: true - engines: - node: '>=4' - hasBin: true - resolution: - integrity: sha512-KIU72UmYPGk4MujZGYMFwinB7lOf2LsDNGSOC8ufevsrPLISrZbNJlWstRi3m0AMuszbH+EFSQ/r6w56RSPK6w== - /pretty-ms/3.2.0: - dependencies: - parse-ms: 1.0.1 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-ZypexbfVUGTFxb0v+m1bUyy92DHe5SyYlnyY0msyms5zd3RwyvNgyxZZsXXgoyzlxjx5MiqtXUdhUfvQbe0A2Q== - /private/0.1.8: - dev: true - engines: - node: '>= 0.6' - resolution: - integrity: sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== - /process-nextick-args/2.0.0: - dev: true - resolution: - integrity: sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== - /process/0.11.10: - dev: true - engines: - node: '>= 0.6.0' - resolution: - integrity: sha1-czIwDoQBYb2j5podHZGn1LwW8YI= - /progress/2.0.0: - dev: true - engines: - node: '>=0.4.0' - resolution: - integrity: sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8= - /prompts/0.1.13: - dependencies: - kleur: 2.0.1 - sisteransi: 0.1.1 - dev: true - engines: - node: '>= 6' - resolution: - integrity: sha512-5SXno8Svo4bo+aBiY0YjlnjN/ZIwMDz60dADwAxSAonDQiq8WKpB+gnP50D9PgPYtZ1MvpS4RoVa0dX4B9lrcw== - /prop-types/15.6.2: - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - dev: true - resolution: - integrity: sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ== - /proto-list/1.2.4: - dev: true - resolution: - integrity: sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= - /pseudomap/1.0.2: - dev: true - resolution: - integrity: sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - /public-encrypt/4.0.2: - dependencies: - bn.js: 4.11.8 - browserify-rsa: 4.0.1 - create-hash: 1.2.0 - parse-asn1: 5.1.1 - randombytes: 2.0.6 - dev: true - resolution: - integrity: sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q== - /punycode/1.3.2: - dev: true - resolution: - integrity: sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= - /punycode/1.4.1: - dev: true - resolution: - integrity: sha1-wNWmOycYgArY4esPpSachN1BhF4= - /q/1.5.1: - dev: true - engines: - node: '>=0.6.0' - teleport: '>=0.2.0' - resolution: - integrity: sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= - /query-string/4.3.4: - dependencies: - object-assign: 4.1.1 - strict-uri-encode: 1.1.0 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-u7aTucqRXCMlFbIosaArYJBD2+s= - /query-string/5.1.1: - dependencies: - decode-uri-component: 0.2.0 - object-assign: 4.1.1 - strict-uri-encode: 1.1.0 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== - /querystring-es3/0.2.1: - dev: true - engines: - node: '>=0.4.x' - resolution: - integrity: sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= - /querystring/0.2.0: - dev: true - engines: - node: '>=0.4.x' - resolution: - integrity: sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= - /quote-stream/1.0.2: - dependencies: - buffer-equal: 0.0.1 - minimist: 1.2.0 - through2: 2.0.3 - dev: true - hasBin: true - resolution: - integrity: sha1-hJY/jJwmuULhU/7rU6rnRlK34LI= - /randombytes/2.0.6: - dependencies: - safe-buffer: 5.1.2 - dev: true - resolution: - integrity: sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A== - /randomfill/1.0.4: - dependencies: - randombytes: 2.0.6 - safe-buffer: 5.1.2 - dev: true - resolution: - integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== - /range-parser/1.2.0: - dev: true - engines: - node: '>= 0.6' - resolution: - integrity: sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4= - /rc/1.2.8: - dependencies: - deep-extend: 0.6.0 - ini: 1.3.5 - minimist: 1.2.0 - strip-json-comments: 2.0.1 - dev: true - hasBin: true - resolution: - integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - /read-pkg-up/2.0.0: - dependencies: - find-up: 2.1.0 - read-pkg: 2.0.0 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= - /read-pkg/2.0.0: - dependencies: - load-json-file: 2.0.0 - normalize-package-data: 2.4.0 - path-type: 2.0.0 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= - /readable-stream/2.3.6: - dependencies: - core-util-is: 1.0.2 - inherits: 2.0.3 - isarray: 1.0.0 - process-nextick-args: 2.0.0 - safe-buffer: 5.1.2 - string_decoder: 1.1.1 - util-deprecate: 1.0.2 - dev: true - resolution: - integrity: sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== - /readdirp/2.1.0: - dependencies: - graceful-fs: 4.1.11 - minimatch: 3.0.4 - readable-stream: 2.3.6 - set-immediate-shim: 1.0.1 - dev: true - engines: - node: '>=0.6' - resolution: - integrity: sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg= - /reduce-css-calc/1.3.0: - dependencies: - balanced-match: 0.4.2 - math-expression-evaluator: 1.2.17 - reduce-function-call: 1.0.2 - dev: true - resolution: - integrity: sha1-dHyRTgSWFKTJz7umKYca0dKSdxY= - /reduce-css-calc/2.1.4: - dependencies: - css-unit-converter: 1.1.1 - postcss-value-parser: 3.3.0 - dev: true - resolution: - integrity: sha512-i/vWQbyd3aJRmip9OVSN9V6nIjLf/gg/ctxb0CpvHWtcRysFl/ngDBQD+rqavxdw/doScA3GMBXhzkHQ4GCzFQ== - /reduce-function-call/1.0.2: - dependencies: - balanced-match: 0.4.2 - dev: true - resolution: - integrity: sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk= - /regenerate-unicode-properties/7.0.0: - dependencies: - regenerate: 1.4.0 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw== - /regenerate/1.4.0: - dev: true - resolution: - integrity: sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== - /regenerator-runtime/0.11.1: - dev: true - resolution: - integrity: sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== - /regenerator-transform/0.10.1: - dependencies: - babel-runtime: 6.26.0 - babel-types: 6.26.0 - private: 0.1.8 - dev: true - resolution: - integrity: sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q== - /regenerator-transform/0.13.3: - dependencies: - private: 0.1.8 - dev: true - resolution: - integrity: sha512-5ipTrZFSq5vU2YoGoww4uaRVAK4wyYC4TSICibbfEPOruUu8FFP7ErV0BjmbIOEpn3O/k9na9UEdYR/3m7N6uA== - /regex-not/1.0.2: - dependencies: - extend-shallow: 3.0.2 - safe-regex: 1.1.0 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - /regexpp/1.1.0: - dev: true - engines: - node: '>=4.0.0' - resolution: - integrity: sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw== - /regexpu-core/2.0.0: - dependencies: - regenerate: 1.4.0 - regjsgen: 0.2.0 - regjsparser: 0.1.5 - dev: true - resolution: - integrity: sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA= - /regexpu-core/4.2.0: - dependencies: - regenerate: 1.4.0 - regenerate-unicode-properties: 7.0.0 - regjsgen: 0.4.0 - regjsparser: 0.3.0 - unicode-match-property-ecmascript: 1.0.4 - unicode-match-property-value-ecmascript: 1.0.2 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-Z835VSnJJ46CNBttalHD/dB+Sj2ezmY6Xp38npwU87peK6mqOzOpV8eYktdkLTEkzzD+JsTcxd84ozd8I14+rw== - /registry-auth-token/3.3.2: - dependencies: - rc: 1.2.8 - safe-buffer: 5.1.2 - dev: true - resolution: - integrity: sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ== - /registry-url/3.1.0: - dependencies: - rc: 1.2.8 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-PU74cPc93h138M+aOBQyRE4XSUI= - /regjsgen/0.2.0: - dev: true - resolution: - integrity: sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= - /regjsgen/0.4.0: - dev: true - resolution: - integrity: sha512-X51Lte1gCYUdlwhF28+2YMO0U6WeN0GLpgpA7LK7mbdDnkQYiwvEpmpe0F/cv5L14EbxgrdayAG3JETBv0dbXA== - /regjsparser/0.1.5: - dependencies: - jsesc: 0.5.0 - dev: true - hasBin: true - resolution: - integrity: sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= - /regjsparser/0.3.0: - dependencies: - jsesc: 0.5.0 - dev: true - hasBin: true - resolution: - integrity: sha512-zza72oZBBHzt64G7DxdqrOo/30bhHkwMUoT0WqfGu98XLd7N+1tsy5MJ96Bk4MD0y74n629RhmrGW6XlnLLwCA== - /remove-trailing-separator/1.1.0: - dev: true - resolution: - integrity: sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - /repeat-element/1.1.2: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-7wiaF40Ug7quTZPrmLT55OEdmQo= - /repeat-string/1.6.1: - dev: true - engines: - node: '>=0.10' - resolution: - integrity: sha1-jcrkcOHIirwtYA//Sndihtp15jc= - /repeating/2.0.1: - dependencies: - is-finite: 1.0.2 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= - /replace-ext/1.0.0: - dev: true - engines: - node: '>= 0.10' - resolution: - integrity: sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= - /require-uncached/1.0.3: - dependencies: - caller-path: 0.1.0 - resolve-from: 1.0.1 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM= - /resolve-from/1.0.1: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY= - /resolve-url/0.2.1: - dev: true - resolution: - integrity: sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - /resolve/1.8.1: - dependencies: - path-parse: 1.0.5 - dev: true - resolution: - integrity: sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA== - /responselike/1.0.2: - dependencies: - lowercase-keys: 1.0.1 - dev: true - resolution: - integrity: sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= - /restore-cursor/2.0.0: - dependencies: - onetime: 2.0.1 - signal-exit: 3.0.2 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-n37ih/gv0ybU/RYpI9YhKe7g368= - /ret/0.1.15: - dev: true - engines: - node: '>=0.12' - resolution: - integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - /rgb-regex/1.0.1: - dev: true - resolution: - integrity: sha1-wODWiC3w4jviVKR16O3UGRX+rrE= - /rgba-regex/1.0.0: - dev: true - resolution: - integrity: sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= - /rimraf/2.6.2: - dependencies: - glob: 7.1.2 - dev: true - hasBin: true - resolution: - integrity: sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w== - /ripemd160/2.0.2: - dependencies: - hash-base: 3.0.4 - inherits: 2.0.3 - dev: true - resolution: - integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - /run-async/2.3.0: - dependencies: - is-promise: 2.1.0 - dev: true - engines: - node: '>=0.12.0' - resolution: - integrity: sha1-A3GrSuC91yDUFm19/aZP96RFpsA= - /rx-lite-aggregates/4.0.8: - dependencies: - rx-lite: 4.0.8 - dev: true - resolution: - integrity: sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74= - /rx-lite/4.0.8: - dev: true - resolution: - integrity: sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= - /safe-buffer/5.1.2: - dev: true - resolution: - integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - /safe-regex/1.1.0: - dependencies: - ret: 0.1.15 - dev: true - resolution: - integrity: sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - /safer-buffer/2.1.2: - dev: true - resolution: - integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - /safer-eval/1.2.3: - dependencies: - clones: 1.1.0 - dev: true - engines: - node: '>=4.0.0' - resolution: - integrity: sha512-nDwXOhiheoaBT6op02n8wzsshjLXHhh4YAeqsDEoVmy1k2+lGv/ENLsGaWqkaKArUkUx48VO12/ZPa3sI/OEqQ== - /sax/1.2.4: - dev: true - resolution: - integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - /semver/5.5.0: - dev: true - hasBin: true - resolution: - integrity: sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA== - /send/0.16.2: - dependencies: - debug: 2.6.9 - depd: 1.1.2 - destroy: 1.0.4 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 0.5.2 - http-errors: 1.6.3 - mime: 1.4.1 - ms: 2.0.0 - on-finished: 2.3.0 - range-parser: 1.2.0 - statuses: 1.4.0 - dev: true - engines: - node: '>= 0.8.0' - resolution: - integrity: sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw== - /serialize-error/2.1.0: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-ULZ51WNc34Rme9yOWa9OW4HV9go= - /serialize-to-js/1.2.1: - dependencies: - js-beautify: 1.7.5 - safer-eval: 1.2.3 - dev: true - engines: - node: '>=4.0.0' - resolution: - integrity: sha512-TK6d30GNkOLeFDPuP6Jfy1Q1V31GxzppYTt2lzr8KWmIUKomFj+260QP5o4AhHLu0pr6urgyS8i/Z1PqurjBoA== - /serve-static/1.13.2: - dependencies: - encodeurl: 1.0.2 - escape-html: 1.0.3 - parseurl: 1.3.2 - send: 0.16.2 - dev: true - engines: - node: '>= 0.8.0' - resolution: - integrity: sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw== - /set-immediate-shim/1.0.1: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= - /set-value/0.4.3: - dependencies: - extend-shallow: 2.0.1 - is-extendable: 0.1.1 - is-plain-object: 2.0.4 - to-object-path: 0.3.0 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-fbCPnT0i3H945Trzw79GZuzfzPE= - /set-value/2.0.0: - dependencies: - extend-shallow: 2.0.1 - is-extendable: 0.1.1 - is-plain-object: 2.0.4 - split-string: 3.1.0 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg== - /setimmediate/1.0.5: - dev: true - resolution: - integrity: sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= - /setprototypeof/1.1.0: - dev: true - resolution: - integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== - /sha.js/2.4.11: - dependencies: - inherits: 2.0.3 - safe-buffer: 5.1.2 - dev: true - hasBin: true - resolution: - integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - /shallow-copy/0.0.1: - dev: true - resolution: - integrity: sha1-QV9CcC1z2BAzApLMXuhurhoRoXA= - /shebang-command/1.2.0: - dependencies: - shebang-regex: 1.0.0 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - /shebang-regex/1.0.0: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - /sigmund/1.0.1: - dev: true - resolution: - integrity: sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA= - /signal-exit/3.0.2: - dev: true - resolution: - integrity: sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= - /simple-swizzle/0.2.2: - dependencies: - is-arrayish: 0.3.2 - dev: true - resolution: - integrity: sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= - /sisteransi/0.1.1: - dev: true - resolution: - integrity: sha512-PmGOd02bM9YO5ifxpw36nrNMBTptEtfRl4qUYl9SndkolplkrZZOW7PGHjrZL53QvMVj9nQ+TKqUnRsw4tJa4g== - /slash/1.0.0: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= - /slice-ansi/1.0.0: - dependencies: - is-fullwidth-code-point: 2.0.0 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== - /snapdragon-node/2.1.1: - dependencies: - define-property: 1.0.0 - isobject: 3.0.1 - snapdragon-util: 3.0.1 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - /snapdragon-util/3.0.1: - dependencies: - kind-of: 3.2.2 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - /snapdragon/0.8.2: - dependencies: - base: 0.11.2 - debug: 2.6.9 - define-property: 0.2.5 - extend-shallow: 2.0.1 - map-cache: 0.2.2 - source-map: 0.5.7 - source-map-resolve: 0.5.2 - use: 3.1.1 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - /sort-keys/1.1.2: - dependencies: - is-plain-obj: 1.1.0 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-RBttTTRnmPG05J6JIK37oOVD+a0= - /sort-keys/2.0.0: - dependencies: - is-plain-obj: 1.1.0 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= - /source-map-resolve/0.5.2: - dependencies: - atob: 2.1.1 - decode-uri-component: 0.2.0 - resolve-url: 0.2.1 - source-map-url: 0.4.0 - urix: 0.1.0 - dev: true - resolution: - integrity: sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== - /source-map-support/0.4.18: - dependencies: - source-map: 0.5.7 - dev: true - resolution: - integrity: sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== - /source-map-support/0.5.6: - dependencies: - buffer-from: 1.1.0 - source-map: 0.6.1 - dev: true - resolution: - integrity: sha512-N4KXEz7jcKqPf2b2vZF11lQIz9W5ZMuUcIOGj243lduidkf2fjkVKJS9vNxVWn3u/uxX38AcE8U9nnH9FPcq+g== - /source-map-url/0.4.0: - dev: true - resolution: - integrity: sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= - /source-map/0.5.7: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - /source-map/0.6.1: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - /spdx-correct/3.0.0: - dependencies: - spdx-expression-parse: 3.0.0 - spdx-license-ids: 3.0.0 - dev: true - resolution: - integrity: sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g== - /spdx-exceptions/2.1.0: - dev: true - resolution: - integrity: sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg== - /spdx-expression-parse/3.0.0: - dependencies: - spdx-exceptions: 2.1.0 - spdx-license-ids: 3.0.0 - dev: true - resolution: - integrity: sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== - /spdx-license-ids/3.0.0: - dev: true - resolution: - integrity: sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA== - /split-cmd/1.0.0: - dev: true - resolution: - integrity: sha512-swsF1ILoo7nnuua37fZXLfh5tk3FsIVhu7Temvg4qefMqgsi8OJsdyv15pMJ2gN04fT6WK8+XdU6fDIiFFezLg== - /split-string/3.1.0: - dependencies: - extend-shallow: 3.0.2 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - /split2/2.2.0: - dependencies: - through2: 2.0.3 - dev: true - resolution: - integrity: sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw== - /sprintf-js/1.0.3: - dev: true - resolution: - integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - /stable/0.1.8: - dev: true - resolution: - integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== - /stack-utils-node-internals/1.0.1: - dev: true - resolution: - integrity: sha1-q0qKRptsvscrC/tYnfXiix0SKB8= - /static-eval/2.0.0: - dependencies: - escodegen: 1.11.0 - dev: true - resolution: - integrity: sha512-6flshd3F1Gwm+Ksxq463LtFd1liC77N/PX1FVVc3OzL3hAmo2fwHFbuArkcfi7s9rTNsLEhcRmXGFZhlgy40uw== - /static-extend/0.1.2: - dependencies: - define-property: 0.2.5 - object-copy: 0.1.0 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - /static-module/2.2.5: - dependencies: - concat-stream: 1.6.2 - convert-source-map: 1.5.1 - duplexer2: 0.1.4 - escodegen: 1.9.1 - falafel: 2.1.0 - has: 1.0.3 - magic-string: 0.22.5 - merge-source-map: 1.0.4 - object-inspect: 1.4.1 - quote-stream: 1.0.2 - readable-stream: 2.3.6 - shallow-copy: 0.0.1 - static-eval: 2.0.0 - through2: 2.0.3 - dev: true - resolution: - integrity: sha512-D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ== - /statuses/1.4.0: - dev: true - engines: - node: '>= 0.6' - resolution: - integrity: sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew== - /statuses/1.5.0: - dev: true - engines: - node: '>= 0.6' - resolution: - integrity: sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - /stream-browserify/2.0.1: - dependencies: - inherits: 2.0.3 - readable-stream: 2.3.6 - dev: true - resolution: - integrity: sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds= - /stream-http/2.8.3: - dependencies: - builtin-status-codes: 3.0.0 - inherits: 2.0.3 - readable-stream: 2.3.6 - to-arraybuffer: 1.0.1 - xtend: 4.0.1 - dev: true - resolution: - integrity: sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== - /strict-uri-encode/1.1.0: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= - /string-width/2.1.1: - dependencies: - is-fullwidth-code-point: 2.0.0 - strip-ansi: 4.0.0 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - /string_decoder/1.1.1: - dependencies: - safe-buffer: 5.1.2 - dev: true - resolution: - integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - /strip-ansi/3.0.1: - dependencies: - ansi-regex: 2.1.1 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - /strip-ansi/4.0.0: - dependencies: - ansi-regex: 3.0.0 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-qEeQIusaw2iocTibY1JixQXuNo8= - /strip-bom/3.0.0: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - /strip-eof/1.0.0: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - /strip-json-comments/2.0.1: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-PFMZQukIwml8DsNEhYwobHygpgo= - /stylehacks/4.0.0: - dependencies: - browserslist: 4.0.1 - postcss: 6.0.23 - postcss-selector-parser: 3.1.1 - dev: true - engines: - node: '>=6.9.0' - resolution: - integrity: sha1-ZLMjlRxKJOX8ey7AbBN78y0VXoo= - /supports-color/2.0.0: - dev: true - engines: - node: '>=0.8.0' - resolution: - integrity: sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= - /supports-color/3.2.3: - dependencies: - has-flag: 1.0.0 - dev: true - engines: - node: '>=0.8.0' - resolution: - integrity: sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= - /supports-color/5.4.0: - dependencies: - has-flag: 3.0.0 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w== - /svgo/0.7.2: - dependencies: - coa: 1.0.4 - colors: 1.1.2 - csso: 2.3.2 - js-yaml: 3.7.0 - mkdirp: 0.5.1 - sax: 1.2.4 - whet.extend: 0.9.9 - dev: true - engines: - node: '>=0.10.0' - hasBin: true - resolution: - integrity: sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U= - /svgo/1.0.5: - dependencies: - coa: 2.0.1 - colors: 1.1.2 - css-select: 1.3.0-rc0 - css-select-base-adapter: 0.1.0 - css-tree: 1.0.0-alpha25 - css-url-regex: 1.1.0 - csso: 3.5.1 - js-yaml: 3.10.0 - mkdirp: 0.5.1 - object.values: 1.0.4 - sax: 1.2.4 - stable: 0.1.8 - unquote: 1.1.1 - util.promisify: 1.0.0 - dev: true - engines: - node: '>=4.0.0' - hasBin: true - resolution: - integrity: sha512-nYrifviB77aNKDNKKyuay3M9aYiK6Hv5gJVDdjj2ZXTQmI8WZc8+UPLR5IpVlktJfSu3co/4XcWgrgI6seGBPg== - /symbol-observable/0.2.4: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-lag9smGG1q9+ehjb2XYKL4bQj0A= - /symbol-observable/1.2.0: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== - /table/4.0.2: - dependencies: - ajv: 5.5.2 - ajv-keywords: /ajv-keywords/2.1.1/ajv@5.5.2 - chalk: 2.4.1 - lodash: 4.17.10 - slice-ansi: 1.0.0 - string-width: 2.1.1 - dev: true - resolution: - integrity: sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA== - /terser/3.8.1: - dependencies: - commander: 2.16.0 - source-map: 0.6.1 - source-map-support: 0.5.6 - dev: true - engines: - node: '>=0.8.0' - hasBin: true - resolution: - integrity: sha512-FRin3gKQ0vm0xPPLuxw1FqpVgv1b2pBpYCaFb5qe6A7sD749Fnq1VbDiX3CEFM0BV0fqDzFtBfgmxhxCdzKQIg== - /text-table/0.2.0: - dev: true - resolution: - integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - /through/2.3.8: - dev: true - resolution: - integrity: sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - /through2/2.0.3: - dependencies: - readable-stream: 2.3.6 - xtend: 4.0.1 - dev: true - resolution: - integrity: sha1-AARWmzfHx0ujnEPzzteNGtlBQL4= - /timed-out/4.0.1: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= - /timers-browserify/2.0.10: - dependencies: - setimmediate: 1.0.5 - dev: true - engines: - node: '>=0.6.0' - resolution: - integrity: sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg== - /timsort/0.3.0: - dev: true - resolution: - integrity: sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= - /tiny-inflate/1.0.2: - dev: true - resolution: - integrity: sha1-k9nez/yIBb1X6uQxDwt0Xptvs6c= - /tmp/0.0.33: - dependencies: - os-tmpdir: 1.0.2 - dev: true - engines: - node: '>=0.6.0' - resolution: - integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - /to-arraybuffer/1.0.1: - dev: true - resolution: - integrity: sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= - /to-fast-properties/1.0.3: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= - /to-fast-properties/2.0.0: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - /to-object-path/0.3.0: - dependencies: - kind-of: 3.2.2 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - /to-regex-range/2.1.1: - dependencies: - is-number: 3.0.0 - repeat-string: 1.6.1 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - /to-regex/3.0.2: - dependencies: - define-property: 2.0.2 - extend-shallow: 3.0.2 - regex-not: 1.0.2 - safe-regex: 1.1.0 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - /toml/2.3.3: - dev: true - resolution: - integrity: sha512-O7L5hhSQHxuufWUdcTRPfuTh3phKfAZ/dqfxZFoxPCj2RYmpaSGLEIs016FCXItQwNr08yefUB5TSjzRYnajTA== - /tomlify-j0.4/3.0.0: - dev: true - resolution: - integrity: sha512-2Ulkc8T7mXJ2l0W476YC/A209PR38Nw8PuaCNtk9uI3t1zzFdGQeWYGQvmj2PZkVvRC/Yoi4xQKMRnWc/N29tQ== - /trim-right/1.0.1: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= - /tty-browserify/0.0.0: - dev: true - resolution: - integrity: sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= - /type-check/0.3.2: - dependencies: - prelude-ls: 1.1.2 - dev: true - engines: - node: '>= 0.8.0' - resolution: - integrity: sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - /typedarray/0.0.6: - dev: true - resolution: - integrity: sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - /typescript/2.9.2: - dev: true - engines: - node: '>=4.2.0' - hasBin: true - resolution: - integrity: sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w== - /uglify-es/3.3.9: - dependencies: - commander: 2.13.0 - source-map: 0.6.1 - dev: true - engines: - node: '>=0.8.0' - hasBin: true - resolution: - integrity: sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ== - /unicode-canonical-property-names-ecmascript/1.0.4: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== - /unicode-match-property-ecmascript/1.0.4: - dependencies: - unicode-canonical-property-names-ecmascript: 1.0.4 - unicode-property-aliases-ecmascript: 1.0.4 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== - /unicode-match-property-value-ecmascript/1.0.2: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ== - /unicode-property-aliases-ecmascript/1.0.4: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg== - /unicode-trie/0.3.1: - dependencies: - pako: 0.2.9 - tiny-inflate: 1.0.2 - dev: true - resolution: - integrity: sha1-1nHd3YkQGgi6w3tqUWEBBgIFIIU= - /union-value/1.0.0: - dependencies: - arr-union: 3.1.0 - get-value: 2.0.6 - is-extendable: 0.1.1 - set-value: 0.4.3 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ= - /uniq/1.0.1: - dev: true - resolution: - integrity: sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= - /uniqs/2.0.0: - dev: true - resolution: - integrity: sha1-/+3ks2slKQaW5uFl1KWe25mOawI= - /unist-util-stringify-position/1.1.2: - dev: true - resolution: - integrity: sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ== - /unquote/1.1.1: - dev: true - resolution: - integrity: sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= - /unset-value/1.0.0: - dependencies: - has-value: 0.3.1 - isobject: 3.0.1 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - /upath/1.1.0: - dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw== - /urix/0.1.0: - dev: true - resolution: - integrity: sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - /url-parse-lax/3.0.0: - dependencies: - prepend-http: 2.0.0 - dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= - /url-to-options/1.0.1: - dev: true - engines: - node: '>= 4' - resolution: - integrity: sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k= - /url/0.11.0: - dependencies: - punycode: 1.3.2 - querystring: 0.2.0 - dev: true - resolution: - integrity: sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= - /use/3.1.1: - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - /util-deprecate/1.0.2: - dev: true - resolution: - integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - /util.promisify/1.0.0: - dependencies: - define-properties: 1.1.2 - object.getownpropertydescriptors: 2.0.3 - dev: true - resolution: - integrity: sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== - /util/0.10.3: - dependencies: - inherits: 2.0.1 - dev: true - resolution: - integrity: sha1-evsa/lCAUkZInj23/g7TeTNqwPk= - /util/0.10.4: - dependencies: - inherits: 2.0.3 - dev: true - resolution: - integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== - /v8-compile-cache/2.0.0: - dev: true - resolution: - integrity: sha512-qNdTUMaCjPs4eEnM3W9H94R3sU70YCuT+/ST7nUf+id1bVOrdjrpUaeZLqPBPRph3hsgn4a4BvwpxhHZx+oSDg== - /validate-npm-package-license/3.0.3: - dependencies: - spdx-correct: 3.0.0 - spdx-expression-parse: 3.0.0 - dev: true - resolution: - integrity: sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g== - /vendors/1.0.2: - dev: true - resolution: - integrity: sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ== - /vfile-message/1.0.1: - dependencies: - unist-util-stringify-position: 1.1.2 - dev: true - resolution: - integrity: sha512-vSGCkhNvJzO6VcWC6AlJW4NtYOVtS+RgCaqFIYUjoGIlHnFL+i0LbtYvonDWOMcB97uTPT4PRsyYY7REWC9vug== - /vfile/2.3.0: - dependencies: - is-buffer: 1.1.6 - replace-ext: 1.0.0 - unist-util-stringify-position: 1.1.2 - vfile-message: 1.0.1 - dev: true - resolution: - integrity: sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w== - /vlq/0.2.3: - dev: true - resolution: - integrity: sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow== - /vm-browserify/0.0.4: - dependencies: - indexof: 0.0.1 - dev: true - resolution: - integrity: sha1-XX6kW7755Kb/ZflUOOCofDV9WnM= - /wcwidth/1.0.1: - dependencies: - defaults: 1.0.3 - dev: true - resolution: - integrity: sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= - /whet.extend/0.9.9: - dev: true - engines: - node: '>=0.6.0' - resolution: - integrity: sha1-+HfVv2SMl+WqVC+twW1qJZucEaE= - /which/1.3.1: - dependencies: - isexe: 2.0.0 - dev: true - hasBin: true - resolution: - integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - /wordwrap/1.0.0: - dev: true - resolution: - integrity: sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - /wrappy/1.0.2: - dev: true - resolution: - integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - /write/0.2.1: - dependencies: - mkdirp: 0.5.1 - dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c= - /ws/5.2.2: - dependencies: - async-limiter: 1.0.0 - dev: true - resolution: - integrity: sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== - /xaxa/2.0.2: - dependencies: - arrayify: 1.0.0 - eslint: 4.19.1 - eslint-config-xaxa: 1.0.6 - esm: 3.0.72 - get-stdin: 6.0.0 - mri: 1.1.1 - dev: true - engines: - node: ^8.9.0 || ^10.6.0 - npm: '>=5.5' - yarn: '>=1.5' - hasBin: true - resolution: - integrity: sha512-9CQQxnZIED0/kYxbXISN2X25i+tOh081//eImGj/MH7RPU5hdal1disPMaXr+srYtHz7TK11ygahlKRUEAvGZg== - /xtend/4.0.1: - dev: true - engines: - node: '>=0.4' - resolution: - integrity: sha1-pcbVMr5lbiPbgg77lDofBJmNY68= - /yallist/2.1.2: - dev: true - resolution: - integrity: sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -registry: 'https://registry.npmjs.org/' -shrinkwrapMinorVersion: 8 -shrinkwrapVersion: 3 -specifiers: - '@babel/core': ^7.0.0-beta.54 - '@babel/preset-env': ^7.0.0-beta.54 - '@babel/preset-stage-3': ^7.0.0-beta.54 - '@babel/preset-typescript': ^7.0.0-beta.54 - '@babel/register': ^7.0.0-beta.54 - '@types/node': ^10.5.3 - asia: ^0.19.7 - babel-core: ^6.26.3 - babel-preset-env: ^1.7.0 - babel-preset-flow: ^6.23.0 - babel-preset-stage-3: ^6.24.1 - babel-register: ^6.26.0 - collect-mentions: ^1.0.1 - gitcommit: ^1.0.8 - new-release: ^4.0.3 - nyc: ^12.0.2 - parcel-bundler: ^1.9.7 - typescript: ^2.9.2 - xaxa: ^2.0.0 diff --git a/src/commit.js b/src/commit.js new file mode 100644 index 0000000..f4ee843 --- /dev/null +++ b/src/commit.js @@ -0,0 +1,94 @@ +import joi from 'joi'; +import { tryCatch, isOptional } from './utils'; +import { parseHeader, stringifyHeader, validateHeader } from './header'; + +/** + * Receives a full commit message `string` and parses it into an `Commit` object + * and returns it. + * + * _The `parse*` methods are not doing checking and validation, + * so you may want to pass the result to `validateCommit` or `checkCommit`, + * or to `validateCommit` with `ret` option set to `true`._ + * + * @name .parseCommit + * @param {string} commit a message like `'fix(foo): bar baz\n\nSome awesome body!'` + * @returns {Commit} a standard object like `{ header: HeaderObject, body, footer }` + * @public + */ +export function parseCommit(commit) { + const { error, value: header } = parseHeader(commit); + if (error) throw error; + + const [body = '', footer = ''] = commit.split('\n\n').slice(1); + + return { header, body, footer }; +} + +/** + * Receives a `Commit` object, validates it using `validateCommit`, + * builds a "commit" string and returns it. + * + * @name .stringifyCommit + * @param {Commit} header a `Commit` object like `{ header: HeaderObject, body, footer }` + * @returns {string} a commit nessage stirng like `'fix(foo): bar baz'` + * @public + */ +export function stringifyCommit(commit) { + const result = validateCommit(commit); + if (result.error) { + throw result.error; + } + + const header = stringifyHeader(commit.header); + + return `${header}${commit.body}${commit.footer}`; +} + +/** + * Validates given `Commit` object and returns `boolean`. + * You may want to set `ret` to `true` return an object instead of throwing. + * + * @name .validateCommit + * @param {Commit} header a `Commit` like `{ header: HeaderObject, body, footer }` + * @param {boolean} [ret] to return result instead of throwing, default `false` + * @returns {boolean|object} if `ret` is `true` then returns `{ value, error }` object, + * where `value` is `Commit` and `error` a standard `Error` + * @public + */ +export function validateCommit(commit, ret = false) { + return tryCatch(() => checkCommit(commit), ret); +} + +/** + * Receives a `Commit` and checks if it is valid. + * + * @name .checkCommit + * @param {Commit} header a `Commit` like `{ type, scope?, subject }` + * @returns {Commit} returns the same as given if no problems, otherwise it will throw. + * @public + */ +export function checkCommit(commit) { + if (!commit || (commit && typeof commit !== 'object')) { + const type = `{ header: { type: string, scope?: string, subject: scope }, body?, footer? }`; + + throw new TypeError(`expect \`commit\` to be an object: ${type}`); + } + + const { error, value: header } = validateHeader(commit, true); + if (error) { + throw error; + } + + const schema = { + header, + body: isOptional, + footer: isOptional, + }; + + const result = joi.validate(commit, schema); + if (result.error) { + result.error.message = `parse-commit-message: ${result.error.message}`; + throw result.error; + } + return result.value; +} diff --git a/src/header.js b/src/header.js new file mode 100644 index 0000000..729ee33 --- /dev/null +++ b/src/header.js @@ -0,0 +1,98 @@ +import joi from 'joi'; +import { tryCatch, isRequired, isOptional, errorMsg } from './utils'; + +/** + * Parses given `header` string into an header object. + * + * _The `parse*` methods are not doing checking and validation, + * so you may want to pass the result to `validateHeader` or `checkHeader`, + * or to `validateHeader` with `ret` option set to `true`._ + * + * @name .parseHeader + * @param {string} header a header stirng like `'fix(foo): bar baz'` + * @returns {HeaderObject} a `HeaderObject` like `{ type, scope?, subject }` + * @public + */ +export function parseHeader(header) { + if (!header || (header && typeof header !== 'string')) { + const msg = `{ type: string, scope?: string, subject: scope }`; + throw new TypeError(`expect \`commit.header\` to be an object: ${msg}`); + } + + const colonIdx = header.indexOf(': '); + if (colonIdx === -1) { + throw new TypeError(errorMsg); + } + + // because the last question mark, which we totally need + // eslint-disable-next-line unicorn/no-unsafe-regex + const regex = /^(\w+)(?:\((.+)\))?: (.+)$/; + if (!regex.test(header)) { + throw new TypeError(errorMsg); + } + const [type, scope = '', subject] = regex.exec(header).slice(1); + + return { type, scope, subject }; +} + +/** + * Receives a `header` object, validates it using `validateHeader`, + * builds a "header" string and returns it. + * + * @name .stringifyHeader + * @param {HeaderObject} header a `HeaderObject` like `{ type, scope?, subject }` + * @returns {string} a header stirng like `'fix(foo): bar baz'` + * @public + */ +export function stringifyHeader(header) { + const result = validateHeader(header, true); + + if (result.error) throw result.error; + + const { type, scope, subject } = result.value; + + return `${type}${scope ? `(${scope})` : ''}: ${subject}`.trim(); +} + +/** + * Validates given `header` object and returns `boolean`. + * You may want to pass `ret` to return an object instead of throwing. + * + * @name .validateHeader + * @param {HeaderObject} header a `HeaderObject` like `{ type, scope?, subject }` + * @param {boolean} [ret] to return result instead of throwing, default `false` + * @returns {boolean|object} if `ret` is `true` then returns `{ value, error }` object, + * where `value` is `HeaderObject` and `error` a standard `Error` + * @public + */ +export function validateHeader(header, ret = false) { + return tryCatch(() => checkHeader(header), ret); +} + +/** + * Receives a `HeaderObject` and checks if it is valid. + * + * @name .checkHeader + * @param {HeaderObject} header a `HeaderObject` like `{ type, scope?, subject }` + * @returns {HeaderObject} returns the same as given if no problems, otherwise it will throw. + * @public + */ +export function checkHeader(header) { + if (!header || (header && typeof header !== 'object')) { + const type = `{ type: string, scope?: string, subject: scope }`; + throw new TypeError(`expect \`commit.header\` to be an object: ${type}`); + } + + const schema = joi.object().keys({ + type: isRequired, + scope: isOptional, + subject: isRequired, + }); + + const result = joi.validate(header, schema); + if (result.error) { + result.error.message = `parse-commit-message: ${result.error.message}`; + throw result.error; + } + return result.value; +} diff --git a/src/index.js b/src/index.js new file mode 100644 index 0000000..8ffbbf8 --- /dev/null +++ b/src/index.js @@ -0,0 +1,154 @@ +import mixinDeep from 'mixin-deep'; + +import { mentions, increment } from './plugins'; +import { parse, stringify, validate, check } from './main'; + +import { + parseHeader, + stringifyHeader, + validateHeader, + checkHeader, +} from './header'; + +import { + parseCommit, + stringifyCommit, + validateCommit, + checkCommit, +} from './commit'; + +/** + * Apply a set of `plugins` over all of the given `commits`. + * A plugin is a simple function passed with `Commit` object, + * which may be returned to modify and set additional properties + * to the `Commit` object. + * + * _The `commits` should be coming from `parse`, `validate` (with `ret` option) + * or the `check` methods._ + * + * @name .applyPlugins + * @param {Array} plugins a simple function like `(commit) => {}` + * @param {object|array} commits a value which should already be gone through `parse` + * @returns {Array} plus the modified or added properties from each function in `plugins` + * @public + */ +export function applyPlugins(plugins, commits) { + const plgs = [].concat(plugins).filter(Boolean); + + return commits.reduce((result, commit) => { + const cmt = plgs.reduce((acc, fn) => { + const res = fn(acc); + return acc.concat(mixinDeep(acc, res)); + }, commit); + + return result.concat(cmt); + }, []); +} + +/** + * An array which includes `mentions` and `increment` built-in plugins. + * The `mentions` is an array of objects. Basically what's returned from + * the [collect-mentions][] package. + * + * @example + * import { plugins, applyPlugins, parse } from 'parse-commit-message'; + * + * console.log(plugins); // => [mentions, increment] + * console.log(plugins[0]); // => [Function mentions] + * console.log(plugins[0]); // => [Function increment] + * + * const cmts = parse([ + * 'fix: foo @bar @qux haha', + * 'feat(cli): awesome @tunnckoCore feature\n\nSuper duper baz!' + * 'fix: ooh\n\nBREAKING CHANGE: some awful api change' + * ]); + * + * const commits = applyPlugins(plugins, cmts); + * console.log(commits); + * // => [ + * // { + * // header: { type: 'fix', scope: '', subject: 'foo bar baz' }, + * // body: '', + * // footer: '', + * // increment: 'patch', + * // isBreaking: false, + * // mentions: [ + * // { handle: '@bar', mention: 'bar', index: 8 }, + * // { handle: '@qux', mention: 'qux', index: 13 }, + * // ] + * // }, + * // { + * // header: { type: 'feat', scope: 'cli', subject: 'awesome feature' }, + * // body: 'Super duper baz!', + * // footer: '', + * // increment: 'minor', + * // isBreaking: false, + * // mentions: [ + * // { handle: '@tunnckoCore', mention: 'tunnckoCore', index: 18 }, + * // ] + * // }, + * // { + * // header: { type: 'fix', scope: '', subject: 'ooh' }, + * // body: 'BREAKING CHANGE: some awful api change', + * // footer: '', + * // increment: 'major', + * // isBreaking: true, + * // mentions: [], + * // }, + * // ] + * + * @name .plugins + * @public + */ +export const plugins = [mentions, increment]; + +/** + * An object (named set) which includes `mentions` and `increment` built-in plugins. + * + * @example + * import { mappers, applyPlugins, parse } from 'parse-commit-message'; + * + * console.log(mappers); // => { mentions, increment } + * console.log(mappers.mentions); // => [Function mentions] + * console.log(mappers.increment); // => [Function increment] + * + * const flat = true; + * const parsed = parse('fix: bar', flat); + * console.log(parsed); + * // => { + * // header: { type: 'feat', scope: 'cli', subject: 'awesome feature' }, + * // body: 'Super duper baz!', + * // footer: '', + * // } + * + * const commit = applyPlugins([mappers.increment], parsed); + * console.log(commit) + * // => [{ + * // header: { type: 'feat', scope: 'cli', subject: 'awesome feature' }, + * // body: 'Super duper baz!', + * // footer: '', + * // increment: 'patch', + * // }] + * + * @name .mappers + * @public + */ +export const mappers = { mentions, increment }; + +export { + // main + parse, + stringify, + validate, + check, + // Only for header (the first line of commit message) + parseHeader, + stringifyHeader, + validateHeader, + checkHeader, + // Whole commit message + parseCommit, + stringifyCommit, + validateCommit, + checkCommit, +}; diff --git a/src/index.ts b/src/index.ts deleted file mode 100644 index c1fd46b..0000000 --- a/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -/** - * @copyright 2017-present, Charlike Mike Reagent (https://i.am.charlike.online) - * @license Apache-2.0 - */ - -import { Plugin, Mappers } from './types'; -import { parse } from './lib/parse'; -import { mentions } from './lib/mentions'; -import { increment } from './lib/increment'; - -const mappers: Mappers = { mentions, increment }; -const plugins: Plugin[] = [mentions, increment]; - -export { parse, plugins, mappers }; diff --git a/src/lib/increment.ts b/src/lib/increment.ts deleted file mode 100644 index d54cb81..0000000 --- a/src/lib/increment.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { Commit } from '../types'; - -/* eslint-disable import/prefer-default-export */ - -export function increment(commit: Commit) { - let isBreaking = isBreakingChange(commit); - let commitIncrement = ''; - - if (/fix|bugfix|patch/.test(commit.header.type)) { - commitIncrement = 'patch'; - } - if (/feat|feature|minor/.test(commit.header.type)) { - commitIncrement = 'minor'; - } - if (/break|breaking|major/.test(commit.header.type) || isBreaking) { - commitIncrement = 'major'; - } - isBreaking = isBreaking || commitIncrement === 'major'; - - return { increment: commitIncrement, isBreaking }; -} - -/* eslint-disable no-param-reassign */ - -function isBreakingChange({ header, body, footer }: Commit) { - body = body || ''; - footer = footer || ''; - - const re = /^BREAKING\s+CHANGES?:\s+/; - return re.test(header.subject) || re.test(body) || re.test(footer); -} diff --git a/src/lib/mentions.ts b/src/lib/mentions.ts deleted file mode 100644 index 635b202..0000000 --- a/src/lib/mentions.ts +++ /dev/null @@ -1,14 +0,0 @@ -import getMentions from 'collect-mentions'; -import { Commit, Mention } from '../types'; - -const collectMentions = getMentions.default || getMentions; - -/* eslint-disable import/prefer-default-export */ -export function mentions({ header, body, footer }: Commit) { - const commitMentions: Mention[] = [] - .concat(collectMentions(header.subject)) - .concat(collectMentions(body)) - .concat(collectMentions(footer)); - - return { mentions: commitMentions }; -} diff --git a/src/lib/parse.ts b/src/lib/parse.ts deleted file mode 100644 index 4004b4b..0000000 --- a/src/lib/parse.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { Commit, Plugin } from '../types'; -import { mentions } from './mentions'; -import { increment } from './increment'; - -const defaultPlugins: Plugin[] = [mentions, increment]; - -function arrayify(val: any) { - /* istanbul ignore next */ - if (!val) return []; - /* istanbul ignore next */ - if (!Array.isArray(val)) return [val]; - /* istanbul ignore next */ - return val; -} - -export type IPlugins = Plugin | Plugin[] | boolean; - -/* eslint-disable import/prefer-default-export */ -export function parse(commitMessage: string, plugins: IPlugins = true): Commit { - if (typeof commitMessage !== 'string') { - throw new TypeError( - 'parseCommitMessage.parse: expect `commitMessage` to be string', - ); - } - - const elements = commitMessage.split(/\r?\n\r?\n/); - const headerStr: string = elements[0]; - const body: string | null = elements.length > 2 ? elements[1] : null; - const footer: string = elements.length > 2 ? elements[2] : elements[1]; - - // eslint-disable-next-line unicorn/no-unsafe-regex - const parts = /^(\w+)(?:\((.+)\))?: (.+)$/.exec(headerStr); - - if (!parts) { - throw new Error( - 'invalid commit message: [optional scope]: ', - ); - } - - const [type, scope = '', subject] = parts.slice(1); - - const commit: Commit = { - header: { - type, - scope, - subject, - toString: () => headerStr, - }, - body: (body && body.trim()) || null, - footer: (footer && footer.trim()) || null, - }; - - if (plugins === true) { - // eslint-disable-next-line no-param-reassign - plugins = defaultPlugins; - } - - return arrayify(plugins).reduce((acc, fn) => { - const result = fn(acc); - - return { ...acc, ...result }; - }, commit); -} diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..4aaae5b --- /dev/null +++ b/src/main.js @@ -0,0 +1,95 @@ +import { tryCatch } from './utils'; +import { parseCommit, stringifyCommit, checkCommit } from './commit'; + +/** + * Receives and parses a single or multiple commit message(s) in form of string, + * object, array of strings, array of objects or mixed. + * + * _The `parse*` methods are not doing checking and validation, + * so you may want to pass the result to `validate` or `check`, + * or to `validate` with `ret` option set to `true`._ + * + * @name .parse + * @param {string|object|array} commits a value to be parsed into an object like `Commit` type + * @param {boolean} [flat] if the returned result length is 1, then returns the first item + * @returns {Commit[]} if `flat` is true, returns a `Commit` + * @public + */ +export function parse(commits, flat = false) { + if (commits && typeof commits === 'string') { + return [parseCommit(commits)]; + } + if (commits && typeof commits === 'object' && !Array.isArray(commits)) { + return [checkCommit(commits)]; + } + + const result = [] + .concat(commits) + .filter(Boolean) + .reduce((acc, val) => acc.concat(parse(val)), []); + + return flat === true && result.length === 1 ? result[0] : result; +} + +/** + * Receives a `Commit` object, validates it using `validate`, + * builds a "commit" message string and returns it. + * + * @name .stringify + * @param {Commit} commit a `Commit` object + * @returns {string} a commit stirng like `'fix(foo): bar baz'` + * @public + */ +export function stringify(commit) { + if (commit && typeof commit === 'string') { + return [commit]; + } + if (commit && typeof commit === 'object' && !Array.isArray(commit)) { + return [stringifyCommit(commit)]; + } + return [] + .concat(commit) + .filter(Boolean) + .reduce((acc, val) => acc.concat(stringify(val)), []); +} + +/** + * Validates a single or multiple commit message(s) in form of string, + * object, array of strings, array of objects or mixed. + * You may want to pass `ret` to return an object instead of throwing. + * + * @name .validate + * @param {string|object|array} commits a value to be parsed & validated into an object like `Commit` type + * @param {boolean} [ret] to return result instead of throwing, default `false` + * @returns {boolean|object} if `ret` is `true` then returns `{ value, error }` object, + * where `value` is `Commit|Commit[]` and `error` a standard `Error` + * @public + */ +export function validate(commits, ret = false) { + return tryCatch(() => check(commits), ret); +} + +/** + * Receives a single or multiple commit message(s) in form of string, + * object, array of strings, array of objects or mixed. + * + * @name .check + * @param {string|object|array} commits a value to be parsed & validated into an object like `Commit` type + * @param {boolean} [flat] if the returned result length is 1, then returns the first item + * @returns {Commit[]} returns the same as given if no problems, otherwise it will throw; + * if `flat: true`, returns a `Commit` + * @public + */ +export function check(commits, flat) { + const result = [] + .concat(commits) + .filter(Boolean) + .reduce((acc, commit) => { + if (typeof commit === 'string') { + commit = parseCommit(commit); // eslint-disable-line no-param-reassign + } + return acc.concat(checkCommit(commit)); + }, []); + + return flat === true && result.length === 1 ? result[0] : result; +} diff --git a/src/plugins/increment.js b/src/plugins/increment.js new file mode 100644 index 0000000..35402c1 --- /dev/null +++ b/src/plugins/increment.js @@ -0,0 +1,38 @@ +/** + * A plugin that adds `increment` and `isBreaking` properties + * to the `commit`. It is already included in the `plugins` named export, + * and in `mappers` named export. + * + * _See the [.plugins](#plugins) and [.mappers](#mappers) examples._ + * + * @name increment + * @param {Commit} commit a standard `Commit` object + * @returns {Commit} plus `{ increment: string, isBreaking: boolean }` + * @public + */ +export default function increment(commit) { + let isBreaking = isBreakingChange(commit); + let commitIncrement = ''; + + if (/fix|bugfix|patch/.test(commit.header.type)) { + commitIncrement = 'patch'; + } + if (/feat|feature|minor/.test(commit.header.type)) { + commitIncrement = 'minor'; + } + if (/break|breaking|major/.test(commit.header.type) || isBreaking) { + commitIncrement = 'major'; + } + isBreaking = isBreaking || commitIncrement === 'major'; + + return { increment: commitIncrement, isBreaking }; +} + +/* eslint-disable no-param-reassign */ + +function isBreakingChange({ header, body, footer }) { + const re = /^BREAKING\s+CHANGES?:\s+/; + return ( + re.test(header.subject) || re.test(body || '') || re.test(footer || '') + ); +} diff --git a/src/plugins/index.js b/src/plugins/index.js new file mode 100644 index 0000000..93f2dc0 --- /dev/null +++ b/src/plugins/index.js @@ -0,0 +1,4 @@ +import increment from './increment'; +import mentions from './mentions'; + +export { increment, mentions }; diff --git a/src/plugins/mentions.js b/src/plugins/mentions.js new file mode 100644 index 0000000..7af8000 --- /dev/null +++ b/src/plugins/mentions.js @@ -0,0 +1,24 @@ +import getMentions from 'collect-mentions'; + +/** + * A plugin that adds `mentions` array property to the `commit`. + * It is already included in the `plugins` named export, + * and in `mappers` named export. + * Basically each entry in that array is an object, + * directly returned from the [collect-mentions][]. + * + * _See the [.plugins](#plugins) and [.mappers](#mappers) examples._ + * + * @name mentions + * @param {Commit} commit a standard `Commit` object + * @returns {Commit} plus `{ mentions: Array }` + * @public + */ +export default function mentions(commit) { + const commitMentions = [] + .concat(getMentions(commit.header.subject)) + .concat(getMentions(commit.body)) + .concat(getMentions(commit.footer)); + + return { mentions: commitMentions }; +} diff --git a/src/types/index.ts b/src/types/index.ts deleted file mode 100644 index 76dbb77..0000000 --- a/src/types/index.ts +++ /dev/null @@ -1,23 +0,0 @@ -// externalize types to `collect-mentions` -export interface Mention { - index: number; - handle: string; - mention: string; -} - -export interface Commit { - header: { - type: string, - scope: string, - subject: string, - toString(): string, - }; - body: string | null; - footer: string | null; - mentions?: Mention[]; - increment?: string; - isBreaking?: boolean; -} - -export type Plugin = (commit: Commit) => { [key: string]: any } | void; -export type Mappers = { [key: string]: Plugin }; diff --git a/src/types/modules.d.ts b/src/types/modules.d.ts deleted file mode 100644 index b738cba..0000000 --- a/src/types/modules.d.ts +++ /dev/null @@ -1 +0,0 @@ -declare module 'collect-mentions'; diff --git a/src/utils.js b/src/utils.js new file mode 100644 index 0000000..6dfce87 --- /dev/null +++ b/src/utils.js @@ -0,0 +1,30 @@ +import joi from 'joi'; +import dedent from 'dedent'; + +export function tryCatch(fn, ret) { + const result = {}; + try { + result.value = fn(); + } catch (err) { + result.error = err; + } + + return ret ? result : !result.error; +} + +export const errorMsg = dedent`parse-commit-message: expect \`commit\` to follow: +[optional scope]: + +[optional body] + +[optional footer]`; + +export const isRequired = joi + .string() + .default('') + .required(); + +export const isOptional = joi + .string() + .default('') + .optional(); diff --git a/test/commit.test.js b/test/commit.test.js new file mode 100644 index 0000000..fc44692 --- /dev/null +++ b/test/commit.test.js @@ -0,0 +1,14 @@ +import test from 'asia'; +import { + parseCommit, + stringifyCommit, + validateCommit, + checkCommit, +} from '../src/commit'; + +test('commit: basic', (t) => { + t.strictEqual(typeof parseCommit, 'function'); + t.strictEqual(typeof stringifyCommit, 'function'); + t.strictEqual(typeof validateCommit, 'function'); + t.strictEqual(typeof checkCommit, 'function'); +}); diff --git a/test/header.test.js b/test/header.test.js new file mode 100644 index 0000000..651db17 --- /dev/null +++ b/test/header.test.js @@ -0,0 +1,14 @@ +import test from 'asia'; +import { + parseHeader, + stringifyHeader, + validateHeader, + checkHeader, +} from '../src/header'; + +test('header: basic', (t) => { + t.strictEqual(typeof parseHeader, 'function'); + t.strictEqual(typeof stringifyHeader, 'function'); + t.strictEqual(typeof validateHeader, 'function'); + t.strictEqual(typeof checkHeader, 'function'); +}); diff --git a/test/index.ts b/test/index.ts deleted file mode 100644 index f6f0292..0000000 --- a/test/index.ts +++ /dev/null @@ -1,144 +0,0 @@ -/** - * @copyright 2017-present, Charlike Mike Reagent (https://i.am.charlike.online) - * @license Apache-2.0 - */ - -import test from 'asia'; -import { parse, plugins, mappers } from '../src/index'; - -test('should be okey with multiline body and without scope', (t) => { - const msg = `feat: foo bar baz - -Some multiline body -Alleluah - -So there is some updated things -fixes #34 -resolves #225 -`; - - const commit = parse(msg); - // => { - // header: { - // type: 'feat', - // scope: undefined, - // subject: 'foo bar baz', - // toString: [Function: toString], - // }, - // body: 'Some multiline body\nAlleluah', - // footer: 'So there is some updated things\nfixes #34\nresolves #225\n', - // increment: 'minor', - // isBreaking: false, - // } - - t.strictEqual(typeof commit, 'object'); - t.ok(commit.mentions); - t.strictEqual(commit.increment, 'minor'); - t.strictEqual(commit.isBreaking, false); - t.strictEqual(commit.header.type, 'feat'); - t.ok(!commit.header.scope, 'commit.header.scope should be falsey'); - t.strictEqual(commit.header.subject, 'foo bar baz'); - t.strictEqual(typeof commit.header.toString, 'function'); - t.strictEqual(commit.header.toString(), 'feat: foo bar baz'); - t.strictEqual(commit.body, 'Some multiline body\nAlleluah'); - t.strictEqual( - commit.footer, - 'So there is some updated things\nfixes #34\nresolves #225', - ); -}); - -test('should have empty body but contain footer', (t) => { - const msg = `fix: some non-breaking update - -Only footer -fixes #33 -`; - const commit = parse(msg, mappers.increment); - t.ok(!commit.body, 'should have falsey value `body` property'); - t.ok(!commit.header.scope, 'commit.header.scope should be falsey'); - t.strictEqual(commit.footer, 'Only footer\nfixes #33'); - t.strictEqual(commit.increment, 'patch'); - t.strictEqual(commit.header.toString(), 'fix: some non-breaking update'); -}); - -test('should have empty body and footer but scope', (t) => { - const str = 'break(critical): some breaking with no body'; - const commit = parse(str, mappers.increment); - - t.ok(!commit.body, 'should have falsey value `body` property'); - t.ok(!commit.footer, 'commit.footer should be falsey'); - t.strictEqual(commit.isBreaking, true); - t.strictEqual(commit.increment, 'major'); - t.strictEqual(commit.header.scope, 'critical'); - t.strictEqual(commit.header.toString(), str); -}); - -test('should support and collect all mentions from anywehere', (t) => { - const msg = `feat(crit): thanks to @foobar for this release - -Also to @barby! - -thanks to @hix! -resolves #123 -`; - - const commit = parse(msg, plugins); - - t.strictEqual(Array.isArray(commit.mentions), true); - - // strong type sometimes sucks? - const mentions = commit.mentions || []; - - t.strictEqual(mentions.length, 3); - t.strictEqual(mentions[0].handle, '@foobar'); - t.strictEqual(mentions[0].mention, 'foobar'); - t.strictEqual(mentions[1].handle, '@barby'); - t.strictEqual(mentions[1].mention, 'barby'); - t.strictEqual(mentions[2].handle, '@hix'); - t.strictEqual(mentions[2].mention, 'hix'); - - t.strictEqual(commit.header.scope, 'crit'); - t.strictEqual(commit.increment, 'minor'); -}); - -test('should .parse throw if no string as first argument', (t) => { - t.throws(() => { - // @ts-ignore - parse(123); - }, /expect `commitMessage` to be string/); -}); - -test('should .parse throw for invalid commit convention message', (t) => { - t.throws(() => parse('foo bar baz'), /invalid commit message/); -}); - -test('do not treat BREAKING CHANGE as major when not at the beginning', (t) => { - const commitMessage = 'fix(abc): foo bar BREAKING CHANGE here is not valid'; - const commit = parse(commitMessage, mappers.increment); - - t.strictEqual(commit.header.type, 'fix'); - t.strictEqual(commit.header.scope, 'abc'); - t.strictEqual( - commit.header.subject, - 'foo bar BREAKING CHANGE here is not valid', - ); - t.strictEqual(commit.increment, 'patch'); -}); - -test('treat `BREAKINGs+CHANGE:s+` as major even if type is `fix`', (t) => { - const msg = `fix: huge bug is resolved - -BREAKING CHANGE: really big refactor - -resolves #2137 -`; - - const commit = parse(msg, mappers.increment); - - t.strictEqual(commit.isBreaking, true); - t.strictEqual(commit.increment, 'major'); - t.strictEqual(commit.body, 'BREAKING CHANGE: really big refactor'); - t.strictEqual(commit.footer, 'resolves #2137'); - t.strictEqual(commit.header.type, 'fix'); - t.strictEqual(commit.header.toString(), 'fix: huge bug is resolved'); -}); diff --git a/test/main.test.js b/test/main.test.js new file mode 100644 index 0000000..2a70401 --- /dev/null +++ b/test/main.test.js @@ -0,0 +1,24 @@ +import test from 'asia'; +import { applyPlugins, plugins, mappers } from '../src'; + +test('main: basic', (t) => { + t.strictEqual(typeof applyPlugins, 'function'); + t.strictEqual(typeof mappers, 'object'); + t.strictEqual(typeof mappers.mentions, 'function'); + t.strictEqual(typeof mappers.increment, 'function'); + t.strictEqual(Array.isArray(plugins), true); + t.strictEqual(plugins.length, 2); +}); + +// const res = parseCommit([ +// 'feat(api): foobar', +// 'fix: some break\n\nBREAKING CHANGE: foobar', +// `refactor: qqqq + +// Foo bar baz. +// Some awesome body! + +// resolves #33 +// fixes #123 +// Signed-off-by: Charlike Mike Reagent `, +// ]); diff --git a/test/modules.d.ts b/test/modules.d.ts deleted file mode 100644 index 62a83b5..0000000 --- a/test/modules.d.ts +++ /dev/null @@ -1 +0,0 @@ -declare module 'asia'; diff --git a/test/plugins/increment.test.js b/test/plugins/increment.test.js new file mode 100644 index 0000000..2e3aa69 --- /dev/null +++ b/test/plugins/increment.test.js @@ -0,0 +1,6 @@ +import test from 'asia'; +import increment from '../../src/plugins/increment'; + +test('plugins:increment: basic', (t) => { + t.strictEqual(typeof increment, 'function'); +}); diff --git a/test/plugins/mentions.test.js b/test/plugins/mentions.test.js new file mode 100644 index 0000000..51129b2 --- /dev/null +++ b/test/plugins/mentions.test.js @@ -0,0 +1,6 @@ +import test from 'asia'; +import mentions from '../../src/plugins/mentions'; + +test('plugins:mentions: basic', (t) => { + t.strictEqual(typeof mentions, 'function'); +}); diff --git a/test/plugins/snapshots/increment.test.snapshot.json b/test/plugins/snapshots/increment.test.snapshot.json new file mode 100644 index 0000000..433e29c --- /dev/null +++ b/test/plugins/snapshots/increment.test.snapshot.json @@ -0,0 +1 @@ +{"plugins:increment: basic":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":1,"str":"(t) => {\n t.strictEqual(typeof increment, 'function');\n}","title":"plugins:increment: basic"}} \ No newline at end of file diff --git a/test/plugins/snapshots/mentions.test.snapshot.json b/test/plugins/snapshots/mentions.test.snapshot.json new file mode 100644 index 0000000..eabc8d5 --- /dev/null +++ b/test/plugins/snapshots/mentions.test.snapshot.json @@ -0,0 +1 @@ +{"plugins:mentions: basic":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":1,"str":"(t) => {\n t.strictEqual(typeof mentions, 'function');\n}","title":"plugins:mentions: basic"}} \ No newline at end of file diff --git a/test/snapshots/commit.test.snapshot.json b/test/snapshots/commit.test.snapshot.json new file mode 100644 index 0000000..24f4fa7 --- /dev/null +++ b/test/snapshots/commit.test.snapshot.json @@ -0,0 +1 @@ +{"commit: basic":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":1,"str":"(t) => {\n t.strictEqual(typeof parseCommit, 'function');\n t.strictEqual(typeof stringifyCommit, 'function');\n t.strictEqual(typeof validateCommit, 'function');\n t.strictEqual(typeof checkCommit, 'function');\n}","title":"commit: basic"}} \ No newline at end of file diff --git a/test/snapshots/index.snapshot.json b/test/snapshots/index.snapshot.json deleted file mode 100644 index 96f1379..0000000 --- a/test/snapshots/index.snapshot.json +++ /dev/null @@ -1 +0,0 @@ -{"should be okey with multiline body and without scope":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":1,"str":"t => {\n const msg = `feat: foo bar baz\n\nSome multiline body\nAlleluah\n\nSo there is some updated things\nfixes #34\nresolves #225\n`;\n const commit = (0, _index.parse)(msg); // => {\n // header: {\n // type: 'feat',\n // scope: undefined,\n // subject: 'foo bar baz',\n // toString: [Function: toString],\n // },\n // body: 'Some multiline body\\nAlleluah',\n // footer: 'So there is some updated things\\nfixes #34\\nresolves #225\\n',\n // increment: 'minor',\n // isBreaking: false,\n // }\n\n t.strictEqual(typeof commit, 'object');\n t.ok(commit.mentions);\n t.strictEqual(commit.increment, 'minor');\n t.strictEqual(commit.isBreaking, false);\n t.strictEqual(commit.header.type, 'feat');\n t.ok(!commit.header.scope, 'commit.header.scope should be falsey');\n t.strictEqual(commit.header.subject, 'foo bar baz');\n t.strictEqual(typeof commit.header.toString, 'function');\n t.strictEqual(commit.header.toString(), 'feat: foo bar baz');\n t.strictEqual(commit.body, 'Some multiline body\\nAlleluah');\n t.strictEqual(commit.footer, 'So there is some updated things\\nfixes #34\\nresolves #225');\n}","title":"should be okey with multiline body and without scope"},"should have empty body but contain footer":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":2,"str":"t => {\n const msg = `fix: some non-breaking update\n\nOnly footer\nfixes #33\n`;\n const commit = (0, _index.parse)(msg, _index.mappers.increment);\n t.ok(!commit.body, 'should have falsey value `body` property');\n t.ok(!commit.header.scope, 'commit.header.scope should be falsey');\n t.strictEqual(commit.footer, 'Only footer\\nfixes #33');\n t.strictEqual(commit.increment, 'patch');\n t.strictEqual(commit.header.toString(), 'fix: some non-breaking update');\n}","title":"should have empty body but contain footer"},"should have empty body and footer but scope":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":3,"str":"t => {\n const str = 'break(critical): some breaking with no body';\n const commit = (0, _index.parse)(str, _index.mappers.increment);\n t.ok(!commit.body, 'should have falsey value `body` property');\n t.ok(!commit.footer, 'commit.footer should be falsey');\n t.strictEqual(commit.isBreaking, true);\n t.strictEqual(commit.increment, 'major');\n t.strictEqual(commit.header.scope, 'critical');\n t.strictEqual(commit.header.toString(), str);\n}","title":"should have empty body and footer but scope"},"should support and collect all mentions from anywehere":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":4,"str":"t => {\n const msg = `feat(crit): thanks to @foobar for this release\n\nAlso to @barby!\n\nthanks to @hix!\nresolves #123\n`;\n const commit = (0, _index.parse)(msg, _index.plugins);\n t.strictEqual(Array.isArray(commit.mentions), true); // strong type sometimes sucks?\n\n const mentions = commit.mentions || [];\n t.strictEqual(mentions.length, 3);\n t.strictEqual(mentions[0].handle, '@foobar');\n t.strictEqual(mentions[0].mention, 'foobar');\n t.strictEqual(mentions[1].handle, '@barby');\n t.strictEqual(mentions[1].mention, 'barby');\n t.strictEqual(mentions[2].handle, '@hix');\n t.strictEqual(mentions[2].mention, 'hix');\n t.strictEqual(commit.header.scope, 'crit');\n t.strictEqual(commit.increment, 'minor');\n}","title":"should support and collect all mentions from anywehere"},"should .parse throw if no string as first argument":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":5,"str":"t => {\n t.throws(() => {\n // @ts-ignore\n (0, _index.parse)(123);\n }, /expect `commitMessage` to be string/);\n}","title":"should .parse throw if no string as first argument"},"should .parse throw for invalid commit convention message":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":6,"str":"t => {\n t.throws(() => (0, _index.parse)('foo bar baz'), /invalid commit message/);\n}","title":"should .parse throw for invalid commit convention message"},"do not treat BREAKING CHANGE as major when not at the beginning":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":7,"str":"t => {\n const commitMessage = 'fix(abc): foo bar BREAKING CHANGE here is not valid';\n const commit = (0, _index.parse)(commitMessage, _index.mappers.increment);\n t.strictEqual(commit.header.type, 'fix');\n t.strictEqual(commit.header.scope, 'abc');\n t.strictEqual(commit.header.subject, 'foo bar BREAKING CHANGE here is not valid');\n t.strictEqual(commit.increment, 'patch');\n}","title":"do not treat BREAKING CHANGE as major when not at the beginning"},"treat `BREAKINGs+CHANGE:s+` as major even if type is `fix`":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":8,"str":"t => {\n const msg = `fix: huge bug is resolved\n\nBREAKING CHANGE: really big refactor\n\nresolves #2137\n`;\n const commit = (0, _index.parse)(msg, _index.mappers.increment);\n t.strictEqual(commit.isBreaking, true);\n t.strictEqual(commit.increment, 'major');\n t.strictEqual(commit.body, 'BREAKING CHANGE: really big refactor');\n t.strictEqual(commit.footer, 'resolves #2137');\n t.strictEqual(commit.header.type, 'fix');\n t.strictEqual(commit.header.toString(), 'fix: huge bug is resolved');\n}","title":"treat `BREAKINGs+CHANGE:s+` as major even if type is `fix`"}} \ No newline at end of file diff --git a/test/snapshots/main.test.snapshot.json b/test/snapshots/main.test.snapshot.json new file mode 100644 index 0000000..7c0e631 --- /dev/null +++ b/test/snapshots/main.test.snapshot.json @@ -0,0 +1 @@ +{"main: basic":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":1,"str":"(t) => {\n t.strictEqual(typeof applyPlugins, 'function');\n t.strictEqual(typeof mappers, 'object');\n t.strictEqual(typeof mappers.mentions, 'function');\n t.strictEqual(typeof mappers.increment, 'function');\n t.strictEqual(Array.isArray(plugins), true);\n t.strictEqual(plugins.length, 2);\n}","title":"main: basic"}} \ No newline at end of file diff --git a/test/utils.test.js b/test/utils.test.js new file mode 100644 index 0000000..c9234cf --- /dev/null +++ b/test/utils.test.js @@ -0,0 +1,11 @@ +import test from 'asia'; +import { tryCatch, isOptional, isRequired, errorMsg } from '../src/utils'; + +test('plugins:increment: basic', (t) => { + t.strictEqual(typeof tryCatch, 'function'); + t.strictEqual(typeof isOptional, 'object'); + t.strictEqual(isOptional.isJoi, true); + t.strictEqual(typeof isRequired, 'object'); + t.strictEqual(isRequired.isJoi, true); + t.strictEqual(typeof errorMsg, 'string'); +}); diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index dd347fb..0000000 --- a/tsconfig.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "exclude": [ - ".git", - "dist", - "node_modules" - ], - "include": [ - "src/**/*.ts" - ], - "compilerOptions": { - "declarationDir": "dist/typings", - "moduleResolution": "node", - "outDir": "dist", - "rootDir": "src", - "strict": true, - "declaration": true, - "alwaysStrict": true, - "noImplicitAny": false, - "noUnusedLocals": true, - "removeComments": true, - "esModuleInterop": true, - "strictNullChecks": false, - "noUnusedParameters": true, - "strictFunctionTypes": true, - "allowSyntheticDefaultImports": true - } -} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..20fd33f --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2531 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.0.0-beta.52": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" + integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== + dependencies: + "@babel/highlight" "^7.0.0" + +"@babel/generator@^7.1.5": + version "7.1.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.1.5.tgz#615f064d13d95f8f9157c7261f68eddf32ec15b3" + integrity sha512-IO31r62xfMI+wBJVmgx0JR9ZOHty8HkoYpQAjRWUGG9vykBTlGHdArZ8zoFtpUu2gs17K7qTl/TtPpiSi6t+MA== + dependencies: + "@babel/types" "^7.1.5" + jsesc "^2.5.1" + lodash "^4.17.10" + source-map "^0.5.0" + trim-right "^1.0.1" + +"@babel/helper-function-name@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" + integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== + dependencies: + "@babel/helper-get-function-arity" "^7.0.0" + "@babel/template" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-get-function-arity@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" + integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-split-export-declaration@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz#3aae285c0311c2ab095d997b8c9a94cad547d813" + integrity sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/highlight@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" + integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" + +"@babel/parser@^7.0.0", "@babel/parser@^7.1.2", "@babel/parser@^7.1.3", "@babel/parser@^7.1.5": + version "7.1.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.1.5.tgz#20b7d5e7e1811ba996f8a868962ea7dd2bfcd2fc" + integrity sha512-WXKf5K5HT6X0kKiCOezJZFljsfxKV1FpU8Tf1A7ZpGvyd/Q4hlrJm2EwoH2onaUq3O4tLDp+4gk0hHPsMyxmOg== + +"@babel/template@^7.1.0": + version "7.1.2" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.1.2.tgz#090484a574fef5a2d2d7726a674eceda5c5b5644" + integrity sha512-SY1MmplssORfFiLDcOETrW7fCLl+PavlwMh92rrGcikQaRq4iWPVH0MpwPpY3etVMx6RnDjXtr6VZYr/IbP/Ag== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.1.2" + "@babel/types" "^7.1.2" + +"@babel/traverse@^7.0.0": + version "7.1.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.1.5.tgz#5aafca2039aa058c104cf2bfeb9fc4a857ccbca9" + integrity sha512-eU6XokWypl0MVJo+MTSPUtlfPePkrqsF26O+l1qFGlCKWwmiYAYy2Sy44Qw8m2u/LbPCsxYt90rghmqhYMGpPA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.1.5" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.0.0" + "@babel/parser" "^7.1.5" + "@babel/types" "^7.1.5" + debug "^3.1.0" + globals "^11.1.0" + lodash "^4.17.10" + +"@babel/types@^7.0.0", "@babel/types@^7.1.2", "@babel/types@^7.1.5": + version "7.1.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.1.5.tgz#12fe64e91a431234b7017b4227a78cc0eec4e081" + integrity sha512-sJeqa/d9eM/bax8Ivg+fXF7FpN3E/ZmTrWbkk6r+g7biVYfALMnLin4dKijsaqEhpd2xvOGfQTkQkD31YCVV4A== + dependencies: + esutils "^2.0.2" + lodash "^4.17.10" + to-fast-properties "^2.0.0" + +"@mrmlnc/readdir-enhanced@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" + integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== + dependencies: + call-me-maybe "^1.0.1" + glob-to-regexp "^0.3.0" + +"@nodelib/fs.stat@^1.0.1": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" + integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== + +"@tunnckocore/config@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@tunnckocore/config/-/config-1.0.0.tgz#ea1ac05dc9620010bc2c67bec273f33d313dee48" + integrity sha512-qcKsvGE+JR615PnsAxv86ZKUguARy06lyhDdIz+/7jC/6ze9R6s/i6/dL2DlIyE12OhXB4axpxqarXQA+CHktw== + dependencies: + babel-eslint "^10.0.0" + docks "^0.6.0" + eslint "^5.8.0" + eslint-config-airbnb "^17.0.0" + eslint-config-prettier "^3.0.0" + eslint-plugin-flowtype "^3.0.0" + eslint-plugin-import "^2.13.0" + eslint-plugin-jsx-a11y "^6.1.1" + eslint-plugin-node "^6.0.1" + eslint-plugin-prettier "^3.0.0" + eslint-plugin-promise "^4.0.0" + eslint-plugin-react "^7.10.0" + eslint-plugin-unicorn "^4.0.3" + esm "^3.0.84" + gitcommit "^1.0.13" + prettier "^1.14.0" + +acorn-jsx@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.0.tgz#958584ddb60990c02c97c1bd9d521fce433bb101" + integrity sha512-XkB50fn0MURDyww9+UYL3c1yLbOBz0ZFvrdYlGB8l+Ije1oSC75qAqrzSPjYQbdnQUzhlUGNKuesryAv0gxZOg== + +acorn@^6.0.2: + version "6.0.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.4.tgz#77377e7353b72ec5104550aa2d2097a2fd40b754" + integrity sha512-VY4i5EKSKkofY2I+6QLTbTTN/UvEQPCo6eiwzzSaSWfpaDhOmStMCMod6wmuPciNq+XS0faCglFu2lHZpdHUtg== + +ajv@^6.5.3: + version "6.5.5" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.5.tgz#cf97cdade71c6399a92c6d6c4177381291b781a1" + integrity sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg== + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-colors@^2.0.2: + version "2.0.5" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-2.0.5.tgz#5da37825fef3e75f3bda47f760d64bfd10e15e10" + integrity sha512-yAdfUZ+c2wetVNIFsNRn44THW+Lty6S5TwMpUfLA/UaGhiXbBv/F8E60/1hMLd0cnF/CDoWH8vzVaI5bAcHCjw== + +ansi-escapes@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" + integrity sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw== + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +aria-query@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc" + integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w= + dependencies: + ast-types-flow "0.0.7" + commander "^2.11.0" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-includes@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" + integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0= + dependencies: + define-properties "^1.1.2" + es-abstract "^1.7.0" + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +arrayify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/arrayify/-/arrayify-1.0.0.tgz#f06a98235b8ef14ca1995992411a9fefb4e49cfc" + integrity sha1-8GqYI1uO8UyhmVmSQRqf77TknPw= + +asia@^0.19.7: + version "0.19.7" + resolved "https://registry.yarnpkg.com/asia/-/asia-0.19.7.tgz#6278f6ae0aba49257b034718b9c8f1452c9cbcd9" + integrity sha512-oEfIqKZJrk0+ACnfJoX/OcxEa4aGba/lFt3FMEaWibkgnI5B9V8h4vMte0C5ufIhFDs6KG2tpgeZ4rBQ45QSAg== + dependencies: + "@babel/code-frame" "^7.0.0-beta.52" + ansi-colors "^2.0.2" + arrayify "^1.0.0" + clean-stacktrace "^1.1.0" + fast-glob "^2.2.2" + globrex "^0.1.1" + is-ci "^1.1.0" + is-observable "^1.1.0" + mkdirp "^0.5.1" + mri "^1.1.1" + observable-to-promise "^0.5.0" + p-map "^1.2.0" + p-map-series "^1.0.0" + p-reflect "^1.0.0" + pretty-ms "^3.2.0" + rimraf "^2.6.2" + serialize-error "^2.1.0" + supports-color "^5.4.0" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +ast-types-flow@0.0.7, ast-types-flow@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= + +atob@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +axobject-query@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.0.2.tgz#ea187abe5b9002b377f925d8bf7d1c561adf38f9" + integrity sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww== + dependencies: + ast-types-flow "0.0.7" + +babel-eslint@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.1.tgz#919681dc099614cd7d31d45c8908695092a1faed" + integrity sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" + eslint-scope "3.7.1" + eslint-visitor-keys "^1.0.0" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +builtin-modules@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +call-me-maybe@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" + integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= + +caller-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" + integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8= + dependencies: + callsites "^0.2.0" + +callsites@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" + integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo= + +chalk@^2.0.0, chalk@^2.1.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" + integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +ci-info@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== + +circular-json@^0.3.1: + version "0.3.3" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" + integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +clean-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clean-regexp/-/clean-regexp-1.0.0.tgz#8df7c7aae51fd36874e8f8d05b9180bc11a3fed7" + integrity sha1-jffHquUf02h06PjQW5GAvBGj/tc= + dependencies: + escape-string-regexp "^1.0.5" + +clean-stacktrace@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/clean-stacktrace/-/clean-stacktrace-1.1.0.tgz#8b8cdc87f640daaba9c595ab6edb897b63b0ce33" + integrity sha1-i4zch/ZA2qupxZWrbtuJe2OwzjM= + dependencies: + stack-utils-node-internals "^1.0.1" + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + dependencies: + restore-cursor "^2.0.0" + +cli-width@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= + +collect-mentions@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/collect-mentions/-/collect-mentions-1.0.2.tgz#30734fcb33cbf8999cf7fd6d9c3133045f0b4dcc" + integrity sha512-/jRhzWp5bkZnvgtR+agXT0RvYKBXOl4uG+eKA6ip3tp1x+jRAV36jW2TceKutOeuEPjHKaQ6DJjeh5zvZF0fWQ== + dependencies: + mentions-regex "^2.0.3" + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +commander@^2.11.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" + integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== + +component-emitter@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +cross-spawn@^6.0.0, cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +damerau-levenshtein@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514" + integrity sha1-AxkcQyy27qFou3fzpV/9zLiXhRQ= + +debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.1.0: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.0.tgz#373687bffa678b38b1cd91f861b63850035ddc87" + integrity sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg== + dependencies: + ms "^2.1.1" + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +define-properties@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +del@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" + integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= + dependencies: + globby "^6.1.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + p-map "^1.1.1" + pify "^3.0.0" + rimraf "^2.2.8" + +docks@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/docks/-/docks-0.6.0.tgz#22950bfb4b9dc350f5c4bddf11429bed8592697d" + integrity sha512-pt48mXgdTTW6w695tyGomnZHH935lrUxH9ccp48mJwhJlnAAQr1Xuf6URPsWLz+9brQX3HlS+rZOx8eL3BtcEg== + dependencies: + "@babel/parser" "^7.1.3" + doctrine "^2.1.0" + esm "^3.0.84" + fast-glob "^2.2.2" + mkdirp "^0.5.1" + mri "^1.1.1" + +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +emoji-regex@^6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2" + integrity sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ== + +end-of-stream@^1.1.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" + integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== + dependencies: + once "^1.4.0" + +error-ex@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.6.1, es-abstract@^1.7.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" + integrity sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA== + dependencies: + es-to-primitive "^1.1.1" + function-bind "^1.1.1" + has "^1.0.1" + is-callable "^1.1.3" + is-regex "^1.0.4" + +es-to-primitive@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" + integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +eslint-ast-utils@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/eslint-ast-utils/-/eslint-ast-utils-1.1.0.tgz#3d58ba557801cfb1c941d68131ee9f8c34bd1586" + integrity sha512-otzzTim2/1+lVrlH19EfQQJEhVJSu0zOb9ygb3iapN6UlyaDtyRq4b5U1FuW0v1lRa9Fp/GJyHkSwm6NqABgCA== + dependencies: + lodash.get "^4.4.2" + lodash.zip "^4.2.0" + +eslint-config-airbnb-base@^13.1.0: + version "13.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.1.0.tgz#b5a1b480b80dfad16433d6c4ad84e6605052c05c" + integrity sha512-XWwQtf3U3zIoKO1BbHh6aUhJZQweOwSt4c2JrPDg9FP3Ltv3+YfEv7jIDB8275tVnO/qOHbfuYg3kzw6Je7uWw== + dependencies: + eslint-restricted-globals "^0.1.1" + object.assign "^4.1.0" + object.entries "^1.0.4" + +eslint-config-airbnb@^17.0.0: + version "17.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-17.1.0.tgz#3964ed4bc198240315ff52030bf8636f42bc4732" + integrity sha512-R9jw28hFfEQnpPau01NO5K/JWMGLi6aymiF6RsnMURjTk+MqZKllCqGK/0tOvHkPi/NWSSOU2Ced/GX++YxLnw== + dependencies: + eslint-config-airbnb-base "^13.1.0" + object.assign "^4.1.0" + object.entries "^1.0.4" + +eslint-config-prettier@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-3.1.0.tgz#2c26d2cdcfa3a05f0642cd7e6e4ef3316cdabfa2" + integrity sha512-QYGfmzuc4q4J6XIhlp8vRKdI/fI0tQfQPy1dME3UOLprE+v4ssH/3W9LM2Q7h5qBcy5m0ehCrBDU2YF8q6OY8w== + dependencies: + get-stdin "^6.0.0" + +eslint-import-resolver-node@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" + integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q== + dependencies: + debug "^2.6.9" + resolve "^1.5.0" + +eslint-module-utils@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz#b270362cd88b1a48ad308976ce7fa54e98411746" + integrity sha1-snA2LNiLGkitMIl2zn+lTphBF0Y= + dependencies: + debug "^2.6.8" + pkg-dir "^1.0.0" + +eslint-plugin-flowtype@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-3.2.0.tgz#824364ed5940a404b91326fdb5a313a2a74760df" + integrity sha512-baJmzngM6UKbEkJ5OY3aGw2zjXBt5L2QKZvTsOlXX7yHKIjNRrlJx2ods8Rng6EdqPR9rVNIQNYHpTs0qfn2qA== + dependencies: + lodash "^4.17.10" + +eslint-plugin-import@^2.13.0: + version "2.14.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz#6b17626d2e3e6ad52cfce8807a845d15e22111a8" + integrity sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g== + dependencies: + contains-path "^0.1.0" + debug "^2.6.8" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.1" + eslint-module-utils "^2.2.0" + has "^1.0.1" + lodash "^4.17.4" + minimatch "^3.0.3" + read-pkg-up "^2.0.0" + resolve "^1.6.0" + +eslint-plugin-jsx-a11y@^6.1.1: + version "6.1.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.1.2.tgz#69bca4890b36dcf0fe16dd2129d2d88b98f33f88" + integrity sha512-7gSSmwb3A+fQwtw0arguwMdOdzmKUgnUcbSNlo+GjKLAQFuC2EZxWqG9XHRI8VscBJD5a8raz3RuxQNFW+XJbw== + dependencies: + aria-query "^3.0.0" + array-includes "^3.0.3" + ast-types-flow "^0.0.7" + axobject-query "^2.0.1" + damerau-levenshtein "^1.0.4" + emoji-regex "^6.5.1" + has "^1.0.3" + jsx-ast-utils "^2.0.1" + +eslint-plugin-node@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-6.0.1.tgz#bf19642298064379315d7a4b2a75937376fa05e4" + integrity sha512-Q/Cc2sW1OAISDS+Ji6lZS2KV4b7ueA/WydVWd1BECTQwVvfQy5JAi3glhINoKzoMnfnuRgNP+ZWKrGAbp3QDxw== + dependencies: + ignore "^3.3.6" + minimatch "^3.0.4" + resolve "^1.3.3" + semver "^5.4.1" + +eslint-plugin-prettier@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.0.0.tgz#f6b823e065f8c36529918cdb766d7a0e975ec30c" + integrity sha512-4g11opzhqq/8+AMmo5Vc2Gn7z9alZ4JqrbZ+D4i8KlSyxeQhZHlmIrY8U9Akf514MoEhogPa87Jgkq87aZ2Ohw== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-plugin-promise@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.0.1.tgz#2d074b653f35a23d1ba89d8e976a985117d1c6a2" + integrity sha512-Si16O0+Hqz1gDHsys6RtFRrW7cCTB6P7p3OJmKp3Y3dxpQE2qwOA7d3xnV+0mBmrPoi0RBnxlCKvqu70te6wjg== + +eslint-plugin-react@^7.10.0: + version "7.11.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.11.1.tgz#c01a7af6f17519457d6116aa94fc6d2ccad5443c" + integrity sha512-cVVyMadRyW7qsIUh3FHp3u6QHNhOgVrLQYdQEB1bPWBsgbNCHdFAeNMquBMCcZJu59eNthX053L70l7gRt4SCw== + dependencies: + array-includes "^3.0.3" + doctrine "^2.1.0" + has "^1.0.3" + jsx-ast-utils "^2.0.1" + prop-types "^15.6.2" + +eslint-plugin-unicorn@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-unicorn/-/eslint-plugin-unicorn-4.0.3.tgz#7e9998711bf237809ed1881a51a77000b2f40586" + integrity sha512-F1JMyd42hx4qGhIaVdOSbDyhcxPgTy4BOzctTCkV+hqebPBUOAQn1f5AhMK2LTyiqCmKiTs8huAErbLBSWKoCQ== + dependencies: + clean-regexp "^1.0.0" + eslint-ast-utils "^1.0.0" + import-modules "^1.1.0" + lodash.camelcase "^4.1.1" + lodash.kebabcase "^4.0.1" + lodash.snakecase "^4.0.1" + lodash.upperfirst "^4.2.0" + safe-regex "^1.1.0" + +eslint-restricted-globals@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7" + integrity sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc= + +eslint-scope@3.7.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" + integrity sha1-PWPD7f2gLgbgGkUq2IyqzHzctug= + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172" + integrity sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-utils@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" + integrity sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q== + +eslint-visitor-keys@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" + integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== + +eslint@^5.8.0: + version "5.8.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.8.0.tgz#91fbf24f6e0471e8fdf681a4d9dd1b2c9f28309b" + integrity sha512-Zok6Bru3y2JprqTNm14mgQ15YQu/SMDkWdnmHfFg770DIUlmMFd/gqqzCHekxzjHZJxXv3tmTpH0C1icaYJsRQ== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.5.3" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^2.1.0" + eslint-scope "^4.0.0" + eslint-utils "^1.3.1" + eslint-visitor-keys "^1.0.0" + espree "^4.0.0" + esquery "^1.0.1" + esutils "^2.0.2" + file-entry-cache "^2.0.0" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^11.7.0" + ignore "^4.0.6" + imurmurhash "^0.1.4" + inquirer "^6.1.0" + is-resolvable "^1.1.0" + js-yaml "^3.12.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.5" + minimatch "^3.0.4" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.2" + pluralize "^7.0.0" + progress "^2.0.0" + regexpp "^2.0.1" + require-uncached "^1.0.3" + semver "^5.5.1" + strip-ansi "^4.0.0" + strip-json-comments "^2.0.1" + table "^5.0.2" + text-table "^0.2.0" + +esm@^3.0.84: + version "3.0.84" + resolved "https://registry.yarnpkg.com/esm/-/esm-3.0.84.tgz#bb108989f4673b32d4f62406869c28eed3815a63" + integrity sha512-SzSGoZc17S7P+12R9cg21Bdb7eybX25RnIeRZ80xZs+VZ3kdQKzqTp2k4hZJjR7p9l0186TTXSgrxzlMDBktlw== + +espree@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-4.1.0.tgz#728d5451e0fd156c04384a7ad89ed51ff54eb25f" + integrity sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w== + dependencies: + acorn "^6.0.2" + acorn-jsx "^5.0.0" + eslint-visitor-keys "^1.0.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" + integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== + dependencies: + estraverse "^4.0.0" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== + dependencies: + estraverse "^4.1.0" + +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +external-editor@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" + integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= + +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + +fast-glob@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.3.tgz#d09d378e9ef6b0076a0fa1ba7519d9d4d9699c28" + integrity sha512-NiX+JXjnx43RzvVFwRWfPKo4U+1BrK5pJPsHQdKMlLoFHrrGktXglQhHliSihWAq+m1z6fHk3uwGHrtRbS9vLA== + dependencies: + "@mrmlnc/readdir-enhanced" "^2.2.1" + "@nodelib/fs.stat" "^1.0.1" + glob-parent "^3.1.0" + is-glob "^4.0.0" + merge2 "^1.2.1" + micromatch "^3.1.10" + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" + integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E= + dependencies: + flat-cache "^1.2.1" + object-assign "^4.0.1" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +flat-cache@^1.2.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.2.tgz#7f852d70be573dac874a4c4129d340a34fba7e65" + integrity sha512-KByBY8c98sLUAGpnmjEdWTrtrLZRtZdwds+kAL/ciFXTCb7AZgqKsAnVnYFQj1hxepwO8JKN/8AsRWwLq+RK0A== + dependencies: + circular-json "^0.3.1" + del "^3.0.0" + graceful-fs "^4.1.2" + write "^0.2.1" + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +function-bind@^1.1.0, function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +get-stdin@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" + integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +gitcommit@^1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/gitcommit/-/gitcommit-1.0.13.tgz#e98ccb3f7de452804db3bd5b41a4e66ee941dd3e" + integrity sha512-SPb78ZLk3NRG5PCkg0gKGz0SAs3/J0C6wF3OTd9PHF9Y5PIx0g6AsUyylXZWk9KXyVAs+PVWsSBa8+ayzAxecA== + dependencies: + execa "^1.0.0" + mri "^1.1.0" + prompts "^1.0.0" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-to-regexp@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" + integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= + +glob@^7.0.3, glob@^7.0.5, glob@^7.1.2: + version "7.1.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.1.0, globals@^11.7.0: + version "11.8.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.8.0.tgz#c1ef45ee9bed6badf0663c5cb90e8d1adec1321d" + integrity sha512-io6LkyPVuzCHBSQV9fmOwxZkUk6nIaGmxheLDgmuFv89j0fm2aqDbIXKAGfzCMHqz3HLF2Zf8WSG6VqMh2qFmA== + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globrex@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.1.tgz#cfe565cfa910707d0ef98eb0b9d78c3c055ca2ef" + integrity sha512-bqKcPhb+ZtrISivpu6oLmwIyINlPlzueO/BDCdfnzUeu7SYxnHTXmWP7uQI5PnQXc5yGXOscGBEGagloA2hcSw== + +graceful-fs@^4.1.2: + version "4.1.15" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" + integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.1, has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hoek@6.x.x: + version "6.0.2" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-6.0.2.tgz#a79eac32bdc4fdd6ca056951e3066d84c229d228" + integrity sha512-0RGPLkyxpsMJVj/iOCaJaIWFEch988eUicJJpRiQ+Or1CMvBXcoZPlSx9FhreDWw4hxMYy8xgTEdlsYQDTnxWA== + +hosted-git-info@^2.1.4: + version "2.7.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" + integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== + +iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ignore@^3.3.6: + version "3.3.10" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" + integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +import-modules@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/import-modules/-/import-modules-1.1.0.tgz#748db79c5cc42bb9701efab424f894e72600e9dc" + integrity sha1-dI23nFzEK7lwHvq0JPiU5yYA6dw= + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +inquirer@^6.1.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.0.tgz#51adcd776f661369dc1e894859c2560a224abdd8" + integrity sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg== + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^3.0.0" + figures "^2.0.0" + lodash "^4.17.10" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^6.1.0" + string-width "^2.1.0" + strip-ansi "^4.0.0" + through "^2.3.6" + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + integrity sha1-VAVy0096wxGfj3bDDLwbHgN6/74= + dependencies: + builtin-modules "^1.0.0" + +is-callable@^1.1.3, is-callable@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" + integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== + +is-ci@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== + dependencies: + ci-info "^1.5.0" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" + integrity sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A= + dependencies: + is-extglob "^2.1.1" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-observable@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-0.2.0.tgz#b361311d83c6e5d726cabf5e250b0237106f5ae2" + integrity sha1-s2ExHYPG5dcmyr9eJQsCNxBvWuI= + dependencies: + symbol-observable "^0.2.2" + +is-observable@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" + integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA== + dependencies: + symbol-observable "^1.1.0" + +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= + +is-path-in-cwd@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= + dependencies: + path-is-inside "^1.0.1" + +is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= + +is-regex@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= + dependencies: + has "^1.0.1" + +is-resolvable@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-symbol@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" + integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== + dependencies: + has-symbols "^1.0.0" + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +isarray@1.0.0, isarray@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isemail@3.x.x: + version "3.2.0" + resolved "https://registry.yarnpkg.com/isemail/-/isemail-3.2.0.tgz#59310a021931a9fb06bbb51e155ce0b3f236832c" + integrity sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg== + dependencies: + punycode "2.x.x" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +joi@^14.0.4: + version "14.0.4" + resolved "https://registry.yarnpkg.com/joi/-/joi-14.0.4.tgz#f066f79330f6bd6f3dda243be6d2c211f83a5f9b" + integrity sha512-KUXRcinDUMMbtlOk7YLGHQvG73dLyf8bmgE+6sBTkdJbZpeGVGAlPXEHLiQBV7KinD/VLD5OA0EUgoTTfbRAJQ== + dependencies: + hoek "6.x.x" + isemail "3.x.x" + topo "3.x.x" + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.12.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" + integrity sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsesc@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.1.tgz#e421a2a8e20d6b0819df28908f782526b96dd1fe" + integrity sha1-5CGiqOINawgZ3yiQj3glJrlt0f4= + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +jsx-ast-utils@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" + integrity sha1-6AGxs5mF4g//yHtA43SAgOLcrH8= + dependencies: + array-includes "^3.0.3" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== + +kleur@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-2.0.2.tgz#b704f4944d95e255d038f0cb05fb8a602c55a300" + integrity sha512-77XF9iTllATmG9lSlIv0qdQ2BQ/h9t0bJllHlbvsQ0zUWfU7Yi0S8L5JXzPZgkefIiajLmBJJ4BsMJmqcf7oxQ== + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +lodash.camelcase@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= + +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + +lodash.kebabcase@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" + integrity sha1-hImxyw0p/4gZXM7KRI/21swpXDY= + +lodash.snakecase@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" + integrity sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40= + +lodash.upperfirst@^4.2.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce" + integrity sha1-E2Xt9DFIBIHvDRxolXpe2Z1J984= + +lodash.zip@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.zip/-/lodash.zip-4.2.0.tgz#ec6662e4896408ed4ab6c542a3990b72cc080020" + integrity sha1-7GZi5IlkCO1KtsVCo5kLcswIACA= + +lodash@^4.17.10, lodash@^4.17.4, lodash@^4.17.5: + version "4.17.11" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" + integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== + +loose-envify@^1.3.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +mentions-regex@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/mentions-regex/-/mentions-regex-2.0.3.tgz#442717a0048e53c2d2e2ae5e63a4e54a55ca9603" + integrity sha1-RCcXoASOU8LS4q5eY6TlSlXKlgM= + +merge2@^1.2.1: + version "1.2.3" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.3.tgz#7ee99dbd69bb6481689253f018488a1b902b0ed5" + integrity sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA== + +micromatch@^3.1.10: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +minimatch@^3.0.3, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +mixin-deep@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" + integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mixin-deep@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-2.0.0.tgz#9dfd525156720ec6cbee14fcb4b968253ba358ee" + integrity sha512-2tAhDtV+OCFCeknyf2cJD5rD+xfvM2ax/RZ3iI1G67Eh6x5UxKJlGDVpmCX27y7WvuXpAkMHQs9ooaxIHIit+A== + +mkdirp@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + +mri@^1.1.0, mri@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.1.tgz#85aa26d3daeeeedf80dc5984af95cc5ca5cad9f1" + integrity sha1-haom09ru7t+A3FmEr5XMXKXK2fE= + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +normalize-package-data@^2.3.2: + version "2.4.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + integrity sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw== + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +object-assign@^4.0.1, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-keys@^1.0.11, object-keys@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" + integrity sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.entries@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.0.4.tgz#1bf9a4dd2288f5b33f3a993d257661f05d161a5f" + integrity sha1-G/mk3SKI9bM/Opk9JXZh8F0WGl8= + dependencies: + define-properties "^1.1.2" + es-abstract "^1.6.1" + function-bind "^1.1.0" + has "^1.0.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +observable-to-promise@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/observable-to-promise/-/observable-to-promise-0.5.0.tgz#c828f0f0dc47e9f86af8a4977c5d55076ce7a91f" + integrity sha1-yCjw8NxH6fhq+KSXfF1VB2znqR8= + dependencies: + is-observable "^0.2.0" + symbol-observable "^1.0.4" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + +optionator@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-map-series@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-1.0.0.tgz#bf98fe575705658a9e1351befb85ae4c1f07bdca" + integrity sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco= + dependencies: + p-reduce "^1.0.0" + +p-map@^1.1.1, p-map@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" + integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== + +p-reduce@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" + integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= + +p-reflect@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-reflect/-/p-reflect-1.0.0.tgz#f4fa1ee1bb546d8eb3ec0321148dfe0a79137bb8" + integrity sha1-9Poe4btUbY6z7AMhFI3+CnkTe7g= + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse-ms@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-1.0.1.tgz#56346d4749d78f23430ca0c713850aef91aa361d" + integrity sha1-VjRtR0nXjyNDDKDHE4UK75GqNh0= + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.1, path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + dependencies: + pify "^2.0.0" + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pkg-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q= + dependencies: + find-up "^1.0.0" + +pluralize@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" + integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow== + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^1.14.0: + version "1.15.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.15.1.tgz#06c67106afb1b40e74b002353b2079cc7e0e67bf" + integrity sha512-4rgV2hyc/5Pk0XHH4VjJWHRgVjgRbpMfLQjREAhHBtyW1UvTFkjJEsueGYNYYZd9mn97K+1qv0EBwm11zoaSgA== + +pretty-ms@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-3.2.0.tgz#87a8feaf27fc18414d75441467d411d6e6098a25" + integrity sha512-ZypexbfVUGTFxb0v+m1bUyy92DHe5SyYlnyY0msyms5zd3RwyvNgyxZZsXXgoyzlxjx5MiqtXUdhUfvQbe0A2Q== + dependencies: + parse-ms "^1.0.0" + +progress@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.1.tgz#c9242169342b1c29d275889c95734621b1952e31" + integrity sha512-OE+a6vzqazc+K6LxJrX5UPyKFvGnL5CYmq2jFGNIBWHpc4QyE49/YOumcrpQFJpfejmvRtbJzgO1zPmMCqlbBg== + +prompts@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-1.2.0.tgz#598f7722032fb6c399beb24533129d00604c7007" + integrity sha512-g+I6Cer6EefDTawQhGHpdX98nhD7KQrRqyRgKCb+Sc+GG4P64EWRe5DZE402ZNkwrItf97Asf0L1z0g3waOgAA== + dependencies: + kleur "^2.0.1" + sisteransi "^1.0.0" + +prop-types@^15.6.2: + version "15.6.2" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102" + integrity sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ== + dependencies: + loose-envify "^1.3.1" + object-assign "^4.1.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@2.x.x, punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +require-uncached@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" + integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM= + dependencies: + caller-path "^0.1.0" + resolve-from "^1.0.0" + +resolve-from@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY= + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.3.3, resolve@^1.5.0, resolve@^1.6.0: + version "1.8.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" + integrity sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA== + dependencies: + path-parse "^1.0.5" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +rimraf@^2.2.8, rimraf@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" + integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w== + dependencies: + glob "^7.0.5" + +run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= + dependencies: + is-promise "^2.1.0" + +rxjs@^6.1.0: + version "6.3.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.3.3.tgz#3c6a7fa420e844a81390fb1158a9ec614f4bad55" + integrity sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw== + dependencies: + tslib "^1.9.0" + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1: + version "5.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" + integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== + +serialize-error@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-2.1.0.tgz#50b679d5635cdf84667bdc8e59af4e5b81d5f60a" + integrity sha1-ULZ51WNc34Rme9yOWa9OW4HV9go= + +set-value@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" + integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE= + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.1" + to-object-path "^0.3.0" + +set-value@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" + integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + +sisteransi@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.0.tgz#77d9622ff909080f1c19e5f4a1df0c1b0a27b88c" + integrity sha512-N+z4pHB4AmUv0SjveWRd6q1Nj5w62m5jodv+GD8lvmbY/83T/rpbJGZOnK5T149OldDj4Db07BSv9xY4K6NTPQ== + +slice-ansi@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" + integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== + dependencies: + is-fullwidth-code-point "^2.0.0" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +source-map-resolve@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" + integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== + dependencies: + atob "^2.1.1" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +spdx-correct@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.2.tgz#19bb409e91b47b1ad54159243f7312a858db3c2e" + integrity sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" + integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz#a59efc09784c2a5bada13cfeaf5c75dd214044d2" + integrity sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +stack-utils-node-internals@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stack-utils-node-internals/-/stack-utils-node-internals-1.0.1.tgz#ab4a8a469b6cbec72b0bfb589df5e28b1d12281f" + integrity sha1-q0qKRptsvscrC/tYnfXiix0SKB8= + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +string-width@^2.1.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-json-comments@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +supports-color@^5.3.0, supports-color@^5.4.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +symbol-observable@^0.2.2: + version "0.2.4" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40" + integrity sha1-lag9smGG1q9+ehjb2XYKL4bQj0A= + +symbol-observable@^1.0.4, symbol-observable@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== + +table@^5.0.2: + version "5.1.0" + resolved "https://registry.yarnpkg.com/table/-/table-5.1.0.tgz#69a54644f6f01ad1628f8178715b408dc6bf11f7" + integrity sha512-e542in22ZLhD/fOIuXs/8yDZ9W61ltF8daM88rkRNtgTIct+vI2fTnAyu/Db2TCfEcI8i7mjZz6meLq0nW7TYg== + dependencies: + ajv "^6.5.3" + lodash "^4.17.10" + slice-ansi "1.0.0" + string-width "^2.1.1" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +topo@3.x.x: + version "3.0.3" + resolved "https://registry.yarnpkg.com/topo/-/topo-3.0.3.tgz#d5a67fb2e69307ebeeb08402ec2a2a6f5f7ad95c" + integrity sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ== + dependencies: + hoek "6.x.x" + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= + +tslib@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" + integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +union-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" + integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ= + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^0.4.3" + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c= + dependencies: + mkdirp "^0.5.1" From 0693e935148d123b85e41069f2ffd597eb8d9c99 Mon Sep 17 00:00:00 2001 From: Charlike Mike Reagent Date: Thu, 8 Nov 2018 16:46:59 +0200 Subject: [PATCH 02/21] fix: tweaks Signed-off-by: Charlike Mike Reagent --- .verb.md | 2 +- LICENSE | 2 +- README.md | 2 +- package.json | 2 +- src/commit.js | 5 ++--- src/header.js | 4 ++-- test/plugins/snapshots/increment.test.snapshot.json | 1 - test/snapshots/commit.test.snapshot.json | 1 - 8 files changed, 8 insertions(+), 11 deletions(-) delete mode 100644 test/plugins/snapshots/increment.test.snapshot.json delete mode 100644 test/snapshots/commit.test.snapshot.json diff --git a/.verb.md b/.verb.md index 95833b3..b145a93 100644 --- a/.verb.md +++ b/.verb.md @@ -395,7 +395,7 @@ Consider showing your [support](#support-the-project) to them. :sparkling_heart: ## License -Copyright (c) 2018-present, [Charlike Mike Reagent](https://tunnckocore.com) `` & [contributors](#wonderful-contributors). +Copyright (c) 2017-present, [Charlike Mike Reagent](https://tunnckocore.com) `` & [contributors](#wonderful-contributors). Released under the [Apache-2.0 License][license-url]. diff --git a/LICENSE b/LICENSE index 22bf1ba..5f8779b 100644 --- a/LICENSE +++ b/LICENSE @@ -186,7 +186,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright (c) 2018-present, Charlike Mike Reagent & contributors. + Copyright (c) 2017-present, Charlike Mike Reagent & contributors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/README.md b/README.md index 146f294..27976f9 100644 --- a/README.md +++ b/README.md @@ -433,7 +433,7 @@ Consider showing your [support](#support-the-project) to them. :sparkling_heart: ## License -Copyright (c) 2018-present, [Charlike Mike Reagent](https://tunnckocore.com) `` & [contributors](#wonderful-contributors). +Copyright (c) 2017-present, [Charlike Mike Reagent](https://tunnckocore.com) `` & [contributors](#wonderful-contributors). Released under the [Apache-2.0 License][license-url]. diff --git a/package.json b/package.json index d9b05f7..f8e61e7 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "parse-commit-message", "description": "Extensible parser for git commit messages following Conventional Commits Specification", "license": "Apache-2.0", - "licenseStart": "2018", + "licenseStart": "2017", "scripts": { "docs": "docks --outfile .verb.md && verb", "lint": "eslint '**/*.js' --cache --fix --quiet --format codeframe", diff --git a/src/commit.js b/src/commit.js index f4ee843..203b820 100644 --- a/src/commit.js +++ b/src/commit.js @@ -69,9 +69,8 @@ export function validateCommit(commit, ret = false) { */ export function checkCommit(commit) { if (!commit || (commit && typeof commit !== 'object')) { - const type = `{ header: { type: string, scope?: string, subject: scope }, body?, footer? }`; - - throw new TypeError(`expect \`commit\` to be an object: ${type}`); + const msg = `{ header: { type: string, scope?: string, subject: scope }, body?, footer? }`; + throw new TypeError(`expect \`commit\` to be an object: ${msg}`); } const { error, value: header } = validateHeader(commit, true); diff --git a/src/header.js b/src/header.js index 729ee33..69f0fb7 100644 --- a/src/header.js +++ b/src/header.js @@ -79,8 +79,8 @@ export function validateHeader(header, ret = false) { */ export function checkHeader(header) { if (!header || (header && typeof header !== 'object')) { - const type = `{ type: string, scope?: string, subject: scope }`; - throw new TypeError(`expect \`commit.header\` to be an object: ${type}`); + const msg = `{ type: string, scope?: string, subject: scope }`; + throw new TypeError(`expect \`commit.header\` to be an object: ${msg}`); } const schema = joi.object().keys({ diff --git a/test/plugins/snapshots/increment.test.snapshot.json b/test/plugins/snapshots/increment.test.snapshot.json deleted file mode 100644 index 433e29c..0000000 --- a/test/plugins/snapshots/increment.test.snapshot.json +++ /dev/null @@ -1 +0,0 @@ -{"plugins:increment: basic":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":1,"str":"(t) => {\n t.strictEqual(typeof increment, 'function');\n}","title":"plugins:increment: basic"}} \ No newline at end of file diff --git a/test/snapshots/commit.test.snapshot.json b/test/snapshots/commit.test.snapshot.json deleted file mode 100644 index 24f4fa7..0000000 --- a/test/snapshots/commit.test.snapshot.json +++ /dev/null @@ -1 +0,0 @@ -{"commit: basic":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":1,"str":"(t) => {\n t.strictEqual(typeof parseCommit, 'function');\n t.strictEqual(typeof stringifyCommit, 'function');\n t.strictEqual(typeof validateCommit, 'function');\n t.strictEqual(typeof checkCommit, 'function');\n}","title":"commit: basic"}} \ No newline at end of file From ccc532004c8c8257f0a219290345d28326bd0553 Mon Sep 17 00:00:00 2001 From: Charlike Mike Reagent Date: Thu, 8 Nov 2018 16:49:00 +0200 Subject: [PATCH 03/21] fix: rc3 try it with Signed-off-by: Charlike Mike Reagent --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f8e61e7..848c7c3 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "main": "index.js", "module": "src/index.js", "typings": "src/index.d.ts", - "version": "3.0.0-next.rc2", + "version": "3.0.0-next.rc3", "repository": "tunnckoCoreLabs/parse-commit-message", "homepage": "https://github.com/tunnckoCoreLabs/parse-commit-message", "author": "Charlike Mike Reagent (https://tunnckocore.com)", From 17b734111fcc9e5da2beab60d0a9ae4db9002785 Mon Sep 17 00:00:00 2001 From: Charlike Mike Reagent Date: Thu, 8 Nov 2018 18:17:26 +0200 Subject: [PATCH 04/21] fix: make it work Signed-off-by: Charlike Mike Reagent --- src/commit.js | 14 ++++++++++---- src/header.js | 13 ++++++++++--- src/index.js | 2 +- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/commit.js b/src/commit.js index 203b820..a58c247 100644 --- a/src/commit.js +++ b/src/commit.js @@ -16,10 +16,13 @@ import { parseHeader, stringifyHeader, validateHeader } from './header'; * @public */ export function parseCommit(commit) { - const { error, value: header } = parseHeader(commit); - if (error) throw error; + if (!commit || (commit && typeof commit !== 'string')) { + const msg = `{ header: { type: string, scope?: string, subject: scope }, body?, footer? }`; + throw new TypeError(`expect \`commit\` to be an object: ${msg}`); + } - const [body = '', footer = ''] = commit.split('\n\n').slice(1); + const header = parseHeader(commit); + const [body, footer] = commit.split('\n\n').slice(1); return { header, body, footer }; } @@ -34,7 +37,7 @@ export function parseCommit(commit) { * @public */ export function stringifyCommit(commit) { - const result = validateCommit(commit); + const result = validateCommit(commit, true); if (result.error) { throw result.error; } @@ -89,5 +92,8 @@ export function checkCommit(commit) { result.error.message = `parse-commit-message: ${result.error.message}`; throw result.error; } + + // hack + result.value.header.scope = result.value.header.scope || ''; return result.value; } diff --git a/src/header.js b/src/header.js index 69f0fb7..3d41310 100644 --- a/src/header.js +++ b/src/header.js @@ -24,13 +24,17 @@ export function parseHeader(header) { throw new TypeError(errorMsg); } + const parts = header.split('\n'); + // eslint-disable-next-line no-param-reassign + header = parts.length > 0 ? parts[0] : header; + // because the last question mark, which we totally need // eslint-disable-next-line unicorn/no-unsafe-regex const regex = /^(\w+)(?:\((.+)\))?: (.+)$/; if (!regex.test(header)) { throw new TypeError(errorMsg); } - const [type, scope = '', subject] = regex.exec(header).slice(1); + const [type, scope, subject] = regex.exec(header).slice(1); return { type, scope, subject }; } @@ -78,16 +82,19 @@ export function validateHeader(header, ret = false) { * @public */ export function checkHeader(header) { + // eslint-disable-next-line no-param-reassign + header = header.header || header; + if (!header || (header && typeof header !== 'object')) { const msg = `{ type: string, scope?: string, subject: scope }`; throw new TypeError(`expect \`commit.header\` to be an object: ${msg}`); } - const schema = joi.object().keys({ + const schema = { type: isRequired, scope: isOptional, subject: isRequired, - }); + }; const result = joi.validate(header, schema); if (result.error) { diff --git a/src/index.js b/src/index.js index 8ffbbf8..ab37316 100644 --- a/src/index.js +++ b/src/index.js @@ -38,7 +38,7 @@ export function applyPlugins(plugins, commits) { return commits.reduce((result, commit) => { const cmt = plgs.reduce((acc, fn) => { const res = fn(acc); - return acc.concat(mixinDeep(acc, res)); + return mixinDeep(acc, res); }, commit); return result.concat(cmt); From 6a90a43654a6a9d45eb5b331579b512ccfcda24a Mon Sep 17 00:00:00 2001 From: Charlike Mike Reagent Date: Thu, 8 Nov 2018 18:18:15 +0200 Subject: [PATCH 05/21] chore: rc7 Signed-off-by: Charlike Mike Reagent --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 848c7c3..4b79b7a 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "main": "index.js", "module": "src/index.js", "typings": "src/index.d.ts", - "version": "3.0.0-next.rc3", + "version": "3.0.0-next.rc7", "repository": "tunnckoCoreLabs/parse-commit-message", "homepage": "https://github.com/tunnckoCoreLabs/parse-commit-message", "author": "Charlike Mike Reagent (https://tunnckocore.com)", From fad3bddc649d9256996bea1230a23ca4f07c2569 Mon Sep 17 00:00:00 2001 From: Charlike Mike Reagent Date: Fri, 9 Nov 2018 15:42:08 +0200 Subject: [PATCH 06/21] fix: update docs Signed-off-by: Charlike Mike Reagent --- .verb.md | 85 +++++++++++++---- README.md | 91 +++++++++++++++---- src/commit.js | 6 +- src/header.js | 14 +-- src/main.js | 6 +- src/plugins/mentions.js | 2 +- test/main.test.js | 13 --- .../snapshots/increment.test.snapshot.json | 1 + test/snapshots/commit.test.snapshot.json | 1 + test/snapshots/header.test.snapshot.json | 1 + test/snapshots/utils.test.snapshot.json | 1 + 11 files changed, 157 insertions(+), 64 deletions(-) create mode 100644 test/plugins/snapshots/increment.test.snapshot.json create mode 100644 test/snapshots/commit.test.snapshot.json create mode 100644 test/snapshots/header.test.snapshot.json create mode 100644 test/snapshots/utils.test.snapshot.json diff --git a/.verb.md b/.verb.md index b145a93..446b4aa 100644 --- a/.verb.md +++ b/.verb.md @@ -51,6 +51,55 @@ _We highly recommend to use Yarn when you think to contribute to this project._ $ yarn add {%= name %} ``` +## Type definitions + +For TypeScript support, please consider sending a PR here (adding `src/index.d.ts`) +or inform us when you PR to the DefinitelyTyped. + +For FlowType support, PR adding `.js.flow` files in the `src/` for every respective file. + +### Header + +```ts +type Header = { + type: string; + scope?: string; + subject: string; +}; +``` + +The `scope` may exist or not. When exist it should be non-empty string. + +### Commit + +```ts +type Commit = { + header: Header; + body?: string; + footer?: string; + increment?: string; + isBreaking?: boolean; + mentions?: Array; +}; +``` + +Note: It may also include properties set by the plugins - the `isBreaking`, `increment` and `mentions` +are such. They are there when you apply the `increment` and `mentions` plugins. + +See [.applyPlugins](#applyplugins) and [.plugins](#plugins). + +### Mention + +```ts +type Mention = { + handle: string; + mention: string; + index: number; +}; +``` + +See [collect-mentions][] for more. + ## API @@ -70,31 +119,31 @@ or to `validateCommit` with `ret` option set to `true`._ - `commit` **{string}** a message like `'fix(foo): bar baz\n\nSome awesome body!'` **Returns** -- `Commit` a standard object like `{ header: HeaderObject, body, footer }` +- `Commit` a standard object like `{ header: Header, body, footer }` -#### [.stringifyCommit](/src/commit.js#L36) +#### [.stringifyCommit](/src/commit.js#L39) Receives a `Commit` object, validates it using `validateCommit`, builds a "commit" string and returns it. **Params** -- `header` **{Commit}** a `Commit` object like `{ header: HeaderObject, body, footer }` +- `header` **{Commit}** a `Commit` object like `{ header: Header, body, footer }` **Returns** - `string` a commit nessage stirng like `'fix(foo): bar baz'` -#### [.validateCommit](/src/commit.js#L58) +#### [.validateCommit](/src/commit.js#L61) Validates given `Commit` object and returns `boolean`. You may want to set `ret` to `true` return an object instead of throwing. **Params** -- `header` **{Commit}** a `Commit` like `{ header: HeaderObject, body, footer }` +- `header` **{Commit}** a `Commit` like `{ header: Header, body, footer }` - `[ret]` **{boolean}** to return result instead of throwing, default `false` **Returns** - `undefined` if `ret` is `true` then returns `{ value, error }` object, where `value` is `Commit` and `error` a standard `Error` -#### [.checkCommit](/src/commit.js#L70) +#### [.checkCommit](/src/commit.js#L73) Receives a `Commit` and checks if it is valid. **Params** @@ -116,38 +165,38 @@ or to `validateHeader` with `ret` option set to `true`._ - `header` **{string}** a header stirng like `'fix(foo): bar baz'` **Returns** -- `HeaderObject` a `HeaderObject` like `{ type, scope?, subject }` +- `Header` a `Header` object like `{ type, scope?, subject }` -#### [.stringifyHeader](/src/header.js#L47) +#### [.stringifyHeader](/src/header.js#L51) Receives a `header` object, validates it using `validateHeader`, builds a "header" string and returns it. **Params** -- `header` **{HeaderObject}** a `HeaderObject` like `{ type, scope?, subject }` +- `header` **{Header}** a `Header` object like `{ type, scope?, subject }` **Returns** - `string` a header stirng like `'fix(foo): bar baz'` -#### [.validateHeader](/src/header.js#L68) +#### [.validateHeader](/src/header.js#L72) Validates given `header` object and returns `boolean`. You may want to pass `ret` to return an object instead of throwing. **Params** -- `header` **{HeaderObject}** a `HeaderObject` like `{ type, scope?, subject }` +- `header` **{Header}** a `Header` object like `{ type, scope?, subject }` - `[ret]` **{boolean}** to return result instead of throwing, default `false` **Returns** - `undefined` if `ret` is `true` then returns `{ value, error }` object, - where `value` is `HeaderObject` and `error` a standard `Error` + where `value` is `Header` and `error` a standard `Error` -#### [.checkHeader](/src/header.js#L80) -Receives a `HeaderObject` and checks if it is valid. +#### [.checkHeader](/src/header.js#L84) +Receives a `Header` and checks if it is valid. **Params** -- `header` **{HeaderObject}** a `HeaderObject` like `{ type, scope?, subject }` +- `header` **{Header}** a `Header` object like `{ type, scope?, subject }` **Returns** -- `HeaderObject` returns the same as given if no problems, otherwise it will throw. +- `Header` returns the same as given if no problems, otherwise it will throw. ### [src/index.js](/src/index.js) @@ -289,7 +338,7 @@ You may want to pass `ret` to return an object instead of throwing. **Returns** - `undefined` if `ret` is `true` then returns `{ value, error }` object, - where `value` is `Commit|Commit[]` and `error` a standard `Error` + where `value` is `Commit|Array` and `error` a standard `Error` #### [.check](/src/main.js#L83) Receives a single or multiple commit message(s) in form of string, @@ -333,7 +382,7 @@ _See the [.plugins](#plugins) and [.mappers](#mappers) examples._ - `commit` **{Commit}** a standard `Commit` object **Returns** -- `Commit` plus `{ mentions: Array }` +- `Commit` plus `{ mentions: Array }` diff --git a/README.md b/README.md index 27976f9..f1dc665 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,10 @@ Project is [semantically](https://semver.org) & automatically released on [Circl ## Table of Contents - [Install](#install) +- [Type definitions](#type-definitions) + * [Header](#header) + * [Commit](#commit) + * [Mention](#mention) - [API](#api) * [src/commit.js](#srccommitjs) + [.parseCommit](#parsecommit) @@ -84,6 +88,55 @@ _We highly recommend to use Yarn when you think to contribute to this project._ $ yarn add parse-commit-message ``` +## Type definitions + +For TypeScript support, please consider sending a PR here (adding `src/index.d.ts`) +or inform us when you PR to the DefinitelyTyped. + +For FlowType support, PR adding `.js.flow` files in the `src/` for every respective file. + +### Header + +```ts +type Header = { + type: string; + scope?: string; + subject: string; +}; +``` + +The `scope` may exist or not. When exist it should be non-empty string. + +### Commit + +```ts +type Commit = { + header: Header; + body?: string; + footer?: string; + increment?: string; + isBreaking?: boolean; + mentions?: Array; +}; +``` + +Note: It may also include properties set by the plugins - the `isBreaking`, `increment` and `mentions` +are such. They are there when you apply the `increment` and `mentions` plugins. + +See [.applyPlugins](#applyplugins) and [.plugins](#plugins). + +### Mention + +```ts +type Mention = { + handle: string; + mention: string; + index: number; +}; +``` + +See [collect-mentions][] for more. + ## API @@ -103,31 +156,31 @@ or to `validateCommit` with `ret` option set to `true`._ - `commit` **{string}** a message like `'fix(foo): bar baz\n\nSome awesome body!'` **Returns** -- `Commit` a standard object like `{ header: HeaderObject, body, footer }` +- `Commit` a standard object like `{ header: Header, body, footer }` -#### [.stringifyCommit](/src/commit.js#L36) +#### [.stringifyCommit](/src/commit.js#L39) Receives a `Commit` object, validates it using `validateCommit`, builds a "commit" string and returns it. **Params** -- `header` **{Commit}** a `Commit` object like `{ header: HeaderObject, body, footer }` +- `header` **{Commit}** a `Commit` object like `{ header: Header, body, footer }` **Returns** - `string` a commit nessage stirng like `'fix(foo): bar baz'` -#### [.validateCommit](/src/commit.js#L58) +#### [.validateCommit](/src/commit.js#L61) Validates given `Commit` object and returns `boolean`. You may want to set `ret` to `true` return an object instead of throwing. **Params** -- `header` **{Commit}** a `Commit` like `{ header: HeaderObject, body, footer }` +- `header` **{Commit}** a `Commit` like `{ header: Header, body, footer }` - `[ret]` **{boolean}** to return result instead of throwing, default `false` **Returns** - `undefined` if `ret` is `true` then returns `{ value, error }` object, where `value` is `Commit` and `error` a standard `Error` -#### [.checkCommit](/src/commit.js#L70) +#### [.checkCommit](/src/commit.js#L73) Receives a `Commit` and checks if it is valid. **Params** @@ -149,38 +202,38 @@ or to `validateHeader` with `ret` option set to `true`._ - `header` **{string}** a header stirng like `'fix(foo): bar baz'` **Returns** -- `HeaderObject` a `HeaderObject` like `{ type, scope?, subject }` +- `Header` a `Header` object like `{ type, scope?, subject }` -#### [.stringifyHeader](/src/header.js#L47) +#### [.stringifyHeader](/src/header.js#L51) Receives a `header` object, validates it using `validateHeader`, builds a "header" string and returns it. **Params** -- `header` **{HeaderObject}** a `HeaderObject` like `{ type, scope?, subject }` +- `header` **{Header}** a `Header` object like `{ type, scope?, subject }` **Returns** - `string` a header stirng like `'fix(foo): bar baz'` -#### [.validateHeader](/src/header.js#L68) +#### [.validateHeader](/src/header.js#L72) Validates given `header` object and returns `boolean`. You may want to pass `ret` to return an object instead of throwing. **Params** -- `header` **{HeaderObject}** a `HeaderObject` like `{ type, scope?, subject }` +- `header` **{Header}** a `Header` object like `{ type, scope?, subject }` - `[ret]` **{boolean}** to return result instead of throwing, default `false` **Returns** - `undefined` if `ret` is `true` then returns `{ value, error }` object, - where `value` is `HeaderObject` and `error` a standard `Error` + where `value` is `Header` and `error` a standard `Error` -#### [.checkHeader](/src/header.js#L80) -Receives a `HeaderObject` and checks if it is valid. +#### [.checkHeader](/src/header.js#L84) +Receives a `Header` and checks if it is valid. **Params** -- `header` **{HeaderObject}** a `HeaderObject` like `{ type, scope?, subject }` +- `header` **{Header}** a `Header` object like `{ type, scope?, subject }` **Returns** -- `HeaderObject` returns the same as given if no problems, otherwise it will throw. +- `Header` returns the same as given if no problems, otherwise it will throw. ### [src/index.js](/src/index.js) @@ -322,7 +375,7 @@ You may want to pass `ret` to return an object instead of throwing. **Returns** - `undefined` if `ret` is `true` then returns `{ value, error }` object, - where `value` is `Commit|Commit[] + where `value` is `Commit|Array` and `error` a standard `Error` #### [.check](/src/main.js#L83) Receives a single or multiple commit message(s) in form of string, @@ -366,7 +419,7 @@ _See the [.plugins](#plugins) and [.mappers](#mappers) examples._ - `commit` **{Commit}** a standard `Commit` object **Returns** -- `Commit` plus `{ mentions: Array }` +- `Commit` plus `{ mentions: Array }` @@ -382,7 +435,7 @@ existance! - [@tunnckocore/scripts](https://www.npmjs.com/package/@tunnckocore/scripts): Universal and minimalist scripts & tasks runner. | [homepage](https://github.com/tunnckoCoreLabs/scripts "Universal and minimalist scripts & tasks runner.") - [@tunnckocore/update](https://www.npmjs.com/package/@tunnckocore/update): Update a repository with latest templates from `charlike`. | [homepage](https://github.com/tunnckoCoreLabs/update "Update a repository with latest templates from `charlike`.") - [asia](https://www.npmjs.com/package/asia): Blazingly fast, magical and minimalist testing framework, for Today and Tomorrow | [homepage](https://github.com/olstenlarck/asia#readme "Blazingly fast, magical and minimalist testing framework, for Today and Tomorrow") -- [charlike](https://www.npmjs.com/package/charlike): Small & fast project scaffolder with sane defaults. Supports hundreds of template… [more](https://github.com/tunnckoCoreLabs/charlike) | [homepage](https://github.com/tunnckoCoreLabs/charlike "Small & fast project scaffolder with sane defaults. Supports hundreds of template engines through the @JSTransformers API or if you want custom `render` function passed through options") +- [charlike](https://www.npmjs.com/package/charlike): Small, fast and streaming project scaffolder with support for hundreds of template… [more](https://github.com/tunnckoCoreLabs/charlike) | [homepage](https://github.com/tunnckoCoreLabs/charlike "Small, fast and streaming project scaffolder with support for hundreds of template engines and sane defaults") - [docks](https://www.npmjs.com/package/docks): Extensible system for parsing and generating documentation. It just freaking works! | [homepage](https://github.com/tunnckoCore/docks "Extensible system for parsing and generating documentation. It just freaking works!") - [gitcommit](https://www.npmjs.com/package/gitcommit): Lightweight and joyful `git commit` replacement. Conventional Commits compliant. | [homepage](https://github.com/tunnckoCore/gitcommit "Lightweight and joyful `git commit` replacement. Conventional Commits compliant.") diff --git a/src/commit.js b/src/commit.js index a58c247..1dd17e0 100644 --- a/src/commit.js +++ b/src/commit.js @@ -12,7 +12,7 @@ import { parseHeader, stringifyHeader, validateHeader } from './header'; * * @name .parseCommit * @param {string} commit a message like `'fix(foo): bar baz\n\nSome awesome body!'` - * @returns {Commit} a standard object like `{ header: HeaderObject, body, footer }` + * @returns {Commit} a standard object like `{ header: Header, body, footer }` * @public */ export function parseCommit(commit) { @@ -32,7 +32,7 @@ export function parseCommit(commit) { * builds a "commit" string and returns it. * * @name .stringifyCommit - * @param {Commit} header a `Commit` object like `{ header: HeaderObject, body, footer }` + * @param {Commit} header a `Commit` object like `{ header: Header, body, footer }` * @returns {string} a commit nessage stirng like `'fix(foo): bar baz'` * @public */ @@ -52,7 +52,7 @@ export function stringifyCommit(commit) { * You may want to set `ret` to `true` return an object instead of throwing. * * @name .validateCommit - * @param {Commit} header a `Commit` like `{ header: HeaderObject, body, footer }` + * @param {Commit} header a `Commit` like `{ header: Header, body, footer }` * @param {boolean} [ret] to return result instead of throwing, default `false` * @returns {boolean|object} if `ret` is `true` then returns `{ value, error }` object, * where `value` is `Commit` and `error` a standard `Error` diff --git a/src/header.js b/src/header.js index 3d41310..dc28a46 100644 --- a/src/header.js +++ b/src/header.js @@ -10,7 +10,7 @@ import { tryCatch, isRequired, isOptional, errorMsg } from './utils'; * * @name .parseHeader * @param {string} header a header stirng like `'fix(foo): bar baz'` - * @returns {HeaderObject} a `HeaderObject` like `{ type, scope?, subject }` + * @returns {Header} a `Header` object like `{ type, scope?, subject }` * @public */ export function parseHeader(header) { @@ -44,7 +44,7 @@ export function parseHeader(header) { * builds a "header" string and returns it. * * @name .stringifyHeader - * @param {HeaderObject} header a `HeaderObject` like `{ type, scope?, subject }` + * @param {Header} header a `Header` object like `{ type, scope?, subject }` * @returns {string} a header stirng like `'fix(foo): bar baz'` * @public */ @@ -63,10 +63,10 @@ export function stringifyHeader(header) { * You may want to pass `ret` to return an object instead of throwing. * * @name .validateHeader - * @param {HeaderObject} header a `HeaderObject` like `{ type, scope?, subject }` + * @param {Header} header a `Header` object like `{ type, scope?, subject }` * @param {boolean} [ret] to return result instead of throwing, default `false` * @returns {boolean|object} if `ret` is `true` then returns `{ value, error }` object, - * where `value` is `HeaderObject` and `error` a standard `Error` + * where `value` is `Header` and `error` a standard `Error` * @public */ export function validateHeader(header, ret = false) { @@ -74,11 +74,11 @@ export function validateHeader(header, ret = false) { } /** - * Receives a `HeaderObject` and checks if it is valid. + * Receives a `Header` and checks if it is valid. * * @name .checkHeader - * @param {HeaderObject} header a `HeaderObject` like `{ type, scope?, subject }` - * @returns {HeaderObject} returns the same as given if no problems, otherwise it will throw. + * @param {Header} header a `Header` object like `{ type, scope?, subject }` + * @returns {Header} returns the same as given if no problems, otherwise it will throw. * @public */ export function checkHeader(header) { diff --git a/src/main.js b/src/main.js index 4aaae5b..15ab0b0 100644 --- a/src/main.js +++ b/src/main.js @@ -12,7 +12,7 @@ import { parseCommit, stringifyCommit, checkCommit } from './commit'; * @name .parse * @param {string|object|array} commits a value to be parsed into an object like `Commit` type * @param {boolean} [flat] if the returned result length is 1, then returns the first item - * @returns {Commit[]} if `flat` is true, returns a `Commit` + * @returns {Array} if `flat` is true, returns a `Commit` * @public */ export function parse(commits, flat = false) { @@ -62,7 +62,7 @@ export function stringify(commit) { * @param {string|object|array} commits a value to be parsed & validated into an object like `Commit` type * @param {boolean} [ret] to return result instead of throwing, default `false` * @returns {boolean|object} if `ret` is `true` then returns `{ value, error }` object, - * where `value` is `Commit|Commit[]` and `error` a standard `Error` + * where `value` is `Commit|Array` and `error` a standard `Error` * @public */ export function validate(commits, ret = false) { @@ -76,7 +76,7 @@ export function validate(commits, ret = false) { * @name .check * @param {string|object|array} commits a value to be parsed & validated into an object like `Commit` type * @param {boolean} [flat] if the returned result length is 1, then returns the first item - * @returns {Commit[]} returns the same as given if no problems, otherwise it will throw; + * @returns {Array} returns the same as given if no problems, otherwise it will throw; * if `flat: true`, returns a `Commit` * @public */ diff --git a/src/plugins/mentions.js b/src/plugins/mentions.js index 7af8000..5548156 100644 --- a/src/plugins/mentions.js +++ b/src/plugins/mentions.js @@ -11,7 +11,7 @@ import getMentions from 'collect-mentions'; * * @name mentions * @param {Commit} commit a standard `Commit` object - * @returns {Commit} plus `{ mentions: Array }` + * @returns {Commit} plus `{ mentions: Array }` * @public */ export default function mentions(commit) { diff --git a/test/main.test.js b/test/main.test.js index 2a70401..01d1e45 100644 --- a/test/main.test.js +++ b/test/main.test.js @@ -9,16 +9,3 @@ test('main: basic', (t) => { t.strictEqual(Array.isArray(plugins), true); t.strictEqual(plugins.length, 2); }); - -// const res = parseCommit([ -// 'feat(api): foobar', -// 'fix: some break\n\nBREAKING CHANGE: foobar', -// `refactor: qqqq - -// Foo bar baz. -// Some awesome body! - -// resolves #33 -// fixes #123 -// Signed-off-by: Charlike Mike Reagent `, -// ]); diff --git a/test/plugins/snapshots/increment.test.snapshot.json b/test/plugins/snapshots/increment.test.snapshot.json new file mode 100644 index 0000000..433e29c --- /dev/null +++ b/test/plugins/snapshots/increment.test.snapshot.json @@ -0,0 +1 @@ +{"plugins:increment: basic":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":1,"str":"(t) => {\n t.strictEqual(typeof increment, 'function');\n}","title":"plugins:increment: basic"}} \ No newline at end of file diff --git a/test/snapshots/commit.test.snapshot.json b/test/snapshots/commit.test.snapshot.json new file mode 100644 index 0000000..24f4fa7 --- /dev/null +++ b/test/snapshots/commit.test.snapshot.json @@ -0,0 +1 @@ +{"commit: basic":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":1,"str":"(t) => {\n t.strictEqual(typeof parseCommit, 'function');\n t.strictEqual(typeof stringifyCommit, 'function');\n t.strictEqual(typeof validateCommit, 'function');\n t.strictEqual(typeof checkCommit, 'function');\n}","title":"commit: basic"}} \ No newline at end of file diff --git a/test/snapshots/header.test.snapshot.json b/test/snapshots/header.test.snapshot.json new file mode 100644 index 0000000..3a9c45f --- /dev/null +++ b/test/snapshots/header.test.snapshot.json @@ -0,0 +1 @@ +{"header: basic":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":1,"str":"(t) => {\n t.strictEqual(typeof parseHeader, 'function');\n t.strictEqual(typeof stringifyHeader, 'function');\n t.strictEqual(typeof validateHeader, 'function');\n t.strictEqual(typeof checkHeader, 'function');\n}","title":"header: basic"}} \ No newline at end of file diff --git a/test/snapshots/utils.test.snapshot.json b/test/snapshots/utils.test.snapshot.json new file mode 100644 index 0000000..bd73af1 --- /dev/null +++ b/test/snapshots/utils.test.snapshot.json @@ -0,0 +1 @@ +{"plugins:increment: basic":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":1,"str":"(t) => {\n t.strictEqual(typeof tryCatch, 'function');\n t.strictEqual(typeof isOptional, 'object');\n t.strictEqual(isOptional.isJoi, true);\n t.strictEqual(typeof isRequired, 'object');\n t.strictEqual(isRequired.isJoi, true);\n t.strictEqual(typeof errorMsg, 'string');\n}","title":"plugins:increment: basic"}} \ No newline at end of file From 0a63db0698d984b9081306265761e0e041915072 Mon Sep 17 00:00:00 2001 From: Charlike Mike Reagent Date: Fri, 9 Nov 2018 15:48:10 +0200 Subject: [PATCH 07/21] fix: .parse: passthrough if commit is object, instead of using .checkCommit Signed-off-by: Charlike Mike Reagent --- src/main.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main.js b/src/main.js index 15ab0b0..a8f6d1f 100644 --- a/src/main.js +++ b/src/main.js @@ -19,14 +19,17 @@ export function parse(commits, flat = false) { if (commits && typeof commits === 'string') { return [parseCommit(commits)]; } - if (commits && typeof commits === 'object' && !Array.isArray(commits)) { - return [checkCommit(commits)]; - } const result = [] .concat(commits) .filter(Boolean) - .reduce((acc, val) => acc.concat(parse(val)), []); + .reduce((acc, val) => { + if (commits && typeof commits === 'object' && !Array.isArray(commits)) { + return acc.concat(commits); + } + + return acc.concat(parse(val)); + }, []); return flat === true && result.length === 1 ? result[0] : result; } From 97ad20563972f0b47750c91690a2972e69bd309a Mon Sep 17 00:00:00 2001 From: Charlike Mike Reagent Date: Fri, 9 Nov 2018 15:48:31 +0200 Subject: [PATCH 08/21] chore: rc8 Signed-off-by: Charlike Mike Reagent --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4b79b7a..64328df 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "main": "index.js", "module": "src/index.js", "typings": "src/index.d.ts", - "version": "3.0.0-next.rc7", + "version": "3.0.0-next.rc8", "repository": "tunnckoCoreLabs/parse-commit-message", "homepage": "https://github.com/tunnckoCoreLabs/parse-commit-message", "author": "Charlike Mike Reagent (https://tunnckocore.com)", From b2b3179f9ec0d07cd8bb64f4d907599400d0a571 Mon Sep 17 00:00:00 2001 From: Charlike Mike Reagent Date: Fri, 9 Nov 2018 17:01:11 +0200 Subject: [PATCH 09/21] fix: drop Joi as dependency Signed-off-by: Charlike Mike Reagent --- package.json | 1 - src/commit.js | 24 +++++-------- src/header.js | 27 ++++++++------- src/utils.js | 43 +++++++++++++++++++----- test/commit.test.js | 9 +++++ test/header.test.js | 7 ++++ test/snapshots/commit.test.snapshot.json | 2 +- test/snapshots/header.test.snapshot.json | 2 +- 8 files changed, 75 insertions(+), 40 deletions(-) diff --git a/package.json b/package.json index 64328df..3dc4cde 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,6 @@ "collect-mentions": "^1.0.2", "dedent": "^0.7.0", "esm": "^3.0.84", - "joi": "^14.0.4", "mixin-deep": "^2.0.0" }, "devDependencies": { diff --git a/src/commit.js b/src/commit.js index 1dd17e0..f3dd0c6 100644 --- a/src/commit.js +++ b/src/commit.js @@ -1,5 +1,4 @@ -import joi from 'joi'; -import { tryCatch, isOptional } from './utils'; +import { tryCatch, isValidString } from './utils'; import { parseHeader, stringifyHeader, validateHeader } from './header'; /** @@ -81,19 +80,14 @@ export function checkCommit(commit) { throw error; } - const schema = { - header, - body: isOptional, - footer: isOptional, - }; - - const result = joi.validate(commit, schema); - if (result.error) { - result.error.message = `parse-commit-message: ${result.error.message}`; - throw result.error; + const isValidBody = 'body' in commit ? isValidString(commit.body) : true; + if (!isValidBody) { + throw new TypeError('commit.body should be non empty string when given'); + } + const isValid = 'footer' in commit ? isValidString(commit.footer) : true; + if (!isValid) { + throw new TypeError('commit.footer should be non empty string when given'); } - // hack - result.value.header.scope = result.value.header.scope || ''; - return result.value; + return Object.assign({ body: '', footer: '' }, commit, { header }); } diff --git a/src/header.js b/src/header.js index dc28a46..f1d2816 100644 --- a/src/header.js +++ b/src/header.js @@ -1,5 +1,4 @@ -import joi from 'joi'; -import { tryCatch, isRequired, isOptional, errorMsg } from './utils'; +import { tryCatch, isValidString, errorMsg } from './utils'; /** * Parses given `header` string into an header object. @@ -89,17 +88,19 @@ export function checkHeader(header) { const msg = `{ type: string, scope?: string, subject: scope }`; throw new TypeError(`expect \`commit.header\` to be an object: ${msg}`); } + if (!isValidString(header.type)) { + throw new TypeError('commit.header.type should be non empty string'); + } + if (!isValidString(header.subject)) { + throw new TypeError('commit.header.subject should be non empty string'); + } - const schema = { - type: isRequired, - scope: isOptional, - subject: isRequired, - }; - - const result = joi.validate(header, schema); - if (result.error) { - result.error.message = `parse-commit-message: ${result.error.message}`; - throw result.error; + const isValidScope = 'scope' in header ? isValidString(header.scope) : true; + if (!isValidScope) { + throw new TypeError( + 'commit.header.scope should be non empty string when given', + ); } - return result.value; + + return Object.assign({ scope: '' }, header); } diff --git a/src/utils.js b/src/utils.js index 6dfce87..dcb239c 100644 --- a/src/utils.js +++ b/src/utils.js @@ -1,4 +1,3 @@ -import joi from 'joi'; import dedent from 'dedent'; export function tryCatch(fn, ret) { @@ -19,12 +18,38 @@ export const errorMsg = dedent`parse-commit-message: expect \`commit\` to follow [optional footer]`; -export const isRequired = joi - .string() - .default('') - .required(); +export function isObject(val) { + return val && typeof val === 'object' && !Array.isArray(val); +} + +export function validator(schema, obj) { + const result = { value: null }; + + // eslint-disable-next-line no-restricted-syntax + for (const [key] of Object.entries(Object.assign({}, obj, schema))) { + const value = obj[key]; + result.value = Object.assign({}, result.value); + + if (schema[key] && !obj[key]) { + result.value[key] = schema[key](); + } else if (schema[key] && obj[key]) { + const isValid = schema[key](value); + if (!isValid) { + result.error = new Error(`validation failed for key: ${key}`); + break; + } + result.value[key] = value; + } else if (!schema[key] && obj[key]) { + result.value[key] = value; + } + } -export const isOptional = joi - .string() - .default('') - .optional(); + return result; +} + +// const header = { type: 'fix', scope: '', subject: 'bar baz' }; +// const commit = { header, body: 'Quxie yeah', foo: 1 }; + +export function isValidString(x) { + return Boolean(typeof x === 'string' && x.length > 0); +} diff --git a/test/commit.test.js b/test/commit.test.js index fc44692..3a02c7e 100644 --- a/test/commit.test.js +++ b/test/commit.test.js @@ -11,4 +11,13 @@ test('commit: basic', (t) => { t.strictEqual(typeof stringifyCommit, 'function'); t.strictEqual(typeof validateCommit, 'function'); t.strictEqual(typeof checkCommit, 'function'); + + const res = checkCommit({ + header: { type: 'fix', subject: 'bar qux' }, + body: 'foo bar baz', + }); + + t.deepStrictEqual(res.header, { type: 'fix', scope: '', subject: 'bar qux' }); + t.strictEqual(res.body, 'foo bar baz'); + t.strictEqual(res.footer, ''); }); diff --git a/test/header.test.js b/test/header.test.js index 651db17..17007b7 100644 --- a/test/header.test.js +++ b/test/header.test.js @@ -11,4 +11,11 @@ test('header: basic', (t) => { t.strictEqual(typeof stringifyHeader, 'function'); t.strictEqual(typeof validateHeader, 'function'); t.strictEqual(typeof checkHeader, 'function'); + + const result = checkHeader({ + type: 'fix', + subject: 'bar qux', + }); + + t.deepStrictEqual(result, { type: 'fix', scope: '', subject: 'bar qux' }); }); diff --git a/test/snapshots/commit.test.snapshot.json b/test/snapshots/commit.test.snapshot.json index 24f4fa7..95b003a 100644 --- a/test/snapshots/commit.test.snapshot.json +++ b/test/snapshots/commit.test.snapshot.json @@ -1 +1 @@ -{"commit: basic":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":1,"str":"(t) => {\n t.strictEqual(typeof parseCommit, 'function');\n t.strictEqual(typeof stringifyCommit, 'function');\n t.strictEqual(typeof validateCommit, 'function');\n t.strictEqual(typeof checkCommit, 'function');\n}","title":"commit: basic"}} \ No newline at end of file +{"commit: basic":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":1,"str":"(t) => {\n t.strictEqual(typeof parseCommit, 'function');\n t.strictEqual(typeof stringifyCommit, 'function');\n t.strictEqual(typeof validateCommit, 'function');\n t.strictEqual(typeof checkCommit, 'function');\n\n const res = checkCommit({\n header: { type: 'fix', subject: 'bar qux' },\n body: 'foo bar baz',\n });\n\n t.deepStrictEqual(res.header, { type: 'fix', scope: '', subject: 'bar qux' });\n t.strictEqual(res.body, 'foo bar baz');\n t.strictEqual(res.footer, '');\n}","title":"commit: basic"}} \ No newline at end of file diff --git a/test/snapshots/header.test.snapshot.json b/test/snapshots/header.test.snapshot.json index 3a9c45f..3d36142 100644 --- a/test/snapshots/header.test.snapshot.json +++ b/test/snapshots/header.test.snapshot.json @@ -1 +1 @@ -{"header: basic":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":1,"str":"(t) => {\n t.strictEqual(typeof parseHeader, 'function');\n t.strictEqual(typeof stringifyHeader, 'function');\n t.strictEqual(typeof validateHeader, 'function');\n t.strictEqual(typeof checkHeader, 'function');\n}","title":"header: basic"}} \ No newline at end of file +{"header: basic":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":1,"str":"(t) => {\n t.strictEqual(typeof parseHeader, 'function');\n t.strictEqual(typeof stringifyHeader, 'function');\n t.strictEqual(typeof validateHeader, 'function');\n t.strictEqual(typeof checkHeader, 'function');\n\n const result = checkHeader({\n type: 'fix',\n subject: 'bar qux',\n });\n\n t.deepStrictEqual(result, { type: 'fix', scope: '', subject: 'bar qux' });\n}","title":"header: basic"}} \ No newline at end of file From d7c6a3306ea958c21198823030388e06d55c973e Mon Sep 17 00:00:00 2001 From: Charlike Mike Reagent Date: Fri, 9 Nov 2018 17:02:28 +0200 Subject: [PATCH 10/21] fix: cleanup Signed-off-by: Charlike Mike Reagent --- src/utils.js | 28 ---------------------------- 1 file changed, 28 deletions(-) diff --git a/src/utils.js b/src/utils.js index dcb239c..09dfd2f 100644 --- a/src/utils.js +++ b/src/utils.js @@ -22,34 +22,6 @@ export function isObject(val) { return val && typeof val === 'object' && !Array.isArray(val); } -export function validator(schema, obj) { - const result = { value: null }; - - // eslint-disable-next-line no-restricted-syntax - for (const [key] of Object.entries(Object.assign({}, obj, schema))) { - const value = obj[key]; - result.value = Object.assign({}, result.value); - - if (schema[key] && !obj[key]) { - result.value[key] = schema[key](); - } else if (schema[key] && obj[key]) { - const isValid = schema[key](value); - if (!isValid) { - result.error = new Error(`validation failed for key: ${key}`); - break; - } - result.value[key] = value; - } else if (!schema[key] && obj[key]) { - result.value[key] = value; - } - } - - return result; -} - -// const header = { type: 'fix', scope: '', subject: 'bar baz' }; -// const commit = { header, body: 'Quxie yeah', foo: 1 }; - export function isValidString(x) { return Boolean(typeof x === 'string' && x.length > 0); } From 377b5c845c2b68d27f9dd4a8d6cc04a92f3e5572 Mon Sep 17 00:00:00 2001 From: Charlike Mike Reagent Date: Fri, 9 Nov 2018 18:33:24 +0200 Subject: [PATCH 11/21] feat: normalizing the .parse/.stringify/.check methods Signed-off-by: Charlike Mike Reagent --- .nycrc.json | 7 ++- package.json | 2 +- src/commit.js | 41 +++++++++++------- src/header.js | 23 ++++++---- src/index.js | 2 +- src/main.js | 43 +++++++++---------- test/{main.test.js => index.js} | 14 +++++- .../snapshots/mentions.test.snapshot.json | 1 - test/snapshots/commit.test.snapshot.json | 1 - test/snapshots/header.test.snapshot.json | 1 - test/snapshots/index.snapshot.json | 1 + test/snapshots/main.test.snapshot.json | 1 - test/snapshots/utils.test.snapshot.json | 1 - test/utils.test.js | 11 ----- 14 files changed, 81 insertions(+), 68 deletions(-) rename test/{main.test.js => index.js} (54%) delete mode 100644 test/plugins/snapshots/mentions.test.snapshot.json delete mode 100644 test/snapshots/commit.test.snapshot.json delete mode 100644 test/snapshots/header.test.snapshot.json create mode 100644 test/snapshots/index.snapshot.json delete mode 100644 test/snapshots/main.test.snapshot.json delete mode 100644 test/snapshots/utils.test.snapshot.json delete mode 100644 test/utils.test.js diff --git a/.nycrc.json b/.nycrc.json index c0168b2..7769666 100644 --- a/.nycrc.json +++ b/.nycrc.json @@ -1,3 +1,8 @@ { - "extends": "./node_modules/@tunnckocore/config/nyc.json" + "extends": "./node_modules/@tunnckocore/config/nyc.json", + "exclude": [ + "test", + "src/plugins/index.js", + "src/utils.js" + ] } diff --git a/package.json b/package.json index 3dc4cde..60ecb48 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "docs": "docks --outfile .verb.md && verb", "lint": "eslint '**/*.js' --cache --fix --quiet --format codeframe", "test": "nyc asia", - "commit": "yarn lint && yarn test && yarn dry", + "commit": "rm -rf node_modules/.cache yarn lint && yarn test && yarn dry", "dry": "git add -A && git status --porcelain && gitcommit -sS", "release": "tunnckocore-release" }, diff --git a/src/commit.js b/src/commit.js index f3dd0c6..f05fa00 100644 --- a/src/commit.js +++ b/src/commit.js @@ -1,27 +1,26 @@ -import { tryCatch, isValidString } from './utils'; +import { tryCatch, isValidString, isObject } from './utils'; import { parseHeader, stringifyHeader, validateHeader } from './header'; /** * Receives a full commit message `string` and parses it into an `Commit` object * and returns it. * - * _The `parse*` methods are not doing checking and validation, - * so you may want to pass the result to `validateCommit` or `checkCommit`, - * or to `validateCommit` with `ret` option set to `true`._ + * _The `parse*` methods are not doing any checking and validation, + * so you may want to pass the result to `validateHeader` or `checkHeader`, + * or to `validateHeader` with `ret` option set to `true`._ * * @name .parseCommit * @param {string} commit a message like `'fix(foo): bar baz\n\nSome awesome body!'` - * @returns {Commit} a standard object like `{ header: Header, body, footer }` + * @returns {Commit} a standard object like `{ header: Header, body?, footer? }` * @public */ export function parseCommit(commit) { - if (!commit || (commit && typeof commit !== 'string')) { - const msg = `{ header: { type: string, scope?: string, subject: scope }, body?, footer? }`; - throw new TypeError(`expect \`commit\` to be an object: ${msg}`); + if (!isValidString(commit)) { + throw new TypeError(`expect \`commit\` to be non empty string`); } const header = parseHeader(commit); - const [body, footer] = commit.split('\n\n').slice(1); + const [body = null, footer = null] = commit.split('\n\n').slice(1); return { header, body, footer }; } @@ -31,7 +30,7 @@ export function parseCommit(commit) { * builds a "commit" string and returns it. * * @name .stringifyCommit - * @param {Commit} header a `Commit` object like `{ header: Header, body, footer }` + * @param {Commit} header a `Commit` object like `{ header: Header, body?, footer? }` * @returns {string} a commit nessage stirng like `'fix(foo): bar baz'` * @public */ @@ -51,7 +50,7 @@ export function stringifyCommit(commit) { * You may want to set `ret` to `true` return an object instead of throwing. * * @name .validateCommit - * @param {Commit} header a `Commit` like `{ header: Header, body, footer }` + * @param {Commit} header a `Commit` like `{ header: Header, body?, footer? }` * @param {boolean} [ret] to return result instead of throwing, default `false` * @returns {boolean|object} if `ret` is `true` then returns `{ value, error }` object, * where `value` is `Commit` and `error` a standard `Error` @@ -64,14 +63,15 @@ export function validateCommit(commit, ret = false) { /** * Receives a `Commit` and checks if it is valid. * + * * @name .checkCommit - * @param {Commit} header a `Commit` like `{ type, scope?, subject }` + * @param {Commit} header a `Commit` like `{ header: Header, body?, footer? }` * @returns {Commit} returns the same as given if no problems, otherwise it will throw. * @public */ export function checkCommit(commit) { - if (!commit || (commit && typeof commit !== 'object')) { - const msg = `{ header: { type: string, scope?: string, subject: scope }, body?, footer? }`; + if (!isObject(commit)) { + const msg = `{ header: Header, body?, footer? }`; throw new TypeError(`expect \`commit\` to be an object: ${msg}`); } @@ -80,11 +80,20 @@ export function checkCommit(commit) { throw error; } - const isValidBody = 'body' in commit ? isValidString(commit.body) : true; + const isValidBody = + 'body' in commit && commit.body !== null + ? isValidString(commit.body) + : true; + if (!isValidBody) { throw new TypeError('commit.body should be non empty string when given'); } - const isValid = 'footer' in commit ? isValidString(commit.footer) : true; + + const isValid = + 'footer' in commit && commit.footer !== null + ? isValidString(commit.footer) + : true; + if (!isValid) { throw new TypeError('commit.footer should be non empty string when given'); } diff --git a/src/header.js b/src/header.js index f1d2816..34e4416 100644 --- a/src/header.js +++ b/src/header.js @@ -1,9 +1,9 @@ -import { tryCatch, isValidString, errorMsg } from './utils'; +import { tryCatch, isValidString, isObject, errorMsg } from './utils'; /** * Parses given `header` string into an header object. * - * _The `parse*` methods are not doing checking and validation, + * _The `parse*` methods are not doing any checking and validation, * so you may want to pass the result to `validateHeader` or `checkHeader`, * or to `validateHeader` with `ret` option set to `true`._ * @@ -13,9 +13,8 @@ import { tryCatch, isValidString, errorMsg } from './utils'; * @public */ export function parseHeader(header) { - if (!header || (header && typeof header !== 'string')) { - const msg = `{ type: string, scope?: string, subject: scope }`; - throw new TypeError(`expect \`commit.header\` to be an object: ${msg}`); + if (!isValidString(header)) { + throw new TypeError(`expect \`header\` to be non empty string`); } const colonIdx = header.indexOf(': '); @@ -33,7 +32,7 @@ export function parseHeader(header) { if (!regex.test(header)) { throw new TypeError(errorMsg); } - const [type, scope, subject] = regex.exec(header).slice(1); + const [type, scope = null, subject] = regex.exec(header).slice(1); return { type, scope, subject }; } @@ -50,7 +49,9 @@ export function parseHeader(header) { export function stringifyHeader(header) { const result = validateHeader(header, true); - if (result.error) throw result.error; + if (result.error) { + throw result.error; + } const { type, scope, subject } = result.value; @@ -84,7 +85,7 @@ export function checkHeader(header) { // eslint-disable-next-line no-param-reassign header = header.header || header; - if (!header || (header && typeof header !== 'object')) { + if (!isObject(header)) { const msg = `{ type: string, scope?: string, subject: scope }`; throw new TypeError(`expect \`commit.header\` to be an object: ${msg}`); } @@ -95,7 +96,11 @@ export function checkHeader(header) { throw new TypeError('commit.header.subject should be non empty string'); } - const isValidScope = 'scope' in header ? isValidString(header.scope) : true; + const isValidScope = + 'scope' in header && header.scope !== null + ? isValidString(header.scope) + : true; + if (!isValidScope) { throw new TypeError( 'commit.header.scope should be non empty string when given', diff --git a/src/index.js b/src/index.js index ab37316..7fddbea 100644 --- a/src/index.js +++ b/src/index.js @@ -35,7 +35,7 @@ import { export function applyPlugins(plugins, commits) { const plgs = [].concat(plugins).filter(Boolean); - return commits.reduce((result, commit) => { + return [].concat(commits).reduce((result, commit) => { const cmt = plgs.reduce((acc, fn) => { const res = fn(acc); return mixinDeep(acc, res); diff --git a/src/main.js b/src/main.js index a8f6d1f..29a0755 100644 --- a/src/main.js +++ b/src/main.js @@ -1,31 +1,26 @@ -import { tryCatch } from './utils'; +import { tryCatch, isObject } from './utils'; import { parseCommit, stringifyCommit, checkCommit } from './commit'; /** * Receives and parses a single or multiple commit message(s) in form of string, * object, array of strings, array of objects or mixed. * - * _The `parse*` methods are not doing checking and validation, - * so you may want to pass the result to `validate` or `check`, - * or to `validate` with `ret` option set to `true`._ - * * @name .parse * @param {string|object|array} commits a value to be parsed into an object like `Commit` type * @param {boolean} [flat] if the returned result length is 1, then returns the first item - * @returns {Array} if `flat` is true, returns a `Commit` + * @returns {Array} if `flat: true`, returns a `Commit` * @public */ export function parse(commits, flat = false) { - if (commits && typeof commits === 'string') { - return [parseCommit(commits)]; - } - const result = [] .concat(commits) .filter(Boolean) .reduce((acc, val) => { - if (commits && typeof commits === 'object' && !Array.isArray(commits)) { - return acc.concat(commits); + if (typeof val === 'string') { + return acc.conact(parseCommit(val)); + } + if (isObject(val)) { + return acc.concat(val); } return acc.concat(parse(val)); @@ -38,22 +33,24 @@ export function parse(commits, flat = false) { * Receives a `Commit` object, validates it using `validate`, * builds a "commit" message string and returns it. * + * This method does checking and validation too, + * so if you pass a string, it will be parsed and validated, + * and after that turned again to string. + * * @name .stringify - * @param {Commit} commit a `Commit` object - * @returns {string} a commit stirng like `'fix(foo): bar baz'` + * @param {string|object|array} commit a `Commit` object, or anything that can be passed to `check` + * @param {boolean} [flat] if the returned result length is 1, then returns the first item + * @returns {Array} an array of commit strings like `'fix(foo): bar baz'`, + * if `flat: true`, returns a `string` * @public */ -export function stringify(commit) { - if (commit && typeof commit === 'string') { - return [commit]; - } - if (commit && typeof commit === 'object' && !Array.isArray(commit)) { - return [stringifyCommit(commit)]; - } - return [] +export function stringify(commit, flat = false) { + const result = [] .concat(commit) .filter(Boolean) - .reduce((acc, val) => acc.concat(stringify(val)), []); + .reduce((acc, val) => acc.concat(stringifyCommit(check(val))), []); + + return flat === true && result.length === 1 ? result[0] : result; } /** diff --git a/test/main.test.js b/test/index.js similarity index 54% rename from test/main.test.js rename to test/index.js index 01d1e45..129a6fe 100644 --- a/test/main.test.js +++ b/test/index.js @@ -1,8 +1,20 @@ import test from 'asia'; -import { applyPlugins, plugins, mappers } from '../src'; +import { + applyPlugins, + plugins, + mappers, + parse, + stringify, + validate, + check, +} from '../src'; test('main: basic', (t) => { t.strictEqual(typeof applyPlugins, 'function'); + t.strictEqual(typeof parse, 'function'); + t.strictEqual(typeof stringify, 'function'); + t.strictEqual(typeof validate, 'function'); + t.strictEqual(typeof check, 'function'); t.strictEqual(typeof mappers, 'object'); t.strictEqual(typeof mappers.mentions, 'function'); t.strictEqual(typeof mappers.increment, 'function'); diff --git a/test/plugins/snapshots/mentions.test.snapshot.json b/test/plugins/snapshots/mentions.test.snapshot.json deleted file mode 100644 index eabc8d5..0000000 --- a/test/plugins/snapshots/mentions.test.snapshot.json +++ /dev/null @@ -1 +0,0 @@ -{"plugins:mentions: basic":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":1,"str":"(t) => {\n t.strictEqual(typeof mentions, 'function');\n}","title":"plugins:mentions: basic"}} \ No newline at end of file diff --git a/test/snapshots/commit.test.snapshot.json b/test/snapshots/commit.test.snapshot.json deleted file mode 100644 index 95b003a..0000000 --- a/test/snapshots/commit.test.snapshot.json +++ /dev/null @@ -1 +0,0 @@ -{"commit: basic":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":1,"str":"(t) => {\n t.strictEqual(typeof parseCommit, 'function');\n t.strictEqual(typeof stringifyCommit, 'function');\n t.strictEqual(typeof validateCommit, 'function');\n t.strictEqual(typeof checkCommit, 'function');\n\n const res = checkCommit({\n header: { type: 'fix', subject: 'bar qux' },\n body: 'foo bar baz',\n });\n\n t.deepStrictEqual(res.header, { type: 'fix', scope: '', subject: 'bar qux' });\n t.strictEqual(res.body, 'foo bar baz');\n t.strictEqual(res.footer, '');\n}","title":"commit: basic"}} \ No newline at end of file diff --git a/test/snapshots/header.test.snapshot.json b/test/snapshots/header.test.snapshot.json deleted file mode 100644 index 3d36142..0000000 --- a/test/snapshots/header.test.snapshot.json +++ /dev/null @@ -1 +0,0 @@ -{"header: basic":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":1,"str":"(t) => {\n t.strictEqual(typeof parseHeader, 'function');\n t.strictEqual(typeof stringifyHeader, 'function');\n t.strictEqual(typeof validateHeader, 'function');\n t.strictEqual(typeof checkHeader, 'function');\n\n const result = checkHeader({\n type: 'fix',\n subject: 'bar qux',\n });\n\n t.deepStrictEqual(result, { type: 'fix', scope: '', subject: 'bar qux' });\n}","title":"header: basic"}} \ No newline at end of file diff --git a/test/snapshots/index.snapshot.json b/test/snapshots/index.snapshot.json new file mode 100644 index 0000000..cbc29af --- /dev/null +++ b/test/snapshots/index.snapshot.json @@ -0,0 +1 @@ +{"main: basic":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":1,"str":"(t) => {\n t.strictEqual(typeof applyPlugins, 'function');\n t.strictEqual(typeof parse, 'function');\n t.strictEqual(typeof stringify, 'function');\n t.strictEqual(typeof validate, 'function');\n t.strictEqual(typeof check, 'function');\n t.strictEqual(typeof mappers, 'object');\n t.strictEqual(typeof mappers.mentions, 'function');\n t.strictEqual(typeof mappers.increment, 'function');\n t.strictEqual(Array.isArray(plugins), true);\n t.strictEqual(plugins.length, 2);\n}","title":"main: basic"}} \ No newline at end of file diff --git a/test/snapshots/main.test.snapshot.json b/test/snapshots/main.test.snapshot.json deleted file mode 100644 index 7c0e631..0000000 --- a/test/snapshots/main.test.snapshot.json +++ /dev/null @@ -1 +0,0 @@ -{"main: basic":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":1,"str":"(t) => {\n t.strictEqual(typeof applyPlugins, 'function');\n t.strictEqual(typeof mappers, 'object');\n t.strictEqual(typeof mappers.mentions, 'function');\n t.strictEqual(typeof mappers.increment, 'function');\n t.strictEqual(Array.isArray(plugins), true);\n t.strictEqual(plugins.length, 2);\n}","title":"main: basic"}} \ No newline at end of file diff --git a/test/snapshots/utils.test.snapshot.json b/test/snapshots/utils.test.snapshot.json deleted file mode 100644 index bd73af1..0000000 --- a/test/snapshots/utils.test.snapshot.json +++ /dev/null @@ -1 +0,0 @@ -{"plugins:increment: basic":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":1,"str":"(t) => {\n t.strictEqual(typeof tryCatch, 'function');\n t.strictEqual(typeof isOptional, 'object');\n t.strictEqual(isOptional.isJoi, true);\n t.strictEqual(typeof isRequired, 'object');\n t.strictEqual(isRequired.isJoi, true);\n t.strictEqual(typeof errorMsg, 'string');\n}","title":"plugins:increment: basic"}} \ No newline at end of file diff --git a/test/utils.test.js b/test/utils.test.js deleted file mode 100644 index c9234cf..0000000 --- a/test/utils.test.js +++ /dev/null @@ -1,11 +0,0 @@ -import test from 'asia'; -import { tryCatch, isOptional, isRequired, errorMsg } from '../src/utils'; - -test('plugins:increment: basic', (t) => { - t.strictEqual(typeof tryCatch, 'function'); - t.strictEqual(typeof isOptional, 'object'); - t.strictEqual(isOptional.isJoi, true); - t.strictEqual(typeof isRequired, 'object'); - t.strictEqual(isRequired.isJoi, true); - t.strictEqual(typeof errorMsg, 'string'); -}); From da1173aa6536071ee803c0a68711c8d110fe2819 Mon Sep 17 00:00:00 2001 From: Charlike Mike Reagent Date: Fri, 9 Nov 2018 18:34:13 +0200 Subject: [PATCH 12/21] chore: rc9 Signed-off-by: Charlike Mike Reagent --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 60ecb48..bbfac85 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "main": "index.js", "module": "src/index.js", "typings": "src/index.d.ts", - "version": "3.0.0-next.rc8", + "version": "3.0.0-next.rc9", "repository": "tunnckoCoreLabs/parse-commit-message", "homepage": "https://github.com/tunnckoCoreLabs/parse-commit-message", "author": "Charlike Mike Reagent (https://tunnckocore.com)", From 9d11263a55c4fbf80ab9749ee1ff101667716d7c Mon Sep 17 00:00:00 2001 From: Charlike Mike Reagent Date: Fri, 9 Nov 2018 19:00:16 +0200 Subject: [PATCH 13/21] fix: readme links about releasing & publishing Signed-off-by: Charlike Mike Reagent --- .verb.md | 50 ++++++++++++++++++++++++++------------------------ README.md | 50 ++++++++++++++++++++++++++------------------------ 2 files changed, 52 insertions(+), 48 deletions(-) diff --git a/.verb.md b/.verb.md index 446b4aa..c67c493 100644 --- a/.verb.md +++ b/.verb.md @@ -25,7 +25,7 @@ For bugs reports and feature requests, [please create an issue][open-issue-url] [![NPM Downloads Total][downloads-total-img]][npmv-url] [![Share Love Tweet][shareb]][shareu] -Project is [semantically](https://semver.org) & automatically released on [CircleCI](https://circleci.com) with [new-release][] and its [New Release](https://github.com/apps/new-release) GitHub App. +Project is [semantically](https://semver.org) & automatically released on [CircleCI](https://circleci.com) with [@tunnckocore/release-cli](https://github.com/tunnckoCore/release-cli) and its [@tunnckocore/release](https://github.com/apps/tunnckocore-release) GitHub App. + +- Understands and follows [Conventional Commits](https://conventionalcommits.org/) Specification +- Thoroughly tested with 100% coverage +- Closed cycle: utilities for parsing, stringifying **and** validation +- Infinitely extensible through plugins, [two built-in](#mappers) +- Collecting mentions from commit message +- Detection of breaking changes in commit + ## Table of Contents @@ -107,7 +115,7 @@ _Generated using [docks](http://npm.im/docks)._ ### [src/commit.js](/src/commit.js) -#### [.parseCommit](/src/commit.js#L17) +#### [.parseCommit](/src/commit.js#L18) Receives a full commit message `string` and parses it into an `Commit` object and returns it. @@ -121,7 +129,7 @@ or to `validateHeader` with `ret` option set to `true`._ **Returns** - `Commit` a standard object like `{ header: Header, body?, footer? }` -#### [.stringifyCommit](/src/commit.js#L37) +#### [.stringifyCommit](/src/commit.js#L38) Receives a `Commit` object, validates it using `validateCommit`, builds a "commit" string and returns it. @@ -131,7 +139,7 @@ builds a "commit" string and returns it. **Returns** - `string` a commit nessage stirng like `'fix(foo): bar baz'` -#### [.validateCommit](/src/commit.js#L59) +#### [.validateCommit](/src/commit.js#L65) Validates given `Commit` object and returns `boolean`. You may want to set `ret` to `true` return an object instead of throwing. @@ -143,7 +151,7 @@ You may want to set `ret` to `true` return an object instead of throwing. - `undefined` if `ret` is `true` then returns `{ value, error }` object, where `value` is `Commit` and `error` a standard `Error` -#### [.checkCommit](/src/commit.js#L72) +#### [.checkCommit](/src/commit.js#L78) Receives a `Commit` and checks if it is valid. **Params** @@ -154,7 +162,7 @@ Receives a `Commit` and checks if it is valid. ### [src/header.js](/src/header.js) -#### [.parseHeader](/src/header.js#L15) +#### [.parseHeader](/src/header.js#L16) Parses given `header` string into an header object. _The `parse*` methods are not doing any checking and validation, @@ -167,7 +175,7 @@ or to `validateHeader` with `ret` option set to `true`._ **Returns** - `Header` a `Header` object like `{ type, scope?, subject }` -#### [.stringifyHeader](/src/header.js#L49) +#### [.stringifyHeader](/src/header.js#L45) Receives a `header` object, validates it using `validateHeader`, builds a "header" string and returns it. @@ -177,7 +185,7 @@ builds a "header" string and returns it. **Returns** - `string` a header stirng like `'fix(foo): bar baz'` -#### [.validateHeader](/src/header.js#L72) +#### [.validateHeader](/src/header.js#L68) Validates given `header` object and returns `boolean`. You may want to pass `ret` to return an object instead of throwing. @@ -189,7 +197,7 @@ You may want to pass `ret` to return an object instead of throwing. - `undefined` if `ret` is `true` then returns `{ value, error }` object, where `value` is `Header` and `error` a standard `Error` -#### [.checkHeader](/src/header.js#L84) +#### [.checkHeader](/src/header.js#L80) Receives a `Header` and checks if it is valid. **Params** @@ -198,6 +206,60 @@ Receives a `Header` and checks if it is valid. **Returns** - `Header` returns the same as given if no problems, otherwise it will throw. +### [src/main.js](/src/main.js) + +#### [.parse](/src/main.js#L14) +Receives and parses a single or multiple commit message(s) in form of string, +object, array of strings, array of objects or mixed. + +**Params** +- `commits` **{string|object|array}** a value to be parsed into an object like `Commit` type +- `[flat]` **{boolean}** if the returned result length is 1, then returns the first item + +**Returns** +- `Array` if `flat: true`, returns a `Commit` + +#### [.stringify](/src/main.js#L47) +Receives a `Commit` object, validates it using `validate`, +builds a "commit" message string and returns it. + +This method does checking and validation too, +so if you pass a string, it will be parsed and validated, +and after that turned again to string. + +**Params** +- `commit` **{string|object|array}** a `Commit` object, or anything that can be passed to `check` +- `[flat]` **{boolean}** if the returned result length is 1, then returns the first item + +**Returns** +- `Array` an array of commit strings like `'fix(foo): bar baz'`, + if `flat: true`, returns a `string` + +#### [.validate](/src/main.js#L71) +Validates a single or multiple commit message(s) in form of string, +object, array of strings, array of objects or mixed. +You may want to pass `ret` to return an object instead of throwing. + +**Params** +- `commits` **{string|object|array}** a value to be parsed & validated into an object like `Commit` type +- `[ret]` **{boolean}** to return result instead of throwing, default `false` + +**Returns** +- `undefined` if `ret` is `true` then returns `{ value, error }` object, + where `value` is `Commit|Array` and `error` a standard `Error` + +#### [.check](/src/main.js#L86) +Receives a single or multiple commit message(s) in form of string, +object, array of strings, array of objects or mixed. + +**Params** +- `commits` **{string|object|array}** a value to be parsed & validated into an object like `Commit` type +- `[flat]` **{boolean}** if the returned result length is 1, then returns the first item + +**Returns** +- `Array` returns the same as given if no problems, otherwise it will throw; + if `flat: true`, returns a `Commit` + ### [src/index.js](/src/index.js) #### [.applyPlugins](/src/index.js#L35) @@ -300,60 +362,6 @@ console.log(commit) // }] ``` -### [src/main.js](/src/main.js) - -#### [.parse](/src/main.js#L14) -Receives and parses a single or multiple commit message(s) in form of string, -object, array of strings, array of objects or mixed. - -**Params** -- `commits` **{string|object|array}** a value to be parsed into an object like `Commit` type -- `[flat]` **{boolean}** if the returned result length is 1, then returns the first item - -**Returns** -- `Array` if `flat: true`, returns a `Commit` - -#### [.stringify](/src/main.js#L47) -Receives a `Commit` object, validates it using `validate`, -builds a "commit" message string and returns it. - -This method does checking and validation too, -so if you pass a string, it will be parsed and validated, -and after that turned again to string. - -**Params** -- `commit` **{string|object|array}** a `Commit` object, or anything that can be passed to `check` -- `[flat]` **{boolean}** if the returned result length is 1, then returns the first item - -**Returns** -- `Array` an array of commit strings like `'fix(foo): bar baz'`, - if `flat: true`, returns a `string` - -#### [.validate](/src/main.js#L68) -Validates a single or multiple commit message(s) in form of string, -object, array of strings, array of objects or mixed. -You may want to pass `ret` to return an object instead of throwing. - -**Params** -- `commits` **{string|object|array}** a value to be parsed & validated into an object like `Commit` type -- `[ret]` **{boolean}** to return result instead of throwing, default `false` - -**Returns** -- `undefined` if `ret` is `true` then returns `{ value, error }` object, - where `value` is `Commit|Array` and `error` a standard `Error` - -#### [.check](/src/main.js#L83) -Receives a single or multiple commit message(s) in form of string, -object, array of strings, array of objects or mixed. - -**Params** -- `commits` **{string|object|array}** a value to be parsed & validated into an object like `Commit` type -- `[flat]` **{boolean}** if the returned result length is 1, then returns the first item - -**Returns** -- `Array` returns the same as given if no problems, otherwise it will throw; - if `flat: true`, returns a `Commit` - ### [src/plugins/increment.js](/src/plugins/increment.js) #### [increment](/src/plugins/increment.js#L13) diff --git a/README.md b/README.md index 719e5af..42e70e9 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,13 @@ Project is [semantically](https://semver.org) & automatically published with [ne --> +- Understands and follows [Conventional Commits](https://conventionalcommits.org/) Specification +- Thoroughly tested with 100% coverage +- Closed cycle: utilities for parsing, stringifying **and** validation +- Infinitely extensible through plugins, [two built-in](#mappers) +- Collecting mentions from commit message +- Detection of breaking changes in commit + ## Table of Contents - [Install](#install) @@ -55,15 +62,15 @@ Project is [semantically](https://semver.org) & automatically published with [ne + [.stringifyHeader](#stringifyheader) + [.validateHeader](#validateheader) + [.checkHeader](#checkheader) - * [src/index.js](#srcindexjs) - + [.applyPlugins](#applyplugins) - + [.plugins](#plugins) - + [.mappers](#mappers) * [src/main.js](#srcmainjs) + [.parse](#parse) + [.stringify](#stringify) + [.validate](#validate) + [.check](#check) + * [src/index.js](#srcindexjs) + + [.applyPlugins](#applyplugins) + + [.plugins](#plugins) + + [.mappers](#mappers) * [src/plugins/increment.js](#srcpluginsincrementjs) + [increment](#increment) * [src/plugins/mentions.js](#srcpluginsmentionsjs) @@ -144,7 +151,7 @@ _Generated using [docks](http://npm.im/docks)._ ### [src/commit.js](/src/commit.js) -#### [.parseCommit](/src/commit.js#L17) +#### [.parseCommit](/src/commit.js#L18) Receives a full commit message `string` and parses it into an `Commit` object and returns it. @@ -158,7 +165,7 @@ or to `validateHeader` with `ret` option set to `true`._ **Returns** - `Commit` a standard object like `{ header: Header, body?, footer? }` -#### [.stringifyCommit](/src/commit.js#L37) +#### [.stringifyCommit](/src/commit.js#L38) Receives a `Commit` object, validates it using `validateCommit`, builds a "commit" string and returns it. @@ -168,7 +175,7 @@ builds a "commit" string and returns it. **Returns** - `string` a commit nessage stirng like `'fix(foo): bar baz'` -#### [.validateCommit](/src/commit.js#L59) +#### [.validateCommit](/src/commit.js#L65) Validates given `Commit` object and returns `boolean`. You may want to set `ret` to `true` return an object instead of throwing. @@ -180,7 +187,7 @@ You may want to set `ret` to `true` return an object instead of throwing. - `undefined` if `ret` is `true` then returns `{ value, error }` object, where `value` is `Commit` and `error` a standard `Error` -#### [.checkCommit](/src/commit.js#L72) +#### [.checkCommit](/src/commit.js#L78) Receives a `Commit` and checks if it is valid. **Params** @@ -191,7 +198,7 @@ Receives a `Commit` and checks if it is valid. ### [src/header.js](/src/header.js) -#### [.parseHeader](/src/header.js#L15) +#### [.parseHeader](/src/header.js#L16) Parses given `header` string into an header object. _The `parse*` methods are not doing any checking and validation, @@ -204,7 +211,7 @@ or to `validateHeader` with `ret` option set to `true`._ **Returns** - `Header` a `Header` object like `{ type, scope?, subject }` -#### [.stringifyHeader](/src/header.js#L49) +#### [.stringifyHeader](/src/header.js#L45) Receives a `header` object, validates it using `validateHeader`, builds a "header" string and returns it. @@ -214,7 +221,7 @@ builds a "header" string and returns it. **Returns** - `string` a header stirng like `'fix(foo): bar baz'` -#### [.validateHeader](/src/header.js#L72) +#### [.validateHeader](/src/header.js#L68) Validates given `header` object and returns `boolean`. You may want to pass `ret` to return an object instead of throwing. @@ -226,7 +233,7 @@ You may want to pass `ret` to return an object instead of throwing. - `undefined` if `ret` is `true` then returns `{ value, error }` object, where `value` is `Header` and `error` a standard `Error` -#### [.checkHeader](/src/header.js#L84) +#### [.checkHeader](/src/header.js#L80) Receives a `Header` and checks if it is valid. **Params** @@ -235,6 +242,60 @@ Receives a `Header` and checks if it is valid. **Returns** - `Header` returns the same as given if no problems, otherwise it will throw. +### [src/main.js](/src/main.js) + +#### [.parse](/src/main.js#L14) +Receives and parses a single or multiple commit message(s) in form of string, +object, array of strings, array of objects or mixed. + +**Params** +- `commits` **{string|object|array}** a value to be parsed into an object like `Commit` type +- `[flat]` **{boolean}** if the returned result length is 1, then returns the first item + +**Returns** +- `Array` if `flat: true`, returns a `Commit` + +#### [.stringify](/src/main.js#L47) +Receives a `Commit` object, validates it using `validate`, +builds a "commit" message string and returns it. + +This method does checking and validation too, +so if you pass a string, it will be parsed and validated, +and after that turned again to string. + +**Params** +- `commit` **{string|object|array}** a `Commit` object, or anything that can be passed to `check` +- `[flat]` **{boolean}** if the returned result length is 1, then returns the first item + +**Returns** +- `Array` an array of commit strings like `'fix(foo): bar baz'`, + if `flat: true`, returns a `string` + +#### [.validate](/src/main.js#L71) +Validates a single or multiple commit message(s) in form of string, +object, array of strings, array of objects or mixed. +You may want to pass `ret` to return an object instead of throwing. + +**Params** +- `commits` **{string|object|array}** a value to be parsed & validated into an object like `Commit` type +- `[ret]` **{boolean}** to return result instead of throwing, default `false` + +**Returns** +- `undefined` if `ret` is `true` then returns `{ value, error }` object, + where `value` is `Commit|Array` and `error` a standard `Error` + +#### [.check](/src/main.js#L86) +Receives a single or multiple commit message(s) in form of string, +object, array of strings, array of objects or mixed. + +**Params** +- `commits` **{string|object|array}** a value to be parsed & validated into an object like `Commit` type +- `[flat]` **{boolean}** if the returned result length is 1, then returns the first item + +**Returns** +- `Array` returns the same as given if no problems, otherwise it will throw; + if `flat: true`, returns a `Commit` + ### [src/index.js](/src/index.js) #### [.applyPlugins](/src/index.js#L35) @@ -337,60 +398,6 @@ console.log(commit) // }] ``` -### [src/main.js](/src/main.js) - -#### [.parse](/src/main.js#L14) -Receives and parses a single or multiple commit message(s) in form of string, -object, array of strings, array of objects or mixed. - -**Params** -- `commits` **{string|object|array}** a value to be parsed into an object like `Commit` type -- `[flat]` **{boolean}** if the returned result length is 1, then returns the first item - -**Returns** -- `Array` if `flat: true`, returns a `Commit` - -#### [.stringify](/src/main.js#L47) -Receives a `Commit` object, validates it using `validate`, -builds a "commit" message string and returns it. - -This method does checking and validation too, -so if you pass a string, it will be parsed and validated, -and after that turned again to string. - -**Params** -- `commit` **{string|object|array}** a `Commit` object, or anything that can be passed to `check` -- `[flat]` **{boolean}** if the returned result length is 1, then returns the first item - -**Returns** -- `Array` an array of commit strings like `'fix(foo): bar baz'`, - if `flat: true`, returns a `string` - -#### [.validate](/src/main.js#L68) -Validates a single or multiple commit message(s) in form of string, -object, array of strings, array of objects or mixed. -You may want to pass `ret` to return an object instead of throwing. - -**Params** -- `commits` **{string|object|array}** a value to be parsed & validated into an object like `Commit` type -- `[ret]` **{boolean}** to return result instead of throwing, default `false` - -**Returns** -- `undefined` if `ret` is `true` then returns `{ value, error }` object, - where `value` is `Commit|Array` and `error` a standard `Error` - -#### [.check](/src/main.js#L83) -Receives a single or multiple commit message(s) in form of string, -object, array of strings, array of objects or mixed. - -**Params** -- `commits` **{string|object|array}** a value to be parsed & validated into an object like `Commit` type -- `[flat]` **{boolean}** if the returned result length is 1, then returns the first item - -**Returns** -- `Array` returns the same as given if no problems, otherwise it will throw; - if `flat: true`, returns a `Commit` - ### [src/plugins/increment.js](/src/plugins/increment.js) #### [increment](/src/plugins/increment.js#L13) @@ -434,8 +441,9 @@ existance! - [@tunnckocore/config](https://www.npmjs.com/package/@tunnckocore/config): All the configs for all the tools, in one place | [homepage](https://github.com/tunnckoCoreLabs/config "All the configs for all the tools, in one place") - [@tunnckocore/create-project](https://www.npmjs.com/package/@tunnckocore/create-project): Create and scaffold a new project, its GitHub repository and contents | [homepage](https://github.com/tunnckoCoreLabs/create-project "Create and scaffold a new project, its GitHub repository and contents") - [@tunnckocore/execa](https://www.npmjs.com/package/@tunnckocore/execa): Thin layer on top of [execa][] that allows executing multiple commands in… [more](https://github.com/tunnckoCoreLabs/execa) | [homepage](https://github.com/tunnckoCoreLabs/execa "Thin layer on top of [execa][] that allows executing multiple commands in parallel or in sequence") +- [@tunnckocore/package-json](https://www.npmjs.com/package/@tunnckocore/package-json): Simple and fast getting of latest package.json metadata for a npm module… [more](https://github.com/tunnckoCoreLabs/package-json) | [homepage](https://github.com/tunnckoCoreLabs/package-json "Simple and fast getting of latest package.json metadata for a npm module, using axios and unpkg as a source, because npm registry is basically slow") - [@tunnckocore/scripts](https://www.npmjs.com/package/@tunnckocore/scripts): Universal and minimalist scripts & tasks runner. | [homepage](https://github.com/tunnckoCoreLabs/scripts "Universal and minimalist scripts & tasks runner.") -- [@tunnckocore/update](https://www.npmjs.com/package/@tunnckocore/update): Update a repository with latest templates from `charlike`. | [homepage](https://github.com/tunnckoCoreLabs/update "Update a repository with latest templates from `charlike`.") +- [@tunnckocore/update](https://www.npmjs.com/package/@tunnckocore/update): Update to latest project files and templates, based on `charlike` scaffolder | [homepage](https://github.com/tunnckoCoreLabs/update "Update to latest project files and templates, based on `charlike` scaffolder") - [asia](https://www.npmjs.com/package/asia): Blazingly fast, magical and minimalist testing framework, for Today and Tomorrow | [homepage](https://github.com/olstenlarck/asia#readme "Blazingly fast, magical and minimalist testing framework, for Today and Tomorrow") - [charlike](https://www.npmjs.com/package/charlike): Small, fast and streaming project scaffolder with support for hundreds of template… [more](https://github.com/tunnckoCoreLabs/charlike) | [homepage](https://github.com/tunnckoCoreLabs/charlike "Small, fast and streaming project scaffolder with support for hundreds of template engines and sane defaults") - [docks](https://www.npmjs.com/package/docks): Extensible system for parsing and generating documentation. It just freaking works! | [homepage](https://github.com/tunnckoCore/docks "Extensible system for parsing and generating documentation. It just freaking works!") From 6c290c52476d801fecb4f74a680be7b3b04c5ff3 Mon Sep 17 00:00:00 2001 From: Charlike Mike Reagent Date: Mon, 12 Nov 2018 00:42:52 +0200 Subject: [PATCH 19/21] feat: finalize docs comments for docs generation Signed-off-by: Charlike Mike Reagent --- .verb.md | 475 ++++++++++++++--- README.md | 489 +++++++++++++++--- example.js | 48 ++ package.json | 11 +- src/commit.js | 75 ++- src/header.js | 66 ++- src/index.js | 52 ++ src/main.js | 131 ++++- src/plugins/increment.js | 2 +- .../commit/snapshots/parse.test.snapshot.json | 1 - .../snapshots/validate.test.snapshot.json | 1 + .../header/snapshots/parse.test.snapshot.json | 1 - .../snapshots/stringify.test.snapshot.json | 1 + .../snapshots/validate.test.snapshot.json | 1 + test/index.js | 10 + test/main/snapshots/parse.test.snapshot.json | 1 + .../snapshots/validate.test.snapshot.json | 1 - test/snapshots/index.snapshot.json | 2 +- 18 files changed, 1198 insertions(+), 170 deletions(-) create mode 100644 example.js delete mode 100644 test/commit/snapshots/parse.test.snapshot.json create mode 100644 test/commit/snapshots/validate.test.snapshot.json delete mode 100644 test/header/snapshots/parse.test.snapshot.json create mode 100644 test/header/snapshots/stringify.test.snapshot.json create mode 100644 test/header/snapshots/validate.test.snapshot.json create mode 100644 test/main/snapshots/parse.test.snapshot.json delete mode 100644 test/main/snapshots/validate.test.snapshot.json diff --git a/.verb.md b/.verb.md index 5f9ded1..7ec3b31 100644 --- a/.verb.md +++ b/.verb.md @@ -39,9 +39,9 @@ Project is [semantically](https://semver.org) & automatically published with [ne - Understands and follows [Conventional Commits](https://conventionalcommits.org/) Specification -- Thoroughly tested with 100% coverage - Closed cycle: utilities for parsing, stringifying **and** validation - Infinitely extensible through plugins, [two built-in](#mappers) +- Thoroughly tested with 100% coverage and 64+ tests - Collecting mentions from commit message - Detection of breaking changes in commit @@ -85,7 +85,7 @@ type Commit = { header: Header; body?: string | null; footer?: string | null; - increment?: string; + increment?: string | boolean; isBreaking?: boolean; mentions?: Array; }; @@ -94,6 +94,8 @@ type Commit = { Note: It may also include properties set by the plugins - the `isBreaking`, `increment` and `mentions` are such. They are there when you apply the `increment` and `mentions` plugins. +ProTip: The `increment` may be a Boolean `false` if the commit type, for example, is `chore`. + See [.applyPlugins](#applyplugins) and [.plugins](#plugins). ### Mention @@ -115,13 +117,15 @@ _Generated using [docks](http://npm.im/docks)._ ### [src/commit.js](/src/commit.js) -#### [.parseCommit](/src/commit.js#L18) +#### [.parseCommit](/src/commit.js#L31) Receives a full commit message `string` and parses it into an `Commit` object and returns it. +Basically the same as [.parse](#parse), except that +it only can accept single string. _The `parse*` methods are not doing any checking and validation, -so you may want to pass the result to `validateHeader` or `checkHeader`, -or to `validateHeader` with `ret` option set to `true`._ +so you may want to pass the result to `validateCommit` or `checkCommit`, +or to `validateCommit` with `ret` option set to `true`._ **Params** - `commit` **{string}** a message like `'fix(foo): bar baz\n\nSome awesome body!'` @@ -129,41 +133,111 @@ or to `validateHeader` with `ret` option set to `true`._ **Returns** - `Commit` a standard object like `{ header: Header, body?, footer? }` -#### [.stringifyCommit](/src/commit.js#L38) +**Examples** +```javascript +import { parseCommit } from 'parse-commit-message'; + +const commitObj = parseCommit('foo: bar qux\n\nokey dude'); +console.log(commitObj); +// => { +// header: { type: 'foo', scope: null, subject: 'bar qux' }, +// body: 'okey dude', +// footer: null, +// } +``` + +#### [.stringifyCommit](/src/commit.js#L62) Receives a `Commit` object, validates it using `validateCommit`, -builds a "commit" string and returns it. +builds a "commit" string and returns it. Method throws if problems found. +Basically the same as [.stringify](#stringify), except that +it only can accept single `Commit` object. **Params** -- `header` **{Commit}** a `Commit` object like `{ header: Header, body?, footer? }` +- `commit` **{Commit}** a `Commit` object like `{ header: Header, body?, footer? }` **Returns** - `string` a commit nessage stirng like `'fix(foo): bar baz'` -#### [.validateCommit](/src/commit.js#L65) +**Examples** +```javascript +import { stringifyCommit } from 'parse-commit-message'; + +const commitStr = stringifyCommit({ + header: { type: 'foo', subject: 'bar qux' }, + body: 'okey dude', +}); +console.log(commitStr); // => 'foo: bar qux\n\nokey dude' +``` + +#### [.validateCommit](/src/commit.js#L110) Validates given `Commit` object and returns `boolean`. You may want to set `ret` to `true` return an object instead of throwing. +Basically the same as [.validate](#validate), except that +it only can accept single `Commit` object. **Params** -- `header` **{Commit}** a `Commit` like `{ header: Header, body?, footer? }` +- `commit` **{Commit}** a `Commit` like `{ header: Header, body?, footer? }` - `[ret]` **{boolean}** to return result instead of throwing, default `false` **Returns** - `undefined` if `ret` is `true` then returns `{ value, error }` object, where `value` is `Commit` and `error` a standard `Error` -#### [.checkCommit](/src/commit.js#L78) -Receives a `Commit` and checks if it is valid. +**Examples** +```javascript +import { validateCommit } from 'parse-commit-message'; + +const commit = { + header: { type: 'foo', subject: 'bar qux' }, + body: 'okey dude', +}; + +const commitIsValid = validateCommit(commit); +console.log(commitIsValid); // => true + +const { value } = validateCommit(commit, true); +console.log(value); +// => { +// header: { type: 'foo', scope: null, subject: 'bar qux' }, +// body: 'okey dude', +// footer: null, +// } +``` + +#### [.checkCommit](/src/commit.js#L139) +Receives a `Commit` and checks if it is valid. Method throws if problems found. +Basically the same as [.check](#check), except that +it only can accept single `Commit` object. **Params** -- `header` **{Commit}** a `Commit` like `{ header: Header, body?, footer? }` +- `commit` **{Commit}** a `Commit` like `{ header: Header, body?, footer? }` **Returns** - `Commit` returns the same as given if no problems, otherwise it will throw. +**Examples** +```javascript +import { checkCommit } from 'parse-commit-message'; + +try { + checkCommit({ header: { type: 'fix' } }); +} catch(err) { + console.log(err); + // => TypeError: header.subject should be non empty string +} + +// throws because can accept only Commit objects +checkCommit('foo bar baz'); +checkCommit(123); +checkCommit([{ header: { type: 'foo', subject: 'bar' } }]); +``` + ### [src/header.js](/src/header.js) -#### [.parseHeader](/src/header.js#L16) +#### [.parseHeader](/src/header.js#L29) Parses given `header` string into an header object. +Basically the same as [.parse](#parse), except that +it only can accept single string and returns a `Header` object. _The `parse*` methods are not doing any checking and validation, so you may want to pass the result to `validateHeader` or `checkHeader`, @@ -175,9 +249,24 @@ or to `validateHeader` with `ret` option set to `true`._ **Returns** - `Header` a `Header` object like `{ type, scope?, subject }` -#### [.stringifyHeader](/src/header.js#L45) +**Examples** +```javascript +import { parseHeader } from 'parse-commit-message'; + +const longCommitMsg = `fix: bar qux + +Awesome body!`; + +const headerObj = parseCommit(longCommitMsg); +console.log(headerObj); +// => { type: 'fix', scope: null, subject: 'bar qux' } +``` + +#### [.stringifyHeader](/src/header.js#L66) Receives a `header` object, validates it using `validateHeader`, -builds a "header" string and returns it. +builds a "header" string and returns it. Method throws if problems found. +Basically the same as [.stringify](#stringify), except that +it only can accept single `Header` object. **Params** - `header` **{Header}** a `Header` object like `{ type, scope?, subject }` @@ -185,9 +274,19 @@ builds a "header" string and returns it. **Returns** - `string` a header stirng like `'fix(foo): bar baz'` -#### [.validateHeader](/src/header.js#L68) +**Examples** +```javascript +import { stringifyHeader } from 'parse-commit-message'; + +const headerStr = stringifyCommit({ type: 'foo', subject: 'bar qux' }); +console.log(headerStr); // => 'foo: bar qux' +``` + +#### [.validateHeader](/src/header.js#L114) Validates given `header` object and returns `boolean`. You may want to pass `ret` to return an object instead of throwing. +Basically the same as [.validate](#validate), except that +it only can accept single `Header` object. **Params** - `header` **{Header}** a `Header` object like `{ type, scope?, subject }` @@ -197,72 +296,63 @@ You may want to pass `ret` to return an object instead of throwing. - `undefined` if `ret` is `true` then returns `{ value, error }` object, where `value` is `Header` and `error` a standard `Error` -#### [.checkHeader](/src/header.js#L80) -Receives a `Header` and checks if it is valid. - -**Params** -- `header` **{Header}** a `Header` object like `{ type, scope?, subject }` - -**Returns** -- `Header` returns the same as given if no problems, otherwise it will throw. - -### [src/main.js](/src/main.js) - -#### [.parse](/src/main.js#L14) -Receives and parses a single or multiple commit message(s) in form of string, -object, array of strings, array of objects or mixed. - -**Params** -- `commits` **{string|object|array}** a value to be parsed into an object like `Commit` type -- `[flat]` **{boolean}** if the returned result length is 1, then returns the first item +**Examples** +```javascript +import { validateHeader } from 'parse-commit-message'; -**Returns** -- `Array` if `flat: true`, returns a `Commit` +const header = { type: 'foo', subject: 'bar qux' }; -#### [.stringify](/src/main.js#L47) -Receives a `Commit` object, validates it using `validate`, -builds a "commit" message string and returns it. +const headerIsValid = validateHeader(header); +console.log(headerIsValid); // => true -This method does checking and validation too, -so if you pass a string, it will be parsed and validated, -and after that turned again to string. +const { value } = validateHeader(header, true); +console.log(value); +// => { +// header: { type: 'foo', scope: null, subject: 'bar qux' }, +// body: 'okey dude', +// footer: null, +// } -**Params** -- `commit` **{string|object|array}** a `Commit` object, or anything that can be passed to `check` -- `[flat]` **{boolean}** if the returned result length is 1, then returns the first item +const { error } = validateHeader({ + type: 'bar' +}, true); -**Returns** -- `Array` an array of commit strings like `'fix(foo): bar baz'`, - if `flat: true`, returns a `string` +console.log(error); +// => TypeError: header.subject should be non empty string +``` -#### [.validate](/src/main.js#L71) -Validates a single or multiple commit message(s) in form of string, -object, array of strings, array of objects or mixed. -You may want to pass `ret` to return an object instead of throwing. +#### [.checkHeader](/src/header.js#L144) +Receives a `Header` and checks if it is valid. +Basically the same as [.check](#check), except that +it only can accept single `Header` object. **Params** -- `commits` **{string|object|array}** a value to be parsed & validated into an object like `Commit` type -- `[ret]` **{boolean}** to return result instead of throwing, default `false` +- `header` **{Header}** a `Header` object like `{ type, scope?, subject }` **Returns** -- `undefined` if `ret` is `true` then returns `{ value, error }` object, - where `value` is `Commit|Array` and `error` a standard `Error` - -#### [.check](/src/main.js#L86) -Receives a single or multiple commit message(s) in form of string, -object, array of strings, array of objects or mixed. - -**Params** -- `commits` **{string|object|array}** a value to be parsed & validated into an object like `Commit` type -- `[flat]` **{boolean}** if the returned result length is 1, then returns the first item +- `Header` returns the same as given if no problems, otherwise it will throw. -**Returns** -- `Array` returns the same as given if no problems, otherwise it will throw; - if `flat: true`, returns a `Commit` +**Examples** +```javascript +import { checkHeader } from 'parse-commit-message'; + +try { + checkHeader({ type: 'fix' }); +} catch(err) { + console.log(err); + // => TypeError: header.subject should be non empty string +} + +// throws because can accept only Header objects +checkHeader('foo bar baz'); +checkHeader(123); +checkHeader([]); +checkHeader([{ type: 'foo', subject: 'bar' }]); +``` ### [src/index.js](/src/index.js) -#### [.applyPlugins](/src/index.js#L35) +#### [.applyPlugins](/src/index.js#L87) Apply a set of `plugins` over all of the given `commits`. A plugin is a simple function passed with `Commit` object, which may be returned to modify and set additional properties @@ -278,7 +368,61 @@ or the `check` methods. It does not do checking and validation._ **Returns** - `Array` plus the modified or added properties from each function in `plugins` -#### [.plugins](/src/index.js#L103) +**Examples** +```javascript +import dedent from 'dedent'; +import { applyPlugins, plugins, parse, check } from './src'; + +const commits = [ + 'fix: bar qux', + dedent`feat(foo): yea yea + + Awesome body here with @some mentions + resolves #123 + + BREAKING CHANGE: ouch!`, + 'chore(ci): updates for ci config', + { + header: { type: 'fix', subject: 'Barry White' }, + body: 'okey dude', + foo: 'possible', + }, +]; + +// Parses, normalizes, validates +// and applies plugins +const results = applyPlugins(plugins, check(parse(commits))); + +console.log(results); +// => [ { body: null, +// footer: null, +// header: { scope: null, type: 'fix', subject: 'bar qux' }, +// mentions: [], +// increment: 'patch', +// isBreaking: false }, +// { body: 'Awesome body here with @some mentions\nresolves #123', +// footer: 'BREAKING CHANGE: ouch!', +// header: { scope: 'foo', type: 'feat', subject: 'yea yea' }, +// mentions: [ [Object] ], +// increment: 'major', +// isBreaking: true }, +// { body: null, +// footer: null, +// header: +// { scope: 'ci', type: 'chore', subject: 'updates for ci config' }, +// mentions: [], +// increment: false, +// isBreaking: false }, +// { body: 'okey dude', +// footer: null, +// header: { scope: null, type: 'fix', subject: 'Barry White' }, +// foo: 'possible', +// mentions: [], +// increment: 'patch', +// isBreaking: false } ] +``` + +#### [.plugins](/src/index.js#L155) An array which includes `mentions` and `increment` built-in plugins. The `mentions` is an array of objects. Basically what's returned from the [collect-mentions][] package. @@ -332,7 +476,7 @@ console.log(commits); // ] ``` -#### [.mappers](/src/index.js#L136) +#### [.mappers](/src/index.js#L188) An object (named set) which includes `mentions` and `increment` built-in plugins. **Examples** @@ -362,6 +506,193 @@ console.log(commit) // }] ``` +### [src/main.js](/src/main.js) + +#### [.parse](/src/main.js#L51) +Receives and parses a single or multiple commit message(s) in form of string, +object, array of strings, array of objects or mixed. + +**Params** +- `commits` **{string|object|array}** a value to be parsed into an object like `Commit` type +- `[flat]` **{boolean}** if the returned result length is 1, then returns the first item + +**Returns** +- `Array` if `flat: true`, returns a `Commit` + +**Examples** +```javascript +import { parse } from 'parse-commit-message'; + +const commits = [ + 'fix(ci): tweaks for @circleci config', + 'chore: bar qux' +]; +const result = parse(commits); +console.log(result); +// => [{ +// header: { type: 'fix', scope: 'ci', subject: 'tweaks for @circleci config' }, +// body: null, +// footer: null, +// }, { +// header: { type: 'chore', scope: null, subject: 'bar qux' }, +// body: null, +// footer: null, +// }] + +// Or pass `flat = true` to return a single object +// when results contain only one item. +const commitMessage = `feat: awesome yeah + +Awesome body! +resolves #123 + +Signed-off-by: And Footer `; + +const res = parse(commitMessage, true); + +console.log(res); +// => { +// header: { type: 'feat', scope: null, subject: 'awesome yeah' }, +// body: 'Awesome body!\nresolves #123', +// footer: 'Signed-off-by: And Footer ', +// } +``` + +#### [.stringify](/src/main.js#L101) +Receives a `Commit` object, validates it using `validate`, +builds a "commit" message string and returns it. + +This method does checking and validation too, +so if you pass a string, it will be parsed and validated, +and after that turned again to string. + +**Params** +- `commits` **{string|object|array}** a `Commit` object, or anything that can be passed to `check` +- `[flat]` **{boolean}** if the returned result length is 1, then returns the first item + +**Returns** +- `Array` an array of commit strings like `'fix(foo): bar baz'`, + if `flat: true`, returns a `string` + +**Examples** +```javascript +import { parse, stringify } from 'parse-commit-message'; + +const commitMessage = `feat: awesome yeah + +Awesome body! +resolves #123 + +Signed-off-by: And Footer `; + +const flat = true; +const res = parse(commitMessage, flat); + +const str = stringify(res, flat); +console.log(str); +console.log(str === commitMessage); +``` + +#### [.validate](/src/main.js#L174) +Validates a single or multiple commit message(s) in form of string, +object, array of strings, array of objects or mixed. +You may want to pass `ret` to return an object instead of throwing. + +**Params** +- `commits` **{string|object|array}** a value to be parsed & validated into an object like `Commit` type +- `[ret]` **{boolean}** to return result instead of throwing, default `false` + +**Returns** +- `undefined` if `ret` is `true` then returns `{ value, error }` object, + where `value` is `Commit|Array` and `error` a standard `Error` + +**Examples** +```javascript +import { validate } from 'parse-commit-message'; + +console.log(validate('foo bar qux')); // false +console.log(validate('foo: bar qux')); // true +console.log(validate('fix(ci): bar qux')); // true + +console.log(validate(['a bc cqux', 'foo bar qux'])); // false + +console.log(validate({ qux: 1 })); // false +console.log(validate({ header: { type: 'fix' } })); // false +console.log(validate({ header: { type: 'fix', subject: 'ok' } })); // true + +const commitObject = { + header: { type: 'test', subject: 'updating tests' }, + foo: 'bar', + isBreaking: false, + body: 'oh ah', +}; +console.log(validate(commitObject)); // true + +const result = validate('foo bar qux', true); +console.log(result.error); +// => Error: expect \`commit\` to follow: +// [optional scope]: +// +// [optional body] +// +// [optional footer] + +const res = validate('fix(ci): okey barry', true); +console.log(result.value); +// => [{ +// header: { type: 'fix', scope: 'ci', subject: 'okey barry' }, +// body: null, +// footer: null, +// }] + +const commit = { header: { type: 'fix' } }; +const { error } = validate(commit, true); +console.log(error); +// => TypeError: header.subject should be non empty string + + +const commit = { header: { type: 'fix', scope: 123, subject: 'okk' } }; +const { error } = validate(commit, true); +console.log(error); +// => TypeError: header.scope should be non empty string when given +``` + +#### [.check](/src/main.js#L211) +Receives a single or multiple commit message(s) in form of string, +object, array of strings, array of objects or mixed. + +Basically the return result is the same as if you run `.validate()` with +the `ret` option, but instead it throws if find problems. + +**Params** +- `commits` **{string|object|array}** a value to be parsed & validated into an object like `Commit` type +- `[flat]` **{boolean}** if the returned result length is 1, then returns the first item + +**Returns** +- `Array` returns the same as given if no problems, otherwise it will throw; + if `flat: true`, returns a `Commit` + +**Examples** +```javascript +import { check } from 'parse-commit-message'; + +try { + check({ header: { type: 'fix' } }); +} catch(err) { + console.log(err); + // => TypeError: header.subject should be non empty string +} + +// Can also validate/check a strings, array of strings, +// or even mixed - array of strings and objects +try { + check('fix(): invalid scope, it cannot be empty') +} catch(err) { + console.log(err); + // => TypeError: header.scope should be non empty string when given +} +``` + ### [src/plugins/increment.js](/src/plugins/increment.js) #### [increment](/src/plugins/increment.js#L13) @@ -404,7 +735,7 @@ _See the [.plugins](#plugins) and [.mappers](#mappers) examples._ Some of these projects are used here or were inspiration for this one, others are just related. So, thanks for your existance! -{%= related(verb.related.list, { words: 12 }) %} +{%= related(verb.related.list, { words: 11 }) %} **[back to top](#thetop)** {% } %} diff --git a/README.md b/README.md index 42e70e9..05f92a6 100644 --- a/README.md +++ b/README.md @@ -38,9 +38,9 @@ Project is [semantically](https://semver.org) & automatically published with [ne --> - Understands and follows [Conventional Commits](https://conventionalcommits.org/) Specification -- Thoroughly tested with 100% coverage - Closed cycle: utilities for parsing, stringifying **and** validation - Infinitely extensible through plugins, [two built-in](#mappers) +- Thoroughly tested with 100% coverage and 64+ tests - Collecting mentions from commit message - Detection of breaking changes in commit @@ -62,15 +62,15 @@ Project is [semantically](https://semver.org) & automatically published with [ne + [.stringifyHeader](#stringifyheader) + [.validateHeader](#validateheader) + [.checkHeader](#checkheader) + * [src/index.js](#srcindexjs) + + [.applyPlugins](#applyplugins) + + [.plugins](#plugins) + + [.mappers](#mappers) * [src/main.js](#srcmainjs) + [.parse](#parse) + [.stringify](#stringify) + [.validate](#validate) + [.check](#check) - * [src/index.js](#srcindexjs) - + [.applyPlugins](#applyplugins) - + [.plugins](#plugins) - + [.mappers](#mappers) * [src/plugins/increment.js](#srcpluginsincrementjs) + [increment](#increment) * [src/plugins/mentions.js](#srcpluginsmentionsjs) @@ -121,7 +121,7 @@ type Commit = { header: Header; body?: string | null; footer?: string | null; - increment?: string; + increment?: string | boolean; isBreaking?: boolean; mentions?: Array; }; @@ -130,6 +130,8 @@ type Commit = { Note: It may also include properties set by the plugins - the `isBreaking`, `increment` and `mentions` are such. They are there when you apply the `increment` and `mentions` plugins. +ProTip: The `increment` may be a Boolean `false` if the commit type, for example, is `chore`. + See [.applyPlugins](#applyplugins) and [.plugins](#plugins). ### Mention @@ -151,13 +153,15 @@ _Generated using [docks](http://npm.im/docks)._ ### [src/commit.js](/src/commit.js) -#### [.parseCommit](/src/commit.js#L18) +#### [.parseCommit](/src/commit.js#L31) Receives a full commit message `string` and parses it into an `Commit` object and returns it. +Basically the same as [.parse](#parse), except that +it only can accept single string. _The `parse*` methods are not doing any checking and validation, -so you may want to pass the result to `validateHeader` or `checkHeader`, -or to `validateHeader` with `ret` option set to `true`._ +so you may want to pass the result to `validateCommit` or `checkCommit`, +or to `validateCommit` with `ret` option set to `true`._ **Params** - `commit` **{string}** a message like `'fix(foo): bar baz\n\nSome awesome body!'` @@ -165,41 +169,111 @@ or to `validateHeader` with `ret` option set to `true`._ **Returns** - `Commit` a standard object like `{ header: Header, body?, footer? }` -#### [.stringifyCommit](/src/commit.js#L38) +**Examples** +```javascript +import { parseCommit } from 'parse-commit-message'; + +const commitObj = parseCommit('foo: bar qux\n\nokey dude'); +console.log(commitObj); +// => { +// header: { type: 'foo', scope: null, subject: 'bar qux' }, +// body: 'okey dude', +// footer: null, +// } +``` + +#### [.stringifyCommit](/src/commit.js#L62) Receives a `Commit` object, validates it using `validateCommit`, -builds a "commit" string and returns it. +builds a "commit" string and returns it. Method throws if problems found. +Basically the same as [.stringify](#stringify), except that +it only can accept single `Commit` object. **Params** -- `header` **{Commit}** a `Commit` object like `{ header: Header, body?, footer? }` +- `commit` **{Commit}** a `Commit` object like `{ header: Header, body?, footer? }` **Returns** - `string` a commit nessage stirng like `'fix(foo): bar baz'` -#### [.validateCommit](/src/commit.js#L65) +**Examples** +```javascript +import { stringifyCommit } from 'parse-commit-message'; + +const commitStr = stringifyCommit({ + header: { type: 'foo', subject: 'bar qux' }, + body: 'okey dude', +}); +console.log(commitStr); // => 'foo: bar qux\n\nokey dude' +``` + +#### [.validateCommit](/src/commit.js#L110) Validates given `Commit` object and returns `boolean`. You may want to set `ret` to `true` return an object instead of throwing. +Basically the same as [.validate](#validate), except that +it only can accept single `Commit` object. **Params** -- `header` **{Commit}** a `Commit` like `{ header: Header, body?, footer? }` +- `commit` **{Commit}** a `Commit` like `{ header: Header, body?, footer? }` - `[ret]` **{boolean}** to return result instead of throwing, default `false` **Returns** - `undefined` if `ret` is `true` then returns `{ value, error }` object, where `value` is `Commit` and `error` a standard `Error` -#### [.checkCommit](/src/commit.js#L78) -Receives a `Commit` and checks if it is valid. +**Examples** +```javascript +import { validateCommit } from 'parse-commit-message'; + +const commit = { + header: { type: 'foo', subject: 'bar qux' }, + body: 'okey dude', +}; + +const commitIsValid = validateCommit(commit); +console.log(commitIsValid); // => true + +const { value } = validateCommit(commit, true); +console.log(value); +// => { +// header: { type: 'foo', scope: null, subject: 'bar qux' }, +// body: 'okey dude', +// footer: null, +// } +``` + +#### [.checkCommit](/src/commit.js#L139) +Receives a `Commit` and checks if it is valid. Method throws if problems found. +Basically the same as [.check](#check), except that +it only can accept single `Commit` object. **Params** -- `header` **{Commit}** a `Commit` like `{ header: Header, body?, footer? }` +- `commit` **{Commit}** a `Commit` like `{ header: Header, body?, footer? }` **Returns** - `Commit` returns the same as given if no problems, otherwise it will throw. +**Examples** +```javascript +import { checkCommit } from 'parse-commit-message'; + +try { + checkCommit({ header: { type: 'fix' } }); +} catch(err) { + console.log(err); + // => TypeError: header.subject should be non empty string +} + +// throws because can accept only Commit objects +checkCommit('foo bar baz'); +checkCommit(123); +checkCommit([{ header: { type: 'foo', subject: 'bar' } }]); +``` + ### [src/header.js](/src/header.js) -#### [.parseHeader](/src/header.js#L16) +#### [.parseHeader](/src/header.js#L29) Parses given `header` string into an header object. +Basically the same as [.parse](#parse), except that +it only can accept single string and returns a `Header` object. _The `parse*` methods are not doing any checking and validation, so you may want to pass the result to `validateHeader` or `checkHeader`, @@ -211,9 +285,24 @@ or to `validateHeader` with `ret` option set to `true`._ **Returns** - `Header` a `Header` object like `{ type, scope?, subject }` -#### [.stringifyHeader](/src/header.js#L45) +**Examples** +```javascript +import { parseHeader } from 'parse-commit-message'; + +const longCommitMsg = `fix: bar qux + +Awesome body!`; + +const headerObj = parseCommit(longCommitMsg); +console.log(headerObj); +// => { type: 'fix', scope: null, subject: 'bar qux' } +``` + +#### [.stringifyHeader](/src/header.js#L66) Receives a `header` object, validates it using `validateHeader`, -builds a "header" string and returns it. +builds a "header" string and returns it. Method throws if problems found. +Basically the same as [.stringify](#stringify), except that +it only can accept single `Header` object. **Params** - `header` **{Header}** a `Header` object like `{ type, scope?, subject }` @@ -221,9 +310,19 @@ builds a "header" string and returns it. **Returns** - `string` a header stirng like `'fix(foo): bar baz'` -#### [.validateHeader](/src/header.js#L68) +**Examples** +```javascript +import { stringifyHeader } from 'parse-commit-message'; + +const headerStr = stringifyCommit({ type: 'foo', subject: 'bar qux' }); +console.log(headerStr); // => 'foo: bar qux' +``` + +#### [.validateHeader](/src/header.js#L114) Validates given `header` object and returns `boolean`. You may want to pass `ret` to return an object instead of throwing. +Basically the same as [.validate](#validate), except that +it only can accept single `Header` object. **Params** - `header` **{Header}** a `Header` object like `{ type, scope?, subject }` @@ -233,72 +332,63 @@ You may want to pass `ret` to return an object instead of throwing. - `undefined` if `ret` is `true` then returns `{ value, error }` object, where `value` is `Header` and `error` a standard `Error` -#### [.checkHeader](/src/header.js#L80) -Receives a `Header` and checks if it is valid. - -**Params** -- `header` **{Header}** a `Header` object like `{ type, scope?, subject }` - -**Returns** -- `Header` returns the same as given if no problems, otherwise it will throw. - -### [src/main.js](/src/main.js) - -#### [.parse](/src/main.js#L14) -Receives and parses a single or multiple commit message(s) in form of string, -object, array of strings, array of objects or mixed. - -**Params** -- `commits` **{string|object|array}** a value to be parsed into an object like `Commit` type -- `[flat]` **{boolean}** if the returned result length is 1, then returns the first item +**Examples** +```javascript +import { validateHeader } from 'parse-commit-message'; -**Returns** -- `Array` if `flat: true`, returns a `Commit` +const header = { type: 'foo', subject: 'bar qux' }; -#### [.stringify](/src/main.js#L47) -Receives a `Commit` object, validates it using `validate`, -builds a "commit" message string and returns it. +const headerIsValid = validateHeader(header); +console.log(headerIsValid); // => true -This method does checking and validation too, -so if you pass a string, it will be parsed and validated, -and after that turned again to string. +const { value } = validateHeader(header, true); +console.log(value); +// => { +// header: { type: 'foo', scope: null, subject: 'bar qux' }, +// body: 'okey dude', +// footer: null, +// } -**Params** -- `commit` **{string|object|array}** a `Commit` object, or anything that can be passed to `check` -- `[flat]` **{boolean}** if the returned result length is 1, then returns the first item +const { error } = validateHeader({ + type: 'bar' +}, true); -**Returns** -- `Array` an array of commit strings like `'fix(foo): bar baz'`, - if `flat: true`, returns a `string` +console.log(error); +// => TypeError: header.subject should be non empty string +``` -#### [.validate](/src/main.js#L71) -Validates a single or multiple commit message(s) in form of string, -object, array of strings, array of objects or mixed. -You may want to pass `ret` to return an object instead of throwing. +#### [.checkHeader](/src/header.js#L144) +Receives a `Header` and checks if it is valid. +Basically the same as [.check](#check), except that +it only can accept single `Header` object. **Params** -- `commits` **{string|object|array}** a value to be parsed & validated into an object like `Commit` type -- `[ret]` **{boolean}** to return result instead of throwing, default `false` +- `header` **{Header}** a `Header` object like `{ type, scope?, subject }` **Returns** -- `undefined` if `ret` is `true` then returns `{ value, error }` object, - where `value` is `Commit|Array` and `error` a standard `Error` - -#### [.check](/src/main.js#L86) -Receives a single or multiple commit message(s) in form of string, -object, array of strings, array of objects or mixed. - -**Params** -- `commits` **{string|object|array}** a value to be parsed & validated into an object like `Commit` type -- `[flat]` **{boolean}** if the returned result length is 1, then returns the first item +- `Header` returns the same as given if no problems, otherwise it will throw. -**Returns** -- `Array` returns the same as given if no problems, otherwise it will throw; - if `flat: true`, returns a `Commit` +**Examples** +```javascript +import { checkHeader } from 'parse-commit-message'; + +try { + checkHeader({ type: 'fix' }); +} catch(err) { + console.log(err); + // => TypeError: header.subject should be non empty string +} + +// throws because can accept only Header objects +checkHeader('foo bar baz'); +checkHeader(123); +checkHeader([]); +checkHeader([{ type: 'foo', subject: 'bar' }]); +``` ### [src/index.js](/src/index.js) -#### [.applyPlugins](/src/index.js#L35) +#### [.applyPlugins](/src/index.js#L87) Apply a set of `plugins` over all of the given `commits`. A plugin is a simple function passed with `Commit` object, which may be returned to modify and set additional properties @@ -314,7 +404,61 @@ or the `check` methods. It does not do checking and validation._ **Returns** - `Array` plus the modified or added properties from each function in `plugins` -#### [.plugins](/src/index.js#L103) +**Examples** +```javascript +import dedent from 'dedent'; +import { applyPlugins, plugins, parse, check } from './src'; + +const commits = [ + 'fix: bar qux', + dedent`feat(foo): yea yea + + Awesome body here with @some mentions + resolves #123 + + BREAKING CHANGE: ouch!`, + 'chore(ci): updates for ci config', + { + header: { type: 'fix', subject: 'Barry White' }, + body: 'okey dude', + foo: 'possible', + }, +]; + +// Parses, normalizes, validates +// and applies plugins +const results = applyPlugins(plugins, check(parse(commits))); + +console.log(results); +// => [ { body: null, +// footer: null, +// header: { scope: null, type: 'fix', subject: 'bar qux' }, +// mentions: [], +// increment: 'patch', +// isBreaking: false }, +// { body: 'Awesome body here with @some mentions\nresolves #123', +// footer: 'BREAKING CHANGE: ouch!', +// header: { scope: 'foo', type: 'feat', subject: 'yea yea' }, +// mentions: [ [Object] ], +// increment: 'major', +// isBreaking: true }, +// { body: null, +// footer: null, +// header: +// { scope: 'ci', type: 'chore', subject: 'updates for ci config' }, +// mentions: [], +// increment: false, +// isBreaking: false }, +// { body: 'okey dude', +// footer: null, +// header: { scope: null, type: 'fix', subject: 'Barry White' }, +// foo: 'possible', +// mentions: [], +// increment: 'patch', +// isBreaking: false } ] +``` + +#### [.plugins](/src/index.js#L155) An array which includes `mentions` and `increment` built-in plugins. The `mentions` is an array of objects. Basically what's returned from the [collect-mentions][] package. @@ -368,7 +512,7 @@ console.log(commits); // ] ``` -#### [.mappers](/src/index.js#L136) +#### [.mappers](/src/index.js#L188) An object (named set) which includes `mentions` and `increment` built-in plugins. **Examples** @@ -398,6 +542,192 @@ console.log(commit) // }] ``` +### [src/main.js](/src/main.js) + +#### [.parse](/src/main.js#L51) +Receives and parses a single or multiple commit message(s) in form of string, +object, array of strings, array of objects or mixed. + +**Params** +- `commits` **{string|object|array}** a value to be parsed into an object like `Commit` type +- `[flat]` **{boolean}** if the returned result length is 1, then returns the first item + +**Returns** +- `Array` if `flat: true`, returns a `Commit` + +**Examples** +```javascript +import { parse } from 'parse-commit-message'; + +const commits = [ + 'fix(ci): tweaks for @circleci config', + 'chore: bar qux' +]; +const result = parse(commits); +console.log(result); +// => [{ +// header: { type: 'fix', scope: 'ci', subject: 'tweaks for @circleci config' }, +// body: null, +// footer: null, +// }, { +// header: { type: 'chore', scope: null, subject: 'bar qux' }, +// body: null, +// footer: null, +// }] + +// Or pass `flat = true` to return a single object +// when results contain only one item. +const commitMessage = `feat: awesome yeah + +Awesome body! +resolves #123 + +Signed-off-by: And Footer `; + +const res = parse(commitMessage, true); + +console.log(res); +// => { +// header: { type: 'feat', scope: null, subject: 'awesome yeah' }, +// body: 'Awesome body!\nresolves #123', +// footer: 'Signed-off-by: And Footer ', +// } +``` + +#### [.stringify](/src/main.js#L101) +Receives a `Commit` object, validates it using `validate`, +builds a "commit" message string and returns it. + +This method does checking and validation too, +so if you pass a string, it will be parsed and validated, +and after that turned again to string. + +**Params** +- `commits` **{string|object|array}** a `Commit` object, or anything that can be passed to `check` +- `[flat]` **{boolean}** if the returned result length is 1, then returns the first item + +**Returns** +- `Array` an array of commit strings like `'fix(foo): bar baz'`, + if `flat: true`, returns a `string` + +**Examples** +```javascript +import { parse, stringify } from 'parse-commit-message'; + +const commitMessage = `feat: awesome yeah + +Awesome body! +resolves #123 + +Signed-off-by: And Footer `; + +const flat = true; +const res = parse(commitMessage, flat); + +const str = stringify(res, flat); +console.log(str); +console.log(str === commitMessage); +``` + +#### [.validate](/src/main.js#L174) +Validates a single or multiple commit message(s) in form of string, +object, array of strings, array of objects or mixed. +You may want to pass `ret` to return an object instead of throwing. + +**Params** +- `commits` **{string|object|array}** a value to be parsed & validated into an object like `Commit` type +- `[ret]` **{boolean}** to return result instead of throwing, default `false` + +**Returns** +- `undefined` if `ret` is `true` then returns `{ value, error }` object, + where `value` is `Commit|Array` and `error` a standard `Error` + +**Examples** +```javascript +import { validate } from 'parse-commit-message'; + +console.log(validate('foo bar qux')); // false +console.log(validate('foo: bar qux')); // true +console.log(validate('fix(ci): bar qux')); // true + +console.log(validate(['a bc cqux', 'foo bar qux'])); // false + +console.log(validate({ qux: 1 })); // false +console.log(validate({ header: { type: 'fix' } })); // false +console.log(validate({ header: { type: 'fix', subject: 'ok' } })); // true + +const commitObject = { + header: { type: 'test', subject: 'updating tests' }, + foo: 'bar', + isBreaking: false, + body: 'oh ah', +}; +console.log(validate(commitObject)); // true + +const result = validate('foo bar qux', true); +console.log(result.error); +// => Error: expect \`commit\` to follow: +// [optional scope]: +// +// [optional body] +// +// [optional footer] + +const res = validate('fix(ci): okey barry', true); +console.log(result.value); +// => [{ +// header: { type: 'fix', scope: 'ci', subject: 'okey barry' }, +// body: null, +// footer: null, +// }] + +const commit = { header: { type: 'fix' } }; +const { error } = validate(commit, true); +console.log(error); +// => TypeError: header.subject should be non empty string + +const commit = { header: { type: 'fix', scope: 123, subject: 'okk' } }; +const { error } = validate(commit, true); +console.log(error); +// => TypeError: header.scope should be non empty string when given +``` + +#### [.check](/src/main.js#L211) +Receives a single or multiple commit message(s) in form of string, +object, array of strings, array of objects or mixed. + +Basically the return result is the same as if you run `.validate()` with +the `ret` option, but instead it throws if find problems. + +**Params** +- `commits` **{string|object|array}** a value to be parsed & validated into an object like `Commit` type +- `[flat]` **{boolean}** if the returned result length is 1, then returns the first item + +**Returns** +- `Array` returns the same as given if no problems, otherwise it will throw; + if `flat: true`, returns a `Commit` + +**Examples** +```javascript +import { check } from 'parse-commit-message'; + +try { + check({ header: { type: 'fix' } }); +} catch(err) { + console.log(err); + // => TypeError: header.subject should be non empty string +} + +// Can also validate/check a strings, array of strings, +// or even mixed - array of strings and objects +try { + check('fix(): invalid scope, it cannot be empty') +} catch(err) { + console.log(err); + // => TypeError: header.scope should be non empty string when given +} +``` + ### [src/plugins/increment.js](/src/plugins/increment.js) #### [increment](/src/plugins/increment.js#L13) @@ -440,13 +770,13 @@ Some of these projects are used here or were inspiration for this one, others ar existance! - [@tunnckocore/config](https://www.npmjs.com/package/@tunnckocore/config): All the configs for all the tools, in one place | [homepage](https://github.com/tunnckoCoreLabs/config "All the configs for all the tools, in one place") - [@tunnckocore/create-project](https://www.npmjs.com/package/@tunnckocore/create-project): Create and scaffold a new project, its GitHub repository and contents | [homepage](https://github.com/tunnckoCoreLabs/create-project "Create and scaffold a new project, its GitHub repository and contents") -- [@tunnckocore/execa](https://www.npmjs.com/package/@tunnckocore/execa): Thin layer on top of [execa][] that allows executing multiple commands in… [more](https://github.com/tunnckoCoreLabs/execa) | [homepage](https://github.com/tunnckoCoreLabs/execa "Thin layer on top of [execa][] that allows executing multiple commands in parallel or in sequence") -- [@tunnckocore/package-json](https://www.npmjs.com/package/@tunnckocore/package-json): Simple and fast getting of latest package.json metadata for a npm module… [more](https://github.com/tunnckoCoreLabs/package-json) | [homepage](https://github.com/tunnckoCoreLabs/package-json "Simple and fast getting of latest package.json metadata for a npm module, using axios and unpkg as a source, because npm registry is basically slow") +- [@tunnckocore/execa](https://www.npmjs.com/package/@tunnckocore/execa): Thin layer on top of [execa][] that allows executing multiple commands… [more](https://github.com/tunnckoCoreLabs/execa) | [homepage](https://github.com/tunnckoCoreLabs/execa "Thin layer on top of [execa][] that allows executing multiple commands in parallel or in sequence") - [@tunnckocore/scripts](https://www.npmjs.com/package/@tunnckocore/scripts): Universal and minimalist scripts & tasks runner. | [homepage](https://github.com/tunnckoCoreLabs/scripts "Universal and minimalist scripts & tasks runner.") - [@tunnckocore/update](https://www.npmjs.com/package/@tunnckocore/update): Update to latest project files and templates, based on `charlike` scaffolder | [homepage](https://github.com/tunnckoCoreLabs/update "Update to latest project files and templates, based on `charlike` scaffolder") - [asia](https://www.npmjs.com/package/asia): Blazingly fast, magical and minimalist testing framework, for Today and Tomorrow | [homepage](https://github.com/olstenlarck/asia#readme "Blazingly fast, magical and minimalist testing framework, for Today and Tomorrow") -- [charlike](https://www.npmjs.com/package/charlike): Small, fast and streaming project scaffolder with support for hundreds of template… [more](https://github.com/tunnckoCoreLabs/charlike) | [homepage](https://github.com/tunnckoCoreLabs/charlike "Small, fast and streaming project scaffolder with support for hundreds of template engines and sane defaults") +- [charlike](https://www.npmjs.com/package/charlike): Small, fast and streaming project scaffolder with support for hundreds of… [more](https://github.com/tunnckoCoreLabs/charlike) | [homepage](https://github.com/tunnckoCoreLabs/charlike "Small, fast and streaming project scaffolder with support for hundreds of template engines and sane defaults") - [docks](https://www.npmjs.com/package/docks): Extensible system for parsing and generating documentation. It just freaking works! | [homepage](https://github.com/tunnckoCore/docks "Extensible system for parsing and generating documentation. It just freaking works!") +- [git-commits-since](https://www.npmjs.com/package/git-commits-since): Get all commits since given period of time or by default… [more](https://github.com/tunnckoCoreLabs/git-commits-since) | [homepage](https://github.com/tunnckoCoreLabs/git-commits-since "Get all commits since given period of time or by default from latest git semver tag. Also detects and calculates next needed / recommended bump for your package. Based on [recommended-bump][], [parse-commit-message][], [detect-next-version][], [git-semver") - [gitcommit](https://www.npmjs.com/package/gitcommit): Lightweight and joyful `git commit` replacement. Conventional Commits compliant. | [homepage](https://github.com/tunnckoCore/gitcommit "Lightweight and joyful `git commit` replacement. Conventional Commits compliant.") **[back to top](#thetop)** @@ -548,6 +878,9 @@ Released under the [Apache-2.0 License][license-url]. [open-issue-url]: https://github.com/tunnckoCoreLabs/parse-commit-message/issues/new [collect-mentions]: https://github.com/olstenlarck/collect-mentions +[detect-next-version]: https://github.com/tunnckoCoreLabs/detect-next-version [execa]: https://github.com/sindresorhus/execa [new-release]: https://github.com/tunnckoCore/new-release +[parse-commit-message]: https://github.com/olstenlarck/parse-commit-message +[recommended-bump]: https://github.com/tunnckoCoreLabs/recommended-bump [semantic-release]: https://github.com/semantic-release/semantic-release \ No newline at end of file diff --git a/example.js b/example.js new file mode 100644 index 0000000..070324d --- /dev/null +++ b/example.js @@ -0,0 +1,48 @@ +import dedent from 'dedent'; +import { applyPlugins, plugins, parse, check } from './src'; + +const commits = [ + 'fix: bar qux', + dedent`feat(foo): yea yea + + Awesome body here with @some mentions + resolves #123 + + BREAKING CHANGE: ouch!`, + 'chore(ci): updates for ci config', + { + header: { type: 'fix', subject: 'Barry White' }, + body: 'okey dude', + foo: 'possible', + }, +]; + +const results = applyPlugins(plugins, check(parse(commits))); + +console.log(results); +// => [ { body: null, +// footer: null, +// header: { scope: null, type: 'fix', subject: 'bar qux' }, +// mentions: [], +// increment: 'patch', +// isBreaking: false }, +// { body: 'Awesome body here with @some mentions\nresolves #123', +// footer: 'BREAKING CHANGE: ouch!', +// header: { scope: 'foo', type: 'feat', subject: 'yea yea' }, +// mentions: [ [Object] ], +// increment: 'major', +// isBreaking: true }, +// { body: null, +// footer: null, +// header: +// { scope: 'ci', type: 'chore', subject: 'updates for ci config' }, +// mentions: [], +// increment: false, +// isBreaking: false }, +// { body: 'okey dude', +// footer: null, +// header: { scope: null, type: 'fix', subject: 'Barry White' }, +// foo: 'possible', +// mentions: [], +// increment: 'patch', +// isBreaking: false } ] diff --git a/package.json b/package.json index 74ba91b..8c13fc7 100644 --- a/package.json +++ b/package.json @@ -61,8 +61,8 @@ "charlike", "docks", "gitcommit", + "git-commits-since", "@tunnckocore/execa", - "@tunnckocore/package-json", "@tunnckocore/create-project", "@tunnckocore/update", "@tunnckocore/config", @@ -73,10 +73,13 @@ "reflinks": true }, "reflinks": [ + "collect-mentions", + "execa", "new-release", "semantic-release", - "collect-mentions", - "execa" + "detect-next-version", + "parse-commit-message", + "recommended-bump" ] } -} +} \ No newline at end of file diff --git a/src/commit.js b/src/commit.js index 1a821e1..3aa5e9d 100644 --- a/src/commit.js +++ b/src/commit.js @@ -5,10 +5,23 @@ import { parseHeader, stringifyHeader, validateHeader } from './header'; /** * Receives a full commit message `string` and parses it into an `Commit` object * and returns it. + * Basically the same as [.parse](#parse), except that + * it only can accept single string. * * _The `parse*` methods are not doing any checking and validation, - * so you may want to pass the result to `validateHeader` or `checkHeader`, - * or to `validateHeader` with `ret` option set to `true`._ + * so you may want to pass the result to `validateCommit` or `checkCommit`, + * or to `validateCommit` with `ret` option set to `true`._ + * + * @example + * import { parseCommit } from 'parse-commit-message'; + * + * const commitObj = parseCommit('foo: bar qux\n\nokey dude'); + * console.log(commitObj); + * // => { + * // header: { type: 'foo', scope: null, subject: 'bar qux' }, + * // body: 'okey dude', + * // footer: null, + * // } * * @name .parseCommit * @param {string} commit a message like `'fix(foo): bar baz\n\nSome awesome body!'` @@ -28,10 +41,21 @@ export function parseCommit(commit) { /** * Receives a `Commit` object, validates it using `validateCommit`, - * builds a "commit" string and returns it. + * builds a "commit" string and returns it. Method throws if problems found. + * Basically the same as [.stringify](#stringify), except that + * it only can accept single `Commit` object. + * + * @example + * import { stringifyCommit } from 'parse-commit-message'; + * + * const commitStr = stringifyCommit({ + * header: { type: 'foo', subject: 'bar qux' }, + * body: 'okey dude', + * }); + * console.log(commitStr); // => 'foo: bar qux\n\nokey dude' * * @name .stringifyCommit - * @param {Commit} header a `Commit` object like `{ header: Header, body?, footer? }` + * @param {Commit} commit a `Commit` object like `{ header: Header, body?, footer? }` * @returns {string} a commit nessage stirng like `'fix(foo): bar baz'` * @public */ @@ -54,9 +78,30 @@ export function stringifyCommit(commit) { /** * Validates given `Commit` object and returns `boolean`. * You may want to set `ret` to `true` return an object instead of throwing. + * Basically the same as [.validate](#validate), except that + * it only can accept single `Commit` object. + * + * @example + * import { validateCommit } from 'parse-commit-message'; + * + * const commit = { + * header: { type: 'foo', subject: 'bar qux' }, + * body: 'okey dude', + * }; + * + * const commitIsValid = validateCommit(commit); + * console.log(commitIsValid); // => true + * + * const { value } = validateCommit(commit, true); + * console.log(value); + * // => { + * // header: { type: 'foo', scope: null, subject: 'bar qux' }, + * // body: 'okey dude', + * // footer: null, + * // } * * @name .validateCommit - * @param {Commit} header a `Commit` like `{ header: Header, body?, footer? }` + * @param {Commit} commit a `Commit` like `{ header: Header, body?, footer? }` * @param {boolean} [ret] to return result instead of throwing, default `false` * @returns {boolean|object} if `ret` is `true` then returns `{ value, error }` object, * where `value` is `Commit` and `error` a standard `Error` @@ -67,11 +112,27 @@ export function validateCommit(commit, ret = false) { } /** - * Receives a `Commit` and checks if it is valid. + * Receives a `Commit` and checks if it is valid. Method throws if problems found. + * Basically the same as [.check](#check), except that + * it only can accept single `Commit` object. + * + * @example + * import { checkCommit } from 'parse-commit-message'; + * + * try { + * checkCommit({ header: { type: 'fix' } }); + * } catch(err) { + * console.log(err); + * // => TypeError: header.subject should be non empty string + * } * + * // throws because can accept only Commit objects + * checkCommit('foo bar baz'); + * checkCommit(123); + * checkCommit([{ header: { type: 'foo', subject: 'bar' } }]); * * @name .checkCommit - * @param {Commit} header a `Commit` like `{ header: Header, body?, footer? }` + * @param {Commit} commit a `Commit` like `{ header: Header, body?, footer? }` * @returns {Commit} returns the same as given if no problems, otherwise it will throw. * @public */ diff --git a/src/header.js b/src/header.js index fcd5b20..38f21d1 100644 --- a/src/header.js +++ b/src/header.js @@ -3,11 +3,24 @@ import { tryCatch, isValidString, isObject, errorMsg } from './utils'; /** * Parses given `header` string into an header object. + * Basically the same as [.parse](#parse), except that + * it only can accept single string and returns a `Header` object. * * _The `parse*` methods are not doing any checking and validation, * so you may want to pass the result to `validateHeader` or `checkHeader`, * or to `validateHeader` with `ret` option set to `true`._ * + * @example + * import { parseHeader } from 'parse-commit-message'; + * + * const longCommitMsg = `fix: bar qux + * + * Awesome body!`; + * + * const headerObj = parseCommit(longCommitMsg); + * console.log(headerObj); + * // => { type: 'fix', scope: null, subject: 'bar qux' } + * * @name .parseHeader * @param {string} header a header stirng like `'fix(foo): bar baz'` * @returns {Header} a `Header` object like `{ type, scope?, subject }` @@ -35,7 +48,15 @@ export function parseHeader(header) { /** * Receives a `header` object, validates it using `validateHeader`, - * builds a "header" string and returns it. + * builds a "header" string and returns it. Method throws if problems found. + * Basically the same as [.stringify](#stringify), except that + * it only can accept single `Header` object. + * + * @example + * import { stringifyHeader } from 'parse-commit-message'; + * + * const headerStr = stringifyCommit({ type: 'foo', subject: 'bar qux' }); + * console.log(headerStr); // => 'foo: bar qux' * * @name .stringifyHeader * @param {Header} header a `Header` object like `{ type, scope?, subject }` @@ -57,6 +78,31 @@ export function stringifyHeader(header) { /** * Validates given `header` object and returns `boolean`. * You may want to pass `ret` to return an object instead of throwing. + * Basically the same as [.validate](#validate), except that + * it only can accept single `Header` object. + * + * @example + * import { validateHeader } from 'parse-commit-message'; + * + * const header = { type: 'foo', subject: 'bar qux' }; + * + * const headerIsValid = validateHeader(header); + * console.log(headerIsValid); // => true + * + * const { value } = validateHeader(header, true); + * console.log(value); + * // => { + * // header: { type: 'foo', scope: null, subject: 'bar qux' }, + * // body: 'okey dude', + * // footer: null, + * // } + * + * const { error } = validateHeader({ + * type: 'bar' + * }, true); + * + * console.log(error); + * // => TypeError: header.subject should be non empty string * * @name .validateHeader * @param {Header} header a `Header` object like `{ type, scope?, subject }` @@ -71,6 +117,24 @@ export function validateHeader(header, ret = false) { /** * Receives a `Header` and checks if it is valid. + * Basically the same as [.check](#check), except that + * it only can accept single `Header` object. + * + * @example + * import { checkHeader } from 'parse-commit-message'; + * + * try { + * checkHeader({ type: 'fix' }); + * } catch(err) { + * console.log(err); + * // => TypeError: header.subject should be non empty string + * } + * + * // throws because can accept only Header objects + * checkHeader('foo bar baz'); + * checkHeader(123); + * checkHeader([]); + * checkHeader([{ type: 'foo', subject: 'bar' }]); * * @name .checkHeader * @param {Header} header a `Header` object like `{ type, scope?, subject }` diff --git a/src/index.js b/src/index.js index 9406053..c5d9271 100644 --- a/src/index.js +++ b/src/index.js @@ -26,6 +26,58 @@ import { * _The `commits` should be coming from `parse`, `validate` (with `ret` option) * or the `check` methods. It does not do checking and validation._ * + * @example + * import dedent from 'dedent'; + * import { applyPlugins, plugins, parse, check } from './src'; + * + * const commits = [ + * 'fix: bar qux', + * dedent`feat(foo): yea yea + * + * Awesome body here with @some mentions + * resolves #123 + * + * BREAKING CHANGE: ouch!`, + * 'chore(ci): updates for ci config', + * { + * header: { type: 'fix', subject: 'Barry White' }, + * body: 'okey dude', + * foo: 'possible', + * }, + * ]; + * + * // Parses, normalizes, validates + * // and applies plugins + * const results = applyPlugins(plugins, check(parse(commits))); + * + * console.log(results); + * // => [ { body: null, + * // footer: null, + * // header: { scope: null, type: 'fix', subject: 'bar qux' }, + * // mentions: [], + * // increment: 'patch', + * // isBreaking: false }, + * // { body: 'Awesome body here with @some mentions\nresolves #123', + * // footer: 'BREAKING CHANGE: ouch!', + * // header: { scope: 'foo', type: 'feat', subject: 'yea yea' }, + * // mentions: [ [Object] ], + * // increment: 'major', + * // isBreaking: true }, + * // { body: null, + * // footer: null, + * // header: + * // { scope: 'ci', type: 'chore', subject: 'updates for ci config' }, + * // mentions: [], + * // increment: false, + * // isBreaking: false }, + * // { body: 'okey dude', + * // footer: null, + * // header: { scope: null, type: 'fix', subject: 'Barry White' }, + * // foo: 'possible', + * // mentions: [], + * // increment: 'patch', + * // isBreaking: false } ] + * * @name .applyPlugins * @param {Array} plugins a simple function like `(commit) => {}` * @param {string|object|array} commits a value which should already be gone through `parse` diff --git a/src/main.js b/src/main.js index 0a115b8..d1bf7f5 100644 --- a/src/main.js +++ b/src/main.js @@ -5,6 +5,43 @@ import { parseCommit, stringifyCommit, checkCommit } from './commit'; * Receives and parses a single or multiple commit message(s) in form of string, * object, array of strings, array of objects or mixed. * + * @example + * import { parse } from 'parse-commit-message'; + * + * const commits = [ + * 'fix(ci): tweaks for @circleci config', + * 'chore: bar qux' + * ]; + * const result = parse(commits); + * console.log(result); + * // => [{ + * // header: { type: 'fix', scope: 'ci', subject: 'tweaks for @circleci config' }, + * // body: null, + * // footer: null, + * // }, { + * // header: { type: 'chore', scope: null, subject: 'bar qux' }, + * // body: null, + * // footer: null, + * // }] + * + * // Or pass `flat = true` to return a single object + * // when results contain only one item. + * const commitMessage = `feat: awesome yeah + * + * Awesome body! + * resolves #123 + * + * Signed-off-by: And Footer `; + * + * const res = parse(commitMessage, true); + * + * console.log(res); + * // => { + * // header: { type: 'feat', scope: null, subject: 'awesome yeah' }, + * // body: 'Awesome body!\nresolves #123', + * // footer: 'Signed-off-by: And Footer ', + * // } + * * @name .parse * @param {string|object|array} commits a value to be parsed into an object like `Commit` type * @param {boolean} [flat] if the returned result length is 1, then returns the first item @@ -37,16 +74,33 @@ export function parse(commits, flat = false) { * so if you pass a string, it will be parsed and validated, * and after that turned again to string. * + * @example + * import { parse, stringify } from 'parse-commit-message'; + * + * const commitMessage = `feat: awesome yeah + * + * Awesome body! + * resolves #123 + * + * Signed-off-by: And Footer `; + * + * const flat = true; + * const res = parse(commitMessage, flat); + * + * const str = stringify(res, flat); + * console.log(str); + * console.log(str === commitMessage); + * * @name .stringify - * @param {string|object|array} commit a `Commit` object, or anything that can be passed to `check` + * @param {string|object|array} commits a `Commit` object, or anything that can be passed to `check` * @param {boolean} [flat] if the returned result length is 1, then returns the first item * @returns {Array} an array of commit strings like `'fix(foo): bar baz'`, * if `flat: true`, returns a `string` * @public */ -export function stringify(commit, flat = false) { +export function stringify(commits, flat = false) { const result = [] - .concat(commit) + .concat(commits) .filter(Boolean) .reduce( (acc, val) => acc.concat(check(val).map((x) => stringifyCommit(x))), @@ -61,6 +115,55 @@ export function stringify(commit, flat = false) { * object, array of strings, array of objects or mixed. * You may want to pass `ret` to return an object instead of throwing. * + * @example + * import { validate } from 'parse-commit-message'; + * + * console.log(validate('foo bar qux')); // false + * console.log(validate('foo: bar qux')); // true + * console.log(validate('fix(ci): bar qux')); // true + * + * console.log(validate(['a bc cqux', 'foo bar qux'])); // false + * + * console.log(validate({ qux: 1 })); // false + * console.log(validate({ header: { type: 'fix' } })); // false + * console.log(validate({ header: { type: 'fix', subject: 'ok' } })); // true + * + * const commitObject = { + * header: { type: 'test', subject: 'updating tests' }, + * foo: 'bar', + * isBreaking: false, + * body: 'oh ah', + * }; + * console.log(validate(commitObject)); // true + * + * const result = validate('foo bar qux', true); + * console.log(result.error); + * // => Error: expect \`commit\` to follow: + * // [optional scope]: + * // + * // [optional body] + * // + * // [optional footer] + * + * const res = validate('fix(ci): okey barry', true); + * console.log(result.value); + * // => [{ + * // header: { type: 'fix', scope: 'ci', subject: 'okey barry' }, + * // body: null, + * // footer: null, + * // }] + * + * const commit = { header: { type: 'fix' } }; + * const { error } = validate(commit, true); + * console.log(error); + * // => TypeError: header.subject should be non empty string + * + * + * const commit = { header: { type: 'fix', scope: 123, subject: 'okk' } }; + * const { error } = validate(commit, true); + * console.log(error); + * // => TypeError: header.scope should be non empty string when given + * * @name .validate * @param {string|object|array} commits a value to be parsed & validated into an object like `Commit` type * @param {boolean} [ret] to return result instead of throwing, default `false` @@ -76,6 +179,28 @@ export function validate(commits, ret = false) { * Receives a single or multiple commit message(s) in form of string, * object, array of strings, array of objects or mixed. * + * Basically the return result is the same as if you run `.validate()` with + * the `ret` option, but instead it throws if find problems. + * + * @example + * import { check } from 'parse-commit-message'; + * + * try { + * check({ header: { type: 'fix' } }); + * } catch(err) { + * console.log(err); + * // => TypeError: header.subject should be non empty string + * } + * + * // Can also validate/check a strings, array of strings, + * // or even mixed - array of strings and objects + * try { + * check('fix(): invalid scope, it cannot be empty') + * } catch(err) { + * console.log(err); + * // => TypeError: header.scope should be non empty string when given + * } + * * @name .check * @param {string|object|array} commits a value to be parsed & validated into an object like `Commit` type * @param {boolean} [flat] if the returned result length is 1, then returns the first item diff --git a/src/plugins/increment.js b/src/plugins/increment.js index 35402c1..ee59aea 100644 --- a/src/plugins/increment.js +++ b/src/plugins/increment.js @@ -12,7 +12,7 @@ */ export default function increment(commit) { let isBreaking = isBreakingChange(commit); - let commitIncrement = ''; + let commitIncrement = false; if (/fix|bugfix|patch/.test(commit.header.type)) { commitIncrement = 'patch'; diff --git a/test/commit/snapshots/parse.test.snapshot.json b/test/commit/snapshots/parse.test.snapshot.json deleted file mode 100644 index 02f81be..0000000 --- a/test/commit/snapshots/parse.test.snapshot.json +++ /dev/null @@ -1 +0,0 @@ -{".parseCommit throw if not a string given":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":1,"str":"(t) => {\n t.throws(() => parseCommit(123), TypeError);\n t.throws(() => parseCommit(123), /expect `commit` to be non empty string/);\n t.throws(() => parseCommit(''), /expect `commit` to be non empty string/);\n}","title":".parseCommit throw if not a string given"},".parseCommit throw when invalid conventional commits":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":2,"str":"(t) => {\n function fixture() {\n parseCommit('fix bar qux');\n }\n t.throws(fixture, Error);\n t.throws(fixture, /\\[optional scope\\]: /);\n}","title":".parseCommit throw when invalid conventional commits"},".parseCommit NOT throw when header is valid by conventional commits":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":3,"str":"(t) => {\n const one = parseCommit('fix: zzz qux');\n const two = parseCommit('fix(cli): aaaa qux');\n const res = parseCommit('fix(cli): qqqqq qux\\n\\nSome awesome body');\n\n t.ok(isObject(one));\n t.ok(isObject(two));\n t.ok(isObject(res));\n}","title":".parseCommit NOT throw when header is valid by conventional commits"},".parseCommit correctly commit message string without scope":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":4,"str":"(t) => {\n const result = parseCommit('fix: bar qux');\n\n t.deepStrictEqual(result, {\n header: { type: 'fix', scope: null, subject: 'bar qux' },\n body: null,\n footer: null,\n });\n}","title":".parseCommit correctly commit message string without scope"},".parseCommit header string with scope":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":5,"str":"(t) => {\n t.deepStrictEqual(parseCommit('fix(cli): bar qux'), {\n header: { type: 'fix', scope: 'cli', subject: 'bar qux' },\n body: null,\n footer: null,\n });\n}","title":".parseCommit header string with scope"}} \ No newline at end of file diff --git a/test/commit/snapshots/validate.test.snapshot.json b/test/commit/snapshots/validate.test.snapshot.json new file mode 100644 index 0000000..d60690d --- /dev/null +++ b/test/commit/snapshots/validate.test.snapshot.json @@ -0,0 +1 @@ +{".validateCommit should return boolean when second param `ret` is not given":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":1,"str":"(t) => {\n const header = { type: 'fix', subject: 'bar qux' };\n const boolTrue = validateCommit({\n header,\n body: 'foo',\n });\n const boolFalse = validateCommit({ header, body: 111, footer: 'sasa' });\n\n t.strictEqual(boolTrue, true);\n t.strictEqual(boolFalse, false);\n}","title":".validateCommit should return boolean when second param `ret` is not given"},".validateCommit should return { error, value } object when `ret` is true":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":2,"str":"(t) => {\n const header = { type: 'major', scope: 'qux', subject: 'some awful change' };\n const result = validateCommit({ header, body: 'okkk' }, true);\n\n t.deepStrictEqual(result, {\n value: { header, body: 'okkk', footer: null },\n });\n\n const res2 = validateCommit({ header: { foo: 1 }, body: 'a' }, true);\n t.ok(res2.error);\n t.ok(res2.error instanceof Error);\n t.ok(!res2.value);\n}","title":".validateCommit should return { error, value } object when `ret` is true"}} \ No newline at end of file diff --git a/test/header/snapshots/parse.test.snapshot.json b/test/header/snapshots/parse.test.snapshot.json deleted file mode 100644 index 710499b..0000000 --- a/test/header/snapshots/parse.test.snapshot.json +++ /dev/null @@ -1 +0,0 @@ -{".parseHeader throw if not a string given":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":1,"str":"(t) => {\n t.throws(() => parseHeader(123), TypeError);\n t.throws(() => parseHeader(123), /expect `header` to be non empty string/);\n t.throws(() => parseHeader(''), /expect `header` to be non empty string/);\n}","title":".parseHeader throw if not a string given"},".parseHeader throw when invalid conventional commits":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":2,"str":"(t) => {\n function fixture() {\n parseHeader('fix bar qux');\n }\n t.throws(fixture, Error);\n t.throws(fixture, /\\[optional scope\\]: /);\n}","title":".parseHeader throw when invalid conventional commits"},".parseHeader NOT throw when header is valid by conventional commits":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":3,"str":"(t) => {\n const one = parseHeader('fix: zzz qux');\n const two = parseHeader('fix(cli): aaaa qux');\n const res = parseHeader('fix(cli): qqqqq qux\\n\\nSome awesome body');\n\n t.ok(isObject(one));\n t.ok(isObject(two));\n t.ok(isObject(res));\n}","title":".parseHeader NOT throw when header is valid by conventional commits"},".parseHeader correctly header string without scope":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":4,"str":"(t) => {\n const result = parseHeader('fix: bar qux');\n\n t.deepStrictEqual(result, { type: 'fix', scope: null, subject: 'bar qux' });\n}","title":".parseHeader correctly header string without scope"},".parseHeader header string with scope":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":5,"str":"(t) => {\n t.deepStrictEqual(parseHeader('fix(cli): bar qux'), {\n type: 'fix',\n scope: 'cli',\n subject: 'bar qux',\n });\n}","title":".parseHeader header string with scope"}} \ No newline at end of file diff --git a/test/header/snapshots/stringify.test.snapshot.json b/test/header/snapshots/stringify.test.snapshot.json new file mode 100644 index 0000000..16b1160 --- /dev/null +++ b/test/header/snapshots/stringify.test.snapshot.json @@ -0,0 +1 @@ +{".stringifyHeader throw if invalid header is given":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":1,"str":"(t) => {\n t.throws(() => stringifyHeader(1234), TypeError);\n t.throws(() => stringifyHeader({ type: 'foo' }), TypeError);\n t.throws(() => stringifyHeader(), /expect `header` to be an object/);\n}","title":".stringifyHeader throw if invalid header is given"},".stringifyHeader object":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":2,"str":"(t) => {\n const header = { type: 'fix', scope: 'huh', subject: 'yeah yeah' };\n const result = stringifyHeader(header);\n\n t.strictEqual(result, 'fix(huh): yeah yeah');\n}","title":".stringifyHeader object"},".stringifyHeader object without scope":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":3,"str":"(t) => {\n const header = { type: 'fix', subject: 'yeah yeah' };\n const result = stringifyHeader(header);\n\n t.strictEqual(result, 'fix: yeah yeah');\n}","title":".stringifyHeader object without scope"}} \ No newline at end of file diff --git a/test/header/snapshots/validate.test.snapshot.json b/test/header/snapshots/validate.test.snapshot.json new file mode 100644 index 0000000..1311d0b --- /dev/null +++ b/test/header/snapshots/validate.test.snapshot.json @@ -0,0 +1 @@ +{".validateHeader should return boolean when second param `ret` is not given":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":1,"str":"(t) => {\n const boolTrue = validateHeader({ type: 'fix', subject: 'bar qux' });\n const boolFalse = validateHeader({ type: 'fix' });\n\n t.strictEqual(boolTrue, true);\n t.strictEqual(boolFalse, false);\n}","title":".validateHeader should return boolean when second param `ret` is not given"},".validateHeader should return { error, value } object when `ret` is true":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":2,"str":"(t) => {\n const result = validateHeader({ type: 'fix', subject: 'bar qux' }, true);\n\n t.deepStrictEqual(result, {\n value: { type: 'fix', scope: null, subject: 'bar qux' },\n });\n\n const res2 = validateHeader({ type: 'fix' }, true);\n t.ok(res2.error);\n t.ok(res2.error instanceof Error);\n t.ok(!res2.value);\n}","title":".validateHeader should return { error, value } object when `ret` is true"}} \ No newline at end of file diff --git a/test/index.js b/test/index.js index dd89093..8b6515b 100644 --- a/test/index.js +++ b/test/index.js @@ -98,3 +98,13 @@ test('should add both mentions and increment plugins and respective props to Com t.strictEqual(res.header.subject, 'yeah @bar & @qux zaz'); t.strictEqual(res.body, 'BREAKING CHANGE: oh yeah'); }); + +test('should result.increment be false if no bump needed', (t) => { + const [result] = applyPlugins(mappers.increment, parse('chore(zz): foo bar')); + + t.strictEqual(result.increment, false); + t.strictEqual(result.isBreaking, false); + t.strictEqual(result.header.type, 'chore'); + t.strictEqual(result.header.scope, 'zz'); + t.strictEqual(result.header.subject, 'foo bar'); +}); diff --git a/test/main/snapshots/parse.test.snapshot.json b/test/main/snapshots/parse.test.snapshot.json new file mode 100644 index 0000000..b8ebf44 --- /dev/null +++ b/test/main/snapshots/parse.test.snapshot.json @@ -0,0 +1 @@ +{"main: basic":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":1,"str":"(t) => {\n t.strictEqual(typeof parse, 'function');\n}","title":"main: basic"},"should parse() string commit message into an array of Commit objects":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":2,"str":"(t) => {\n const result = parse('fix: foo bar');\n t.strictEqual(Array.isArray(result), true);\n\n const [res] = result;\n t.deepStrictEqual(res, {\n header: { type: 'fix', scope: null, subject: 'foo bar' },\n body: null,\n footer: null,\n });\n}","title":"should parse() string commit message into an array of Commit objects"},"should parse(string) return an object when `flat: true` and single commit":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":3,"str":"(t) => {\n const res = parse('feat(cli): qux bar', true);\n\n t.strictEqual(typeof res, 'object');\n t.strictEqual(Array.isArray(res), false);\n t.strictEqual(res.header.scope, 'cli');\n}","title":"should parse(string) return an object when `flat: true` and single commit"},"should parse() work okey with array of arrays":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":4,"str":"(t) => {\n const [one, two] = parse(['fix: bar', ['qux: zaz']]);\n\n t.deepStrictEqual(one, {\n header: { type: 'fix', scope: null, subject: 'bar' },\n body: null,\n footer: null,\n });\n t.deepStrictEqual(two, {\n header: { type: 'qux', scope: null, subject: 'zaz' },\n body: null,\n footer: null,\n });\n}","title":"should parse() work okey with array of arrays"},"should parse(object) passthrough if object is passed as commit":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":5,"str":"(t) => {\n const result = parse({ foo: 'bar' }, true);\n\n t.strictEqual(typeof result, 'object');\n t.strictEqual(result.foo, 'bar');\n}","title":"should parse(object) passthrough if object is passed as commit"},"should parse(array) be able to accept array":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":6,"str":"(t) => {\n const commits = parse([\n 'fix: bar qux',\n dedent`feat(cli): zazzy qux\n\n BREAKING CHANGE: woo hoo`,\n 'chore(ci): abc fux',\n dedent`fix(src-foo): alleluah yeah\n\n resolves #3\n closes #123\n\n Signed-off-by: Foo Bar `,\n ]);\n\n t.strictEqual(commits.length, 4);\n\n const [one, two, three, four] = commits;\n t.strictEqual(one.header.type, 'fix');\n t.strictEqual(one.header.scope, null);\n t.strictEqual(one.header.subject, 'bar qux');\n t.strictEqual(one.body, null);\n t.strictEqual(one.footer, null);\n\n t.strictEqual(two.header.type, 'feat');\n t.strictEqual(two.header.scope, 'cli');\n t.strictEqual(two.header.subject, 'zazzy qux');\n t.strictEqual(two.body, 'BREAKING CHANGE: woo hoo');\n t.strictEqual(two.footer, null);\n\n t.strictEqual(three.header.type, 'chore');\n t.strictEqual(three.header.scope, 'ci');\n t.strictEqual(three.header.subject, 'abc fux');\n t.strictEqual(three.body, null);\n t.strictEqual(three.footer, null);\n\n t.strictEqual(four.header.type, 'fix');\n t.strictEqual(four.header.scope, 'src-foo');\n t.strictEqual(four.header.subject, 'alleluah yeah');\n t.strictEqual(four.body, 'resolves #3\\ncloses #123');\n t.strictEqual(four.footer, 'Signed-off-by: Foo Bar ');\n}","title":"should parse(array) be able to accept array"}} \ No newline at end of file diff --git a/test/main/snapshots/validate.test.snapshot.json b/test/main/snapshots/validate.test.snapshot.json deleted file mode 100644 index 405be70..0000000 --- a/test/main/snapshots/validate.test.snapshot.json +++ /dev/null @@ -1 +0,0 @@ -{".validate should return boolean when second param `ret` is not given":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":1,"str":"(t) => {\n const header = { type: 'fix', subject: 'bar qux' };\n const boolTrue = validate({\n header,\n body: 'foo',\n });\n const boolFalse = validate({ header, body: 111, footer: 'sasa' });\n\n t.strictEqual(boolTrue, true);\n t.strictEqual(boolFalse, false);\n}","title":".validate should return boolean when second param `ret` is not given"},".validate should return { error, value } objects when `ret` is true":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":2,"str":"(t) => {\n const header = { type: 'major', scope: 'qux', subject: 'some awful change' };\n const result = validate({ header, body: 'okkk' }, true);\n\n t.deepStrictEqual(result.value, [{ header, body: 'okkk', footer: null }]);\n\n const res2 = validate({ header: { foo: 1 }, body: 'a' }, true);\n t.ok(res2.error);\n t.ok(res2.error instanceof Error);\n t.ok(!res2.value);\n}","title":".validate should return { error, value } objects when `ret` is true"},"should validate() similar to check() be able to accept array of mixed values":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":3,"str":"(t) => {\n const commits = [\n 'fix: abr\\n\\nquxx qq',\n { header: { type: 'qq', subject: 'ok ok' } },\n ];\n const { value } = validate(commits, true);\n\n t.deepStrictEqual(value, [\n {\n header: { type: 'fix', scope: null, subject: 'abr' },\n body: 'quxx qq',\n footer: null,\n },\n {\n header: { type: 'qq', scope: null, subject: 'ok ok' },\n body: null,\n footer: null,\n },\n ]);\n}","title":"should validate() similar to check() be able to accept array of mixed values"}} \ No newline at end of file diff --git a/test/snapshots/index.snapshot.json b/test/snapshots/index.snapshot.json index 0fd6b8e..7d2b65f 100644 --- a/test/snapshots/index.snapshot.json +++ b/test/snapshots/index.snapshot.json @@ -1 +1 @@ -{"index: basic":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":1,"str":"(t) => {\n t.strictEqual(typeof applyPlugins, 'function');\n t.strictEqual(typeof mappers, 'object');\n t.strictEqual(typeof mappers.mentions, 'function');\n t.strictEqual(typeof mappers.increment, 'function');\n t.strictEqual(Array.isArray(plugins), true);\n t.strictEqual(plugins.length, 2);\n}","title":"index: basic"},"should apply increment plugin add `increment: patch` property to Commit objects":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":2,"str":"(t) => {\n const commitMsg = dedent`fix(fox): bar qux\n\n resolves #123\n closes #1111\n\n Awesome\n Signed-off-by: Bar Qux`;\n\n const commitObj = {\n header: { type: 'fix', scope: 'fox', subject: 'bar qux' },\n body: 'resolves #123\\ncloses #1111',\n footer: 'Awesome\\nSigned-off-by: Bar Qux',\n increment: 'patch',\n isBreaking: false,\n };\n\n const [commit] = applyPlugins(mappers.increment, parse(commitMsg));\n\n t.deepStrictEqual(commit, commitObj);\n}","title":"should apply increment plugin add `increment: patch` property to Commit objects"},"should apply increment plugin add `increment: minor` property to Commit objects":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":3,"str":"(t) => {\n const [commit] = applyPlugins(mappers.increment, parse('feat(bar): bar qux'));\n\n t.deepStrictEqual(commit.increment, 'minor');\n t.deepStrictEqual(commit.isBreaking, false);\n}","title":"should apply increment plugin add `increment: minor` property to Commit objects"},"should apply increment plugin add `increment: major` property to Commit objects":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":4,"str":"(t) => {\n const [commit] = applyPlugins(\n mappers.increment,\n parse('major(bar): bar qux'),\n );\n\n t.deepStrictEqual(commit.increment, 'major');\n t.deepStrictEqual(commit.isBreaking, true);\n}","title":"should apply increment plugin add `increment: major` property to Commit objects"},"should increment plugin consider `major` when find `BREAKING CHANGE: ` label":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":5,"str":"(t) => {\n const [res] = applyPlugins(\n mappers.increment,\n parse(\n dedent`fix: bar qux\n\n BREAKING CHANGE: ooh ouch!`,\n ),\n );\n\n t.strictEqual(res.increment, 'major');\n t.strictEqual(res.isBreaking, true);\n t.strictEqual(res.header.type, 'fix');\n t.strictEqual(res.header.scope, null);\n t.strictEqual(res.header.subject, 'bar qux');\n t.strictEqual(res.body, 'BREAKING CHANGE: ooh ouch!');\n}","title":"should increment plugin consider `major` when find `BREAKING CHANGE: ` label"},"should add mentions plugin and `mentions: Array` property":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":6,"str":"(t) => {\n const [res] = applyPlugins(mappers.mentions, parse('fix: bar @qux zaz'));\n\n t.deepStrictEqual(res.header, {\n type: 'fix',\n scope: null,\n subject: 'bar @qux zaz',\n });\n t.deepStrictEqual(res.mentions, [\n { handle: '@qux', mention: 'qux', index: 3 },\n ]);\n}","title":"should add mentions plugin and `mentions: Array` property"},"should add both mentions and increment plugins and respective props to Commit object":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":7,"str":"(t) => {\n const commits = parse(\n 'chore(ci): yeah @bar & @qux zaz\\n\\nBREAKING CHANGE: oh yeah',\n );\n const [res] = applyPlugins(plugins, commits);\n\n t.deepStrictEqual(res.mentions, [\n { handle: '@bar', mention: 'bar', index: 4 },\n { handle: '@qux', mention: 'qux', index: 11 },\n ]);\n t.strictEqual(res.isBreaking, true);\n t.strictEqual(res.increment, 'major');\n t.strictEqual(res.header.type, 'chore');\n t.strictEqual(res.header.scope, 'ci');\n t.strictEqual(res.header.subject, 'yeah @bar & @qux zaz');\n t.strictEqual(res.body, 'BREAKING CHANGE: oh yeah');\n}","title":"should add both mentions and increment plugins and respective props to Commit object"}} \ No newline at end of file +{"index: basic":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":1,"str":"(t) => {\n t.strictEqual(typeof applyPlugins, 'function');\n t.strictEqual(typeof mappers, 'object');\n t.strictEqual(typeof mappers.mentions, 'function');\n t.strictEqual(typeof mappers.increment, 'function');\n t.strictEqual(Array.isArray(plugins), true);\n t.strictEqual(plugins.length, 2);\n}","title":"index: basic"},"should apply increment plugin add `increment: patch` property to Commit objects":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":2,"str":"(t) => {\n const commitMsg = dedent`fix(fox): bar qux\n\n resolves #123\n closes #1111\n\n Awesome\n Signed-off-by: Bar Qux`;\n\n const commitObj = {\n header: { type: 'fix', scope: 'fox', subject: 'bar qux' },\n body: 'resolves #123\\ncloses #1111',\n footer: 'Awesome\\nSigned-off-by: Bar Qux',\n increment: 'patch',\n isBreaking: false,\n };\n\n const [commit] = applyPlugins(mappers.increment, parse(commitMsg));\n\n t.deepStrictEqual(commit, commitObj);\n}","title":"should apply increment plugin add `increment: patch` property to Commit objects"},"should apply increment plugin add `increment: minor` property to Commit objects":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":3,"str":"(t) => {\n const [commit] = applyPlugins(mappers.increment, parse('feat(bar): bar qux'));\n\n t.deepStrictEqual(commit.increment, 'minor');\n t.deepStrictEqual(commit.isBreaking, false);\n}","title":"should apply increment plugin add `increment: minor` property to Commit objects"},"should apply increment plugin add `increment: major` property to Commit objects":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":4,"str":"(t) => {\n const [commit] = applyPlugins(\n mappers.increment,\n parse('major(bar): bar qux'),\n );\n\n t.deepStrictEqual(commit.increment, 'major');\n t.deepStrictEqual(commit.isBreaking, true);\n}","title":"should apply increment plugin add `increment: major` property to Commit objects"},"should increment plugin consider `major` when find `BREAKING CHANGE: ` label":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":5,"str":"(t) => {\n const [res] = applyPlugins(\n mappers.increment,\n parse(\n dedent`fix: bar qux\n\n BREAKING CHANGE: ooh ouch!`,\n ),\n );\n\n t.strictEqual(res.increment, 'major');\n t.strictEqual(res.isBreaking, true);\n t.strictEqual(res.header.type, 'fix');\n t.strictEqual(res.header.scope, null);\n t.strictEqual(res.header.subject, 'bar qux');\n t.strictEqual(res.body, 'BREAKING CHANGE: ooh ouch!');\n}","title":"should increment plugin consider `major` when find `BREAKING CHANGE: ` label"},"should add mentions plugin and `mentions: Array` property":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":6,"str":"(t) => {\n const [res] = applyPlugins(mappers.mentions, parse('fix: bar @qux zaz'));\n\n t.deepStrictEqual(res.header, {\n type: 'fix',\n scope: null,\n subject: 'bar @qux zaz',\n });\n t.deepStrictEqual(res.mentions, [\n { handle: '@qux', mention: 'qux', index: 3 },\n ]);\n}","title":"should add mentions plugin and `mentions: Array` property"},"should add both mentions and increment plugins and respective props to Commit object":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":7,"str":"(t) => {\n const commits = parse(\n 'chore(ci): yeah @bar & @qux zaz\\n\\nBREAKING CHANGE: oh yeah',\n );\n const [res] = applyPlugins(plugins, commits);\n\n t.deepStrictEqual(res.mentions, [\n { handle: '@bar', mention: 'bar', index: 4 },\n { handle: '@qux', mention: 'qux', index: 11 },\n ]);\n t.strictEqual(res.isBreaking, true);\n t.strictEqual(res.increment, 'major');\n t.strictEqual(res.header.type, 'chore');\n t.strictEqual(res.header.scope, 'ci');\n t.strictEqual(res.header.subject, 'yeah @bar & @qux zaz');\n t.strictEqual(res.body, 'BREAKING CHANGE: oh yeah');\n}","title":"should add both mentions and increment plugins and respective props to Commit object"},"should result.increment be false if no bump needed":{"skip":false,"todo":false,"run":false,"isPending":false,"isRejected":false,"isFulfilled":true,"id":8,"str":"(t) => {\n const [result] = applyPlugins(mappers.increment, parse('chore(zz): foo bar'));\n\n t.strictEqual(result.increment, false);\n t.strictEqual(result.isBreaking, false);\n t.strictEqual(result.header.type, 'chore');\n t.strictEqual(result.header.scope, 'zz');\n t.strictEqual(result.header.subject, 'foo bar');\n}","title":"should result.increment be false if no bump needed"}} \ No newline at end of file From 6a53d241f0d219ae95298f5bc5cb5b989e37913b Mon Sep 17 00:00:00 2001 From: Charlike Mike Reagent Date: Mon, 12 Nov 2018 00:59:15 +0200 Subject: [PATCH 20/21] chore: publish rc11 Signed-off-by: Charlike Mike Reagent --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 8c13fc7..2e83c6e 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "main": "index.js", "module": "src/index.js", "typings": "src/index.d.ts", - "version": "3.0.0-next.rc10", + "version": "3.0.0-next.rc11", "repository": "tunnckoCoreLabs/parse-commit-message", "homepage": "https://github.com/tunnckoCoreLabs/parse-commit-message", "author": "Charlike Mike Reagent (https://tunnckocore.com)", @@ -82,4 +82,4 @@ "recommended-bump" ] } -} \ No newline at end of file +} From b3b4560a4d100cc2dd409c2a80f08be2f561bfb9 Mon Sep 17 00:00:00 2001 From: Charlike Mike Reagent Date: Mon, 12 Nov 2018 01:00:02 +0200 Subject: [PATCH 21/21] chore: prepare for automatic release on master Signed-off-by: Charlike Mike Reagent --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 2e83c6e..01d934e 100644 --- a/package.json +++ b/package.json @@ -33,13 +33,13 @@ "main": "index.js", "module": "src/index.js", "typings": "src/index.d.ts", - "version": "3.0.0-next.rc11", + "version": "3.0.0", "repository": "tunnckoCoreLabs/parse-commit-message", "homepage": "https://github.com/tunnckoCoreLabs/parse-commit-message", "author": "Charlike Mike Reagent (https://tunnckocore.com)", "publishConfig": { "access": "public", - "tag": "next" + "tag": "latest" }, "renovate": { "extends": "tunnckocore"