├── .eslintignore
├── src
├── lgtm
│ ├── config.js
│ ├── validator_builder.js
│ ├── utils.js
│ ├── helpers
│ │ └── core.js
│ ├── validation.js
│ └── object_validator.js
└── lgtm.js
├── .npmrc
├── test
├── lgtm.js
├── mocha.opts
├── .eslintrc
├── support
│ └── resolve.js
├── regressions
│ ├── 17_required_message_test.js
│ └── 08_duplicate_errors_test.js
├── helpers
│ ├── registration_test.js
│ └── core_test.js
├── helpers_test.js
├── object_validator_test.js
├── validator_test.js
└── validates_test.js
├── .gitignore
├── .babelrc
├── docs
├── Squareup-API-Documentation.md
├── API Reference.md
├── Custom Helpers.md
├── ObjectValidator.md
└── ValidatorBuilder.md
├── .eslintrc
├── README.md
├── LICENSE
├── CHANGELOG.md
├── .github
└── workflows
│ └── ci.yml
├── package.json
├── script
└── build
└── yarn.lock
/.eslintignore:
--------------------------------------------------------------------------------
1 | dist
--------------------------------------------------------------------------------
/src/lgtm/config.js:
--------------------------------------------------------------------------------
1 | export default {};
2 |
--------------------------------------------------------------------------------
/.npmrc:
--------------------------------------------------------------------------------
1 | registry = "https://registry.yarnpkg.com/"
--------------------------------------------------------------------------------
/test/lgtm.js:
--------------------------------------------------------------------------------
1 | export * from '../src/lgtm';
2 |
--------------------------------------------------------------------------------
/test/mocha.opts:
--------------------------------------------------------------------------------
1 | --recursive --require @babel/register test
2 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | lib
2 | node_modules
3 | *.map
4 | dist
5 | *.log
6 |
--------------------------------------------------------------------------------
/test/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../.eslintrc",
3 | "env": {
4 | "mocha": true,
5 | "node": true
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/test/support/resolve.js:
--------------------------------------------------------------------------------
1 | export default function resolve(value) {
2 | return new Promise(accept => accept(value));
3 | }
4 |
--------------------------------------------------------------------------------
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["@babel/env"],
3 | "plugins": [
4 | "@babel/plugin-proposal-class-properties"
5 | ]
6 | }
7 |
--------------------------------------------------------------------------------
/docs/Squareup-API-Documentation.md:
--------------------------------------------------------------------------------
1 | Please Visit our new API Documentation located on the link below
2 |
3 | [API Documentation](https://squareup.com)
--------------------------------------------------------------------------------
/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "extends": ["eslint:recommended", "prettier"],
3 | "plugins": [
4 | "prettier"
5 | ],
6 | "env": {
7 | "es6": true
8 | },
9 | "parser": "babel-eslint",
10 | "parserOptions": {
11 | "sourceType": "module"
12 | },
13 | "rules": {
14 | "prettier/prettier": ["error", {
15 | "singleQuote": true
16 | }]
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/test/regressions/17_required_message_test.js:
--------------------------------------------------------------------------------
1 | import { validator } from '../lgtm';
2 | import { throws } from 'assert';
3 |
4 | describe('#17 | Ensure `required` calls without a message fail', () => {
5 | it('throws when calling `required` without a message', () => {
6 | throws(() => {
7 | validator()
8 | .validates('password')
9 | .required()
10 | .build();
11 | }, /expected a message but got: undefined/);
12 | });
13 | });
14 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # LGTM
2 |
3 | [](https://badge.fury.io/js/lgtm)
4 | 
5 |
6 | LGTM is a simple JavaScript library for validating objects and collecting error
7 | messages. It leaves the display, behavior, and error messages in your hands,
8 | focusing on letting you describe your validations cleanly and concisely for
9 | whatever environment you're using.
10 |
11 | For examples, installation, setup and more [see the wiki](https://github.com/square/lgtm/wiki).
12 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright 2013 Square Inc.
2 |
3 | Licensed under the Apache License, Version 2.0 (the "License");
4 | you may not use this file except in compliance with the License.
5 | You may obtain a copy of the License at
6 |
7 | http://www.apache.org/licenses/LICENSE-2.0
8 |
9 | Unless required by applicable law or agreed to in writing, software
10 | distributed under the License is distributed on an "AS IS" BASIS,
11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | See the License for the specific language governing permissions and
13 | limitations under the License.
14 |
--------------------------------------------------------------------------------
/test/helpers/registration_test.js:
--------------------------------------------------------------------------------
1 | import { helpers as validations, validator } from '../lgtm';
2 | import { notStrictEqual, strictEqual } from 'assert';
3 |
4 | describe('helpers.(un)register', () => {
5 | it('can add and remove a helper from the builder', () => {
6 | let builder = validator();
7 | strictEqual(
8 | builder.isEven,
9 | undefined,
10 | 'precondition: helper is not there yet'
11 | );
12 |
13 | validations.register('isEven', function() {
14 | this.using(value => value % 2 === 0);
15 | });
16 |
17 | notStrictEqual(builder.isEven, undefined, 'helper is added to the builder');
18 |
19 | validations.unregister('isEven');
20 | strictEqual(
21 | builder.isEven,
22 | undefined,
23 | 'postcondition: helper is removed after unregister'
24 | );
25 | });
26 | });
27 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | ## Changelog
2 |
3 | ### v0.3.2 January 29th, 2014
4 |
5 | * [FEATURE] Add .and() as a DSL alias for .when() for more readable chaining. (906a1f0)
6 |
7 | ### v0.3.1 January 29th, 2014
8 |
9 | * [FIX] Ensure conditions only apply to .using() calls made later. (7411233)
10 |
11 | ### v0.3.0 January 28th, 2014
12 |
13 | * [FEATURE] Allow calling `ValidatorBuilder#when()` multiple times per `#validates()` call. (02a6a6b)
14 |
15 | ### v0.2.0 January 7th, 2014
16 |
17 | * Update [RSVP](https://github.com/tildeio/rsvp.js) to 3.0.3. (58b1b64)
18 |
19 | ### v0.1.0 October 23, 2013
20 |
21 | * [FIX] Actually make lgtm.js omit RSVP. (a717792)
22 |
23 | ### v0.0.2 October 22, 2013
24 |
25 | * [FIX] Do parameter checking in using() and update bundled RSVP. (006ece8)
26 |
27 | ### v0.0.1 August 24, 2013
28 |
29 | * Initial release. (c967aca)
30 |
--------------------------------------------------------------------------------
/.github/workflows/ci.yml:
--------------------------------------------------------------------------------
1 | # This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
3 |
4 | name: CI
5 |
6 | on:
7 | push:
8 | branches: [ master ]
9 | pull_request:
10 | branches: [ master ]
11 |
12 | jobs:
13 | build:
14 |
15 | runs-on: ubuntu-latest
16 |
17 | strategy:
18 | matrix:
19 | node-version: [6.x, 8.x, 10.x, 12.x, 14.x]
20 |
21 | steps:
22 | - uses: actions/checkout@v2
23 | - name: Use Node.js ${{ matrix.node-version }}
24 | uses: actions/setup-node@v1
25 | with:
26 | node-version: ${{ matrix.node-version }}
27 | - run: yarn install --frozen-lockfile --non-interactive
28 | - run: yarn lint
29 | - run: yarn test
30 |
--------------------------------------------------------------------------------
/test/regressions/08_duplicate_errors_test.js:
--------------------------------------------------------------------------------
1 | import { validator } from '../lgtm';
2 | import { deepEqual, ok } from 'assert';
3 |
4 | describe('#8 | Dependent validations cause duplicate errors', () => {
5 | it('does not duplicate "Passwords must match"', () => {
6 | let v = validator()
7 | .validates('password')
8 | .required('Please input a password')
9 | .validates('passwordConfirm')
10 | .when('password', password => password !== undefined)
11 | .required('Please confirm your password')
12 | .using(
13 | (confirm, attr, form) => confirm === form.password,
14 | 'Passwords must match'
15 | )
16 | .build();
17 |
18 | let form = {
19 | password: 'asdf',
20 | passwordConfirm: undefined
21 | };
22 |
23 | return v.validate(form).then(result => {
24 | ok(!result.valid, 'it should not be valid');
25 | deepEqual(Object.keys(result.errors).sort(), [
26 | 'password',
27 | 'passwordConfirm'
28 | ]);
29 | deepEqual(result.errors['password'], []);
30 | deepEqual(result.errors['passwordConfirm'], [
31 | 'Please confirm your password',
32 | 'Passwords must match'
33 | ]);
34 | });
35 | });
36 | });
37 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "lgtm",
3 | "version": "0.0.0-development",
4 | "description": "Simple JavaScript validation for objects.",
5 | "main": "dist/lgtm.js",
6 | "jsnext:main": "dist/lgtm.mjs",
7 | "scripts": {
8 | "lint": "eslint .",
9 | "build": "rm -rf dist && script/build",
10 | "pretest": "npm run lint",
11 | "test": "mocha",
12 | "prepublish": "npm test && npm run build"
13 | },
14 | "repository": {
15 | "type": "git",
16 | "url": "https://github.com/square/lgtm.git"
17 | },
18 | "keywords": [
19 | "validation"
20 | ],
21 | "author": "Square, Inc.",
22 | "license": "Apache-2.0",
23 | "devDependencies": {
24 | "@babel/core": "^7.10.2",
25 | "@babel/plugin-external-helpers": "^7.10.1",
26 | "@babel/plugin-proposal-class-properties": "^7.10.1",
27 | "@babel/preset-env": "^7.10.2",
28 | "@babel/register": "^7.10.1",
29 | "babel-eslint": "^10.1.0",
30 | "eslint": "^5",
31 | "eslint-config-prettier": "^6.11.0",
32 | "eslint-plugin-prettier": "^3.1.3",
33 | "file-size": "^1.0.0",
34 | "gzip-size": "^5.1.1",
35 | "mocha": "^6",
36 | "prettier": "^1.19.1",
37 | "rollup": "^1",
38 | "rollup-plugin-babel": "^4.4.0",
39 | "uglify-js": "^3.9.4"
40 | },
41 | "files": [
42 | "dist"
43 | ],
44 | "publishConfig": {
45 | "registry": "https://registry.npmjs.org/"
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/src/lgtm/validator_builder.js:
--------------------------------------------------------------------------------
1 | import ObjectValidator from './object_validator';
2 | import Validation from './validation';
3 |
4 | export default class ValidatorBuilder {
5 | _validations = null;
6 | _validation = null;
7 |
8 | constructor(...validations) {
9 | this._validations = validations;
10 | }
11 |
12 | validates(attr) {
13 | this._validation = new Validation(attr);
14 | this._validations.push(this._validation);
15 | return this;
16 | }
17 |
18 | when(/* ...dependencies, condition */) {
19 | this._validation.when(...arguments);
20 | return this;
21 | }
22 |
23 | and(/* ...dependencies, condition */) {
24 | this._validation.and(...arguments);
25 | return this;
26 | }
27 |
28 | using(/* ...dependencies, predicate, message */) {
29 | this._validation.using(...arguments);
30 | return this;
31 | }
32 |
33 | build() {
34 | return new ObjectValidator(...this._validations);
35 | }
36 |
37 | static registerHelper(name, fn) {
38 | this.prototype[name] = function() {
39 | fn.apply(this._validation, arguments);
40 | return this;
41 | };
42 |
43 | Validation.prototype[name] = function() {
44 | fn.apply(this, arguments);
45 | return this;
46 | };
47 |
48 | return null;
49 | }
50 |
51 | static unregisterHelper(name) {
52 | delete this.prototype[name];
53 | delete Validation.prototype[name];
54 | return null;
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/script/build:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | 'use strict';
4 |
5 | let rollup = require('rollup').rollup;
6 | let babel = require('rollup-plugin-babel');
7 | let filesize = require('file-size');
8 | let gzipSize = require('gzip-size').sync;
9 | let readFileSync = require('fs').readFileSync;
10 | let minify = require('uglify-js').minify;
11 |
12 | rollup({
13 | input: 'src/lgtm.js',
14 | plugins: [
15 | babel({
16 | babelrc: false,
17 | presets: [
18 | [
19 | '@babel/preset-env',
20 | {
21 | targets: ['last 2 versions', 'ie 11'],
22 | modules: false
23 | }
24 | ]
25 | ],
26 | plugins: ['@babel/plugin-proposal-class-properties']
27 | })
28 | ]
29 | })
30 | .then(bundle => {
31 | return Promise.all([
32 | bundle.write({
33 | file: 'dist/lgtm.js',
34 | format: 'umd',
35 | name: 'LGTM',
36 | sourcemap: true
37 | }),
38 | bundle.write({
39 | file: 'dist/lgtm.mjs',
40 | format: 'es',
41 | sourcemap: true
42 | })
43 | ]);
44 | })
45 | .then(() => {
46 | printFileInfo('dist/lgtm.js');
47 | })
48 | .catch(err => console.error(err.stack));
49 |
50 | function printFileInfo(path) {
51 | let code = readFileSync(path);
52 | let minified = minify(code.toString('utf8'));
53 |
54 | console.log(
55 | `→ ${path} (raw: ${filesize(code.length).human('si')} / min: ${filesize(
56 | minified.code.length
57 | ).human('si')} ` +
58 | `/ min+gzip: ${filesize(gzipSize(minified.code)).human('si')})`
59 | );
60 | }
61 |
--------------------------------------------------------------------------------
/src/lgtm/utils.js:
--------------------------------------------------------------------------------
1 | import config from './config';
2 |
3 | /**
4 | * Iteration
5 | */
6 |
7 | export function forEach(iterable, iterator) {
8 | if (typeof iterable.forEach === 'function') {
9 | iterable.forEach(iterator);
10 | } else if ({}.toString.call(iterable) === '[object Object]') {
11 | let hasOwnProp = {}.hasOwnProperty;
12 | for (let key in iterable) {
13 | if (hasOwnProp.call(iterable, key)) {
14 | iterator(iterable[key], key);
15 | }
16 | }
17 | } else {
18 | for (let i = 0; i < iterable.length; i++) {
19 | iterator(iterable[i], i);
20 | }
21 | }
22 | }
23 |
24 | export function keys(object) {
25 | return Object.getOwnPropertyNames(object);
26 | }
27 |
28 | /**
29 | * Property access
30 | */
31 |
32 | export function get(object, property) {
33 | if (object === null || object === undefined) {
34 | return;
35 | } else if (typeof object.get === 'function') {
36 | return object.get(property);
37 | } else {
38 | return object[property];
39 | }
40 | }
41 |
42 | export function getProperties(object, properties) {
43 | let { get } = config;
44 | return properties.map(prop => get(object, prop));
45 | }
46 |
47 | /**
48 | * Array manipulation
49 | */
50 |
51 | export function contains(array, object) {
52 | return array.indexOf(object) > -1;
53 | }
54 |
55 | export function uniq(array) {
56 | let result = [];
57 |
58 | for (let i = 0; i < array.length; i++) {
59 | let item = array[i];
60 | if (!contains(result, item)) {
61 | result.push(item);
62 | }
63 | }
64 |
65 | return result;
66 | }
67 |
68 | /**
69 | * Promises
70 | */
71 |
72 | export function resolve(thenable) {
73 | let { Promise } = config;
74 | return new Promise(accept => accept(thenable));
75 | }
76 |
77 | export function all(thenables) {
78 | let { Promise } = config;
79 | return Promise.all(thenables);
80 | }
81 |
--------------------------------------------------------------------------------
/test/helpers_test.js:
--------------------------------------------------------------------------------
1 | import { helpers, validator, validates } from './lgtm';
2 | import { throws } from 'assert';
3 |
4 | describe('LGTM.helpers.(un)register', () => {
5 | afterEach(() => {
6 | helpers.unregister('isBob');
7 | });
8 |
9 | it('allow registering a custom helper for use in the builder DSL', () => {
10 | helpers.register('isBob', function(message) {
11 | this.using(value => value === 'Bob', message);
12 | });
13 |
14 | // this would throw if the above didn't work
15 | validator()
16 | .validates('name')
17 | .isBob('You must be Bob.')
18 | .build();
19 | });
20 |
21 | it('allows using the custom helper with a validates object', () => {
22 | helpers.register('isBob', function(message) {
23 | this.using(value => value === 'Bob', message);
24 | });
25 |
26 | // this would throw if the above didn't work
27 | validates('name').isBob('You must be Bob.');
28 | });
29 |
30 | it('fails when delegating to using() without a message', () => {
31 | helpers.register('isBob', function(/*message*/) {
32 | // eslint-disable-line no-unused-vars
33 | this.using(value => value === 'Bob' /* note I don't pass message here */);
34 | });
35 |
36 | throws(() => {
37 | validator()
38 | .validates('name')
39 | .isBob('You must be Bob.')
40 | .build();
41 | }, 'using() should have thrown an exception');
42 | });
43 |
44 | it('unregistering makes the helper unavailable to the builder DSL', () => {
45 | helpers.register('isBob', function(message) {
46 | this.using(value => value === 'Bob', message);
47 | });
48 |
49 | helpers.unregister('isBob');
50 |
51 | throws(() => {
52 | validator()
53 | .validates('name')
54 | .isBob('You must be Bob.')
55 | .build();
56 | }, 'unregister() makes the helper unavailable');
57 | });
58 | });
59 |
--------------------------------------------------------------------------------
/docs/API Reference.md:
--------------------------------------------------------------------------------
1 | > [Wiki](Home) ▸ **API Reference**
2 |
3 | Everything in this library is contained in a module, which by default is
4 | exported as `LGTM` in the browser. The documentation will assume that the
5 | module is exposed in your code as `LGTM`, whether using globals, AMD, or
6 | CommonJS.
7 |
8 | ### [ValidatorBuilder](ValidatorBuilder)
9 |
10 | This is the main API you'll want to use. It is the API used in all the
11 | examples.
12 |
13 | * [LGTM.validator](ValidatorBuilder#wiki-validator) - factory method for creating a `ValidatorBuilder`
14 | * [builder.validates](ValidatorBuilder#wiki-validates) - start validations for an attribute
15 | * [builder.using](ValidatorBuilder#wiki-using) - add a validation for the current attribute
16 | * [builder.when](ValidatorBuilder#wiki-when) - make some validations conditional
17 | * [builder.build](ValidatorBuilder#wiki-build) - build an [`ObjectValidator`](ObjectValidator)
18 |
19 | #### [Core Helpers](ValidatorBuilder#core)
20 |
21 | * [core.required](ValidatorBuilder#wiki-core_required) - validate that a value is present
22 | * [core.optional](ValidatorBuilder#wiki-core_optional) - only validate if a value is present
23 | * [core.email](ValidatorBuilder#wiki-core_email) - validate that the value is an email
24 | * [core.minLength](ValidatorBuilder#wiki-core_minLength) - validate that the value has a minimum length
25 | * [core.maxLength](ValidatorBuilder#wiki-core_maxLength) - validate that the value has a maximum length
26 |
27 |
28 | ### [ObjectValidator](ObjectValidator)
29 |
30 | This is the core API underlying `ValidatorBuilder`.
31 |
32 | * [validator.validate](ObjectValidator#wiki-validate) - performs validations against a given object
33 | * [validator.attributes](ObjectValidator#wiki-attributes) - lists all the attributes directly or indirectly used in validation
34 | * [validator.addValidation](ObjectValidator#wiki-addValidation) - registers a validation for a given attribute `[internal]`
35 | * [validator.addDependentsFor](ObjectValidator#wiki-addDependentsFor) - registers dependencies between attributes `[internal]`
36 |
--------------------------------------------------------------------------------
/src/lgtm/helpers/core.js:
--------------------------------------------------------------------------------
1 | import ValidatorBuilder from '../validator_builder';
2 |
3 | export function present(value) {
4 | if (typeof value === 'string') {
5 | value = value.trim();
6 | }
7 |
8 | return value !== '' && value !== null && value !== undefined;
9 | }
10 |
11 | const STRICT_CHARS = /^[\x20-\x7F]*$/;
12 | // http://stackoverflow.com/a/46181/11236
13 | const EMAIL = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
14 |
15 | // http://www.rfc-editor.org/errata_search.php?rfc=3696&eid=1690
16 | const MAX_EMAIL_LENGTH = 254;
17 |
18 | export function checkEmail(options = {}) {
19 | return function(value) {
20 | if (typeof value === 'string') {
21 | value = value.trim();
22 | }
23 |
24 | if (options.strictCharacters) {
25 | if (!STRICT_CHARS.test(value)) {
26 | return false;
27 | }
28 | }
29 |
30 | return (
31 | value !== undefined &&
32 | value !== null &&
33 | value.length <= MAX_EMAIL_LENGTH &&
34 | EMAIL.test(value)
35 | );
36 | };
37 | }
38 |
39 | export function checkMinLength(minLength) {
40 | if (minLength === null || minLength === undefined) {
41 | throw new Error('must specify a min length');
42 | }
43 |
44 | return function(value) {
45 | if (value !== null && value !== undefined) {
46 | return value.length >= minLength;
47 | } else {
48 | return false;
49 | }
50 | };
51 | }
52 |
53 | export function checkMaxLength(maxLength) {
54 | if (maxLength === null || maxLength === undefined) {
55 | throw new Error('must specify a max length');
56 | }
57 |
58 | return function(value) {
59 | if (value !== null && value !== undefined) {
60 | return value.length <= maxLength;
61 | } else {
62 | return false;
63 | }
64 | };
65 | }
66 |
67 | export function register() {
68 | ValidatorBuilder.registerHelper('required', function(message) {
69 | this.using(present, message);
70 | });
71 |
72 | ValidatorBuilder.registerHelper('optional', function() {
73 | this.when(present);
74 | });
75 |
76 | ValidatorBuilder.registerHelper('email', function(message, options) {
77 | this.using(checkEmail(options), message);
78 | });
79 |
80 | ValidatorBuilder.registerHelper('minLength', function(minLength, message) {
81 | this.using(checkMinLength(minLength), message);
82 | });
83 |
84 | ValidatorBuilder.registerHelper('maxLength', function(maxLength, message) {
85 | this.using(checkMaxLength(maxLength), message);
86 | });
87 | }
88 |
--------------------------------------------------------------------------------
/docs/Custom Helpers.md:
--------------------------------------------------------------------------------
1 | > [Wiki](Home) ▸ **Custom Helpers**
2 |
3 | Helpers are named shortcuts to common validations or conditions.
4 |
5 | ### Basic Helpers
6 |
7 | Let's say you want a validation to check that a value is a URL:
8 |
9 | ```js
10 | LGTM.helpers.register('url', function(message) {
11 | this.using(function(value) {
12 | return /^https?:/.test(value);
13 | }, message);
14 | });
15 | ```
16 |
17 | Now you can use your custom helper as a validation when building a validator:
18 |
19 | ```js
20 | LGTM.validator()
21 | .validates('homepage')
22 | .url("Please enter a valid URL.")
23 | .build();
24 | ```
25 |
26 | Obviously this validator is a bit naïve, but you can customize it to your
27 | needs.
28 |
29 |
30 | ### Configurable Helpers
31 |
32 | You can take whatever arguments you want in your helper and use them in the
33 | helper function. For example:
34 |
35 | ```js
36 | LGTM.helpers.register('between', function(min, max, message) {
37 | this.using(function(value) {
38 | return min <= value && value <= max;
39 | }, message);
40 | });
41 |
42 | LGTM.validator()
43 | .validates('rating')
44 | .between(1, 5, "Please rate between 1-5.")
45 | .build();
46 | ```
47 |
48 |
49 | ### Overriding Built-in Helpers
50 |
51 | If one of the built-in helpers isn't to your liking you can simply override it:
52 |
53 | ```js
54 | LGTM.validations.register('email', function(message) {
55 | this.using(myAwesomeEmailChecker, message);
56 | });
57 | ```
58 |
59 | ### How it Works
60 |
61 | The basic validation function all validation helpers use is [using()](ValidatorBuilder#wiki-using). You use
62 | `using()` yourself when building your validators for anything a built-in
63 | validation cannot express, which is probably often. You can make validations
64 | conditional by preceding the call to `using()` with a call to [when()](ValidatorBuilder#wiki-when). Doing
65 | so will act as a condition for all subsequent validations for the same
66 | attribute. Let's break down one of the examples from the README:
67 |
68 | ```js
69 | var validator =
70 | LGTM.validator()
71 | .validates('firstName') // set current attribute = firstName
72 | .required("You must enter a first name.") // add validation for firstName
73 | .validates('lastName') // set current attribute = lastName
74 | .when(=> lastNameRequired) // conditionally run subsequent validations
75 | .required("You must enter a last name.") // add (conditional) validation for lastName
76 | .validates('age') // set current attribute = age
77 | .optional() // conditionally run subsequent validations
78 | .using((age) => age > 18, "You must be over 18.") // add (conditional) validation for age
79 | .build(); // returns an object with validate() method
80 | ```
81 |
--------------------------------------------------------------------------------
/docs/ObjectValidator.md:
--------------------------------------------------------------------------------
1 | > [Wiki](Home) ▸ **API Reference** ▸ **ObjectValidator**
2 |
3 | # validator.validate(object, [attrs...], [callback(err, result)])
4 |
5 | Runs validations for the given `attrs` on `object` and any attributes that
6 | depend on them. By default all attributes are validated. When validation is
7 | complete `callback` will be called with a validation result object with two
8 | keys: "valid" and "errors":
9 |
10 | * `valid` - will be true if no validations failed, false otherwise
11 | * `errors` - is an object with keys for all validated attributes whose values are arrays of error messages, empty for all attributes that passed validation
12 |
13 |
14 | If an exception occurred while validating then the `err` argument to `callback`
15 | will contain the thrown exception. Otherwise it will be null. If no `callback`
16 | is given a promise will be returned which will resolve to the validation result
17 | shown above or, if an exception occurred, will be rejected with the thrown
18 | exception.
19 |
20 | # validator.attributes()
21 |
22 | Returns an array of attribute names used directly or indirectly by this
23 | validator. A directly used attribute is one that has at least one validation
24 | against it. An indirectly used attribute is one that does not have any
25 | validations run against it but another attribute validation depends on its
26 | value.
27 |
28 | ```js
29 | LGTM.validator()
30 | .validates('street1')
31 | .when('mobile', (mobile) => mobile)
32 | .required("Enter a street address!")
33 | .build().attributes();
34 | // => ["street1", "mobile"]
35 | ```
36 |
37 | This method is primarily provided to allow better integration with JavaScript
38 | frameworks supporting observers and binding.
39 |
40 | # validator.addValidation(attr, fn(value, attr, object), message)
41 |
42 | *This method is internal.*
43 |
44 | Registers a validation for `attr` with a validation function and corresponding
45 | error message. `fn` must be a function that returns either true or false or a
46 | promise that resolves to true or false. This function receives as arguments the
47 | current value of the attribute on the object, the attribute name being
48 | validated, and the object being validated (i.e. the object passed to
49 | [validator.validate()](ObjectValidator#wiki-validate)).
50 |
51 | # validator.addDependentsFor(parent, [dependent, …])
52 |
53 | *This method is internal.*
54 |
55 | Tells the validator that all the specified dependent attributes should all be
56 | re-validated when the parent attribute is validated. This is useful only in
57 | conjunction with partial validations (i.e. when specific attributes are passed
58 | to [validator.validate()](ObjectValidator#wiki-validate)).
59 |
--------------------------------------------------------------------------------
/src/lgtm/validation.js:
--------------------------------------------------------------------------------
1 | import { getProperties, all } from './utils';
2 |
3 | export default class Validation {
4 | _attr = null;
5 | _conditions = [];
6 | _subvalidations = [];
7 | _dependencies = [];
8 |
9 | constructor(attr) {
10 | this._attr = attr;
11 | }
12 |
13 | when(...dependencies /*, predicate */) {
14 | const predicate = dependencies.pop();
15 |
16 | if (dependencies.length === 0) {
17 | dependencies = [this._attr];
18 | }
19 |
20 | this._conditions.push({
21 | predicate,
22 | dependencies
23 | });
24 |
25 | return this;
26 | }
27 |
28 | and(...args) {
29 | return this.when(...args);
30 | }
31 |
32 | using(...dependencies /*, predicate, message */) {
33 | const message = dependencies.pop();
34 | const predicate = dependencies.pop();
35 |
36 | if (typeof message === 'undefined') {
37 | throw new Error(`expected a message but got: ${message}`);
38 | }
39 |
40 | if (typeof message === 'function' && typeof predicate === 'undefined') {
41 | throw new Error(
42 | 'missing expected argument `message` after predicate function'
43 | );
44 | }
45 |
46 | if (dependencies.length === 0) {
47 | dependencies = [this._attr];
48 | }
49 |
50 | function validation(value, attr, object) {
51 | const properties = getProperties(object, dependencies);
52 | return predicate(...properties, attr, object);
53 | }
54 |
55 | const conditions = this._conditions.slice();
56 |
57 | function validationWithConditions(value, attr, object) {
58 | return all(
59 | conditions.map(({ predicate, dependencies }) => {
60 | const properties = getProperties(object, dependencies);
61 | return predicate(...properties, attr, object);
62 | })
63 | ).then(results => {
64 | for (let i = 0; i < results.length; i += 1) {
65 | // a condition resolved to a falsy value; return as valid
66 | if (!results[i]) {
67 | return true;
68 | }
69 | }
70 |
71 | // all conditions resolved to truthy values; continue with validation
72 | return validation(value, attr, object);
73 | });
74 | }
75 |
76 | this._subvalidations.push({
77 | dependencies,
78 | validation: conditions ? validationWithConditions : validation,
79 | message
80 | });
81 |
82 | return this;
83 | }
84 |
85 | addToValidator(validator) {
86 | this.dependencies().forEach(dependency => {
87 | validator.addDependentsFor(dependency, this._attr);
88 | });
89 |
90 | this._subvalidations.forEach(subvalidation => {
91 | validator.addValidation(
92 | this._attr,
93 | subvalidation.validation,
94 | subvalidation.message
95 | );
96 | });
97 | }
98 |
99 | dependencies() {
100 | const dependencies = [];
101 |
102 | this._conditions.forEach(condition => {
103 | condition.dependencies.forEach(dependency => {
104 | dependencies.push(dependency);
105 | });
106 | });
107 |
108 | this._subvalidations.forEach(subvalidation => {
109 | subvalidation.dependencies.forEach(dependency => {
110 | dependencies.push(dependency);
111 | });
112 | });
113 |
114 | return dependencies;
115 | }
116 | }
117 |
--------------------------------------------------------------------------------
/test/helpers/core_test.js:
--------------------------------------------------------------------------------
1 | import {
2 | checkEmail,
3 | checkMaxLength,
4 | checkMinLength,
5 | present
6 | } from '../../src/lgtm/helpers/core';
7 | import { ok, throws } from 'assert';
8 |
9 | describe('helpers.core', () => {
10 | it('present', () => {
11 | ok(present(0), 'returns true for numbers');
12 | ok(present([0]), 'returns true for arrays');
13 | ok(present({}), 'returns true for objects');
14 | ok(present('HEY!'), 'returns true for non-empty strings');
15 | ok(present(new Date()), 'returns true for dates');
16 | ok(!present(''), 'returns false for empty strings');
17 | ok(!present(' '), 'returns false for whitespace strings');
18 | ok(!present(null), 'returns false for null');
19 | ok(!present(undefined), 'returns false for undefined');
20 | });
21 |
22 | it('checkEmail', () => {
23 | ok(checkEmail()('test@squareup.com'), 'returns true for correct email');
24 | ok(!checkEmail()('paypal'), 'returns false for missing @');
25 | ok(
26 | !checkEmail()('anything@paypal'),
27 | 'returns false for missing . in domain part'
28 | );
29 | ok(!checkEmail()('!$23@screwedup'), 'returns false for invalid characters');
30 | ok(!checkEmail()(''), 'returns false for empty string');
31 | ok(
32 | checkEmail()('mañana@squareup.com'),
33 | 'returns true for emails with characters in extended ASCII range'
34 | );
35 | ok(
36 | !checkEmail({ strictCharacters: true })('mañana@squareup.com'),
37 | 'returns false for emails with characters in extended ASCII range when strictCharacters == true'
38 | );
39 | ok(
40 | checkEmail()('github' + '+'.repeat(235) + '@squareup.com'),
41 | 'returns true for email with length of 254 characters'
42 | );
43 | ok(
44 | checkEmail()('github' + '+'.repeat(235) + '@squareup.com'),
45 | 'returns true for email with length of 254 characters'
46 | );
47 | ok(
48 | !checkEmail()('github' + '+'.repeat(236) + '@squareup.com'),
49 | 'returns false for email with length greater than 254 characters'
50 | );
51 | });
52 |
53 | it('checkMinLength', () => {
54 | ok(
55 | checkMinLength(5)('12345'),
56 | 'returns true for 5-characters long strength calling with 5'
57 | );
58 | ok(
59 | !checkMinLength(6)('12345'),
60 | 'returns false for 5-characters long strength calling with 6'
61 | );
62 | ok(!checkMinLength(5)(''), 'returns false for empty string');
63 | ok(!checkMinLength(5)(undefined), 'returns false for undefined');
64 | ok(!checkMinLength(5)(null), 'returns false for null');
65 |
66 | throws(
67 | () => checkMinLength()('something'),
68 | 'not specifying a min length throws an error'
69 | );
70 | });
71 |
72 | it('checkMaxLength', () => {
73 | ok(
74 | checkMaxLength(5)('12345'),
75 | 'returns true for 5-characters long strength calling with 5'
76 | );
77 | ok(checkMaxLength(5)(''), 'returns true for empty string');
78 | ok(
79 | !checkMaxLength(4)('12345'),
80 | 'returns false for 5-characters long strength calling with 4'
81 | );
82 | ok(!checkMaxLength(5)(undefined), 'returns false for undefined');
83 | ok(!checkMaxLength(5)(null), 'returns false for null');
84 |
85 | throws(
86 | () => checkMaxLength()('something'),
87 | 'not specifying a max length throws an error'
88 | );
89 | });
90 | });
91 |
--------------------------------------------------------------------------------
/src/lgtm.js:
--------------------------------------------------------------------------------
1 | import ObjectValidator from './lgtm/object_validator';
2 | import Validation from './lgtm/validation';
3 | import ValidatorBuilder from './lgtm/validator_builder';
4 | import config from './lgtm/config';
5 | import { get } from './lgtm/utils';
6 | import {
7 | present,
8 | checkEmail,
9 | checkMinLength,
10 | checkMaxLength,
11 | register as core_register
12 | } from './lgtm/helpers/core';
13 |
14 | core_register();
15 |
16 | function validator(...validations) {
17 | return new ValidatorBuilder(...validations);
18 | }
19 |
20 | function validates(attr) {
21 | return new Validation(attr);
22 | }
23 |
24 | function register() {
25 | ValidatorBuilder.registerHelper(...arguments);
26 | }
27 |
28 | function unregister() {
29 | ValidatorBuilder.unregisterHelper(...arguments);
30 | }
31 |
32 | let helpers = {
33 | core: {
34 | present,
35 | checkEmail,
36 | checkMinLength,
37 | checkMaxLength,
38 | register: core_register
39 | },
40 | register,
41 | unregister
42 | };
43 |
44 | function configure(key, value) {
45 | config[key] = value;
46 | }
47 |
48 | configure('defer', () => {
49 | let Promise = config['Promise'];
50 | let resolve;
51 | let reject;
52 | let promise = new Promise((res, rej) => {
53 | resolve = res;
54 | reject = rej;
55 | });
56 |
57 | if (!resolve || !reject) {
58 | throw new Error('Configured promise does not behave as expected');
59 | }
60 |
61 | return { promise, resolve, reject };
62 | });
63 |
64 | function PromiseProxy(callback) {
65 | let Promise = getPromise();
66 | return new Promise(callback);
67 | }
68 |
69 | PromiseProxy.all = (...args) => getPromise().all(...args);
70 |
71 | PromiseProxy.race = (...args) => getPromise().race(...args);
72 |
73 | PromiseProxy.resolve = (...args) => getPromise().resolve(...args);
74 |
75 | PromiseProxy.reject = (...args) => getPromise().reject(...args);
76 |
77 | function getPromise() {
78 | let warn = config['warn'];
79 |
80 | /* global RSVP, require */
81 | if (typeof RSVP !== 'undefined') {
82 | configure('Promise', RSVP.Promise);
83 | warn(
84 | `Implicitly using RSVP.Promise. This will be removed in LGTM 2.0. ` +
85 | `Instead, use 'LGTM.configure("Promise", RSVP.Promise)' to ` +
86 | `continue using RSVP promises.`
87 | );
88 | return RSVP.Promise;
89 | }
90 |
91 | if (typeof require === 'function') {
92 | try {
93 | let { Promise } = require('rsvp');
94 | configure('Promise', Promise);
95 | warn(
96 | `Implicitly using require("rsvp").Promise. This will be removed in LGTM 2.0. ` +
97 | `Instead, use 'LGTM.configure("Promise", require("rsvp").Promise)' to ` +
98 | `continue using RSVP promises.`
99 | );
100 | return Promise;
101 | } catch (err) {
102 | // Ignore errors, just try built-in Promise or fail.
103 | }
104 | }
105 |
106 | if (typeof Promise === 'function') {
107 | configure('Promise', Promise);
108 | return Promise;
109 | }
110 |
111 | throw new Error(
112 | `'Promise' could not be found. Configure LGTM with your promise library using ` +
113 | `e.g. 'LGTM.configure("Promise", RSVP.Promise)'.`
114 | );
115 | }
116 |
117 | /* global console */
118 | configure('Promise', PromiseProxy);
119 | configure('warn', console.warn.bind(console)); // eslint-disable-line no-console
120 | configure('get', (object, property) => {
121 | let warn = config['warn'];
122 |
123 | configure('get', get);
124 | warn(
125 | `Implicitly using 'get' implementation that uses a 'get' method when available. ` +
126 | `This will be removed in LGTM 2.0. Instead, use e.g. 'LGTM.configure("get", Ember.get)' ` +
127 | `if you rely on this behavior.`
128 | );
129 | return get(object, property);
130 | });
131 |
132 | export { configure, validator, validates, helpers, ObjectValidator };
133 |
--------------------------------------------------------------------------------
/src/lgtm/object_validator.js:
--------------------------------------------------------------------------------
1 | import config from './config';
2 | import { all, resolve, contains, keys, uniq } from './utils';
3 |
4 | export default class ObjectValidator {
5 | _validations = {};
6 | _dependencies = {};
7 |
8 | constructor(...validations) {
9 | validations.forEach(validation => validation.addToValidator(this));
10 | }
11 |
12 | addValidation(attr, fn, message) {
13 | let list = this._validations[attr];
14 |
15 | if (!list) {
16 | list = this._validations[attr] = [];
17 | }
18 |
19 | list.push([fn, message]);
20 | }
21 |
22 | // e.g. spouseName (dependentAttribute) depends on maritalStatus (parentAttribute)
23 | addDependentsFor(parentAttribute, ...dependentAttributes) {
24 | let dependentsForParent = this._dependencies[parentAttribute];
25 |
26 | if (!dependentsForParent) {
27 | dependentsForParent = this._dependencies[parentAttribute] = [];
28 | }
29 |
30 | for (let i = 0; i < dependentAttributes.length; i++) {
31 | let attr = dependentAttributes[i];
32 | if (!contains(dependentsForParent, attr)) {
33 | dependentsForParent.push(attr);
34 | }
35 | }
36 | }
37 |
38 | attributes() {
39 | return uniq(keys(this._validations).concat(keys(this._dependencies)));
40 | }
41 |
42 | validate(object, ...attributes) {
43 | let callback = null;
44 |
45 | if (typeof attributes[attributes.length - 1] !== 'string') {
46 | callback = attributes.pop();
47 | }
48 |
49 | if (attributes.length === 0) {
50 | attributes = keys(this._validations);
51 | }
52 |
53 | let validationPromises = [];
54 | let alreadyValidating = attributes.slice();
55 | for (let i = 0; i < attributes.length; i++) {
56 | let attr = attributes[i];
57 | validationPromises = validationPromises.concat(
58 | this._validateAttribute(object, attr, alreadyValidating)
59 | );
60 | }
61 |
62 | let promise = all(validationPromises).then(
63 | results => {
64 | results = this._collectResults(results);
65 | if (callback) {
66 | callback(null, results);
67 | }
68 | return results;
69 | },
70 | err => {
71 | if (callback) {
72 | callback(err);
73 | } else {
74 | throw err;
75 | }
76 | }
77 | );
78 |
79 | if (!callback) {
80 | return promise;
81 | }
82 | }
83 |
84 | _validateAttribute(object, attr, alreadyValidating) {
85 | let value = config.get(object, attr);
86 | let validations = this._validations[attr];
87 | let results = [];
88 |
89 | if (validations) {
90 | validations.forEach(function(pair) {
91 | let fn = pair[0];
92 | let message = pair[1];
93 |
94 | let promise = resolve()
95 | .then(() => fn(value, attr, object))
96 | .then(isValid => [attr, isValid ? null : message]);
97 |
98 | results.push(promise);
99 | });
100 | } else if (contains(this.attributes(), attr)) {
101 | results.push([attr, null]);
102 | }
103 |
104 | let dependents = this._getDependentsFor(attr);
105 | for (let i = 0; i < dependents.length; i++) {
106 | let dependent = dependents[i];
107 | if (alreadyValidating.indexOf(dependent) < 0) {
108 | alreadyValidating.push(dependent);
109 | results = results.concat(
110 | this._validateAttribute(object, dependent, alreadyValidating)
111 | );
112 | }
113 | }
114 |
115 | return results;
116 | }
117 |
118 | _collectResults(results) {
119 | let result = {
120 | valid: true,
121 | errors: {}
122 | };
123 |
124 | for (let i = 0; i < results.length; i++) {
125 | if (!results[i]) {
126 | continue;
127 | }
128 |
129 | let attr = results[i][0];
130 | let message = results[i][1];
131 | let messages = result.errors[attr];
132 |
133 | if (!messages) {
134 | messages = result.errors[attr] = [];
135 | }
136 |
137 | if (message) {
138 | messages.push(message);
139 | result.valid = false;
140 | }
141 | }
142 |
143 | return result;
144 | }
145 |
146 | // e.g. getDependents("maritalStatus") # => ["spouseName"]
147 | _getDependentsFor(parentAttribute) {
148 | return (this._dependencies[parentAttribute] || []).slice();
149 | }
150 | }
151 |
--------------------------------------------------------------------------------
/docs/ValidatorBuilder.md:
--------------------------------------------------------------------------------
1 | > [Wiki](Home) ▸ **API Reference** ▸ **ValidatorBuilder**
2 |
3 | # LGTM.validator()
4 |
5 | Creates a new `ValidatorBuilder` which can be used to build an
6 | [ObjectValidator](ObjectValidator). This object uses the builder pattern and
7 | the method calls are intended to be chained. The result is intended to read
8 | more or less as a sentence -- a description of what the validator will do.
9 |
10 | # builder.validates(attr)
11 |
12 | This method sets the current attribute for subsequent calls to `using()` and
13 | `when()` and **must** be called before calls to either of those methods.
14 |
15 | # builder.using([attr, …], fn(value[, value, …], attr, object), message)
16 |
17 | This method adds a validation to the underlying `ObjectValidator` for the
18 | current attribute wrapped by the current conditions if any exist. This method
19 | may be called multiple times to add multiple validations for the current
20 | attribute. By default `fn` will be passed the value of the attribute to be
21 | validated, the name of the attribute, and the object being validated:
22 |
23 | ```js
24 | LGTM.validator()
25 | .validates('name')
26 | .using(function(value, attr, object) {
27 | // value === person.name
28 | // attr === "name"
29 | // object === person
30 | }, "OH NO!")
31 | .build()
32 | .validate(person);
33 | ```
34 |
35 | If you want the value of different attributes just pass the list you want to
36 | `using()` one at a time:
37 |
38 | ```js
39 | LGTM.validator()
40 | .validates('name')
41 | .using('name', 'age', function(name, age, attr, object) {
42 | // name === person.name
43 | // age === person.age
44 | // attr === "name"
45 | // object === person
46 | }, "OH NO!")
47 | .build()
48 | .validate(person);
49 | ```
50 |
51 | `fn` must return either true or false or a promise that resolves to true or
52 | false. `message` may be anything you want, but is generally an error message
53 | string you intend to present to the user. If the validation added by this call
54 | fails, `message` will be included in the validation results.
55 |
56 | # builder.when([attr, …], fn)
57 |
58 | Use this to make subsequent calls to `using()` conditional. This method adds a
59 | condition to any previously added since the last call to `validates()`,
60 | modifying the behavior of subsequent calls to `using()`. All `when()`
61 | conditions are AND-ed together and must all return true to continue with
62 | validation. Consider using `and()`, an alias for `when()`, for subsequent
63 | conditions to make this clearer in your code. Like with `using()`, `when()` by
64 | default will give you the value to validate, the name of the attribute being
65 | validated, and the object being validated:
66 |
67 | ```js
68 | LGTM.validator()
69 | .validates('name')
70 | .when(function(value, attr, object) {
71 | // value === person.name
72 | // attr === "name"
73 | // object === person
74 | })
75 | .required("OH NO!")
76 | .build()
77 | .validate(person);
78 | ```
79 |
80 | Also like with `using()` you can ask for a specific set of attributes by naming
81 | them as arguments before `fn`:
82 |
83 | ```js
84 | LGTM.validator()
85 | .validates('name')
86 | .when('name', 'age', function(name, age, attr, object) {
87 | // name === person.name
88 | // age === person.age
89 | // attr === "name"
90 | // object === person
91 | })
92 | .required("OH NO!")
93 | .build()
94 | .validate(person);
95 | ```
96 |
97 | `fn` must return either true or false or a promise that resolves to true or
98 | false. If the result of `fn()` is false (or resolves to false) then the
99 | validations chained after this call will not be called.
100 |
101 | # builder.and()
102 |
103 | An alias for [`when()`](#wiki-when) to improve the readability of chained
104 | method calls.
105 |
106 | # builder.build()
107 |
108 | Returns the built [`ObjectValidator`](ObjectValidator) ready to validate
109 | objects. *You must remember to call this function at the end of the chain!*
110 |
111 | ### Helpers
112 |
113 | Helpers provide shortcuts to commonly-used validations and conditions. All
114 | registered helpers are automatically available on `ValidatorBuilder` instances.
115 |
116 | #### Core
117 |
118 | # builder.required(message)
119 |
120 | Adds a validation for the current attribute that will fail if the value of the
121 | validated attribute is absent (i.e. `null`, `undefined`, or an all-whitespace
122 | string).
123 |
124 | # builder.optional()
125 |
126 | Sets the condition for the current attribute's subsequent validations such that
127 | they will not be used unless the value to validate is present (i.e. not `null`,
128 | `undefined`, or an all-whitespace string).
129 |
130 | # builder.email(message[, options])
131 |
132 | Adds a validation for the current attribute that will fail if the value of the
133 | validated attribute is not an email address. This validation is meant to be a
134 | good default but may allow email addresses you don't want. Remember that you
135 | can always override any built-in helper (see [Custom Helpers](Custom-Helpers)).
136 |
137 | If you want to disallow special characters (such as 'ñ'), pass the `options`
138 | argument with `strictCharacters: true`.
139 |
140 | # builder.minLength(length, message)
141 |
142 | Adds a validation for the current attribute that will fail if the length of the
143 | value is less than the given `length`. This works for anything that has a
144 | `.length` property, such as strings and arrays.
145 |
146 | # builder.maxLength(length, message)
147 |
148 | See [Custom Helpers](Custom-Helpers) for information on writing your own helpers.
149 |
--------------------------------------------------------------------------------
/test/object_validator_test.js:
--------------------------------------------------------------------------------
1 | import resolve from './support/resolve';
2 | import { ObjectValidator, helpers } from './lgtm';
3 | import { deepEqual, fail, strictEqual } from 'assert';
4 |
5 | let { present } = helpers.core;
6 |
7 | let object;
8 | let validator;
9 |
10 | describe('ObjectValidator', function() {
11 | beforeEach(() => {
12 | object = {};
13 | validator = new ObjectValidator();
14 | });
15 |
16 | it('calls back when given a callback', done => {
17 | let returnValue = validator.validate(object, (err, result) => {
18 | strictEqual(result.valid, true);
19 | done();
20 | });
21 | strictEqual(returnValue, undefined);
22 | });
23 |
24 | it('returns a promise when no callback is given', () => {
25 | let returnValue = validator.validate(object);
26 | return returnValue.then(result => strictEqual(result.valid, true));
27 | });
28 |
29 | it('can validate a specific list of attributes', () => {
30 | validator.addValidation('firstName', present, 'Missing first name!');
31 | validator.addValidation('lastName', present, 'Missing last name!');
32 |
33 | return validator.validate(object).then(result => {
34 | deepEqual(result, {
35 | valid: false,
36 | errors: {
37 | firstName: ['Missing first name!'],
38 | lastName: ['Missing last name!']
39 | }
40 | });
41 |
42 | return validator.validate(object, 'firstName').then(result => {
43 | deepEqual(result, {
44 | valid: false,
45 | errors: {
46 | firstName: ['Missing first name!']
47 | }
48 | });
49 | });
50 | });
51 | });
52 |
53 | it('returns a hash of empty error arrays when valid', () => {
54 | validator.addValidation('firstName', present, 'Missing first name!');
55 | validator.addValidation('lastName', present, 'Missing last name!');
56 |
57 | return validator
58 | .validate({ firstName: 'Bah', lastName: 'Humbug' })
59 | .then(result => {
60 | deepEqual(result, {
61 | valid: true,
62 | errors: {
63 | firstName: [],
64 | lastName: []
65 | }
66 | });
67 | });
68 | });
69 |
70 | it('passes the validation function the value, key, and object being validated', () => {
71 | object.firstName = 'Han';
72 |
73 | validator.addValidation('firstName', function(value, key, obj) {
74 | strictEqual(arguments.length, 3, 'passes three arguments');
75 | strictEqual(value, 'Han', '1st argument is value');
76 | strictEqual(key, 'firstName', '2nd argument is key');
77 | strictEqual(obj, object, '3rd argument is object');
78 | });
79 |
80 | return validator.validate(object);
81 | });
82 |
83 | it('validates as valid when validating attributes with no registered validations', () => {
84 | return validator.validate(object, 'iDoNotExist').then(result => {
85 | deepEqual(result, { valid: true, errors: {} });
86 | });
87 | });
88 |
89 | it('allows registering dependencies between attributes', () => {
90 | // always invalid, easy to test
91 | validator.addValidation(
92 | 'spouseName',
93 | () => false,
94 | 'No name is good enough.'
95 | );
96 | validator.addDependentsFor('maritalStatus', 'spouseName');
97 |
98 | return validator.validate(object, 'maritalStatus').then(result => {
99 | deepEqual(result, {
100 | valid: false,
101 | errors: {
102 | maritalStatus: [],
103 | spouseName: ['No name is good enough.']
104 | }
105 | });
106 | });
107 | });
108 |
109 | it('can provide a list of all attributes it is interested in', () => {
110 | validator.addValidation('street1', () => false, 'Whatever.');
111 | validator.addValidation('street2', () => false, 'Whatever.');
112 | validator.addDependentsFor('mobile', 'street1', 'street2');
113 |
114 | deepEqual(validator.attributes().sort(), ['mobile', 'street1', 'street2']);
115 | });
116 |
117 | it('passes exceptions thrown by validations as the first argument to the callback', () => {
118 | validator.addValidation('firstName', () => {
119 | throw new Error('OH NO!');
120 | });
121 |
122 | return validator.validate(object, (err, result) => {
123 | strictEqual(err.message, 'OH NO!', 'passes the thrown error through');
124 | strictEqual(result, undefined);
125 | });
126 | });
127 |
128 | it('passes exceptions through as a rejected promise', () => {
129 | validator.addValidation('firstName', () => {
130 | throw new Error('OH NO!');
131 | });
132 |
133 | return validator.validate(object).then(
134 | () => {
135 | fail('this function should not have been called');
136 | },
137 | err => {
138 | strictEqual(err.message, 'OH NO!', 'passes the thrown error through');
139 | }
140 | );
141 | });
142 |
143 | context('with validations that return immediately', () => {
144 | beforeEach(() => {
145 | validator.addValidation(
146 | 'firstName',
147 | firstName => firstName === 'Han',
148 | `Sorry, your first name isn't Han.`
149 | );
150 | validator.addValidation(
151 | 'lastName',
152 | lastName => lastName === 'Solo',
153 | `Sorry, your last name isn't Solo.`
154 | );
155 | });
156 |
157 | itValidatesAsExpected();
158 | });
159 |
160 | context('with validations that return eventually', function() {
161 | beforeEach(() => {
162 | validator.addValidation(
163 | 'firstName',
164 | firstName => resolve(firstName === 'Han'),
165 | `Sorry, your first name isn't Han.`
166 | );
167 | validator.addValidation(
168 | 'lastName',
169 | lastName => resolve(lastName === 'Solo'),
170 | `Sorry, your last name isn't Solo.`
171 | );
172 | });
173 |
174 | itValidatesAsExpected();
175 | });
176 | });
177 |
178 | function itValidatesAsExpected() {
179 | it('resolves the promise correctly', () => {
180 | return validator.validate(object);
181 | });
182 |
183 | it('yields the validation results correctly', () => {
184 | object.lastName = 'Solo';
185 | return validator.validate(object).then(result => {
186 | deepEqual(result, {
187 | valid: false,
188 | errors: {
189 | firstName: [`Sorry, your first name isn't Han.`],
190 | lastName: []
191 | }
192 | });
193 | });
194 | });
195 | }
196 |
--------------------------------------------------------------------------------
/test/validator_test.js:
--------------------------------------------------------------------------------
1 | import resolve from './support/resolve';
2 | import { validator as buildValidator, ObjectValidator } from './lgtm';
3 | import { deepEqual, ok, strictEqual } from 'assert';
4 |
5 | let validator;
6 |
7 | describe('validator', () => {
8 | context('with a basic `required` validation', () => {
9 | beforeEach(() => {
10 | validator = buildValidator()
11 | .validates('name')
12 | .required('You must provide a name.')
13 | .build();
14 | });
15 |
16 | it('provides an easy way to build a validator', () => {
17 | return validator.validate({}).then(result => {
18 | ok(!result.valid);
19 | deepEqual(result.errors, { name: ['You must provide a name.'] });
20 | });
21 | });
22 |
23 | it('returns an ObjectValidator', () => {
24 | ok(validator instanceof ObjectValidator);
25 | });
26 | });
27 |
28 | describe('#paramCoreValidators', () => {
29 | beforeEach(() => {
30 | validator = buildValidator()
31 | .validates('theString')
32 | .minLength(5, 'too short')
33 | .build();
34 | });
35 |
36 | it('performs validation with specified param in mind', () => {
37 | return validator.validate({ theString: '1234' }).then(result => {
38 | deepEqual(result, {
39 | valid: false,
40 | errors: {
41 | theString: ['too short']
42 | }
43 | });
44 | });
45 | });
46 | });
47 |
48 | describe('#using', () => {
49 | beforeEach(() => {
50 | validator = buildValidator()
51 | .validates('password')
52 | .using(
53 | 'password',
54 | 'passwordConfirmation',
55 | (password, passwordConfirmation) => password === passwordConfirmation,
56 | 'Passwords must match.'
57 | )
58 | .build();
59 | });
60 |
61 | it('passes declared dependencies', () => {
62 | return validator
63 | .validate({ password: 'abc123', passwordConfirmation: 'abc123' })
64 | .then(result => {
65 | deepEqual(
66 | result,
67 | {
68 | valid: true,
69 | errors: {
70 | password: []
71 | }
72 | },
73 | 'dependent values are passed in'
74 | );
75 | });
76 | });
77 |
78 | it('causes dependent attributes to be validated, even when not specified explicitly', () => {
79 | // we're leaving out "password" but it gets validated anyway because it
80 | // depends on "passwordConfirmation"
81 | return validator
82 | .validate({ password: 'abc123' }, 'passwordConfirmation')
83 | .then(result => {
84 | deepEqual(result, {
85 | valid: false,
86 | errors: {
87 | password: ['Passwords must match.'],
88 | passwordConfirmation: []
89 | }
90 | });
91 |
92 | return validator
93 | .validate(
94 | { password: 'abc123', passwordConfirmation: 'abc123' },
95 | 'passwordConfirmation'
96 | )
97 | .then(result => {
98 | deepEqual(
99 | result,
100 | {
101 | valid: true,
102 | errors: {
103 | password: [],
104 | passwordConfirmation: []
105 | }
106 | },
107 | 'returns empty error messages for dependent attributes as well'
108 | );
109 | });
110 | });
111 | });
112 | });
113 |
114 | describe('validator#when', () => {
115 | let object;
116 | let validator;
117 |
118 | beforeEach(() => {
119 | object = {};
120 | validator = buildValidator()
121 | .validates('age')
122 | .when(age => age % 2 === 0)
123 | .using(age => age > 12, 'You must be at least 13 years old.')
124 | .validates('name')
125 | .required('You must provide a name.')
126 | .build();
127 | });
128 |
129 | it('allows conditionally running validations', () => {
130 | object.age = 10; // even numbered ages are validated
131 |
132 | return validator.validate(object).then(result => {
133 | deepEqual(
134 | result,
135 | {
136 | valid: false,
137 | errors: {
138 | name: ['You must provide a name.'],
139 | age: ['You must be at least 13 years old.']
140 | }
141 | },
142 | 'validations matching their when clause are run'
143 | );
144 |
145 | object.age = 7; // odd numbered ages aren't validated
146 |
147 | return validator.validate(object).then(result => {
148 | deepEqual(
149 | result,
150 | {
151 | valid: false,
152 | errors: {
153 | name: ['You must provide a name.'],
154 | age: []
155 | }
156 | },
157 | 'validations not matching their clause are not run'
158 | );
159 | });
160 | });
161 | });
162 |
163 | it('allows conditionals that return promises', () => {
164 | validator = buildValidator()
165 | .validates('name')
166 | .when(name => resolve(name.length % 2 !== 0))
167 | .using(name => name === 'Han', 'Your name is not Han!')
168 | .build();
169 |
170 | object.name = 'Brian'; // odd length names are validated
171 |
172 | return validator.validate(object).then(result => {
173 | deepEqual(result, {
174 | valid: false,
175 | errors: {
176 | name: ['Your name is not Han!']
177 | }
178 | });
179 |
180 | object.name = 'Fred'; // even length names are not validated
181 |
182 | return validator.validate(object).then(result => {
183 | deepEqual(
184 | result,
185 | {
186 | valid: true,
187 | errors: {
188 | name: []
189 | }
190 | },
191 | 'promise conditions are respected'
192 | );
193 | });
194 | });
195 | });
196 |
197 | it('passes declared dependencies', () => {
198 | let object = {
199 | name: 'Brian',
200 | age: 30
201 | };
202 |
203 | let v = buildValidator()
204 | .validates('name')
205 | .when('name', 'age', 'unset', (name, age, unset, key, obj) => {
206 | strictEqual(name, 'Brian');
207 | strictEqual(age, 30);
208 | strictEqual(unset, undefined);
209 | strictEqual(key, 'name');
210 | strictEqual(obj, object);
211 | return false;
212 | })
213 | .required('You must enter a name.')
214 | .build();
215 |
216 | return v.validate(object);
217 | });
218 |
219 | it('causes dependent attributes to be validated, even when not specified explicitly', () => {
220 | let v = buildValidator()
221 | .validates('name')
222 | .when('age', () => true)
223 | .required('You must enter a name.')
224 | .build();
225 |
226 | // we leave out "name" but it is validated anyway because it depends on "age"
227 | return v.validate({}, 'age').then(result => {
228 | deepEqual(result, {
229 | valid: false,
230 | errors: {
231 | age: [],
232 | name: ['You must enter a name.']
233 | }
234 | });
235 |
236 | let v = buildValidator()
237 | .validates('name')
238 | .when('age', () => true)
239 | .required('You must enter a name.')
240 | .validates('age')
241 | .when('isBorn', isBorn => isBorn)
242 | .required('You must have an age if you have been born.')
243 | .build();
244 |
245 | // we leave out "name" and "age" but they are validated anyway because they
246 | // both depend on "isBorn", either directly or transitively
247 | return v.validate({ isBorn: true }, 'isBorn').then(result => {
248 | deepEqual(result, {
249 | valid: false,
250 | errors: {
251 | isBorn: [],
252 | name: ['You must enter a name.'],
253 | age: ['You must have an age if you have been born.']
254 | }
255 | });
256 |
257 | return v
258 | .validate(
259 | { isBorn: true, name: 'Winnie the Pooh', age: 10 },
260 | 'isBorn'
261 | )
262 | .then(result => {
263 | deepEqual(
264 | result,
265 | {
266 | valid: true,
267 | errors: {
268 | isBorn: [],
269 | name: [],
270 | age: []
271 | }
272 | },
273 | 'returns empty error messages for dependent attributes as well'
274 | );
275 | });
276 | });
277 | });
278 | });
279 |
280 | it('used with #using specifying attributes in both', () => {
281 | let v = buildValidator()
282 | .validates('passwordConfirmation')
283 | .when('password', password => password && password.length > 0)
284 | .using(
285 | 'password',
286 | 'passwordConfirmation',
287 | (password, passwordConfirmation) => password === passwordConfirmation,
288 | 'Passwords must match!'
289 | )
290 | .build();
291 |
292 | return v.validate({ password: 'letmein' }, 'password').then(result => {
293 | deepEqual(
294 | result,
295 | {
296 | valid: false,
297 | errors: {
298 | password: [],
299 | passwordConfirmation: ['Passwords must match!']
300 | }
301 | },
302 | 'returns the correct results for all attributes'
303 | );
304 | });
305 | });
306 |
307 | it('is used by #optional to prevent subsequent validations from firing when a value is absent', () => {
308 | let v = buildValidator()
309 | .validates('email')
310 | .optional()
311 | .email('That is no email!')
312 | .build();
313 |
314 | return v.validate({ email: ' ' }).then(result => {
315 | deepEqual(
316 | result,
317 | {
318 | valid: true,
319 | errors: {
320 | email: []
321 | }
322 | },
323 | 'accepts missing values as valid'
324 | );
325 | });
326 | });
327 |
328 | it('may be used multiple times', () => {
329 | let shouldValidate;
330 | let v = buildValidator()
331 | .validates('email')
332 | .optional() // this is a .when() call internally
333 | .when(email => shouldValidate) // eslint-disable-line no-unused-vars
334 | .email('That is no email!', { strictCharacters: true })
335 | .build();
336 |
337 | // start off with the first .when() returning false, the second true
338 | shouldValidate = true;
339 | return v.validate({ email: '' }).then(result => {
340 | deepEqual(
341 | result,
342 | {
343 | valid: true,
344 | errors: {
345 | email: []
346 | }
347 | },
348 | 'subsequent .when() calls do not clobber previous ones'
349 | );
350 |
351 | // now make the first .when() return true, the second false
352 | shouldValidate = false;
353 | return v.validate({ email: 'I am not an email' }).then(result => {
354 | deepEqual(
355 | result,
356 | {
357 | valid: true,
358 | errors: {
359 | email: []
360 | }
361 | },
362 | 'does not validate if any .when() call returns falsy'
363 | );
364 |
365 | // now they should both return true, triggering validation
366 | shouldValidate = true;
367 | return v.validate({ email: 'mañana@squareup.com' }).then(result => {
368 | deepEqual(
369 | result,
370 | {
371 | valid: false,
372 | errors: {
373 | email: ['That is no email!']
374 | }
375 | },
376 | 'validates as normal when all .when() calls return truthy'
377 | );
378 | });
379 | });
380 | });
381 | });
382 |
383 | it('only affects .using() calls after it in the chain', () => {
384 | let v = buildValidator()
385 | .validates('password')
386 | .using(password => password === 'zanzabar', 'Nope!')
387 | .when(() => false)
388 | .build();
389 |
390 | return v.validate({ email: '' }).then(result => {
391 | deepEqual(
392 | result,
393 | {
394 | valid: false,
395 | errors: {
396 | password: ['Nope!']
397 | }
398 | },
399 | 'validates without any conditions added after the .using() call'
400 | );
401 | });
402 | });
403 | });
404 |
405 | describe('#and', () => {
406 | it('is an alias for #when', () => {
407 | let v = buildValidator()
408 | .validates('name')
409 | .when(() => true)
410 | .and(() => false)
411 | .required('You must enter a name!')
412 | .build();
413 |
414 | return v.validate({ name: null }).then(result => {
415 | deepEqual(
416 | result,
417 | {
418 | valid: true,
419 | errors: {
420 | name: []
421 | }
422 | },
423 | 'skips validating when .and() callback returns false'
424 | );
425 | });
426 | });
427 | });
428 | });
429 |
--------------------------------------------------------------------------------
/test/validates_test.js:
--------------------------------------------------------------------------------
1 | import resolve from './support/resolve';
2 | import {
3 | validator as buildValidator,
4 | validates,
5 | ObjectValidator
6 | } from './lgtm';
7 | import { deepEqual, ok, strictEqual } from 'assert';
8 |
9 | let validator;
10 |
11 | describe('validates', () => {
12 | context('with a basic `required` validation', () => {
13 | beforeEach(() => {
14 | validator = buildValidator(
15 | validates('name').required('You must provide a name.')
16 | ).build();
17 | });
18 |
19 | it('provides an easy way to build a validator', () => {
20 | return validator.validate({}).then(result => {
21 | ok(!result.valid);
22 | deepEqual(result.errors, { name: ['You must provide a name.'] });
23 | });
24 | });
25 |
26 | it('returns an ObjectValidator', () => {
27 | ok(validator instanceof ObjectValidator);
28 | });
29 | });
30 |
31 | describe('#paramCoreValidators', () => {
32 | beforeEach(() => {
33 | validator = buildValidator(
34 | validates('theString').minLength(5, 'too short')
35 | ).build();
36 | });
37 |
38 | it('performs validation with specified param in mind', () => {
39 | return validator.validate({ theString: '1234' }).then(result => {
40 | deepEqual(result, {
41 | valid: false,
42 | errors: {
43 | theString: ['too short']
44 | }
45 | });
46 | });
47 | });
48 | });
49 |
50 | describe('#using', () => {
51 | beforeEach(() => {
52 | validator = buildValidator(
53 | validates('password').using(
54 | 'password',
55 | 'passwordConfirmation',
56 | (password, passwordConfirmation) => password === passwordConfirmation,
57 | 'Passwords must match.'
58 | )
59 | ).build();
60 | });
61 |
62 | it('passes declared dependencies', () => {
63 | return validator
64 | .validate({ password: 'abc123', passwordConfirmation: 'abc123' })
65 | .then(result => {
66 | deepEqual(
67 | result,
68 | {
69 | valid: true,
70 | errors: {
71 | password: []
72 | }
73 | },
74 | 'dependent values are passed in'
75 | );
76 | });
77 | });
78 |
79 | it('causes dependent attributes to be validated, even when not specified explicitly', () => {
80 | // we're leaving out "password" but it gets validated anyway because it
81 | // depends on "passwordConfirmation"
82 | return validator
83 | .validate({ password: 'abc123' }, 'passwordConfirmation')
84 | .then(result => {
85 | deepEqual(result, {
86 | valid: false,
87 | errors: {
88 | password: ['Passwords must match.'],
89 | passwordConfirmation: []
90 | }
91 | });
92 |
93 | return validator
94 | .validate(
95 | { password: 'abc123', passwordConfirmation: 'abc123' },
96 | 'passwordConfirmation'
97 | )
98 | .then(result => {
99 | deepEqual(
100 | result,
101 | {
102 | valid: true,
103 | errors: {
104 | password: [],
105 | passwordConfirmation: []
106 | }
107 | },
108 | 'returns empty error messages for dependent attributes as well'
109 | );
110 | });
111 | });
112 | });
113 | });
114 |
115 | describe('validator#when', () => {
116 | let object;
117 | let validator;
118 |
119 | beforeEach(() => {
120 | object = {};
121 | validator = buildValidator(
122 | validates('age')
123 | .when(age => age % 2 === 0)
124 | .using(age => age > 12, 'You must be at least 13 years old.'),
125 | validates('name').required('You must provide a name.')
126 | ).build();
127 | });
128 |
129 | it('allows conditionally running validations', () => {
130 | object.age = 10; // even numbered ages are validated
131 |
132 | return validator.validate(object).then(result => {
133 | deepEqual(
134 | result,
135 | {
136 | valid: false,
137 | errors: {
138 | name: ['You must provide a name.'],
139 | age: ['You must be at least 13 years old.']
140 | }
141 | },
142 | 'validations matching their when clause are run'
143 | );
144 |
145 | object.age = 7; // odd numbered ages aren't validated
146 |
147 | return validator.validate(object).then(result => {
148 | deepEqual(
149 | result,
150 | {
151 | valid: false,
152 | errors: {
153 | name: ['You must provide a name.'],
154 | age: []
155 | }
156 | },
157 | 'validations not matching their clause are not run'
158 | );
159 | });
160 | });
161 | });
162 |
163 | it('allows conditionals that return promises', () => {
164 | validator = buildValidator(
165 | validates('name')
166 | .when(name => resolve(name.length % 2 !== 0))
167 | .using(name => name === 'Han', 'Your name is not Han!')
168 | ).build();
169 |
170 | object.name = 'Brian'; // odd length names are validated
171 |
172 | return validator.validate(object).then(result => {
173 | deepEqual(result, {
174 | valid: false,
175 | errors: {
176 | name: ['Your name is not Han!']
177 | }
178 | });
179 |
180 | object.name = 'Fred'; // even length names are not validated
181 |
182 | return validator.validate(object).then(result => {
183 | deepEqual(
184 | result,
185 | {
186 | valid: true,
187 | errors: {
188 | name: []
189 | }
190 | },
191 | 'promise conditions are respected'
192 | );
193 | });
194 | });
195 | });
196 |
197 | it('passes declared dependencies', () => {
198 | let object = {
199 | name: 'Brian',
200 | age: 30
201 | };
202 |
203 | let v = buildValidator(
204 | validates('name')
205 | .when('name', 'age', 'unset', (name, age, unset, key, obj) => {
206 | strictEqual(name, 'Brian');
207 | strictEqual(age, 30);
208 | strictEqual(unset, undefined);
209 | strictEqual(key, 'name');
210 | strictEqual(obj, object);
211 | return false;
212 | })
213 | .required('You must enter a name.')
214 | ).build();
215 |
216 | return v.validate(object);
217 | });
218 |
219 | it('causes dependent attributes to be validated, even when not specified explicitly', () => {
220 | let v = buildValidator(
221 | validates('name')
222 | .when('age', () => true)
223 | .required('You must enter a name.')
224 | ).build();
225 |
226 | // we leave out "name" but it is validated anyway because it depends on "age"
227 | return v.validate({}, 'age').then(result => {
228 | deepEqual(result, {
229 | valid: false,
230 | errors: {
231 | age: [],
232 | name: ['You must enter a name.']
233 | }
234 | });
235 |
236 | let v = buildValidator(
237 | validates('name')
238 | .when('age', () => true)
239 | .required('You must enter a name.'),
240 | validates('age')
241 | .when('isBorn', isBorn => isBorn)
242 | .required('You must have an age if you have been born.')
243 | ).build();
244 |
245 | // we leave out "name" and "age" but they are validated anyway because they
246 | // both depend on "isBorn", either directly or transitively
247 | return v.validate({ isBorn: true }, 'isBorn').then(result => {
248 | deepEqual(result, {
249 | valid: false,
250 | errors: {
251 | isBorn: [],
252 | name: ['You must enter a name.'],
253 | age: ['You must have an age if you have been born.']
254 | }
255 | });
256 |
257 | return v
258 | .validate(
259 | { isBorn: true, name: 'Winnie the Pooh', age: 10 },
260 | 'isBorn'
261 | )
262 | .then(result => {
263 | deepEqual(
264 | result,
265 | {
266 | valid: true,
267 | errors: {
268 | isBorn: [],
269 | name: [],
270 | age: []
271 | }
272 | },
273 | 'returns empty error messages for dependent attributes as well'
274 | );
275 | });
276 | });
277 | });
278 | });
279 |
280 | it('used with #using specifying attributes in both', () => {
281 | let v = buildValidator(
282 | validates('passwordConfirmation')
283 | .when('password', password => password && password.length > 0)
284 | .using(
285 | 'password',
286 | 'passwordConfirmation',
287 | (password, passwordConfirmation) =>
288 | password === passwordConfirmation,
289 | 'Passwords must match!'
290 | )
291 | ).build();
292 |
293 | return v.validate({ password: 'letmein' }, 'password').then(result => {
294 | deepEqual(
295 | result,
296 | {
297 | valid: false,
298 | errors: {
299 | password: [],
300 | passwordConfirmation: ['Passwords must match!']
301 | }
302 | },
303 | 'returns the correct results for all attributes'
304 | );
305 | });
306 | });
307 |
308 | it('is used by #optional to prevent subsequent validations from firing when a value is absent', () => {
309 | let v = buildValidator(
310 | validates('email')
311 | .optional()
312 | .email('That is no email!')
313 | ).build();
314 |
315 | return v.validate({ email: ' ' }).then(result => {
316 | deepEqual(
317 | result,
318 | {
319 | valid: true,
320 | errors: {
321 | email: []
322 | }
323 | },
324 | 'accepts missing values as valid'
325 | );
326 | });
327 | });
328 |
329 | it('may be used multiple times', () => {
330 | let shouldValidate;
331 | let v = buildValidator(
332 | validates('email')
333 | .optional() // this is a .when() call internally
334 | .when(email => shouldValidate) // eslint-disable-line no-unused-vars
335 | .email('That is no email!', { strictCharacters: true })
336 | ).build();
337 |
338 | // start off with the first .when() returning false, the second true
339 | shouldValidate = true;
340 | return v.validate({ email: '' }).then(result => {
341 | deepEqual(
342 | result,
343 | {
344 | valid: true,
345 | errors: {
346 | email: []
347 | }
348 | },
349 | 'subsequent .when() calls do not clobber previous ones'
350 | );
351 |
352 | // now make the first .when() return true, the second false
353 | shouldValidate = false;
354 | return v.validate({ email: 'I am not an email' }).then(result => {
355 | deepEqual(
356 | result,
357 | {
358 | valid: true,
359 | errors: {
360 | email: []
361 | }
362 | },
363 | 'does not validate if any .when() call returns falsy'
364 | );
365 |
366 | // now they should both return true, triggering validation
367 | shouldValidate = true;
368 | return v.validate({ email: 'mañana@squareup.com' }).then(result => {
369 | deepEqual(
370 | result,
371 | {
372 | valid: false,
373 | errors: {
374 | email: ['That is no email!']
375 | }
376 | },
377 | 'validates as normal when all .when() calls return truthy'
378 | );
379 | });
380 | });
381 | });
382 | });
383 |
384 | it('only affects .using() calls after it in the chain', () => {
385 | let v = buildValidator(
386 | validates('password')
387 | .using(password => password === 'zanzabar', 'Nope!')
388 | .when(() => false)
389 | ).build();
390 |
391 | return v.validate({ email: '' }).then(result => {
392 | deepEqual(
393 | result,
394 | {
395 | valid: false,
396 | errors: {
397 | password: ['Nope!']
398 | }
399 | },
400 | 'validates without any conditions added after the .using() call'
401 | );
402 | });
403 | });
404 | });
405 |
406 | describe('#and', () => {
407 | it('is an alias for #when', () => {
408 | let v = buildValidator(
409 | validates('name')
410 | .when(() => true)
411 | .and(() => false)
412 | .required('You must enter a name!')
413 | ).build();
414 |
415 | return v.validate({ name: null }).then(result => {
416 | deepEqual(
417 | result,
418 | {
419 | valid: true,
420 | errors: {
421 | name: []
422 | }
423 | },
424 | 'skips validating when .and() callback returns false'
425 | );
426 | });
427 | });
428 | });
429 | });
430 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.1":
6 | version "7.10.1"
7 | resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz#d5481c5095daa1c57e16e54c6f9198443afb49ff"
8 | integrity sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==
9 | dependencies:
10 | "@babel/highlight" "^7.10.1"
11 |
12 | "@babel/compat-data@^7.10.1":
13 | version "7.10.1"
14 | resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.10.1.tgz#b1085ffe72cd17bf2c0ee790fc09f9626011b2db"
15 | integrity sha512-CHvCj7So7iCkGKPRFUfryXIkU2gSBw7VSZFYLsqVhrS47269VK2Hfi9S/YcublPMW8k1u2bQBlbDruoQEm4fgw==
16 | dependencies:
17 | browserslist "^4.12.0"
18 | invariant "^2.2.4"
19 | semver "^5.5.0"
20 |
21 | "@babel/core@^7.10.2":
22 | version "7.10.2"
23 | resolved "https://registry.npmjs.org/@babel/core/-/core-7.10.2.tgz#bd6786046668a925ac2bd2fd95b579b92a23b36a"
24 | integrity sha512-KQmV9yguEjQsXqyOUGKjS4+3K8/DlOCE2pZcq4augdQmtTy5iv5EHtmMSJ7V4c1BIPjuwtZYqYLCq9Ga+hGBRQ==
25 | dependencies:
26 | "@babel/code-frame" "^7.10.1"
27 | "@babel/generator" "^7.10.2"
28 | "@babel/helper-module-transforms" "^7.10.1"
29 | "@babel/helpers" "^7.10.1"
30 | "@babel/parser" "^7.10.2"
31 | "@babel/template" "^7.10.1"
32 | "@babel/traverse" "^7.10.1"
33 | "@babel/types" "^7.10.2"
34 | convert-source-map "^1.7.0"
35 | debug "^4.1.0"
36 | gensync "^1.0.0-beta.1"
37 | json5 "^2.1.2"
38 | lodash "^4.17.13"
39 | resolve "^1.3.2"
40 | semver "^5.4.1"
41 | source-map "^0.5.0"
42 |
43 | "@babel/generator@^7.10.1", "@babel/generator@^7.10.2":
44 | version "7.10.2"
45 | resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.10.2.tgz#0fa5b5b2389db8bfdfcc3492b551ee20f5dd69a9"
46 | integrity sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA==
47 | dependencies:
48 | "@babel/types" "^7.10.2"
49 | jsesc "^2.5.1"
50 | lodash "^4.17.13"
51 | source-map "^0.5.0"
52 |
53 | "@babel/helper-annotate-as-pure@^7.10.1":
54 | version "7.10.1"
55 | resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.1.tgz#f6d08acc6f70bbd59b436262553fb2e259a1a268"
56 | integrity sha512-ewp3rvJEwLaHgyWGe4wQssC2vjks3E80WiUe2BpMb0KhreTjMROCbxXcEovTrbeGVdQct5VjQfrv9EgC+xMzCw==
57 | dependencies:
58 | "@babel/types" "^7.10.1"
59 |
60 | "@babel/helper-builder-binary-assignment-operator-visitor@^7.10.1":
61 | version "7.10.1"
62 | resolved "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.1.tgz#0ec7d9be8174934532661f87783eb18d72290059"
63 | integrity sha512-cQpVq48EkYxUU0xozpGCLla3wlkdRRqLWu1ksFMXA9CM5KQmyyRpSEsYXbao7JUkOw/tAaYKCaYyZq6HOFYtyw==
64 | dependencies:
65 | "@babel/helper-explode-assignable-expression" "^7.10.1"
66 | "@babel/types" "^7.10.1"
67 |
68 | "@babel/helper-compilation-targets@^7.10.2":
69 | version "7.10.2"
70 | resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.2.tgz#a17d9723b6e2c750299d2a14d4637c76936d8285"
71 | integrity sha512-hYgOhF4To2UTB4LTaZepN/4Pl9LD4gfbJx8A34mqoluT8TLbof1mhUlYuNWTEebONa8+UlCC4X0TEXu7AOUyGA==
72 | dependencies:
73 | "@babel/compat-data" "^7.10.1"
74 | browserslist "^4.12.0"
75 | invariant "^2.2.4"
76 | levenary "^1.1.1"
77 | semver "^5.5.0"
78 |
79 | "@babel/helper-create-class-features-plugin@^7.10.1":
80 | version "7.10.2"
81 | resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.2.tgz#7474295770f217dbcf288bf7572eb213db46ee67"
82 | integrity sha512-5C/QhkGFh1vqcziq1vAL6SI9ymzUp8BCYjFpvYVhWP4DlATIb3u5q3iUd35mvlyGs8fO7hckkW7i0tmH+5+bvQ==
83 | dependencies:
84 | "@babel/helper-function-name" "^7.10.1"
85 | "@babel/helper-member-expression-to-functions" "^7.10.1"
86 | "@babel/helper-optimise-call-expression" "^7.10.1"
87 | "@babel/helper-plugin-utils" "^7.10.1"
88 | "@babel/helper-replace-supers" "^7.10.1"
89 | "@babel/helper-split-export-declaration" "^7.10.1"
90 |
91 | "@babel/helper-create-regexp-features-plugin@^7.10.1", "@babel/helper-create-regexp-features-plugin@^7.8.3":
92 | version "7.10.1"
93 | resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.1.tgz#1b8feeab1594cbcfbf3ab5a3bbcabac0468efdbd"
94 | integrity sha512-Rx4rHS0pVuJn5pJOqaqcZR4XSgeF9G/pO/79t+4r7380tXFJdzImFnxMU19f83wjSrmKHq6myrM10pFHTGzkUA==
95 | dependencies:
96 | "@babel/helper-annotate-as-pure" "^7.10.1"
97 | "@babel/helper-regex" "^7.10.1"
98 | regexpu-core "^4.7.0"
99 |
100 | "@babel/helper-define-map@^7.10.1":
101 | version "7.10.1"
102 | resolved "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.1.tgz#5e69ee8308648470dd7900d159c044c10285221d"
103 | integrity sha512-+5odWpX+OnvkD0Zmq7panrMuAGQBu6aPUgvMzuMGo4R+jUOvealEj2hiqI6WhxgKrTpFoFj0+VdsuA8KDxHBDg==
104 | dependencies:
105 | "@babel/helper-function-name" "^7.10.1"
106 | "@babel/types" "^7.10.1"
107 | lodash "^4.17.13"
108 |
109 | "@babel/helper-explode-assignable-expression@^7.10.1":
110 | version "7.10.1"
111 | resolved "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.1.tgz#e9d76305ee1162ca467357ae25df94f179af2b7e"
112 | integrity sha512-vcUJ3cDjLjvkKzt6rHrl767FeE7pMEYfPanq5L16GRtrXIoznc0HykNW2aEYkcnP76P0isoqJ34dDMFZwzEpJg==
113 | dependencies:
114 | "@babel/traverse" "^7.10.1"
115 | "@babel/types" "^7.10.1"
116 |
117 | "@babel/helper-function-name@^7.10.1":
118 | version "7.10.1"
119 | resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz#92bd63829bfc9215aca9d9defa85f56b539454f4"
120 | integrity sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==
121 | dependencies:
122 | "@babel/helper-get-function-arity" "^7.10.1"
123 | "@babel/template" "^7.10.1"
124 | "@babel/types" "^7.10.1"
125 |
126 | "@babel/helper-get-function-arity@^7.10.1":
127 | version "7.10.1"
128 | resolved "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz#7303390a81ba7cb59613895a192b93850e373f7d"
129 | integrity sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==
130 | dependencies:
131 | "@babel/types" "^7.10.1"
132 |
133 | "@babel/helper-hoist-variables@^7.10.1":
134 | version "7.10.1"
135 | resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.1.tgz#7e77c82e5dcae1ebf123174c385aaadbf787d077"
136 | integrity sha512-vLm5srkU8rI6X3+aQ1rQJyfjvCBLXP8cAGeuw04zeAM2ItKb1e7pmVmLyHb4sDaAYnLL13RHOZPLEtcGZ5xvjg==
137 | dependencies:
138 | "@babel/types" "^7.10.1"
139 |
140 | "@babel/helper-member-expression-to-functions@^7.10.1":
141 | version "7.10.1"
142 | resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.1.tgz#432967fd7e12a4afef66c4687d4ca22bc0456f15"
143 | integrity sha512-u7XLXeM2n50gb6PWJ9hoO5oO7JFPaZtrh35t8RqKLT1jFKj9IWeD1zrcrYp1q1qiZTdEarfDWfTIP8nGsu0h5g==
144 | dependencies:
145 | "@babel/types" "^7.10.1"
146 |
147 | "@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.1":
148 | version "7.10.1"
149 | resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.1.tgz#dd331bd45bccc566ce77004e9d05fe17add13876"
150 | integrity sha512-SFxgwYmZ3HZPyZwJRiVNLRHWuW2OgE5k2nrVs6D9Iv4PPnXVffuEHy83Sfx/l4SqF+5kyJXjAyUmrG7tNm+qVg==
151 | dependencies:
152 | "@babel/types" "^7.10.1"
153 |
154 | "@babel/helper-module-transforms@^7.10.1":
155 | version "7.10.1"
156 | resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz#24e2f08ee6832c60b157bb0936c86bef7210c622"
157 | integrity sha512-RLHRCAzyJe7Q7sF4oy2cB+kRnU4wDZY/H2xJFGof+M+SJEGhZsb+GFj5j1AD8NiSaVBJ+Pf0/WObiXu/zxWpFg==
158 | dependencies:
159 | "@babel/helper-module-imports" "^7.10.1"
160 | "@babel/helper-replace-supers" "^7.10.1"
161 | "@babel/helper-simple-access" "^7.10.1"
162 | "@babel/helper-split-export-declaration" "^7.10.1"
163 | "@babel/template" "^7.10.1"
164 | "@babel/types" "^7.10.1"
165 | lodash "^4.17.13"
166 |
167 | "@babel/helper-optimise-call-expression@^7.10.1":
168 | version "7.10.1"
169 | resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.1.tgz#b4a1f2561870ce1247ceddb02a3860fa96d72543"
170 | integrity sha512-a0DjNS1prnBsoKx83dP2falChcs7p3i8VMzdrSbfLhuQra/2ENC4sbri34dz/rWmDADsmF1q5GbfaXydh0Jbjg==
171 | dependencies:
172 | "@babel/types" "^7.10.1"
173 |
174 | "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.1", "@babel/helper-plugin-utils@^7.8.0":
175 | version "7.10.1"
176 | resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz#ec5a5cf0eec925b66c60580328b122c01230a127"
177 | integrity sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA==
178 |
179 | "@babel/helper-regex@^7.10.1":
180 | version "7.10.1"
181 | resolved "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.1.tgz#021cf1a7ba99822f993222a001cc3fec83255b96"
182 | integrity sha512-7isHr19RsIJWWLLFn21ubFt223PjQyg1HY7CZEMRr820HttHPpVvrsIN3bUOo44DEfFV4kBXO7Abbn9KTUZV7g==
183 | dependencies:
184 | lodash "^4.17.13"
185 |
186 | "@babel/helper-remap-async-to-generator@^7.10.1":
187 | version "7.10.1"
188 | resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.1.tgz#bad6aaa4ff39ce8d4b82ccaae0bfe0f7dbb5f432"
189 | integrity sha512-RfX1P8HqsfgmJ6CwaXGKMAqbYdlleqglvVtht0HGPMSsy2V6MqLlOJVF/0Qyb/m2ZCi2z3q3+s6Pv7R/dQuZ6A==
190 | dependencies:
191 | "@babel/helper-annotate-as-pure" "^7.10.1"
192 | "@babel/helper-wrap-function" "^7.10.1"
193 | "@babel/template" "^7.10.1"
194 | "@babel/traverse" "^7.10.1"
195 | "@babel/types" "^7.10.1"
196 |
197 | "@babel/helper-replace-supers@^7.10.1":
198 | version "7.10.1"
199 | resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz#ec6859d20c5d8087f6a2dc4e014db7228975f13d"
200 | integrity sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A==
201 | dependencies:
202 | "@babel/helper-member-expression-to-functions" "^7.10.1"
203 | "@babel/helper-optimise-call-expression" "^7.10.1"
204 | "@babel/traverse" "^7.10.1"
205 | "@babel/types" "^7.10.1"
206 |
207 | "@babel/helper-simple-access@^7.10.1":
208 | version "7.10.1"
209 | resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz#08fb7e22ace9eb8326f7e3920a1c2052f13d851e"
210 | integrity sha512-VSWpWzRzn9VtgMJBIWTZ+GP107kZdQ4YplJlCmIrjoLVSi/0upixezHCDG8kpPVTBJpKfxTH01wDhh+jS2zKbw==
211 | dependencies:
212 | "@babel/template" "^7.10.1"
213 | "@babel/types" "^7.10.1"
214 |
215 | "@babel/helper-split-export-declaration@^7.10.1":
216 | version "7.10.1"
217 | resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz#c6f4be1cbc15e3a868e4c64a17d5d31d754da35f"
218 | integrity sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==
219 | dependencies:
220 | "@babel/types" "^7.10.1"
221 |
222 | "@babel/helper-validator-identifier@^7.10.1":
223 | version "7.10.1"
224 | resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz#5770b0c1a826c4f53f5ede5e153163e0318e94b5"
225 | integrity sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==
226 |
227 | "@babel/helper-wrap-function@^7.10.1":
228 | version "7.10.1"
229 | resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.1.tgz#956d1310d6696257a7afd47e4c42dfda5dfcedc9"
230 | integrity sha512-C0MzRGteVDn+H32/ZgbAv5r56f2o1fZSA/rj/TYo8JEJNHg+9BdSmKBUND0shxWRztWhjlT2cvHYuynpPsVJwQ==
231 | dependencies:
232 | "@babel/helper-function-name" "^7.10.1"
233 | "@babel/template" "^7.10.1"
234 | "@babel/traverse" "^7.10.1"
235 | "@babel/types" "^7.10.1"
236 |
237 | "@babel/helpers@^7.10.1":
238 | version "7.10.1"
239 | resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.1.tgz#a6827b7cb975c9d9cef5fd61d919f60d8844a973"
240 | integrity sha512-muQNHF+IdU6wGgkaJyhhEmI54MOZBKsFfsXFhboz1ybwJ1Kl7IHlbm2a++4jwrmY5UYsgitt5lfqo1wMFcHmyw==
241 | dependencies:
242 | "@babel/template" "^7.10.1"
243 | "@babel/traverse" "^7.10.1"
244 | "@babel/types" "^7.10.1"
245 |
246 | "@babel/highlight@^7.10.1":
247 | version "7.10.1"
248 | resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz#841d098ba613ba1a427a2b383d79e35552c38ae0"
249 | integrity sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==
250 | dependencies:
251 | "@babel/helper-validator-identifier" "^7.10.1"
252 | chalk "^2.0.0"
253 | js-tokens "^4.0.0"
254 |
255 | "@babel/parser@^7.10.1", "@babel/parser@^7.10.2", "@babel/parser@^7.7.0":
256 | version "7.10.2"
257 | resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.10.2.tgz#871807f10442b92ff97e4783b9b54f6a0ca812d0"
258 | integrity sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ==
259 |
260 | "@babel/plugin-external-helpers@^7.10.1":
261 | version "7.10.1"
262 | resolved "https://registry.npmjs.org/@babel/plugin-external-helpers/-/plugin-external-helpers-7.10.1.tgz#9ba69a8011a163c3c73dce162df1e6737c4e8dcf"
263 | integrity sha512-xFXc/Ts/gsgCrkh3waZbVdkzmhtnlw1L972gx96pmj8hXvloHnPTDgZ07vTDve9ilpe9TcrIMWLU7rg6FqnAWA==
264 | dependencies:
265 | "@babel/helper-plugin-utils" "^7.10.1"
266 |
267 | "@babel/plugin-proposal-async-generator-functions@^7.10.1":
268 | version "7.10.1"
269 | resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.1.tgz#6911af5ba2e615c4ff3c497fe2f47b35bf6d7e55"
270 | integrity sha512-vzZE12ZTdB336POZjmpblWfNNRpMSua45EYnRigE2XsZxcXcIyly2ixnTJasJE4Zq3U7t2d8rRF7XRUuzHxbOw==
271 | dependencies:
272 | "@babel/helper-plugin-utils" "^7.10.1"
273 | "@babel/helper-remap-async-to-generator" "^7.10.1"
274 | "@babel/plugin-syntax-async-generators" "^7.8.0"
275 |
276 | "@babel/plugin-proposal-class-properties@^7.10.1":
277 | version "7.10.1"
278 | resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.1.tgz#046bc7f6550bb08d9bd1d4f060f5f5a4f1087e01"
279 | integrity sha512-sqdGWgoXlnOdgMXU+9MbhzwFRgxVLeiGBqTrnuS7LC2IBU31wSsESbTUreT2O418obpfPdGUR2GbEufZF1bpqw==
280 | dependencies:
281 | "@babel/helper-create-class-features-plugin" "^7.10.1"
282 | "@babel/helper-plugin-utils" "^7.10.1"
283 |
284 | "@babel/plugin-proposal-dynamic-import@^7.10.1":
285 | version "7.10.1"
286 | resolved "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.1.tgz#e36979dc1dc3b73f6d6816fc4951da2363488ef0"
287 | integrity sha512-Cpc2yUVHTEGPlmiQzXj026kqwjEQAD9I4ZC16uzdbgWgitg/UHKHLffKNCQZ5+y8jpIZPJcKcwsr2HwPh+w3XA==
288 | dependencies:
289 | "@babel/helper-plugin-utils" "^7.10.1"
290 | "@babel/plugin-syntax-dynamic-import" "^7.8.0"
291 |
292 | "@babel/plugin-proposal-json-strings@^7.10.1":
293 | version "7.10.1"
294 | resolved "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.1.tgz#b1e691ee24c651b5a5e32213222b2379734aff09"
295 | integrity sha512-m8r5BmV+ZLpWPtMY2mOKN7wre6HIO4gfIiV+eOmsnZABNenrt/kzYBwrh+KOfgumSWpnlGs5F70J8afYMSJMBg==
296 | dependencies:
297 | "@babel/helper-plugin-utils" "^7.10.1"
298 | "@babel/plugin-syntax-json-strings" "^7.8.0"
299 |
300 | "@babel/plugin-proposal-nullish-coalescing-operator@^7.10.1":
301 | version "7.10.1"
302 | resolved "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.1.tgz#02dca21673842ff2fe763ac253777f235e9bbf78"
303 | integrity sha512-56cI/uHYgL2C8HVuHOuvVowihhX0sxb3nnfVRzUeVHTWmRHTZrKuAh/OBIMggGU/S1g/1D2CRCXqP+3u7vX7iA==
304 | dependencies:
305 | "@babel/helper-plugin-utils" "^7.10.1"
306 | "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0"
307 |
308 | "@babel/plugin-proposal-numeric-separator@^7.10.1":
309 | version "7.10.1"
310 | resolved "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.1.tgz#a9a38bc34f78bdfd981e791c27c6fdcec478c123"
311 | integrity sha512-jjfym4N9HtCiNfyyLAVD8WqPYeHUrw4ihxuAynWj6zzp2gf9Ey2f7ImhFm6ikB3CLf5Z/zmcJDri6B4+9j9RsA==
312 | dependencies:
313 | "@babel/helper-plugin-utils" "^7.10.1"
314 | "@babel/plugin-syntax-numeric-separator" "^7.10.1"
315 |
316 | "@babel/plugin-proposal-object-rest-spread@^7.10.1":
317 | version "7.10.1"
318 | resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.1.tgz#cba44908ac9f142650b4a65b8aa06bf3478d5fb6"
319 | integrity sha512-Z+Qri55KiQkHh7Fc4BW6o+QBuTagbOp9txE+4U1i79u9oWlf2npkiDx+Rf3iK3lbcHBuNy9UOkwuR5wOMH3LIQ==
320 | dependencies:
321 | "@babel/helper-plugin-utils" "^7.10.1"
322 | "@babel/plugin-syntax-object-rest-spread" "^7.8.0"
323 | "@babel/plugin-transform-parameters" "^7.10.1"
324 |
325 | "@babel/plugin-proposal-optional-catch-binding@^7.10.1":
326 | version "7.10.1"
327 | resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.1.tgz#c9f86d99305f9fa531b568ff5ab8c964b8b223d2"
328 | integrity sha512-VqExgeE62YBqI3ogkGoOJp1R6u12DFZjqwJhqtKc2o5m1YTUuUWnos7bZQFBhwkxIFpWYJ7uB75U7VAPPiKETA==
329 | dependencies:
330 | "@babel/helper-plugin-utils" "^7.10.1"
331 | "@babel/plugin-syntax-optional-catch-binding" "^7.8.0"
332 |
333 | "@babel/plugin-proposal-optional-chaining@^7.10.1":
334 | version "7.10.1"
335 | resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.1.tgz#15f5d6d22708629451a91be28f8facc55b0e818c"
336 | integrity sha512-dqQj475q8+/avvok72CF3AOSV/SGEcH29zT5hhohqqvvZ2+boQoOr7iGldBG5YXTO2qgCgc2B3WvVLUdbeMlGA==
337 | dependencies:
338 | "@babel/helper-plugin-utils" "^7.10.1"
339 | "@babel/plugin-syntax-optional-chaining" "^7.8.0"
340 |
341 | "@babel/plugin-proposal-private-methods@^7.10.1":
342 | version "7.10.1"
343 | resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.1.tgz#ed85e8058ab0fe309c3f448e5e1b73ca89cdb598"
344 | integrity sha512-RZecFFJjDiQ2z6maFprLgrdnm0OzoC23Mx89xf1CcEsxmHuzuXOdniEuI+S3v7vjQG4F5sa6YtUp+19sZuSxHg==
345 | dependencies:
346 | "@babel/helper-create-class-features-plugin" "^7.10.1"
347 | "@babel/helper-plugin-utils" "^7.10.1"
348 |
349 | "@babel/plugin-proposal-unicode-property-regex@^7.10.1", "@babel/plugin-proposal-unicode-property-regex@^7.4.4":
350 | version "7.10.1"
351 | resolved "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.1.tgz#dc04feb25e2dd70c12b05d680190e138fa2c0c6f"
352 | integrity sha512-JjfngYRvwmPwmnbRZyNiPFI8zxCZb8euzbCG/LxyKdeTb59tVciKo9GK9bi6JYKInk1H11Dq9j/zRqIH4KigfQ==
353 | dependencies:
354 | "@babel/helper-create-regexp-features-plugin" "^7.10.1"
355 | "@babel/helper-plugin-utils" "^7.10.1"
356 |
357 | "@babel/plugin-syntax-async-generators@^7.8.0":
358 | version "7.8.4"
359 | resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"
360 | integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==
361 | dependencies:
362 | "@babel/helper-plugin-utils" "^7.8.0"
363 |
364 | "@babel/plugin-syntax-class-properties@^7.10.1":
365 | version "7.10.1"
366 | resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.1.tgz#d5bc0645913df5b17ad7eda0fa2308330bde34c5"
367 | integrity sha512-Gf2Yx/iRs1JREDtVZ56OrjjgFHCaldpTnuy9BHla10qyVT3YkIIGEtoDWhyop0ksu1GvNjHIoYRBqm3zoR1jyQ==
368 | dependencies:
369 | "@babel/helper-plugin-utils" "^7.10.1"
370 |
371 | "@babel/plugin-syntax-dynamic-import@^7.8.0":
372 | version "7.8.3"
373 | resolved "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3"
374 | integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==
375 | dependencies:
376 | "@babel/helper-plugin-utils" "^7.8.0"
377 |
378 | "@babel/plugin-syntax-json-strings@^7.8.0":
379 | version "7.8.3"
380 | resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a"
381 | integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==
382 | dependencies:
383 | "@babel/helper-plugin-utils" "^7.8.0"
384 |
385 | "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0":
386 | version "7.8.3"
387 | resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9"
388 | integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==
389 | dependencies:
390 | "@babel/helper-plugin-utils" "^7.8.0"
391 |
392 | "@babel/plugin-syntax-numeric-separator@^7.10.1":
393 | version "7.10.1"
394 | resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.1.tgz#25761ee7410bc8cf97327ba741ee94e4a61b7d99"
395 | integrity sha512-uTd0OsHrpe3tH5gRPTxG8Voh99/WCU78vIm5NMRYPAqC8lR4vajt6KkCAknCHrx24vkPdd/05yfdGSB4EIY2mg==
396 | dependencies:
397 | "@babel/helper-plugin-utils" "^7.10.1"
398 |
399 | "@babel/plugin-syntax-object-rest-spread@^7.8.0":
400 | version "7.8.3"
401 | resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871"
402 | integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==
403 | dependencies:
404 | "@babel/helper-plugin-utils" "^7.8.0"
405 |
406 | "@babel/plugin-syntax-optional-catch-binding@^7.8.0":
407 | version "7.8.3"
408 | resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1"
409 | integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==
410 | dependencies:
411 | "@babel/helper-plugin-utils" "^7.8.0"
412 |
413 | "@babel/plugin-syntax-optional-chaining@^7.8.0":
414 | version "7.8.3"
415 | resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a"
416 | integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==
417 | dependencies:
418 | "@babel/helper-plugin-utils" "^7.8.0"
419 |
420 | "@babel/plugin-syntax-top-level-await@^7.10.1":
421 | version "7.10.1"
422 | resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.1.tgz#8b8733f8c57397b3eaa47ddba8841586dcaef362"
423 | integrity sha512-hgA5RYkmZm8FTFT3yu2N9Bx7yVVOKYT6yEdXXo6j2JTm0wNxgqaGeQVaSHRjhfnQbX91DtjFB6McRFSlcJH3xQ==
424 | dependencies:
425 | "@babel/helper-plugin-utils" "^7.10.1"
426 |
427 | "@babel/plugin-transform-arrow-functions@^7.10.1":
428 | version "7.10.1"
429 | resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.1.tgz#cb5ee3a36f0863c06ead0b409b4cc43a889b295b"
430 | integrity sha512-6AZHgFJKP3DJX0eCNJj01RpytUa3SOGawIxweHkNX2L6PYikOZmoh5B0d7hIHaIgveMjX990IAa/xK7jRTN8OA==
431 | dependencies:
432 | "@babel/helper-plugin-utils" "^7.10.1"
433 |
434 | "@babel/plugin-transform-async-to-generator@^7.10.1":
435 | version "7.10.1"
436 | resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.1.tgz#e5153eb1a3e028f79194ed8a7a4bf55f862b2062"
437 | integrity sha512-XCgYjJ8TY2slj6SReBUyamJn3k2JLUIiiR5b6t1mNCMSvv7yx+jJpaewakikp0uWFQSF7ChPPoe3dHmXLpISkg==
438 | dependencies:
439 | "@babel/helper-module-imports" "^7.10.1"
440 | "@babel/helper-plugin-utils" "^7.10.1"
441 | "@babel/helper-remap-async-to-generator" "^7.10.1"
442 |
443 | "@babel/plugin-transform-block-scoped-functions@^7.10.1":
444 | version "7.10.1"
445 | resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.1.tgz#146856e756d54b20fff14b819456b3e01820b85d"
446 | integrity sha512-B7K15Xp8lv0sOJrdVAoukKlxP9N59HS48V1J3U/JGj+Ad+MHq+am6xJVs85AgXrQn4LV8vaYFOB+pr/yIuzW8Q==
447 | dependencies:
448 | "@babel/helper-plugin-utils" "^7.10.1"
449 |
450 | "@babel/plugin-transform-block-scoping@^7.10.1":
451 | version "7.10.1"
452 | resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.1.tgz#47092d89ca345811451cd0dc5d91605982705d5e"
453 | integrity sha512-8bpWG6TtF5akdhIm/uWTyjHqENpy13Fx8chg7pFH875aNLwX8JxIxqm08gmAT+Whe6AOmaTeLPe7dpLbXt+xUw==
454 | dependencies:
455 | "@babel/helper-plugin-utils" "^7.10.1"
456 | lodash "^4.17.13"
457 |
458 | "@babel/plugin-transform-classes@^7.10.1":
459 | version "7.10.1"
460 | resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.1.tgz#6e11dd6c4dfae70f540480a4702477ed766d733f"
461 | integrity sha512-P9V0YIh+ln/B3RStPoXpEQ/CoAxQIhRSUn7aXqQ+FZJ2u8+oCtjIXR3+X0vsSD8zv+mb56K7wZW1XiDTDGiDRQ==
462 | dependencies:
463 | "@babel/helper-annotate-as-pure" "^7.10.1"
464 | "@babel/helper-define-map" "^7.10.1"
465 | "@babel/helper-function-name" "^7.10.1"
466 | "@babel/helper-optimise-call-expression" "^7.10.1"
467 | "@babel/helper-plugin-utils" "^7.10.1"
468 | "@babel/helper-replace-supers" "^7.10.1"
469 | "@babel/helper-split-export-declaration" "^7.10.1"
470 | globals "^11.1.0"
471 |
472 | "@babel/plugin-transform-computed-properties@^7.10.1":
473 | version "7.10.1"
474 | resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.1.tgz#59aa399064429d64dce5cf76ef9b90b7245ebd07"
475 | integrity sha512-mqSrGjp3IefMsXIenBfGcPXxJxweQe2hEIwMQvjtiDQ9b1IBvDUjkAtV/HMXX47/vXf14qDNedXsIiNd1FmkaQ==
476 | dependencies:
477 | "@babel/helper-plugin-utils" "^7.10.1"
478 |
479 | "@babel/plugin-transform-destructuring@^7.10.1":
480 | version "7.10.1"
481 | resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.1.tgz#abd58e51337815ca3a22a336b85f62b998e71907"
482 | integrity sha512-V/nUc4yGWG71OhaTH705pU8ZSdM6c1KmmLP8ys59oOYbT7RpMYAR3MsVOt6OHL0WzG7BlTU076va9fjJyYzJMA==
483 | dependencies:
484 | "@babel/helper-plugin-utils" "^7.10.1"
485 |
486 | "@babel/plugin-transform-dotall-regex@^7.10.1", "@babel/plugin-transform-dotall-regex@^7.4.4":
487 | version "7.10.1"
488 | resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.1.tgz#920b9fec2d78bb57ebb64a644d5c2ba67cc104ee"
489 | integrity sha512-19VIMsD1dp02RvduFUmfzj8uknaO3uiHHF0s3E1OHnVsNj8oge8EQ5RzHRbJjGSetRnkEuBYO7TG1M5kKjGLOA==
490 | dependencies:
491 | "@babel/helper-create-regexp-features-plugin" "^7.10.1"
492 | "@babel/helper-plugin-utils" "^7.10.1"
493 |
494 | "@babel/plugin-transform-duplicate-keys@^7.10.1":
495 | version "7.10.1"
496 | resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.1.tgz#c900a793beb096bc9d4d0a9d0cde19518ffc83b9"
497 | integrity sha512-wIEpkX4QvX8Mo9W6XF3EdGttrIPZWozHfEaDTU0WJD/TDnXMvdDh30mzUl/9qWhnf7naicYartcEfUghTCSNpA==
498 | dependencies:
499 | "@babel/helper-plugin-utils" "^7.10.1"
500 |
501 | "@babel/plugin-transform-exponentiation-operator@^7.10.1":
502 | version "7.10.1"
503 | resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.1.tgz#279c3116756a60dd6e6f5e488ba7957db9c59eb3"
504 | integrity sha512-lr/przdAbpEA2BUzRvjXdEDLrArGRRPwbaF9rvayuHRvdQ7lUTTkZnhZrJ4LE2jvgMRFF4f0YuPQ20vhiPYxtA==
505 | dependencies:
506 | "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.1"
507 | "@babel/helper-plugin-utils" "^7.10.1"
508 |
509 | "@babel/plugin-transform-for-of@^7.10.1":
510 | version "7.10.1"
511 | resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.1.tgz#ff01119784eb0ee32258e8646157ba2501fcfda5"
512 | integrity sha512-US8KCuxfQcn0LwSCMWMma8M2R5mAjJGsmoCBVwlMygvmDUMkTCykc84IqN1M7t+agSfOmLYTInLCHJM+RUoz+w==
513 | dependencies:
514 | "@babel/helper-plugin-utils" "^7.10.1"
515 |
516 | "@babel/plugin-transform-function-name@^7.10.1":
517 | version "7.10.1"
518 | resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.1.tgz#4ed46fd6e1d8fde2a2ec7b03c66d853d2c92427d"
519 | integrity sha512-//bsKsKFBJfGd65qSNNh1exBy5Y9gD9ZN+DvrJ8f7HXr4avE5POW6zB7Rj6VnqHV33+0vXWUwJT0wSHubiAQkw==
520 | dependencies:
521 | "@babel/helper-function-name" "^7.10.1"
522 | "@babel/helper-plugin-utils" "^7.10.1"
523 |
524 | "@babel/plugin-transform-literals@^7.10.1":
525 | version "7.10.1"
526 | resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.1.tgz#5794f8da82846b22e4e6631ea1658bce708eb46a"
527 | integrity sha512-qi0+5qgevz1NHLZroObRm5A+8JJtibb7vdcPQF1KQE12+Y/xxl8coJ+TpPW9iRq+Mhw/NKLjm+5SHtAHCC7lAw==
528 | dependencies:
529 | "@babel/helper-plugin-utils" "^7.10.1"
530 |
531 | "@babel/plugin-transform-member-expression-literals@^7.10.1":
532 | version "7.10.1"
533 | resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.1.tgz#90347cba31bca6f394b3f7bd95d2bbfd9fce2f39"
534 | integrity sha512-UmaWhDokOFT2GcgU6MkHC11i0NQcL63iqeufXWfRy6pUOGYeCGEKhvfFO6Vz70UfYJYHwveg62GS83Rvpxn+NA==
535 | dependencies:
536 | "@babel/helper-plugin-utils" "^7.10.1"
537 |
538 | "@babel/plugin-transform-modules-amd@^7.10.1":
539 | version "7.10.1"
540 | resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.1.tgz#65950e8e05797ebd2fe532b96e19fc5482a1d52a"
541 | integrity sha512-31+hnWSFRI4/ACFr1qkboBbrTxoBIzj7qA69qlq8HY8p7+YCzkCT6/TvQ1a4B0z27VeWtAeJd6pr5G04dc1iHw==
542 | dependencies:
543 | "@babel/helper-module-transforms" "^7.10.1"
544 | "@babel/helper-plugin-utils" "^7.10.1"
545 | babel-plugin-dynamic-import-node "^2.3.3"
546 |
547 | "@babel/plugin-transform-modules-commonjs@^7.10.1":
548 | version "7.10.1"
549 | resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.1.tgz#d5ff4b4413ed97ffded99961056e1fb980fb9301"
550 | integrity sha512-AQG4fc3KOah0vdITwt7Gi6hD9BtQP/8bhem7OjbaMoRNCH5Djx42O2vYMfau7QnAzQCa+RJnhJBmFFMGpQEzrg==
551 | dependencies:
552 | "@babel/helper-module-transforms" "^7.10.1"
553 | "@babel/helper-plugin-utils" "^7.10.1"
554 | "@babel/helper-simple-access" "^7.10.1"
555 | babel-plugin-dynamic-import-node "^2.3.3"
556 |
557 | "@babel/plugin-transform-modules-systemjs@^7.10.1":
558 | version "7.10.1"
559 | resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.1.tgz#9962e4b0ac6aaf2e20431ada3d8ec72082cbffb6"
560 | integrity sha512-ewNKcj1TQZDL3YnO85qh9zo1YF1CHgmSTlRQgHqe63oTrMI85cthKtZjAiZSsSNjPQ5NCaYo5QkbYqEw1ZBgZA==
561 | dependencies:
562 | "@babel/helper-hoist-variables" "^7.10.1"
563 | "@babel/helper-module-transforms" "^7.10.1"
564 | "@babel/helper-plugin-utils" "^7.10.1"
565 | babel-plugin-dynamic-import-node "^2.3.3"
566 |
567 | "@babel/plugin-transform-modules-umd@^7.10.1":
568 | version "7.10.1"
569 | resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.1.tgz#ea080911ffc6eb21840a5197a39ede4ee67b1595"
570 | integrity sha512-EIuiRNMd6GB6ulcYlETnYYfgv4AxqrswghmBRQbWLHZxN4s7mupxzglnHqk9ZiUpDI4eRWewedJJNj67PWOXKA==
571 | dependencies:
572 | "@babel/helper-module-transforms" "^7.10.1"
573 | "@babel/helper-plugin-utils" "^7.10.1"
574 |
575 | "@babel/plugin-transform-named-capturing-groups-regex@^7.8.3":
576 | version "7.8.3"
577 | resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz#a2a72bffa202ac0e2d0506afd0939c5ecbc48c6c"
578 | integrity sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==
579 | dependencies:
580 | "@babel/helper-create-regexp-features-plugin" "^7.8.3"
581 |
582 | "@babel/plugin-transform-new-target@^7.10.1":
583 | version "7.10.1"
584 | resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.1.tgz#6ee41a5e648da7632e22b6fb54012e87f612f324"
585 | integrity sha512-MBlzPc1nJvbmO9rPr1fQwXOM2iGut+JC92ku6PbiJMMK7SnQc1rytgpopveE3Evn47gzvGYeCdgfCDbZo0ecUw==
586 | dependencies:
587 | "@babel/helper-plugin-utils" "^7.10.1"
588 |
589 | "@babel/plugin-transform-object-super@^7.10.1":
590 | version "7.10.1"
591 | resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.1.tgz#2e3016b0adbf262983bf0d5121d676a5ed9c4fde"
592 | integrity sha512-WnnStUDN5GL+wGQrJylrnnVlFhFmeArINIR9gjhSeYyvroGhBrSAXYg/RHsnfzmsa+onJrTJrEClPzgNmmQ4Gw==
593 | dependencies:
594 | "@babel/helper-plugin-utils" "^7.10.1"
595 | "@babel/helper-replace-supers" "^7.10.1"
596 |
597 | "@babel/plugin-transform-parameters@^7.10.1":
598 | version "7.10.1"
599 | resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.1.tgz#b25938a3c5fae0354144a720b07b32766f683ddd"
600 | integrity sha512-tJ1T0n6g4dXMsL45YsSzzSDZCxiHXAQp/qHrucOq5gEHncTA3xDxnd5+sZcoQp+N1ZbieAaB8r/VUCG0gqseOg==
601 | dependencies:
602 | "@babel/helper-get-function-arity" "^7.10.1"
603 | "@babel/helper-plugin-utils" "^7.10.1"
604 |
605 | "@babel/plugin-transform-property-literals@^7.10.1":
606 | version "7.10.1"
607 | resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.1.tgz#cffc7315219230ed81dc53e4625bf86815b6050d"
608 | integrity sha512-Kr6+mgag8auNrgEpbfIWzdXYOvqDHZOF0+Bx2xh4H2EDNwcbRb9lY6nkZg8oSjsX+DH9Ebxm9hOqtKW+gRDeNA==
609 | dependencies:
610 | "@babel/helper-plugin-utils" "^7.10.1"
611 |
612 | "@babel/plugin-transform-regenerator@^7.10.1":
613 | version "7.10.1"
614 | resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.1.tgz#10e175cbe7bdb63cc9b39f9b3f823c5c7c5c5490"
615 | integrity sha512-B3+Y2prScgJ2Bh/2l9LJxKbb8C8kRfsG4AdPT+n7ixBHIxJaIG8bi8tgjxUMege1+WqSJ+7gu1YeoMVO3gPWzw==
616 | dependencies:
617 | regenerator-transform "^0.14.2"
618 |
619 | "@babel/plugin-transform-reserved-words@^7.10.1":
620 | version "7.10.1"
621 | resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.1.tgz#0fc1027312b4d1c3276a57890c8ae3bcc0b64a86"
622 | integrity sha512-qN1OMoE2nuqSPmpTqEM7OvJ1FkMEV+BjVeZZm9V9mq/x1JLKQ4pcv8riZJMNN3u2AUGl0ouOMjRr2siecvHqUQ==
623 | dependencies:
624 | "@babel/helper-plugin-utils" "^7.10.1"
625 |
626 | "@babel/plugin-transform-shorthand-properties@^7.10.1":
627 | version "7.10.1"
628 | resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.1.tgz#e8b54f238a1ccbae482c4dce946180ae7b3143f3"
629 | integrity sha512-AR0E/lZMfLstScFwztApGeyTHJ5u3JUKMjneqRItWeEqDdHWZwAOKycvQNCasCK/3r5YXsuNG25funcJDu7Y2g==
630 | dependencies:
631 | "@babel/helper-plugin-utils" "^7.10.1"
632 |
633 | "@babel/plugin-transform-spread@^7.10.1":
634 | version "7.10.1"
635 | resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.1.tgz#0c6d618a0c4461a274418460a28c9ccf5239a7c8"
636 | integrity sha512-8wTPym6edIrClW8FI2IoaePB91ETOtg36dOkj3bYcNe7aDMN2FXEoUa+WrmPc4xa1u2PQK46fUX2aCb+zo9rfw==
637 | dependencies:
638 | "@babel/helper-plugin-utils" "^7.10.1"
639 |
640 | "@babel/plugin-transform-sticky-regex@^7.10.1":
641 | version "7.10.1"
642 | resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.1.tgz#90fc89b7526228bed9842cff3588270a7a393b00"
643 | integrity sha512-j17ojftKjrL7ufX8ajKvwRilwqTok4q+BjkknmQw9VNHnItTyMP5anPFzxFJdCQs7clLcWpCV3ma+6qZWLnGMA==
644 | dependencies:
645 | "@babel/helper-plugin-utils" "^7.10.1"
646 | "@babel/helper-regex" "^7.10.1"
647 |
648 | "@babel/plugin-transform-template-literals@^7.10.1":
649 | version "7.10.1"
650 | resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.1.tgz#914c7b7f4752c570ea00553b4284dad8070e8628"
651 | integrity sha512-t7B/3MQf5M1T9hPCRG28DNGZUuxAuDqLYS03rJrIk2prj/UV7Z6FOneijhQhnv/Xa039vidXeVbvjK2SK5f7Gg==
652 | dependencies:
653 | "@babel/helper-annotate-as-pure" "^7.10.1"
654 | "@babel/helper-plugin-utils" "^7.10.1"
655 |
656 | "@babel/plugin-transform-typeof-symbol@^7.10.1":
657 | version "7.10.1"
658 | resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.1.tgz#60c0239b69965d166b80a84de7315c1bc7e0bb0e"
659 | integrity sha512-qX8KZcmbvA23zDi+lk9s6hC1FM7jgLHYIjuLgULgc8QtYnmB3tAVIYkNoKRQ75qWBeyzcoMoK8ZQmogGtC/w0g==
660 | dependencies:
661 | "@babel/helper-plugin-utils" "^7.10.1"
662 |
663 | "@babel/plugin-transform-unicode-escapes@^7.10.1":
664 | version "7.10.1"
665 | resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.1.tgz#add0f8483dab60570d9e03cecef6c023aa8c9940"
666 | integrity sha512-zZ0Poh/yy1d4jeDWpx/mNwbKJVwUYJX73q+gyh4bwtG0/iUlzdEu0sLMda8yuDFS6LBQlT/ST1SJAR6zYwXWgw==
667 | dependencies:
668 | "@babel/helper-plugin-utils" "^7.10.1"
669 |
670 | "@babel/plugin-transform-unicode-regex@^7.10.1":
671 | version "7.10.1"
672 | resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.1.tgz#6b58f2aea7b68df37ac5025d9c88752443a6b43f"
673 | integrity sha512-Y/2a2W299k0VIUdbqYm9X2qS6fE0CUBhhiPpimK6byy7OJ/kORLlIX+J6UrjgNu5awvs62k+6RSslxhcvVw2Tw==
674 | dependencies:
675 | "@babel/helper-create-regexp-features-plugin" "^7.10.1"
676 | "@babel/helper-plugin-utils" "^7.10.1"
677 |
678 | "@babel/preset-env@^7.10.2":
679 | version "7.10.2"
680 | resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.10.2.tgz#715930f2cf8573b0928005ee562bed52fb65fdfb"
681 | integrity sha512-MjqhX0RZaEgK/KueRzh+3yPSk30oqDKJ5HP5tqTSB1e2gzGS3PLy7K0BIpnp78+0anFuSwOeuCf1zZO7RzRvEA==
682 | dependencies:
683 | "@babel/compat-data" "^7.10.1"
684 | "@babel/helper-compilation-targets" "^7.10.2"
685 | "@babel/helper-module-imports" "^7.10.1"
686 | "@babel/helper-plugin-utils" "^7.10.1"
687 | "@babel/plugin-proposal-async-generator-functions" "^7.10.1"
688 | "@babel/plugin-proposal-class-properties" "^7.10.1"
689 | "@babel/plugin-proposal-dynamic-import" "^7.10.1"
690 | "@babel/plugin-proposal-json-strings" "^7.10.1"
691 | "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.1"
692 | "@babel/plugin-proposal-numeric-separator" "^7.10.1"
693 | "@babel/plugin-proposal-object-rest-spread" "^7.10.1"
694 | "@babel/plugin-proposal-optional-catch-binding" "^7.10.1"
695 | "@babel/plugin-proposal-optional-chaining" "^7.10.1"
696 | "@babel/plugin-proposal-private-methods" "^7.10.1"
697 | "@babel/plugin-proposal-unicode-property-regex" "^7.10.1"
698 | "@babel/plugin-syntax-async-generators" "^7.8.0"
699 | "@babel/plugin-syntax-class-properties" "^7.10.1"
700 | "@babel/plugin-syntax-dynamic-import" "^7.8.0"
701 | "@babel/plugin-syntax-json-strings" "^7.8.0"
702 | "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0"
703 | "@babel/plugin-syntax-numeric-separator" "^7.10.1"
704 | "@babel/plugin-syntax-object-rest-spread" "^7.8.0"
705 | "@babel/plugin-syntax-optional-catch-binding" "^7.8.0"
706 | "@babel/plugin-syntax-optional-chaining" "^7.8.0"
707 | "@babel/plugin-syntax-top-level-await" "^7.10.1"
708 | "@babel/plugin-transform-arrow-functions" "^7.10.1"
709 | "@babel/plugin-transform-async-to-generator" "^7.10.1"
710 | "@babel/plugin-transform-block-scoped-functions" "^7.10.1"
711 | "@babel/plugin-transform-block-scoping" "^7.10.1"
712 | "@babel/plugin-transform-classes" "^7.10.1"
713 | "@babel/plugin-transform-computed-properties" "^7.10.1"
714 | "@babel/plugin-transform-destructuring" "^7.10.1"
715 | "@babel/plugin-transform-dotall-regex" "^7.10.1"
716 | "@babel/plugin-transform-duplicate-keys" "^7.10.1"
717 | "@babel/plugin-transform-exponentiation-operator" "^7.10.1"
718 | "@babel/plugin-transform-for-of" "^7.10.1"
719 | "@babel/plugin-transform-function-name" "^7.10.1"
720 | "@babel/plugin-transform-literals" "^7.10.1"
721 | "@babel/plugin-transform-member-expression-literals" "^7.10.1"
722 | "@babel/plugin-transform-modules-amd" "^7.10.1"
723 | "@babel/plugin-transform-modules-commonjs" "^7.10.1"
724 | "@babel/plugin-transform-modules-systemjs" "^7.10.1"
725 | "@babel/plugin-transform-modules-umd" "^7.10.1"
726 | "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3"
727 | "@babel/plugin-transform-new-target" "^7.10.1"
728 | "@babel/plugin-transform-object-super" "^7.10.1"
729 | "@babel/plugin-transform-parameters" "^7.10.1"
730 | "@babel/plugin-transform-property-literals" "^7.10.1"
731 | "@babel/plugin-transform-regenerator" "^7.10.1"
732 | "@babel/plugin-transform-reserved-words" "^7.10.1"
733 | "@babel/plugin-transform-shorthand-properties" "^7.10.1"
734 | "@babel/plugin-transform-spread" "^7.10.1"
735 | "@babel/plugin-transform-sticky-regex" "^7.10.1"
736 | "@babel/plugin-transform-template-literals" "^7.10.1"
737 | "@babel/plugin-transform-typeof-symbol" "^7.10.1"
738 | "@babel/plugin-transform-unicode-escapes" "^7.10.1"
739 | "@babel/plugin-transform-unicode-regex" "^7.10.1"
740 | "@babel/preset-modules" "^0.1.3"
741 | "@babel/types" "^7.10.2"
742 | browserslist "^4.12.0"
743 | core-js-compat "^3.6.2"
744 | invariant "^2.2.2"
745 | levenary "^1.1.1"
746 | semver "^5.5.0"
747 |
748 | "@babel/preset-modules@^0.1.3":
749 | version "0.1.3"
750 | resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72"
751 | integrity sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==
752 | dependencies:
753 | "@babel/helper-plugin-utils" "^7.0.0"
754 | "@babel/plugin-proposal-unicode-property-regex" "^7.4.4"
755 | "@babel/plugin-transform-dotall-regex" "^7.4.4"
756 | "@babel/types" "^7.4.4"
757 | esutils "^2.0.2"
758 |
759 | "@babel/register@^7.10.1":
760 | version "7.10.1"
761 | resolved "https://registry.npmjs.org/@babel/register/-/register-7.10.1.tgz#b6567c5cb5049f44bbf8c35d6ff68ca3c43238ed"
762 | integrity sha512-sl96+kB3IA2B9EzpwwBmYadOT14vw3KaXOknGDbJaZCOj52GDA4Tivudq9doCJcB+bEIKCEARZYwRgBBsCGXyg==
763 | dependencies:
764 | find-cache-dir "^2.0.0"
765 | lodash "^4.17.13"
766 | make-dir "^2.1.0"
767 | pirates "^4.0.0"
768 | source-map-support "^0.5.16"
769 |
770 | "@babel/runtime@^7.8.4":
771 | version "7.10.2"
772 | resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.2.tgz#d103f21f2602497d38348a32e008637d506db839"
773 | integrity sha512-6sF3uQw2ivImfVIl62RZ7MXhO2tap69WeWK57vAaimT6AZbE4FbqjdEJIN1UqoD6wI6B+1n9UiagafH1sxjOtg==
774 | dependencies:
775 | regenerator-runtime "^0.13.4"
776 |
777 | "@babel/template@^7.10.1":
778 | version "7.10.1"
779 | resolved "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz#e167154a94cb5f14b28dc58f5356d2162f539811"
780 | integrity sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==
781 | dependencies:
782 | "@babel/code-frame" "^7.10.1"
783 | "@babel/parser" "^7.10.1"
784 | "@babel/types" "^7.10.1"
785 |
786 | "@babel/traverse@^7.10.1", "@babel/traverse@^7.7.0":
787 | version "7.10.1"
788 | resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.1.tgz#bbcef3031e4152a6c0b50147f4958df54ca0dd27"
789 | integrity sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==
790 | dependencies:
791 | "@babel/code-frame" "^7.10.1"
792 | "@babel/generator" "^7.10.1"
793 | "@babel/helper-function-name" "^7.10.1"
794 | "@babel/helper-split-export-declaration" "^7.10.1"
795 | "@babel/parser" "^7.10.1"
796 | "@babel/types" "^7.10.1"
797 | debug "^4.1.0"
798 | globals "^11.1.0"
799 | lodash "^4.17.13"
800 |
801 | "@babel/types@^7.10.1", "@babel/types@^7.10.2", "@babel/types@^7.4.4", "@babel/types@^7.7.0":
802 | version "7.10.2"
803 | resolved "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz#30283be31cad0dbf6fb00bd40641ca0ea675172d"
804 | integrity sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==
805 | dependencies:
806 | "@babel/helper-validator-identifier" "^7.10.1"
807 | lodash "^4.17.13"
808 | to-fast-properties "^2.0.0"
809 |
810 | "@types/estree@*":
811 | version "0.0.44"
812 | resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.44.tgz#980cc5a29a3ef3bea6ff1f7d021047d7ea575e21"
813 | integrity sha512-iaIVzr+w2ZJ5HkidlZ3EJM8VTZb2MJLCjw3V+505yVts0gRC4UMvjw0d1HPtGqI/HQC/KdsYtayfzl+AXY2R8g==
814 |
815 | "@types/node@*":
816 | version "14.0.13"
817 | resolved "https://registry.npmjs.org/@types/node/-/node-14.0.13.tgz#ee1128e881b874c371374c1f72201893616417c9"
818 | integrity sha512-rouEWBImiRaSJsVA+ITTFM6ZxibuAlTuNOCyxVbwreu6k6+ujs7DfnU9o+PShFhET78pMBl3eH+AGSI5eOTkPA==
819 |
820 | acorn-jsx@^5.0.0:
821 | version "5.2.0"
822 | resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe"
823 | integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==
824 |
825 | acorn@^6.0.7:
826 | version "6.4.1"
827 | resolved "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474"
828 | integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==
829 |
830 | acorn@^7.1.0:
831 | version "7.3.1"
832 | resolved "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz#85010754db53c3fbaf3b9ea3e083aa5c5d147ffd"
833 | integrity sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==
834 |
835 | ajv@^6.10.2, ajv@^6.9.1:
836 | version "6.12.6"
837 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
838 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
839 | dependencies:
840 | fast-deep-equal "^3.1.1"
841 | fast-json-stable-stringify "^2.0.0"
842 | json-schema-traverse "^0.4.1"
843 | uri-js "^4.2.2"
844 |
845 | ansi-colors@3.2.3:
846 | version "3.2.3"
847 | resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813"
848 | integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==
849 |
850 | ansi-escapes@^3.2.0:
851 | version "3.2.0"
852 | resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
853 | integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
854 |
855 | ansi-regex@^3.0.0:
856 | version "3.0.0"
857 | resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
858 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
859 |
860 | ansi-regex@^4.1.0:
861 | version "4.1.0"
862 | resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
863 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
864 |
865 | ansi-styles@^3.2.0, ansi-styles@^3.2.1:
866 | version "3.2.1"
867 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
868 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
869 | dependencies:
870 | color-convert "^1.9.0"
871 |
872 | argparse@^1.0.7:
873 | version "1.0.10"
874 | resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
875 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
876 | dependencies:
877 | sprintf-js "~1.0.2"
878 |
879 | astral-regex@^1.0.0:
880 | version "1.0.0"
881 | resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
882 | integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
883 |
884 | babel-eslint@^10.1.0:
885 | version "10.1.0"
886 | resolved "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232"
887 | integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==
888 | dependencies:
889 | "@babel/code-frame" "^7.0.0"
890 | "@babel/parser" "^7.7.0"
891 | "@babel/traverse" "^7.7.0"
892 | "@babel/types" "^7.7.0"
893 | eslint-visitor-keys "^1.0.0"
894 | resolve "^1.12.0"
895 |
896 | babel-plugin-dynamic-import-node@^2.3.3:
897 | version "2.3.3"
898 | resolved "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3"
899 | integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==
900 | dependencies:
901 | object.assign "^4.1.0"
902 |
903 | balanced-match@^1.0.0:
904 | version "1.0.0"
905 | resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
906 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
907 |
908 | brace-expansion@^1.1.7:
909 | version "1.1.11"
910 | resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
911 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
912 | dependencies:
913 | balanced-match "^1.0.0"
914 | concat-map "0.0.1"
915 |
916 | browser-stdout@1.3.1:
917 | version "1.3.1"
918 | resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
919 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==
920 |
921 | browserslist@^4.12.0, browserslist@^4.8.5:
922 | version "4.16.6"
923 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2"
924 | integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==
925 | dependencies:
926 | caniuse-lite "^1.0.30001219"
927 | colorette "^1.2.2"
928 | electron-to-chromium "^1.3.723"
929 | escalade "^3.1.1"
930 | node-releases "^1.1.71"
931 |
932 | buffer-from@^1.0.0:
933 | version "1.1.1"
934 | resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
935 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
936 |
937 | callsites@^3.0.0:
938 | version "3.1.0"
939 | resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
940 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
941 |
942 | camelcase@^5.0.0:
943 | version "5.3.1"
944 | resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
945 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
946 |
947 | caniuse-lite@^1.0.30001219:
948 | version "1.0.30001228"
949 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz#bfdc5942cd3326fa51ee0b42fbef4da9d492a7fa"
950 | integrity sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A==
951 |
952 | chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.2:
953 | version "2.4.2"
954 | resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
955 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
956 | dependencies:
957 | ansi-styles "^3.2.1"
958 | escape-string-regexp "^1.0.5"
959 | supports-color "^5.3.0"
960 |
961 | chardet@^0.7.0:
962 | version "0.7.0"
963 | resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
964 | integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
965 |
966 | cli-cursor@^2.1.0:
967 | version "2.1.0"
968 | resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
969 | integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=
970 | dependencies:
971 | restore-cursor "^2.0.0"
972 |
973 | cli-width@^2.0.0:
974 | version "2.2.1"
975 | resolved "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48"
976 | integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==
977 |
978 | cliui@^5.0.0:
979 | version "5.0.0"
980 | resolved "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
981 | integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==
982 | dependencies:
983 | string-width "^3.1.0"
984 | strip-ansi "^5.2.0"
985 | wrap-ansi "^5.1.0"
986 |
987 | color-convert@^1.9.0:
988 | version "1.9.3"
989 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
990 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
991 | dependencies:
992 | color-name "1.1.3"
993 |
994 | color-name@1.1.3:
995 | version "1.1.3"
996 | resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
997 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
998 |
999 | colorette@^1.2.2:
1000 | version "1.2.2"
1001 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94"
1002 | integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==
1003 |
1004 | commander@~2.20.3:
1005 | version "2.20.3"
1006 | resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
1007 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
1008 |
1009 | commondir@^1.0.1:
1010 | version "1.0.1"
1011 | resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
1012 | integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
1013 |
1014 | concat-map@0.0.1:
1015 | version "0.0.1"
1016 | resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
1017 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
1018 |
1019 | convert-source-map@^1.7.0:
1020 | version "1.7.0"
1021 | resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
1022 | integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==
1023 | dependencies:
1024 | safe-buffer "~5.1.1"
1025 |
1026 | core-js-compat@^3.6.2:
1027 | version "3.6.5"
1028 | resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c"
1029 | integrity sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==
1030 | dependencies:
1031 | browserslist "^4.8.5"
1032 | semver "7.0.0"
1033 |
1034 | cross-spawn@^6.0.5:
1035 | version "6.0.5"
1036 | resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
1037 | integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
1038 | dependencies:
1039 | nice-try "^1.0.4"
1040 | path-key "^2.0.1"
1041 | semver "^5.5.0"
1042 | shebang-command "^1.2.0"
1043 | which "^1.2.9"
1044 |
1045 | debug@3.2.6:
1046 | version "3.2.6"
1047 | resolved "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
1048 | integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
1049 | dependencies:
1050 | ms "^2.1.1"
1051 |
1052 | debug@^4.0.1, debug@^4.1.0:
1053 | version "4.1.1"
1054 | resolved "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
1055 | integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
1056 | dependencies:
1057 | ms "^2.1.1"
1058 |
1059 | decamelize@^1.2.0:
1060 | version "1.2.0"
1061 | resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
1062 | integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
1063 |
1064 | deep-is@~0.1.3:
1065 | version "0.1.3"
1066 | resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
1067 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
1068 |
1069 | define-properties@^1.1.2, define-properties@^1.1.3:
1070 | version "1.1.3"
1071 | resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
1072 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
1073 | dependencies:
1074 | object-keys "^1.0.12"
1075 |
1076 | diff@3.5.0:
1077 | version "3.5.0"
1078 | resolved "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
1079 | integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
1080 |
1081 | doctrine@^3.0.0:
1082 | version "3.0.0"
1083 | resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
1084 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
1085 | dependencies:
1086 | esutils "^2.0.2"
1087 |
1088 | duplexer@^0.1.1:
1089 | version "0.1.1"
1090 | resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
1091 | integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=
1092 |
1093 | electron-to-chromium@^1.3.723:
1094 | version "1.3.736"
1095 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.736.tgz#f632d900a1f788dab22fec9c62ec5c9c8f0c4052"
1096 | integrity sha512-DY8dA7gR51MSo66DqitEQoUMQ0Z+A2DSXFi7tK304bdTVqczCAfUuyQw6Wdg8hIoo5zIxkU1L24RQtUce1Ioig==
1097 |
1098 | emoji-regex@^7.0.1:
1099 | version "7.0.3"
1100 | resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
1101 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
1102 |
1103 | es-abstract@^1.17.0-next.1, es-abstract@^1.17.5:
1104 | version "1.17.5"
1105 | resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9"
1106 | integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==
1107 | dependencies:
1108 | es-to-primitive "^1.2.1"
1109 | function-bind "^1.1.1"
1110 | has "^1.0.3"
1111 | has-symbols "^1.0.1"
1112 | is-callable "^1.1.5"
1113 | is-regex "^1.0.5"
1114 | object-inspect "^1.7.0"
1115 | object-keys "^1.1.1"
1116 | object.assign "^4.1.0"
1117 | string.prototype.trimleft "^2.1.1"
1118 | string.prototype.trimright "^2.1.1"
1119 |
1120 | es-to-primitive@^1.2.1:
1121 | version "1.2.1"
1122 | resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
1123 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
1124 | dependencies:
1125 | is-callable "^1.1.4"
1126 | is-date-object "^1.0.1"
1127 | is-symbol "^1.0.2"
1128 |
1129 | escalade@^3.1.1:
1130 | version "3.1.1"
1131 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
1132 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
1133 |
1134 | escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5:
1135 | version "1.0.5"
1136 | resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
1137 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
1138 |
1139 | eslint-config-prettier@^6.11.0:
1140 | version "6.11.0"
1141 | resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz#f6d2238c1290d01c859a8b5c1f7d352a0b0da8b1"
1142 | integrity sha512-oB8cpLWSAjOVFEJhhyMZh6NOEOtBVziaqdDQ86+qhDHFbZXoRTM7pNSvFRfW/W/L/LrQ38C99J5CGuRBBzBsdA==
1143 | dependencies:
1144 | get-stdin "^6.0.0"
1145 |
1146 | eslint-plugin-prettier@^3.1.3:
1147 | version "3.1.3"
1148 | resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.3.tgz#ae116a0fc0e598fdae48743a4430903de5b4e6ca"
1149 | integrity sha512-+HG5jmu/dN3ZV3T6eCD7a4BlAySdN7mLIbJYo0z1cFQuI+r2DiTJEFeF68ots93PsnrMxbzIZ2S/ieX+mkrBeQ==
1150 | dependencies:
1151 | prettier-linter-helpers "^1.0.0"
1152 |
1153 | eslint-scope@^4.0.3:
1154 | version "4.0.3"
1155 | resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
1156 | integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==
1157 | dependencies:
1158 | esrecurse "^4.1.0"
1159 | estraverse "^4.1.1"
1160 |
1161 | eslint-utils@^1.3.1:
1162 | version "1.4.3"
1163 | resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f"
1164 | integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==
1165 | dependencies:
1166 | eslint-visitor-keys "^1.1.0"
1167 |
1168 | eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0:
1169 | version "1.2.0"
1170 | resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.2.0.tgz#74415ac884874495f78ec2a97349525344c981fa"
1171 | integrity sha512-WFb4ihckKil6hu3Dp798xdzSfddwKKU3+nGniKF6HfeW6OLd2OUDEPP7TcHtB5+QXOKg2s6B2DaMPE1Nn/kxKQ==
1172 |
1173 | eslint@^5:
1174 | version "5.16.0"
1175 | resolved "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea"
1176 | integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==
1177 | dependencies:
1178 | "@babel/code-frame" "^7.0.0"
1179 | ajv "^6.9.1"
1180 | chalk "^2.1.0"
1181 | cross-spawn "^6.0.5"
1182 | debug "^4.0.1"
1183 | doctrine "^3.0.0"
1184 | eslint-scope "^4.0.3"
1185 | eslint-utils "^1.3.1"
1186 | eslint-visitor-keys "^1.0.0"
1187 | espree "^5.0.1"
1188 | esquery "^1.0.1"
1189 | esutils "^2.0.2"
1190 | file-entry-cache "^5.0.1"
1191 | functional-red-black-tree "^1.0.1"
1192 | glob "^7.1.2"
1193 | globals "^11.7.0"
1194 | ignore "^4.0.6"
1195 | import-fresh "^3.0.0"
1196 | imurmurhash "^0.1.4"
1197 | inquirer "^6.2.2"
1198 | js-yaml "^3.13.0"
1199 | json-stable-stringify-without-jsonify "^1.0.1"
1200 | levn "^0.3.0"
1201 | lodash "^4.17.11"
1202 | minimatch "^3.0.4"
1203 | mkdirp "^0.5.1"
1204 | natural-compare "^1.4.0"
1205 | optionator "^0.8.2"
1206 | path-is-inside "^1.0.2"
1207 | progress "^2.0.0"
1208 | regexpp "^2.0.1"
1209 | semver "^5.5.1"
1210 | strip-ansi "^4.0.0"
1211 | strip-json-comments "^2.0.1"
1212 | table "^5.2.3"
1213 | text-table "^0.2.0"
1214 |
1215 | espree@^5.0.1:
1216 | version "5.0.1"
1217 | resolved "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a"
1218 | integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==
1219 | dependencies:
1220 | acorn "^6.0.7"
1221 | acorn-jsx "^5.0.0"
1222 | eslint-visitor-keys "^1.0.0"
1223 |
1224 | esprima@^4.0.0:
1225 | version "4.0.1"
1226 | resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
1227 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
1228 |
1229 | esquery@^1.0.1:
1230 | version "1.3.1"
1231 | resolved "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57"
1232 | integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==
1233 | dependencies:
1234 | estraverse "^5.1.0"
1235 |
1236 | esrecurse@^4.1.0:
1237 | version "4.2.1"
1238 | resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
1239 | integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==
1240 | dependencies:
1241 | estraverse "^4.1.0"
1242 |
1243 | estraverse@^4.1.0, estraverse@^4.1.1:
1244 | version "4.3.0"
1245 | resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
1246 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
1247 |
1248 | estraverse@^5.1.0:
1249 | version "5.1.0"
1250 | resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642"
1251 | integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==
1252 |
1253 | estree-walker@^0.6.1:
1254 | version "0.6.1"
1255 | resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362"
1256 | integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==
1257 |
1258 | esutils@^2.0.2:
1259 | version "2.0.3"
1260 | resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
1261 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
1262 |
1263 | external-editor@^3.0.3:
1264 | version "3.1.0"
1265 | resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
1266 | integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==
1267 | dependencies:
1268 | chardet "^0.7.0"
1269 | iconv-lite "^0.4.24"
1270 | tmp "^0.0.33"
1271 |
1272 | fast-deep-equal@^3.1.1:
1273 | version "3.1.3"
1274 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
1275 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
1276 |
1277 | fast-diff@^1.1.2:
1278 | version "1.2.0"
1279 | resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03"
1280 | integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==
1281 |
1282 | fast-json-stable-stringify@^2.0.0:
1283 | version "2.1.0"
1284 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
1285 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
1286 |
1287 | fast-levenshtein@~2.0.6:
1288 | version "2.0.6"
1289 | resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
1290 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
1291 |
1292 | figures@^2.0.0:
1293 | version "2.0.0"
1294 | resolved "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
1295 | integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=
1296 | dependencies:
1297 | escape-string-regexp "^1.0.5"
1298 |
1299 | file-entry-cache@^5.0.1:
1300 | version "5.0.1"
1301 | resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c"
1302 | integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==
1303 | dependencies:
1304 | flat-cache "^2.0.1"
1305 |
1306 | file-size@^1.0.0:
1307 | version "1.0.0"
1308 | resolved "https://registry.npmjs.org/file-size/-/file-size-1.0.0.tgz#3338267d5d206bbf60f4df60c19d7ed3813a4657"
1309 | integrity sha1-MzgmfV0ga79g9N9gwZ1+04E6Rlc=
1310 |
1311 | find-cache-dir@^2.0.0:
1312 | version "2.1.0"
1313 | resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7"
1314 | integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==
1315 | dependencies:
1316 | commondir "^1.0.1"
1317 | make-dir "^2.0.0"
1318 | pkg-dir "^3.0.0"
1319 |
1320 | find-up@3.0.0, find-up@^3.0.0:
1321 | version "3.0.0"
1322 | resolved "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
1323 | integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
1324 | dependencies:
1325 | locate-path "^3.0.0"
1326 |
1327 | flat-cache@^2.0.1:
1328 | version "2.0.1"
1329 | resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0"
1330 | integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==
1331 | dependencies:
1332 | flatted "^2.0.0"
1333 | rimraf "2.6.3"
1334 | write "1.0.3"
1335 |
1336 | flat@^4.1.0:
1337 | version "4.1.0"
1338 | resolved "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2"
1339 | integrity sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==
1340 | dependencies:
1341 | is-buffer "~2.0.3"
1342 |
1343 | flatted@^2.0.0:
1344 | version "2.0.2"
1345 | resolved "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138"
1346 | integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==
1347 |
1348 | fs.realpath@^1.0.0:
1349 | version "1.0.0"
1350 | resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
1351 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
1352 |
1353 | function-bind@^1.1.1:
1354 | version "1.1.1"
1355 | resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
1356 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
1357 |
1358 | functional-red-black-tree@^1.0.1:
1359 | version "1.0.1"
1360 | resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
1361 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
1362 |
1363 | gensync@^1.0.0-beta.1:
1364 | version "1.0.0-beta.1"
1365 | resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269"
1366 | integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==
1367 |
1368 | get-caller-file@^2.0.1:
1369 | version "2.0.5"
1370 | resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
1371 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
1372 |
1373 | get-stdin@^6.0.0:
1374 | version "6.0.0"
1375 | resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b"
1376 | integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==
1377 |
1378 | glob@7.1.3:
1379 | version "7.1.3"
1380 | resolved "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
1381 | integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
1382 | dependencies:
1383 | fs.realpath "^1.0.0"
1384 | inflight "^1.0.4"
1385 | inherits "2"
1386 | minimatch "^3.0.4"
1387 | once "^1.3.0"
1388 | path-is-absolute "^1.0.0"
1389 |
1390 | glob@^7.1.2, glob@^7.1.3:
1391 | version "7.1.6"
1392 | resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
1393 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
1394 | dependencies:
1395 | fs.realpath "^1.0.0"
1396 | inflight "^1.0.4"
1397 | inherits "2"
1398 | minimatch "^3.0.4"
1399 | once "^1.3.0"
1400 | path-is-absolute "^1.0.0"
1401 |
1402 | globals@^11.1.0, globals@^11.7.0:
1403 | version "11.12.0"
1404 | resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
1405 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
1406 |
1407 | growl@1.10.5:
1408 | version "1.10.5"
1409 | resolved "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e"
1410 | integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==
1411 |
1412 | gzip-size@^5.1.1:
1413 | version "5.1.1"
1414 | resolved "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274"
1415 | integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==
1416 | dependencies:
1417 | duplexer "^0.1.1"
1418 | pify "^4.0.1"
1419 |
1420 | has-flag@^3.0.0:
1421 | version "3.0.0"
1422 | resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
1423 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
1424 |
1425 | has-symbols@^1.0.0, has-symbols@^1.0.1:
1426 | version "1.0.1"
1427 | resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
1428 | integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==
1429 |
1430 | has@^1.0.3:
1431 | version "1.0.3"
1432 | resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
1433 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
1434 | dependencies:
1435 | function-bind "^1.1.1"
1436 |
1437 | he@1.2.0:
1438 | version "1.2.0"
1439 | resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
1440 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
1441 |
1442 | iconv-lite@^0.4.24:
1443 | version "0.4.24"
1444 | resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
1445 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
1446 | dependencies:
1447 | safer-buffer ">= 2.1.2 < 3"
1448 |
1449 | ignore@^4.0.6:
1450 | version "4.0.6"
1451 | resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
1452 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
1453 |
1454 | import-fresh@^3.0.0:
1455 | version "3.2.1"
1456 | resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66"
1457 | integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==
1458 | dependencies:
1459 | parent-module "^1.0.0"
1460 | resolve-from "^4.0.0"
1461 |
1462 | imurmurhash@^0.1.4:
1463 | version "0.1.4"
1464 | resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
1465 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
1466 |
1467 | inflight@^1.0.4:
1468 | version "1.0.6"
1469 | resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
1470 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
1471 | dependencies:
1472 | once "^1.3.0"
1473 | wrappy "1"
1474 |
1475 | inherits@2:
1476 | version "2.0.4"
1477 | resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
1478 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
1479 |
1480 | inquirer@^6.2.2:
1481 | version "6.5.2"
1482 | resolved "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca"
1483 | integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==
1484 | dependencies:
1485 | ansi-escapes "^3.2.0"
1486 | chalk "^2.4.2"
1487 | cli-cursor "^2.1.0"
1488 | cli-width "^2.0.0"
1489 | external-editor "^3.0.3"
1490 | figures "^2.0.0"
1491 | lodash "^4.17.12"
1492 | mute-stream "0.0.7"
1493 | run-async "^2.2.0"
1494 | rxjs "^6.4.0"
1495 | string-width "^2.1.0"
1496 | strip-ansi "^5.1.0"
1497 | through "^2.3.6"
1498 |
1499 | invariant@^2.2.2, invariant@^2.2.4:
1500 | version "2.2.4"
1501 | resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
1502 | integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
1503 | dependencies:
1504 | loose-envify "^1.0.0"
1505 |
1506 | is-buffer@~2.0.3:
1507 | version "2.0.4"
1508 | resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623"
1509 | integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==
1510 |
1511 | is-callable@^1.1.4, is-callable@^1.1.5:
1512 | version "1.2.0"
1513 | resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb"
1514 | integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==
1515 |
1516 | is-date-object@^1.0.1:
1517 | version "1.0.2"
1518 | resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e"
1519 | integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==
1520 |
1521 | is-fullwidth-code-point@^2.0.0:
1522 | version "2.0.0"
1523 | resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
1524 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
1525 |
1526 | is-regex@^1.0.5:
1527 | version "1.1.0"
1528 | resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz#ece38e389e490df0dc21caea2bd596f987f767ff"
1529 | integrity sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==
1530 | dependencies:
1531 | has-symbols "^1.0.1"
1532 |
1533 | is-symbol@^1.0.2:
1534 | version "1.0.3"
1535 | resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937"
1536 | integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==
1537 | dependencies:
1538 | has-symbols "^1.0.1"
1539 |
1540 | isexe@^2.0.0:
1541 | version "2.0.0"
1542 | resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
1543 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
1544 |
1545 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
1546 | version "4.0.0"
1547 | resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
1548 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
1549 |
1550 | js-yaml@3.13.1:
1551 | version "3.13.1"
1552 | resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
1553 | integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
1554 | dependencies:
1555 | argparse "^1.0.7"
1556 | esprima "^4.0.0"
1557 |
1558 | js-yaml@^3.13.0:
1559 | version "3.14.0"
1560 | resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482"
1561 | integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==
1562 | dependencies:
1563 | argparse "^1.0.7"
1564 | esprima "^4.0.0"
1565 |
1566 | jsesc@^2.5.1:
1567 | version "2.5.2"
1568 | resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
1569 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
1570 |
1571 | jsesc@~0.5.0:
1572 | version "0.5.0"
1573 | resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
1574 | integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
1575 |
1576 | json-schema-traverse@^0.4.1:
1577 | version "0.4.1"
1578 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
1579 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
1580 |
1581 | json-stable-stringify-without-jsonify@^1.0.1:
1582 | version "1.0.1"
1583 | resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
1584 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
1585 |
1586 | json5@^2.1.2:
1587 | version "2.1.3"
1588 | resolved "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43"
1589 | integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==
1590 | dependencies:
1591 | minimist "^1.2.5"
1592 |
1593 | leven@^3.1.0:
1594 | version "3.1.0"
1595 | resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
1596 | integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
1597 |
1598 | levenary@^1.1.1:
1599 | version "1.1.1"
1600 | resolved "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77"
1601 | integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==
1602 | dependencies:
1603 | leven "^3.1.0"
1604 |
1605 | levn@^0.3.0, levn@~0.3.0:
1606 | version "0.3.0"
1607 | resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
1608 | integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
1609 | dependencies:
1610 | prelude-ls "~1.1.2"
1611 | type-check "~0.3.2"
1612 |
1613 | locate-path@^3.0.0:
1614 | version "3.0.0"
1615 | resolved "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
1616 | integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
1617 | dependencies:
1618 | p-locate "^3.0.0"
1619 | path-exists "^3.0.0"
1620 |
1621 | lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15:
1622 | version "4.17.21"
1623 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
1624 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
1625 |
1626 | log-symbols@2.2.0:
1627 | version "2.2.0"
1628 | resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"
1629 | integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==
1630 | dependencies:
1631 | chalk "^2.0.1"
1632 |
1633 | loose-envify@^1.0.0:
1634 | version "1.4.0"
1635 | resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
1636 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
1637 | dependencies:
1638 | js-tokens "^3.0.0 || ^4.0.0"
1639 |
1640 | make-dir@^2.0.0, make-dir@^2.1.0:
1641 | version "2.1.0"
1642 | resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
1643 | integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
1644 | dependencies:
1645 | pify "^4.0.1"
1646 | semver "^5.6.0"
1647 |
1648 | mimic-fn@^1.0.0:
1649 | version "1.2.0"
1650 | resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
1651 | integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
1652 |
1653 | minimatch@3.0.4, minimatch@^3.0.4:
1654 | version "3.0.4"
1655 | resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
1656 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
1657 | dependencies:
1658 | brace-expansion "^1.1.7"
1659 |
1660 | minimist@^1.2.5:
1661 | version "1.2.5"
1662 | resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
1663 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
1664 |
1665 | mkdirp@0.5.4:
1666 | version "0.5.4"
1667 | resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz#fd01504a6797ec5c9be81ff43d204961ed64a512"
1668 | integrity sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==
1669 | dependencies:
1670 | minimist "^1.2.5"
1671 |
1672 | mkdirp@^0.5.1:
1673 | version "0.5.5"
1674 | resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
1675 | integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
1676 | dependencies:
1677 | minimist "^1.2.5"
1678 |
1679 | mocha@^6:
1680 | version "6.2.3"
1681 | resolved "https://registry.npmjs.org/mocha/-/mocha-6.2.3.tgz#e648432181d8b99393410212664450a4c1e31912"
1682 | integrity sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==
1683 | dependencies:
1684 | ansi-colors "3.2.3"
1685 | browser-stdout "1.3.1"
1686 | debug "3.2.6"
1687 | diff "3.5.0"
1688 | escape-string-regexp "1.0.5"
1689 | find-up "3.0.0"
1690 | glob "7.1.3"
1691 | growl "1.10.5"
1692 | he "1.2.0"
1693 | js-yaml "3.13.1"
1694 | log-symbols "2.2.0"
1695 | minimatch "3.0.4"
1696 | mkdirp "0.5.4"
1697 | ms "2.1.1"
1698 | node-environment-flags "1.0.5"
1699 | object.assign "4.1.0"
1700 | strip-json-comments "2.0.1"
1701 | supports-color "6.0.0"
1702 | which "1.3.1"
1703 | wide-align "1.1.3"
1704 | yargs "13.3.2"
1705 | yargs-parser "13.1.2"
1706 | yargs-unparser "1.6.0"
1707 |
1708 | ms@2.1.1:
1709 | version "2.1.1"
1710 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
1711 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
1712 |
1713 | ms@^2.1.1:
1714 | version "2.1.2"
1715 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
1716 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
1717 |
1718 | mute-stream@0.0.7:
1719 | version "0.0.7"
1720 | resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
1721 | integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
1722 |
1723 | natural-compare@^1.4.0:
1724 | version "1.4.0"
1725 | resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
1726 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
1727 |
1728 | nice-try@^1.0.4:
1729 | version "1.0.5"
1730 | resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
1731 | integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
1732 |
1733 | node-environment-flags@1.0.5:
1734 | version "1.0.5"
1735 | resolved "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz#fa930275f5bf5dae188d6192b24b4c8bbac3d76a"
1736 | integrity sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==
1737 | dependencies:
1738 | object.getownpropertydescriptors "^2.0.3"
1739 | semver "^5.7.0"
1740 |
1741 | node-modules-regexp@^1.0.0:
1742 | version "1.0.0"
1743 | resolved "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40"
1744 | integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=
1745 |
1746 | node-releases@^1.1.71:
1747 | version "1.1.72"
1748 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.72.tgz#14802ab6b1039a79a0c7d662b610a5bbd76eacbe"
1749 | integrity sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==
1750 |
1751 | object-inspect@^1.7.0:
1752 | version "1.7.0"
1753 | resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67"
1754 | integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==
1755 |
1756 | object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1:
1757 | version "1.1.1"
1758 | resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
1759 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
1760 |
1761 | object.assign@4.1.0, object.assign@^4.1.0:
1762 | version "4.1.0"
1763 | resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da"
1764 | integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==
1765 | dependencies:
1766 | define-properties "^1.1.2"
1767 | function-bind "^1.1.1"
1768 | has-symbols "^1.0.0"
1769 | object-keys "^1.0.11"
1770 |
1771 | object.getownpropertydescriptors@^2.0.3:
1772 | version "2.1.0"
1773 | resolved "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649"
1774 | integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==
1775 | dependencies:
1776 | define-properties "^1.1.3"
1777 | es-abstract "^1.17.0-next.1"
1778 |
1779 | once@^1.3.0:
1780 | version "1.4.0"
1781 | resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1782 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
1783 | dependencies:
1784 | wrappy "1"
1785 |
1786 | onetime@^2.0.0:
1787 | version "2.0.1"
1788 | resolved "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
1789 | integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=
1790 | dependencies:
1791 | mimic-fn "^1.0.0"
1792 |
1793 | optionator@^0.8.2:
1794 | version "0.8.3"
1795 | resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
1796 | integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
1797 | dependencies:
1798 | deep-is "~0.1.3"
1799 | fast-levenshtein "~2.0.6"
1800 | levn "~0.3.0"
1801 | prelude-ls "~1.1.2"
1802 | type-check "~0.3.2"
1803 | word-wrap "~1.2.3"
1804 |
1805 | os-tmpdir@~1.0.2:
1806 | version "1.0.2"
1807 | resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
1808 | integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
1809 |
1810 | p-limit@^2.0.0:
1811 | version "2.3.0"
1812 | resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
1813 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
1814 | dependencies:
1815 | p-try "^2.0.0"
1816 |
1817 | p-locate@^3.0.0:
1818 | version "3.0.0"
1819 | resolved "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
1820 | integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
1821 | dependencies:
1822 | p-limit "^2.0.0"
1823 |
1824 | p-try@^2.0.0:
1825 | version "2.2.0"
1826 | resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
1827 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
1828 |
1829 | parent-module@^1.0.0:
1830 | version "1.0.1"
1831 | resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
1832 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
1833 | dependencies:
1834 | callsites "^3.0.0"
1835 |
1836 | path-exists@^3.0.0:
1837 | version "3.0.0"
1838 | resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
1839 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
1840 |
1841 | path-is-absolute@^1.0.0:
1842 | version "1.0.1"
1843 | resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
1844 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
1845 |
1846 | path-is-inside@^1.0.2:
1847 | version "1.0.2"
1848 | resolved "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
1849 | integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
1850 |
1851 | path-key@^2.0.1:
1852 | version "2.0.1"
1853 | resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
1854 | integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
1855 |
1856 | path-parse@^1.0.6:
1857 | version "1.0.7"
1858 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
1859 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
1860 |
1861 | pify@^4.0.1:
1862 | version "4.0.1"
1863 | resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
1864 | integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
1865 |
1866 | pirates@^4.0.0:
1867 | version "4.0.1"
1868 | resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87"
1869 | integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==
1870 | dependencies:
1871 | node-modules-regexp "^1.0.0"
1872 |
1873 | pkg-dir@^3.0.0:
1874 | version "3.0.0"
1875 | resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
1876 | integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==
1877 | dependencies:
1878 | find-up "^3.0.0"
1879 |
1880 | prelude-ls@~1.1.2:
1881 | version "1.1.2"
1882 | resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
1883 | integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
1884 |
1885 | prettier-linter-helpers@^1.0.0:
1886 | version "1.0.0"
1887 | resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b"
1888 | integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==
1889 | dependencies:
1890 | fast-diff "^1.1.2"
1891 |
1892 | prettier@^1.19.1:
1893 | version "1.19.1"
1894 | resolved "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb"
1895 | integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==
1896 |
1897 | private@^0.1.8:
1898 | version "0.1.8"
1899 | resolved "https://registry.npmjs.org/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
1900 | integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==
1901 |
1902 | progress@^2.0.0:
1903 | version "2.0.3"
1904 | resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
1905 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
1906 |
1907 | punycode@^2.1.0:
1908 | version "2.1.1"
1909 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
1910 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
1911 |
1912 | regenerate-unicode-properties@^8.2.0:
1913 | version "8.2.0"
1914 | resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec"
1915 | integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==
1916 | dependencies:
1917 | regenerate "^1.4.0"
1918 |
1919 | regenerate@^1.4.0:
1920 | version "1.4.1"
1921 | resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f"
1922 | integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==
1923 |
1924 | regenerator-runtime@^0.13.4:
1925 | version "0.13.5"
1926 | resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697"
1927 | integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==
1928 |
1929 | regenerator-transform@^0.14.2:
1930 | version "0.14.4"
1931 | resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz#5266857896518d1616a78a0479337a30ea974cc7"
1932 | integrity sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==
1933 | dependencies:
1934 | "@babel/runtime" "^7.8.4"
1935 | private "^0.1.8"
1936 |
1937 | regexpp@^2.0.1:
1938 | version "2.0.1"
1939 | resolved "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f"
1940 | integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==
1941 |
1942 | regexpu-core@^4.7.0:
1943 | version "4.7.0"
1944 | resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938"
1945 | integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==
1946 | dependencies:
1947 | regenerate "^1.4.0"
1948 | regenerate-unicode-properties "^8.2.0"
1949 | regjsgen "^0.5.1"
1950 | regjsparser "^0.6.4"
1951 | unicode-match-property-ecmascript "^1.0.4"
1952 | unicode-match-property-value-ecmascript "^1.2.0"
1953 |
1954 | regjsgen@^0.5.1:
1955 | version "0.5.2"
1956 | resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733"
1957 | integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==
1958 |
1959 | regjsparser@^0.6.4:
1960 | version "0.6.4"
1961 | resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272"
1962 | integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==
1963 | dependencies:
1964 | jsesc "~0.5.0"
1965 |
1966 | require-directory@^2.1.1:
1967 | version "2.1.1"
1968 | resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
1969 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
1970 |
1971 | require-main-filename@^2.0.0:
1972 | version "2.0.0"
1973 | resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
1974 | integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
1975 |
1976 | resolve-from@^4.0.0:
1977 | version "4.0.0"
1978 | resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
1979 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
1980 |
1981 | resolve@^1.12.0, resolve@^1.3.2:
1982 | version "1.17.0"
1983 | resolved "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444"
1984 | integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==
1985 | dependencies:
1986 | path-parse "^1.0.6"
1987 |
1988 | restore-cursor@^2.0.0:
1989 | version "2.0.0"
1990 | resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
1991 | integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368=
1992 | dependencies:
1993 | onetime "^2.0.0"
1994 | signal-exit "^3.0.2"
1995 |
1996 | rimraf@2.6.3:
1997 | version "2.6.3"
1998 | resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
1999 | integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
2000 | dependencies:
2001 | glob "^7.1.3"
2002 |
2003 | rollup-plugin-babel@^4.4.0:
2004 | version "4.4.0"
2005 | resolved "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz#d15bd259466a9d1accbdb2fe2fff17c52d030acb"
2006 | integrity sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw==
2007 | dependencies:
2008 | "@babel/helper-module-imports" "^7.0.0"
2009 | rollup-pluginutils "^2.8.1"
2010 |
2011 | rollup-pluginutils@^2.8.1:
2012 | version "2.8.2"
2013 | resolved "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e"
2014 | integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==
2015 | dependencies:
2016 | estree-walker "^0.6.1"
2017 |
2018 | rollup@^1:
2019 | version "1.32.1"
2020 | resolved "https://registry.npmjs.org/rollup/-/rollup-1.32.1.tgz#4480e52d9d9e2ae4b46ba0d9ddeaf3163940f9c4"
2021 | integrity sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A==
2022 | dependencies:
2023 | "@types/estree" "*"
2024 | "@types/node" "*"
2025 | acorn "^7.1.0"
2026 |
2027 | run-async@^2.2.0:
2028 | version "2.4.1"
2029 | resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
2030 | integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==
2031 |
2032 | rxjs@^6.4.0:
2033 | version "6.5.5"
2034 | resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec"
2035 | integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==
2036 | dependencies:
2037 | tslib "^1.9.0"
2038 |
2039 | safe-buffer@~5.1.1:
2040 | version "5.1.2"
2041 | resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
2042 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
2043 |
2044 | "safer-buffer@>= 2.1.2 < 3":
2045 | version "2.1.2"
2046 | resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
2047 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
2048 |
2049 | semver@7.0.0:
2050 | version "7.0.0"
2051 | resolved "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
2052 | integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
2053 |
2054 | semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0:
2055 | version "5.7.1"
2056 | resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
2057 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
2058 |
2059 | set-blocking@^2.0.0:
2060 | version "2.0.0"
2061 | resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
2062 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
2063 |
2064 | shebang-command@^1.2.0:
2065 | version "1.2.0"
2066 | resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
2067 | integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
2068 | dependencies:
2069 | shebang-regex "^1.0.0"
2070 |
2071 | shebang-regex@^1.0.0:
2072 | version "1.0.0"
2073 | resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
2074 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
2075 |
2076 | signal-exit@^3.0.2:
2077 | version "3.0.3"
2078 | resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
2079 | integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
2080 |
2081 | slice-ansi@^2.1.0:
2082 | version "2.1.0"
2083 | resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636"
2084 | integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==
2085 | dependencies:
2086 | ansi-styles "^3.2.0"
2087 | astral-regex "^1.0.0"
2088 | is-fullwidth-code-point "^2.0.0"
2089 |
2090 | source-map-support@^0.5.16:
2091 | version "0.5.19"
2092 | resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
2093 | integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
2094 | dependencies:
2095 | buffer-from "^1.0.0"
2096 | source-map "^0.6.0"
2097 |
2098 | source-map@^0.5.0:
2099 | version "0.5.7"
2100 | resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
2101 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
2102 |
2103 | source-map@^0.6.0:
2104 | version "0.6.1"
2105 | resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
2106 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
2107 |
2108 | sprintf-js@~1.0.2:
2109 | version "1.0.3"
2110 | resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
2111 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
2112 |
2113 | "string-width@^1.0.2 || 2", string-width@^2.1.0:
2114 | version "2.1.1"
2115 | resolved "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
2116 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
2117 | dependencies:
2118 | is-fullwidth-code-point "^2.0.0"
2119 | strip-ansi "^4.0.0"
2120 |
2121 | string-width@^3.0.0, string-width@^3.1.0:
2122 | version "3.1.0"
2123 | resolved "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
2124 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
2125 | dependencies:
2126 | emoji-regex "^7.0.1"
2127 | is-fullwidth-code-point "^2.0.0"
2128 | strip-ansi "^5.1.0"
2129 |
2130 | string.prototype.trimend@^1.0.0:
2131 | version "1.0.1"
2132 | resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913"
2133 | integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==
2134 | dependencies:
2135 | define-properties "^1.1.3"
2136 | es-abstract "^1.17.5"
2137 |
2138 | string.prototype.trimleft@^2.1.1:
2139 | version "2.1.2"
2140 | resolved "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz#4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc"
2141 | integrity sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==
2142 | dependencies:
2143 | define-properties "^1.1.3"
2144 | es-abstract "^1.17.5"
2145 | string.prototype.trimstart "^1.0.0"
2146 |
2147 | string.prototype.trimright@^2.1.1:
2148 | version "2.1.2"
2149 | resolved "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz#c76f1cef30f21bbad8afeb8db1511496cfb0f2a3"
2150 | integrity sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==
2151 | dependencies:
2152 | define-properties "^1.1.3"
2153 | es-abstract "^1.17.5"
2154 | string.prototype.trimend "^1.0.0"
2155 |
2156 | string.prototype.trimstart@^1.0.0:
2157 | version "1.0.1"
2158 | resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54"
2159 | integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==
2160 | dependencies:
2161 | define-properties "^1.1.3"
2162 | es-abstract "^1.17.5"
2163 |
2164 | strip-ansi@^4.0.0:
2165 | version "4.0.0"
2166 | resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
2167 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
2168 | dependencies:
2169 | ansi-regex "^3.0.0"
2170 |
2171 | strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
2172 | version "5.2.0"
2173 | resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
2174 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
2175 | dependencies:
2176 | ansi-regex "^4.1.0"
2177 |
2178 | strip-json-comments@2.0.1, strip-json-comments@^2.0.1:
2179 | version "2.0.1"
2180 | resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
2181 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
2182 |
2183 | supports-color@6.0.0:
2184 | version "6.0.0"
2185 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a"
2186 | integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==
2187 | dependencies:
2188 | has-flag "^3.0.0"
2189 |
2190 | supports-color@^5.3.0:
2191 | version "5.5.0"
2192 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
2193 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
2194 | dependencies:
2195 | has-flag "^3.0.0"
2196 |
2197 | table@^5.2.3:
2198 | version "5.4.6"
2199 | resolved "https://registry.npmjs.org/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e"
2200 | integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==
2201 | dependencies:
2202 | ajv "^6.10.2"
2203 | lodash "^4.17.14"
2204 | slice-ansi "^2.1.0"
2205 | string-width "^3.0.0"
2206 |
2207 | text-table@^0.2.0:
2208 | version "0.2.0"
2209 | resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
2210 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
2211 |
2212 | through@^2.3.6:
2213 | version "2.3.8"
2214 | resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
2215 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
2216 |
2217 | tmp@^0.0.33:
2218 | version "0.0.33"
2219 | resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
2220 | integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
2221 | dependencies:
2222 | os-tmpdir "~1.0.2"
2223 |
2224 | to-fast-properties@^2.0.0:
2225 | version "2.0.0"
2226 | resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
2227 | integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
2228 |
2229 | tslib@^1.9.0:
2230 | version "1.13.0"
2231 | resolved "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043"
2232 | integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==
2233 |
2234 | type-check@~0.3.2:
2235 | version "0.3.2"
2236 | resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
2237 | integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
2238 | dependencies:
2239 | prelude-ls "~1.1.2"
2240 |
2241 | uglify-js@^3.9.4:
2242 | version "3.9.4"
2243 | resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.9.4.tgz#867402377e043c1fc7b102253a22b64e5862401b"
2244 | integrity sha512-8RZBJq5smLOa7KslsNsVcSH+KOXf1uDU8yqLeNuVKwmT0T3FA0ZoXlinQfRad7SDcbZZRZE4ov+2v71EnxNyCA==
2245 | dependencies:
2246 | commander "~2.20.3"
2247 |
2248 | unicode-canonical-property-names-ecmascript@^1.0.4:
2249 | version "1.0.4"
2250 | resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"
2251 | integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==
2252 |
2253 | unicode-match-property-ecmascript@^1.0.4:
2254 | version "1.0.4"
2255 | resolved "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c"
2256 | integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==
2257 | dependencies:
2258 | unicode-canonical-property-names-ecmascript "^1.0.4"
2259 | unicode-property-aliases-ecmascript "^1.0.4"
2260 |
2261 | unicode-match-property-value-ecmascript@^1.2.0:
2262 | version "1.2.0"
2263 | resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531"
2264 | integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==
2265 |
2266 | unicode-property-aliases-ecmascript@^1.0.4:
2267 | version "1.1.0"
2268 | resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4"
2269 | integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==
2270 |
2271 | uri-js@^4.2.2:
2272 | version "4.4.1"
2273 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
2274 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
2275 | dependencies:
2276 | punycode "^2.1.0"
2277 |
2278 | which-module@^2.0.0:
2279 | version "2.0.0"
2280 | resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
2281 | integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
2282 |
2283 | which@1.3.1, which@^1.2.9:
2284 | version "1.3.1"
2285 | resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
2286 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
2287 | dependencies:
2288 | isexe "^2.0.0"
2289 |
2290 | wide-align@1.1.3:
2291 | version "1.1.3"
2292 | resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
2293 | integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
2294 | dependencies:
2295 | string-width "^1.0.2 || 2"
2296 |
2297 | word-wrap@~1.2.3:
2298 | version "1.2.3"
2299 | resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
2300 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
2301 |
2302 | wrap-ansi@^5.1.0:
2303 | version "5.1.0"
2304 | resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
2305 | integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==
2306 | dependencies:
2307 | ansi-styles "^3.2.0"
2308 | string-width "^3.0.0"
2309 | strip-ansi "^5.0.0"
2310 |
2311 | wrappy@1:
2312 | version "1.0.2"
2313 | resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
2314 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
2315 |
2316 | write@1.0.3:
2317 | version "1.0.3"
2318 | resolved "https://registry.npmjs.org/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3"
2319 | integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==
2320 | dependencies:
2321 | mkdirp "^0.5.1"
2322 |
2323 | y18n@^4.0.0:
2324 | version "4.0.1"
2325 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4"
2326 | integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==
2327 |
2328 | yargs-parser@13.1.2, yargs-parser@^13.1.2:
2329 | version "13.1.2"
2330 | resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
2331 | integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==
2332 | dependencies:
2333 | camelcase "^5.0.0"
2334 | decamelize "^1.2.0"
2335 |
2336 | yargs-unparser@1.6.0:
2337 | version "1.6.0"
2338 | resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f"
2339 | integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==
2340 | dependencies:
2341 | flat "^4.1.0"
2342 | lodash "^4.17.15"
2343 | yargs "^13.3.0"
2344 |
2345 | yargs@13.3.2, yargs@^13.3.0:
2346 | version "13.3.2"
2347 | resolved "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"
2348 | integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==
2349 | dependencies:
2350 | cliui "^5.0.0"
2351 | find-up "^3.0.0"
2352 | get-caller-file "^2.0.1"
2353 | require-directory "^2.1.1"
2354 | require-main-filename "^2.0.0"
2355 | set-blocking "^2.0.0"
2356 | string-width "^3.0.0"
2357 | which-module "^2.0.0"
2358 | y18n "^4.0.0"
2359 | yargs-parser "^13.1.2"
2360 |
--------------------------------------------------------------------------------