diff --git a/typescript/README.md b/typescript/README.md index 3aca7e5..9c8897d 100644 --- a/typescript/README.md +++ b/typescript/README.md @@ -3,4 +3,5 @@ | Name | Description | | ------------------------- | ------------------------------------------------------------------------------------------------------- | | [lunardash](./lunardash/) | Rhythm game I dropped super early into development | +| [option](./option/) | Typescript implementation of the `Maybe` monad | | [wave38](./wave38/) | Remake of [wave37](https://github.com/Mateiadrielrafael/wave37) I dropped super early into development. | diff --git a/typescript/option/.github/workflows/release.yml b/typescript/option/.github/workflows/release.yml new file mode 100644 index 0000000..1509c61 --- /dev/null +++ b/typescript/option/.github/workflows/release.yml @@ -0,0 +1,25 @@ +name: Release +on: + push: + branches: + - master + +jobs: + release: + name: release + runs-on: ubuntu-latest + steps: + # check out repository code and setup node + - uses: actions/checkout@v1 + - uses: actions/setup-node@v1 + with: + node-version: '12.x' + # install dependencies and run semantic-release + - run: npm i -g pnpm + - run: pnpm install + - run: pnpm test + - run: pnpm run build + - run: pnpx semantic-release + env: + GITHUB_TOKEN: ${{ secrets._GITHUB_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/typescript/option/.gitignore b/typescript/option/.gitignore new file mode 100644 index 0000000..e7a5d37 --- /dev/null +++ b/typescript/option/.gitignore @@ -0,0 +1,4 @@ +node_modules +dist +sandbox +lib \ No newline at end of file diff --git a/typescript/option/.prettierrc b/typescript/option/.prettierrc new file mode 100644 index 0000000..da62ca6 --- /dev/null +++ b/typescript/option/.prettierrc @@ -0,0 +1,5 @@ +{ + "semi": false, + "tabWidth": 4, + "singleQuote": true +} diff --git a/typescript/option/.vscode/settings.json b/typescript/option/.vscode/settings.json new file mode 100644 index 0000000..adb3e3c --- /dev/null +++ b/typescript/option/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "typescript.tsdk": "node_modules/typescript/lib", + "editor.formatOnSave": true +} diff --git a/typescript/option/LICENSE b/typescript/option/LICENSE new file mode 100644 index 0000000..5cd6321 --- /dev/null +++ b/typescript/option/LICENSE @@ -0,0 +1,39 @@ +The Prosperity Public License 2.0.0 + +Contributor: Matei Adriel + +Source Code: https://github.com/Mateiadrielrafael/ecs + +This license lets you use and share this software for free, +with a trial-length time limit on commercial use. Specifically: + +If you follow the rules below, you may do everything with this +software that would otherwise infringe either the contributor's +copyright in it, any patent claim the contributor can license +that covers this software as of the contributor's latest +contribution, or both. + +1. You must limit use of this software in any manner primarily + intended for or directed toward commercial advantage or + private monetary compensation to a trial period of 32 + consecutive calendar days. This limit does not apply to use in + developing feedback, modifications, or extensions that you + contribute back to those giving this license. + +2. Ensure everyone who gets a copy of this software from you, in + source code or any other form, gets the text of this license + and the contributor and source code lines above. + +3. Do not make any legal claim against anyone for infringing any + patent claim they would infringe by using this software alone, + accusing this software, with or without changes, alone or as + part of a larger application. + +You are excused for unknowingly breaking rule 1 if you stop +doing anything requiring this license within 30 days of +learning you broke the rule. + +**This software comes as is, without any warranty at all. As far +as the law allows, the contributor will not be liable for any +damages related to this software or this license, for any kind of +legal claim.** \ No newline at end of file diff --git a/typescript/option/README.md b/typescript/option/README.md new file mode 100644 index 0000000..5e5486f --- /dev/null +++ b/typescript/option/README.md @@ -0,0 +1,71 @@ +![npm (scoped)](https://img.shields.io/npm/v/@adrielus/option?style=for-the-badge) +![npm bundle size (scoped)](https://img.shields.io/bundlephobia/minzip/@adrielus/option?style=for-the-badge) +[![forthebadge](https://forthebadge.com/images/badges/powered-by-water.svg)](https://forthebadge.com) + +# Option + +Probably the most opinionated implementation of the Option type for TypeScript. + +## Features: + +- Lazy and async versions of helpers: + One of the goals of this lib is to provide variations of helpers which are lazy (don't compute something if it's not needed) or async (make mixing Promises and Options easier). If there is any function you want one of those variations of, be sure to open an issue:) +- Large amount of helpers (curently 30), more than f#'s and elm's core libraries combined. +- Typesafe: + ```ts + const foo0: Option = None // works + const foo1: Option = Some('foo1') // works + const foo2: Option = 'foo2' // errors out + const foo3: Option = null // errors out + const foo4: Option = Some(4) // errors out + ``` +- Reference equality: + ```ts + Some(7) === Some(7) // true + Some(7) === Some(5) // false + Some(7) === None // false + ``` + +## Limitations + +Both limitaions bellow come from the lack of nominal-typing offered by TypeScript and are inherited from the `Brand` type offered by the [utility-types](https://github.com/piotrwitek/utility-types) library + +- Due to the way the library works (using the `Brand` + type from [utility-types](https://github.com/piotrwitezutility-types)) `Some(4) === 4` will return true, similarly to how `4 == "4"` returns true (except in this libraries case the `===` operator will behave the same way). +- The inner value of `Option` cannot have a `__brand` prop + (well, tehnically it can but it would be overwritten by the `Brand` type from [utility-types](https://github.com/piotrwitek/utility-types)) + +## Installation + +```sh +npm install @adrielus/option +``` + +(There is also an amd build at `/dist/bundle.umd.js` which uses the `Option` namespace) + +## Usage + +For detailed usage read [the docs](https://github.com/Mateiadrielrafael/option/tree/master/docs/main.md) + +> Note: The docs are still work in progress. Contributions are welcome:) + +# Contributing + +First, clone this repo: + +```sh +git clone https://github.com/Mateiadrielrafael/option +cd option +``` + +Then use **_pnpm_** to install the dependencies: + +```sh +pnpm install +``` + +You can use the `build` command to build the package (this is dont automatically by github actions): + +```sh +pnpm run build +``` diff --git a/typescript/option/docs/main.md b/typescript/option/docs/main.md new file mode 100644 index 0000000..2d30523 --- /dev/null +++ b/typescript/option/docs/main.md @@ -0,0 +1,230 @@ +# Documentation + +## Table of contents: + +### General: + +- [Option](#Option) +- [Some](#Some) +- [None](#None) + +### Helpers: + +- [bind](#Bind) +- [count](#Count) +- [exists](#Exists) +- [filter](#Filter) +- [fold](#Fold) +- [foldback](#Foldback) +- [forall](#Forall) +- [fromNullable](#FromNullable) +- [fromArray](#FromArray) + +# General + +## Option + +Data type holding an optional value (can be either None or Some(x)) + +### Signature + +```ts +type Option = Internals.SomeClass | Internals.NoneClass +``` + +## None + +Value holding nothing + +### Signature + +```ts +const None: Internals.NoneClass +``` + +## Some + +Creates an Option instance holding a value + +### Signature + +```ts +const Some: (v: T) => Internals.SomeClass +``` + +### Usage + +```ts +import { Some } from '@adrielus/option' + +Some(x) // Some(x) +``` + +# Helpers + +## Bind + +Invokes a function on an optional value that itself yields an option. + +### Signature + +```ts +const bind: (binder: Mapper>, option: Option) => Option +``` + +### Usage + +```ts +import { Some, None, bind } from '@adrielus/option' + +const half = (x: number) => (x % 2 ? None : Some(x / 2)) + +bind(half, Some(14)) // Some(7) +bind(half, Some(13)) // None +bind(half, None) // None +``` + +## Count + +Returns a zero if the option is None, a one otherwise. + +### Signature: + +```ts +const count: (option: Option) => number +``` + +### Usage + +```ts +import { Some, None, count } from '@adrielus/option' + +count(Some(x)) // 1 +count(None) // 0 +``` + +## Exists + +Returns false if the option is None, otherwise it returns the result of applying the predicate to the option value. + +### Signature + +```ts +const exists: (predicate: Mapper, option: Option) => boolean +``` + +### Usage + +```ts +import { Some, None, exists } from '@adrielus/option' + +exists(() => true, None) // false +exists(() => true, Some(x)) // true +exists(() => false, Some(x)) // false +``` + +## Filter + +Invokes a function on an optional value that itself yields an option. + +### Signature: + +```ts +const filter: (predicate: Mapper, option: Option) => NoneClass +``` + +### Usage + +```ts +import { Some, None, filter } from '@adrielus/option' + +filter(() => true, None) // None +filter(() => true, Some(x)) // Some(x) +filter(() => false, Some(x)) // None +``` + +## Fold + +A function to update the state data when given a value from an option. + +### Signature + +```ts +const fold: (folder: Folder, initial: U, option: Option) => U +``` + +### Usage + +```ts +import { Some, None, fold } from '@adrielus/option' + +const add = (a: number, b: number) => a + b + +fold(add, x, None) // x +fold(add, x, Some(y)) // x + y +``` + +## Foldback + +A function to update the state data when given a value from an option. + +### Signature + +```ts +const foldback: ( + folder: BackFolder, + option: Option, + initial: U +) => U +``` + +### Usage + +```ts +import { Some, None, foldback } from '@adrielus/option' + +const add = (a: number, b: number) => a + b + +foldback(add, None, x) // x +foldback(add, Some(y), x) // x + y +``` + +# FromNullable + +A function to create options from nullable values. + +### Signature + +```ts +const fromNullable: (value: Nullable) => Option +``` + +### Usage + +```ts +import { Some, None, fromNullable } from '@adrielus/option' + +fromNullable(7) // Some(7) +fromNullable(null) // None +``` + +## FromArray + +A function to create options from arrays. If the given array is empty produces None, else Some of the first element. + +### Signature + +```ts +const fromArray: (value: [T] | []) => Option +``` + +### Usage + +```ts +import { Some, None, fromArray } from '@adrielus/option' + +fromArray([7]) // Some(7) +fromArray([]) // None +``` + +**_This is still work in progress, right now only covering about 60% of the library. Contributions are welcome_** diff --git a/typescript/option/package.json b/typescript/option/package.json new file mode 100644 index 0000000..fb968ed --- /dev/null +++ b/typescript/option/package.json @@ -0,0 +1,68 @@ +{ + "name": "@adrielus/option", + "version": "0.0.0-development", + "description": "Typescript version of fsharps Option module", + "main": "dist/bundle.cjs.js", + "module": "dist/index.esm.js", + "typings": "dist/index.esm.d.ts", + "browser": "dist/bundle.umd.js", + "scripts": { + "prebuild": "rimraf dist", + "build": "rollup -c rollup.config.ts", + "test": "mocha -r ts-node/register src/**/*.test.ts" + }, + "publishConfig": { + "access": "public" + }, + "files": [ + "dist" + ], + "keywords": [ + "typescript", + "fsharp", + "fp", + "functional-programming", + "monad", + "immutable", + "stateless", + "classless", + "option", + "typesafe", + "functor", + "pure", + "option", + "some", + "just", + "none", + "nothing", + "maybe", + "nullable" + ], + "sideEffects": false, + "devDependencies": { + "@rollup/plugin-commonjs": "^11.0.0", + "@rollup/plugin-node-resolve": "^6.0.0", + "@types/chai": "^4.2.7", + "@types/mocha": "^5.2.7", + "@types/node": "^12.12.21", + "@types/sinon": "^7.5.1", + "@wessberg/rollup-plugin-ts": "^1.1.83", + "chai": "^4.2.0", + "mocha": "^6.2.2", + "rimraf": "^3.0.0", + "rollup": "^1.27.14", + "rollup-plugin-filesize": "^6.2.1", + "rollup-plugin-terser": "^5.1.3", + "semantic-release": "^15.14.0", + "sinon": "^8.0.1", + "ts-node": "^8.5.4", + "typescript": "^3.7.4" + }, + "author": "Matei Adriel", + "license": "SEE LICENSE IN LICENSE", + "dependencies": { + "@thi.ng/compose": "^1.3.6", + "tslib": "^1.10.0", + "utility-types": "^3.10.0" + } +} diff --git a/typescript/option/pnpm-lock.yaml b/typescript/option/pnpm-lock.yaml new file mode 100644 index 0000000..f8b0d92 --- /dev/null +++ b/typescript/option/pnpm-lock.yaml @@ -0,0 +1,4317 @@ +dependencies: + '@thi.ng/compose': 1.3.6 + tslib: 1.10.0 + utility-types: 3.10.0 +devDependencies: + '@rollup/plugin-commonjs': 11.0.0_rollup@1.27.14 + '@rollup/plugin-node-resolve': 6.0.0_rollup@1.27.14 + '@types/chai': 4.2.7 + '@types/mocha': 5.2.7 + '@types/node': 12.12.21 + '@types/sinon': 7.5.1 + '@wessberg/rollup-plugin-ts': 1.1.83_rollup@1.27.14+typescript@3.7.4 + chai: 4.2.0 + mocha: 6.2.2 + rimraf: 3.0.0 + rollup: 1.27.14 + rollup-plugin-filesize: 6.2.1 + rollup-plugin-terser: 5.1.3_rollup@1.27.14 + semantic-release: 15.14.0_semantic-release@15.14.0 + sinon: 8.0.1 + ts-node: 8.5.4_typescript@3.7.4 + typescript: 3.7.4 +lockfileVersion: 5.1 +packages: + /@babel/code-frame/7.5.5: + dependencies: + '@babel/highlight': 7.5.0 + dev: true + resolution: + integrity: sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== + /@babel/core/7.7.7: + dependencies: + '@babel/code-frame': 7.5.5 + '@babel/generator': 7.7.7 + '@babel/helpers': 7.7.4 + '@babel/parser': 7.7.7 + '@babel/template': 7.7.4 + '@babel/traverse': 7.7.4 + '@babel/types': 7.7.4 + convert-source-map: 1.7.0 + debug: 4.1.1 + json5: 2.1.1 + lodash: 4.17.15 + resolve: 1.14.1 + semver: 5.7.1 + source-map: 0.5.7 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-jlSjuj/7z138NLZALxVgrx13AOtqip42ATZP7+kYl53GvDV6+4dCek1mVUo8z8c8Xnw/mx2q3d9HWh3griuesQ== + /@babel/generator/7.7.7: + dependencies: + '@babel/types': 7.7.4 + jsesc: 2.5.2 + lodash: 4.17.15 + source-map: 0.5.7 + dev: true + resolution: + integrity: sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ== + /@babel/helper-annotate-as-pure/7.7.4: + dependencies: + '@babel/types': 7.7.4 + dev: true + resolution: + integrity: sha512-2BQmQgECKzYKFPpiycoF9tlb5HA4lrVyAmLLVK177EcQAqjVLciUb2/R+n1boQ9y5ENV3uz2ZqiNw7QMBBw1Og== + /@babel/helper-builder-binary-assignment-operator-visitor/7.7.4: + dependencies: + '@babel/helper-explode-assignable-expression': 7.7.4 + '@babel/types': 7.7.4 + dev: true + resolution: + integrity: sha512-Biq/d/WtvfftWZ9Uf39hbPBYDUo986m5Bb4zhkeYDGUllF43D+nUe5M6Vuo6/8JDK/0YX/uBdeoQpyaNhNugZQ== + /@babel/helper-call-delegate/7.7.4: + dependencies: + '@babel/helper-hoist-variables': 7.7.4 + '@babel/traverse': 7.7.4 + '@babel/types': 7.7.4 + dev: true + resolution: + integrity: sha512-8JH9/B7J7tCYJ2PpWVpw9JhPuEVHztagNVuQAFBVFYluRMlpG7F1CgKEgGeL6KFqcsIa92ZYVj6DSc0XwmN1ZA== + /@babel/helper-create-regexp-features-plugin/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-regex': 7.5.5 + regexpu-core: 4.6.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0 + resolution: + integrity: sha512-Mt+jBKaxL0zfOIWrfQpnfYCN7/rS6GKx6CCCfuoqVVd+17R8zNDlzVYmIi9qyb2wOk002NsmSTDymkIygDUH7A== + /@babel/helper-define-map/7.7.4: + dependencies: + '@babel/helper-function-name': 7.7.4 + '@babel/types': 7.7.4 + lodash: 4.17.15 + dev: true + resolution: + integrity: sha512-v5LorqOa0nVQUvAUTUF3KPastvUt/HzByXNamKQ6RdJRTV7j8rLL+WB5C/MzzWAwOomxDhYFb1wLLxHqox86lg== + /@babel/helper-explode-assignable-expression/7.7.4: + dependencies: + '@babel/traverse': 7.7.4 + '@babel/types': 7.7.4 + dev: true + resolution: + integrity: sha512-2/SicuFrNSXsZNBxe5UGdLr+HZg+raWBLE9vC98bdYOKX/U6PY0mdGlYUJdtTDPSU0Lw0PNbKKDpwYHJLn2jLg== + /@babel/helper-function-name/7.7.4: + dependencies: + '@babel/helper-get-function-arity': 7.7.4 + '@babel/template': 7.7.4 + '@babel/types': 7.7.4 + dev: true + resolution: + integrity: sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ== + /@babel/helper-get-function-arity/7.7.4: + dependencies: + '@babel/types': 7.7.4 + dev: true + resolution: + integrity: sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA== + /@babel/helper-hoist-variables/7.7.4: + dependencies: + '@babel/types': 7.7.4 + dev: true + resolution: + integrity: sha512-wQC4xyvc1Jo/FnLirL6CEgPgPCa8M74tOdjWpRhQYapz5JC7u3NYU1zCVoVAGCE3EaIP9T1A3iW0WLJ+reZlpQ== + /@babel/helper-member-expression-to-functions/7.7.4: + dependencies: + '@babel/types': 7.7.4 + dev: true + resolution: + integrity: sha512-9KcA1X2E3OjXl/ykfMMInBK+uVdfIVakVe7W7Lg3wfXUNyS3Q1HWLFRwZIjhqiCGbslummPDnmb7vIekS0C1vw== + /@babel/helper-module-imports/7.7.4: + dependencies: + '@babel/types': 7.7.4 + dev: true + resolution: + integrity: sha512-dGcrX6K9l8258WFjyDLJwuVKxR4XZfU0/vTUgOQYWEnRD8mgr+p4d6fCUMq/ys0h4CCt/S5JhbvtyErjWouAUQ== + /@babel/helper-module-transforms/7.7.5: + dependencies: + '@babel/helper-module-imports': 7.7.4 + '@babel/helper-simple-access': 7.7.4 + '@babel/helper-split-export-declaration': 7.7.4 + '@babel/template': 7.7.4 + '@babel/types': 7.7.4 + lodash: 4.17.15 + dev: true + resolution: + integrity: sha512-A7pSxyJf1gN5qXVcidwLWydjftUN878VkalhXX5iQDuGyiGK3sOrrKKHF4/A4fwHtnsotv/NipwAeLzY4KQPvw== + /@babel/helper-optimise-call-expression/7.7.4: + dependencies: + '@babel/types': 7.7.4 + dev: true + resolution: + integrity: sha512-VB7gWZ2fDkSuqW6b1AKXkJWO5NyNI3bFL/kK79/30moK57blr6NbH8xcl2XcKCwOmJosftWunZqfO84IGq3ZZg== + /@babel/helper-plugin-utils/7.0.0: + dev: true + resolution: + integrity: sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== + /@babel/helper-regex/7.5.5: + dependencies: + lodash: 4.17.15 + dev: true + resolution: + integrity: sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw== + /@babel/helper-remap-async-to-generator/7.7.4: + dependencies: + '@babel/helper-annotate-as-pure': 7.7.4 + '@babel/helper-wrap-function': 7.7.4 + '@babel/template': 7.7.4 + '@babel/traverse': 7.7.4 + '@babel/types': 7.7.4 + dev: true + resolution: + integrity: sha512-Sk4xmtVdM9sA/jCI80f+KS+Md+ZHIpjuqmYPk1M7F/upHou5e4ReYmExAiu6PVe65BhJPZA2CY9x9k4BqE5klw== + /@babel/helper-replace-supers/7.7.4: + dependencies: + '@babel/helper-member-expression-to-functions': 7.7.4 + '@babel/helper-optimise-call-expression': 7.7.4 + '@babel/traverse': 7.7.4 + '@babel/types': 7.7.4 + dev: true + resolution: + integrity: sha512-pP0tfgg9hsZWo5ZboYGuBn/bbYT/hdLPVSS4NMmiRJdwWhP0IznPwN9AE1JwyGsjSPLC364I0Qh5p+EPkGPNpg== + /@babel/helper-simple-access/7.7.4: + dependencies: + '@babel/template': 7.7.4 + '@babel/types': 7.7.4 + dev: true + resolution: + integrity: sha512-zK7THeEXfan7UlWsG2A6CI/L9jVnI5+xxKZOdej39Y0YtDYKx9raHk5F2EtK9K8DHRTihYwg20ADt9S36GR78A== + /@babel/helper-split-export-declaration/7.7.4: + dependencies: + '@babel/types': 7.7.4 + dev: true + resolution: + integrity: sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug== + /@babel/helper-wrap-function/7.7.4: + dependencies: + '@babel/helper-function-name': 7.7.4 + '@babel/template': 7.7.4 + '@babel/traverse': 7.7.4 + '@babel/types': 7.7.4 + dev: true + resolution: + integrity: sha512-VsfzZt6wmsocOaVU0OokwrIytHND55yvyT4BPB9AIIgwr8+x7617hetdJTsuGwygN5RC6mxA9EJztTjuwm2ofg== + /@babel/helpers/7.7.4: + dependencies: + '@babel/template': 7.7.4 + '@babel/traverse': 7.7.4 + '@babel/types': 7.7.4 + dev: true + resolution: + integrity: sha512-ak5NGZGJ6LV85Q1Zc9gn2n+ayXOizryhjSUBTdu5ih1tlVCJeuQENzc4ItyCVhINVXvIT/ZQ4mheGIsfBkpskg== + /@babel/highlight/7.5.0: + dependencies: + chalk: 2.4.2 + esutils: 2.0.3 + js-tokens: 4.0.0 + dev: true + resolution: + integrity: sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== + /@babel/parser/7.7.7: + dev: true + engines: + node: '>=6.0.0' + hasBin: true + resolution: + integrity: sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw== + /@babel/plugin-proposal-async-generator-functions/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-plugin-utils': 7.0.0 + '@babel/helper-remap-async-to-generator': 7.7.4 + '@babel/plugin-syntax-async-generators': 7.7.4_@babel+core@7.7.7 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-1ypyZvGRXriY/QP668+s8sFr2mqinhkRDMPSQLNghCQE+GAkFtp+wkHVvg2+Hdki8gwP+NFzJBJ/N1BfzCCDEw== + /@babel/plugin-proposal-dynamic-import/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-plugin-utils': 7.0.0 + '@babel/plugin-syntax-dynamic-import': 7.7.4_@babel+core@7.7.7 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-StH+nGAdO6qDB1l8sZ5UBV8AC3F2VW2I8Vfld73TMKyptMU9DY5YsJAS8U81+vEtxcH3Y/La0wG0btDrhpnhjQ== + /@babel/plugin-proposal-json-strings/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-plugin-utils': 7.0.0 + '@babel/plugin-syntax-json-strings': 7.7.4_@babel+core@7.7.7 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-wQvt3akcBTfLU/wYoqm/ws7YOAQKu8EVJEvHip/mzkNtjaclQoCCIqKXFP5/eyfnfbQCDV3OLRIK3mIVyXuZlw== + /@babel/plugin-proposal-object-rest-spread/7.7.7_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-plugin-utils': 7.0.0 + '@babel/plugin-syntax-object-rest-spread': 7.7.4_@babel+core@7.7.7 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-3qp9I8lelgzNedI3hrhkvhaEYree6+WHnyA/q4Dza9z7iEIs1eyhWyJnetk3jJ69RT0AT4G0UhEGwyGFJ7GUuQ== + /@babel/plugin-proposal-optional-catch-binding/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-plugin-utils': 7.0.0 + '@babel/plugin-syntax-optional-catch-binding': 7.7.4_@babel+core@7.7.7 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-DyM7U2bnsQerCQ+sejcTNZh8KQEUuC3ufzdnVnSiUv/qoGJp2Z3hanKL18KDhsBT5Wj6a7CMT5mdyCNJsEaA9w== + /@babel/plugin-proposal-unicode-property-regex/7.7.7_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-create-regexp-features-plugin': 7.7.4_@babel+core@7.7.7 + '@babel/helper-plugin-utils': 7.0.0 + dev: true + engines: + node: '>=4' + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-80PbkKyORBUVm1fbTLrHpYdJxMThzM1UqFGh0ALEhO9TYbG86Ah9zQYAB/84axz2vcxefDLdZwWwZNlYARlu9w== + /@babel/plugin-syntax-async-generators/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-plugin-utils': 7.0.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-Li4+EjSpBgxcsmeEF8IFcfV/+yJGxHXDirDkEoyFjumuwbmfCVHUt0HuowD/iGM7OhIRyXJH9YXxqiH6N815+g== + /@babel/plugin-syntax-dynamic-import/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-plugin-utils': 7.0.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-jHQW0vbRGvwQNgyVxwDh4yuXu4bH1f5/EICJLAhl1SblLs2CDhrsmCk+v5XLdE9wxtAFRyxx+P//Iw+a5L/tTg== + /@babel/plugin-syntax-json-strings/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-plugin-utils': 7.0.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-QpGupahTQW1mHRXddMG5srgpHWqRLwJnJZKXTigB9RPFCCGbDGCgBeM/iC82ICXp414WeYx/tD54w7M2qRqTMg== + /@babel/plugin-syntax-object-rest-spread/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-plugin-utils': 7.0.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-mObR+r+KZq0XhRVS2BrBKBpr5jqrqzlPvS9C9vuOf5ilSwzloAl7RPWLrgKdWS6IreaVrjHxTjtyqFiOisaCwg== + /@babel/plugin-syntax-optional-catch-binding/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-plugin-utils': 7.0.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-4ZSuzWgFxqHRE31Glu+fEr/MirNZOMYmD/0BhBWyLyOOQz/gTAl7QmWm2hX1QxEIXsr2vkdlwxIzTyiYRC4xcQ== + /@babel/plugin-syntax-top-level-await/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-plugin-utils': 7.0.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-wdsOw0MvkL1UIgiQ/IFr3ETcfv1xb8RMM0H9wbiDyLaJFyiDg5oZvDLCXosIXmFeIlweML5iOBXAkqddkYNizg== + /@babel/plugin-transform-arrow-functions/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-plugin-utils': 7.0.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-zUXy3e8jBNPiffmqkHRNDdZM2r8DWhCB7HhcoyZjiK1TxYEluLHAvQuYnTT+ARqRpabWqy/NHkO6e3MsYB5YfA== + /@babel/plugin-transform-async-to-generator/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-module-imports': 7.7.4 + '@babel/helper-plugin-utils': 7.0.0 + '@babel/helper-remap-async-to-generator': 7.7.4 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-zpUTZphp5nHokuy8yLlyafxCJ0rSlFoSHypTUWgpdwoDXWQcseaect7cJ8Ppk6nunOM6+5rPMkod4OYKPR5MUg== + /@babel/plugin-transform-block-scoped-functions/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-plugin-utils': 7.0.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-kqtQzwtKcpPclHYjLK//3lH8OFsCDuDJBaFhVwf8kqdnF6MN4l618UDlcA7TfRs3FayrHj+svYnSX8MC9zmUyQ== + /@babel/plugin-transform-block-scoping/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-plugin-utils': 7.0.0 + lodash: 4.17.15 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-2VBe9u0G+fDt9B5OV5DQH4KBf5DoiNkwFKOz0TCvBWvdAN2rOykCTkrL+jTLxfCAm76l9Qo5OqL7HBOx2dWggg== + /@babel/plugin-transform-classes/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-annotate-as-pure': 7.7.4 + '@babel/helper-define-map': 7.7.4 + '@babel/helper-function-name': 7.7.4 + '@babel/helper-optimise-call-expression': 7.7.4 + '@babel/helper-plugin-utils': 7.0.0 + '@babel/helper-replace-supers': 7.7.4 + '@babel/helper-split-export-declaration': 7.7.4 + globals: 11.12.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-sK1mjWat7K+buWRuImEzjNf68qrKcrddtpQo3swi9j7dUcG6y6R6+Di039QN2bD1dykeswlagupEmpOatFHHUg== + /@babel/plugin-transform-computed-properties/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-plugin-utils': 7.0.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-bSNsOsZnlpLLyQew35rl4Fma3yKWqK3ImWMSC/Nc+6nGjC9s5NFWAer1YQ899/6s9HxO2zQC1WoFNfkOqRkqRQ== + /@babel/plugin-transform-destructuring/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-plugin-utils': 7.0.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-4jFMXI1Cu2aXbcXXl8Lr6YubCn6Oc7k9lLsu8v61TZh+1jny2BWmdtvY9zSUlLdGUvcy9DMAWyZEOqjsbeg/wA== + /@babel/plugin-transform-dotall-regex/7.7.7_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-create-regexp-features-plugin': 7.7.4_@babel+core@7.7.7 + '@babel/helper-plugin-utils': 7.0.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-b4in+YlTeE/QmTgrllnb3bHA0HntYvjz8O3Mcbx75UBPJA2xhb5A8nle498VhxSXJHQefjtQxpnLPehDJ4TRlg== + /@babel/plugin-transform-duplicate-keys/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-plugin-utils': 7.0.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-g1y4/G6xGWMD85Tlft5XedGaZBCIVN+/P0bs6eabmcPP9egFleMAo65OOjlhcz1njpwagyY3t0nsQC9oTFegJA== + /@babel/plugin-transform-exponentiation-operator/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.7.4 + '@babel/helper-plugin-utils': 7.0.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-MCqiLfCKm6KEA1dglf6Uqq1ElDIZwFuzz1WH5mTf8k2uQSxEJMbOIEh7IZv7uichr7PMfi5YVSrr1vz+ipp7AQ== + /@babel/plugin-transform-for-of/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-plugin-utils': 7.0.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-zZ1fD1B8keYtEcKF+M1TROfeHTKnijcVQm0yO/Yu1f7qoDoxEIc/+GX6Go430Bg84eM/xwPFp0+h4EbZg7epAA== + /@babel/plugin-transform-function-name/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-function-name': 7.7.4 + '@babel/helper-plugin-utils': 7.0.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-E/x09TvjHNhsULs2IusN+aJNRV5zKwxu1cpirZyRPw+FyyIKEHPXTsadj48bVpc1R5Qq1B5ZkzumuFLytnbT6g== + /@babel/plugin-transform-literals/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-plugin-utils': 7.0.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-X2MSV7LfJFm4aZfxd0yLVFrEXAgPqYoDG53Br/tCKiKYfX0MjVjQeWPIhPHHsCqzwQANq+FLN786fF5rgLS+gw== + /@babel/plugin-transform-member-expression-literals/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-plugin-utils': 7.0.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-9VMwMO7i69LHTesL0RdGy93JU6a+qOPuvB4F4d0kR0zyVjJRVJRaoaGjhtki6SzQUu8yen/vxPKN6CWnCUw6bA== + /@babel/plugin-transform-modules-amd/7.7.5_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-module-transforms': 7.7.5 + '@babel/helper-plugin-utils': 7.0.0 + babel-plugin-dynamic-import-node: 2.3.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-CT57FG4A2ZUNU1v+HdvDSDrjNWBrtCmSH6YbbgN3Lrf0Di/q/lWRxZrE72p3+HCCz9UjfZOEBdphgC0nzOS6DQ== + /@babel/plugin-transform-modules-commonjs/7.7.5_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-module-transforms': 7.7.5 + '@babel/helper-plugin-utils': 7.0.0 + '@babel/helper-simple-access': 7.7.4 + babel-plugin-dynamic-import-node: 2.3.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-9Cq4zTFExwFhQI6MT1aFxgqhIsMWQWDVwOgLzl7PTWJHsNaqFvklAU+Oz6AQLAS0dJKTwZSOCo20INwktxpi3Q== + /@babel/plugin-transform-modules-systemjs/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-hoist-variables': 7.7.4 + '@babel/helper-plugin-utils': 7.0.0 + babel-plugin-dynamic-import-node: 2.3.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-y2c96hmcsUi6LrMqvmNDPBBiGCiQu0aYqpHatVVu6kD4mFEXKjyNxd/drc18XXAf9dv7UXjrZwBVmTTGaGP8iw== + /@babel/plugin-transform-modules-umd/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-module-transforms': 7.7.5 + '@babel/helper-plugin-utils': 7.0.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-u2B8TIi0qZI4j8q4C51ktfO7E3cQ0qnaXFI1/OXITordD40tt17g/sXqgNNCcMTcBFKrUPcGDx+TBJuZxLx7tw== + /@babel/plugin-transform-named-capturing-groups-regex/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-create-regexp-features-plugin': 7.7.4_@babel+core@7.7.7 + dev: true + peerDependencies: + '@babel/core': ^7.0.0 + resolution: + integrity: sha512-jBUkiqLKvUWpv9GLSuHUFYdmHg0ujC1JEYoZUfeOOfNydZXp1sXObgyPatpcwjWgsdBGsagWW0cdJpX/DO2jMw== + /@babel/plugin-transform-new-target/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-plugin-utils': 7.0.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-CnPRiNtOG1vRodnsyGX37bHQleHE14B9dnnlgSeEs3ek3fHN1A1SScglTCg1sfbe7sRQ2BUcpgpTpWSfMKz3gg== + /@babel/plugin-transform-object-super/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-plugin-utils': 7.0.0 + '@babel/helper-replace-supers': 7.7.4 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-ho+dAEhC2aRnff2JCA0SAK7V2R62zJd/7dmtoe7MHcso4C2mS+vZjn1Pb1pCVZvJs1mgsvv5+7sT+m3Bysb6eg== + /@babel/plugin-transform-parameters/7.7.7_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-call-delegate': 7.7.4 + '@babel/helper-get-function-arity': 7.7.4 + '@babel/helper-plugin-utils': 7.0.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-OhGSrf9ZBrr1fw84oFXj5hgi8Nmg+E2w5L7NhnG0lPvpDtqd7dbyilM2/vR8CKbJ907RyxPh2kj6sBCSSfI9Ew== + /@babel/plugin-transform-property-literals/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-plugin-utils': 7.0.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-MatJhlC4iHsIskWYyawl53KuHrt+kALSADLQQ/HkhTjX954fkxIEh4q5slL4oRAnsm/eDoZ4q0CIZpcqBuxhJQ== + /@babel/plugin-transform-regenerator/7.7.5_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + regenerator-transform: 0.14.1 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-/8I8tPvX2FkuEyWbjRCt4qTAgZK0DVy8QRguhA524UH48RfGJy94On2ri+dCuwOpcerPRl9O4ebQkRcVzIaGBw== + /@babel/plugin-transform-reserved-words/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-plugin-utils': 7.0.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-OrPiUB5s5XvkCO1lS7D8ZtHcswIC57j62acAnJZKqGGnHP+TIc/ljQSrgdX/QyOTdEK5COAhuc820Hi1q2UgLQ== + /@babel/plugin-transform-runtime/7.7.6_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-module-imports': 7.7.4 + '@babel/helper-plugin-utils': 7.0.0 + resolve: 1.14.1 + semver: 5.7.1 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-tajQY+YmXR7JjTwRvwL4HePqoL3DYxpYXIHKVvrOIvJmeHe2y1w4tz5qz9ObUDC9m76rCzIMPyn4eERuwA4a4A== + /@babel/plugin-transform-shorthand-properties/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-plugin-utils': 7.0.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-q+suddWRfIcnyG5YiDP58sT65AJDZSUhXQDZE3r04AuqD6d/XLaQPPXSBzP2zGerkgBivqtQm9XKGLuHqBID6Q== + /@babel/plugin-transform-spread/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-plugin-utils': 7.0.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-8OSs0FLe5/80cndziPlg4R0K6HcWSM0zyNhHhLsmw/Nc5MaA49cAsnoJ/t/YZf8qkG7fD+UjTRaApVDB526d7Q== + /@babel/plugin-transform-sticky-regex/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-plugin-utils': 7.0.0 + '@babel/helper-regex': 7.5.5 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-Ls2NASyL6qtVe1H1hXts9yuEeONV2TJZmplLONkMPUG158CtmnrzW5Q5teibM5UVOFjG0D3IC5mzXR6pPpUY7A== + /@babel/plugin-transform-template-literals/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-annotate-as-pure': 7.7.4 + '@babel/helper-plugin-utils': 7.0.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-sA+KxLwF3QwGj5abMHkHgshp9+rRz+oY9uoRil4CyLtgEuE/88dpkeWgNk5qKVsJE9iSfly3nvHapdRiIS2wnQ== + /@babel/plugin-transform-typeof-symbol/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-plugin-utils': 7.0.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-KQPUQ/7mqe2m0B8VecdyaW5XcQYaePyl9R7IsKd+irzj6jvbhoGnRE+M0aNkyAzI07VfUQ9266L5xMARitV3wg== + /@babel/plugin-transform-unicode-regex/7.7.4_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-create-regexp-features-plugin': 7.7.4_@babel+core@7.7.7 + '@babel/helper-plugin-utils': 7.0.0 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-N77UUIV+WCvE+5yHw+oks3m18/umd7y392Zv7mYTpFqHtkpcc+QUz+gLJNTWVlWROIWeLqY0f3OjZxV5TcXnRw== + /@babel/preset-env/7.7.7_@babel+core@7.7.7: + dependencies: + '@babel/core': 7.7.7 + '@babel/helper-module-imports': 7.7.4 + '@babel/helper-plugin-utils': 7.0.0 + '@babel/plugin-proposal-async-generator-functions': 7.7.4_@babel+core@7.7.7 + '@babel/plugin-proposal-dynamic-import': 7.7.4_@babel+core@7.7.7 + '@babel/plugin-proposal-json-strings': 7.7.4_@babel+core@7.7.7 + '@babel/plugin-proposal-object-rest-spread': 7.7.7_@babel+core@7.7.7 + '@babel/plugin-proposal-optional-catch-binding': 7.7.4_@babel+core@7.7.7 + '@babel/plugin-proposal-unicode-property-regex': 7.7.7_@babel+core@7.7.7 + '@babel/plugin-syntax-async-generators': 7.7.4_@babel+core@7.7.7 + '@babel/plugin-syntax-dynamic-import': 7.7.4_@babel+core@7.7.7 + '@babel/plugin-syntax-json-strings': 7.7.4_@babel+core@7.7.7 + '@babel/plugin-syntax-object-rest-spread': 7.7.4_@babel+core@7.7.7 + '@babel/plugin-syntax-optional-catch-binding': 7.7.4_@babel+core@7.7.7 + '@babel/plugin-syntax-top-level-await': 7.7.4_@babel+core@7.7.7 + '@babel/plugin-transform-arrow-functions': 7.7.4_@babel+core@7.7.7 + '@babel/plugin-transform-async-to-generator': 7.7.4_@babel+core@7.7.7 + '@babel/plugin-transform-block-scoped-functions': 7.7.4_@babel+core@7.7.7 + '@babel/plugin-transform-block-scoping': 7.7.4_@babel+core@7.7.7 + '@babel/plugin-transform-classes': 7.7.4_@babel+core@7.7.7 + '@babel/plugin-transform-computed-properties': 7.7.4_@babel+core@7.7.7 + '@babel/plugin-transform-destructuring': 7.7.4_@babel+core@7.7.7 + '@babel/plugin-transform-dotall-regex': 7.7.7_@babel+core@7.7.7 + '@babel/plugin-transform-duplicate-keys': 7.7.4_@babel+core@7.7.7 + '@babel/plugin-transform-exponentiation-operator': 7.7.4_@babel+core@7.7.7 + '@babel/plugin-transform-for-of': 7.7.4_@babel+core@7.7.7 + '@babel/plugin-transform-function-name': 7.7.4_@babel+core@7.7.7 + '@babel/plugin-transform-literals': 7.7.4_@babel+core@7.7.7 + '@babel/plugin-transform-member-expression-literals': 7.7.4_@babel+core@7.7.7 + '@babel/plugin-transform-modules-amd': 7.7.5_@babel+core@7.7.7 + '@babel/plugin-transform-modules-commonjs': 7.7.5_@babel+core@7.7.7 + '@babel/plugin-transform-modules-systemjs': 7.7.4_@babel+core@7.7.7 + '@babel/plugin-transform-modules-umd': 7.7.4_@babel+core@7.7.7 + '@babel/plugin-transform-named-capturing-groups-regex': 7.7.4_@babel+core@7.7.7 + '@babel/plugin-transform-new-target': 7.7.4_@babel+core@7.7.7 + '@babel/plugin-transform-object-super': 7.7.4_@babel+core@7.7.7 + '@babel/plugin-transform-parameters': 7.7.7_@babel+core@7.7.7 + '@babel/plugin-transform-property-literals': 7.7.4_@babel+core@7.7.7 + '@babel/plugin-transform-regenerator': 7.7.5_@babel+core@7.7.7 + '@babel/plugin-transform-reserved-words': 7.7.4_@babel+core@7.7.7 + '@babel/plugin-transform-shorthand-properties': 7.7.4_@babel+core@7.7.7 + '@babel/plugin-transform-spread': 7.7.4_@babel+core@7.7.7 + '@babel/plugin-transform-sticky-regex': 7.7.4_@babel+core@7.7.7 + '@babel/plugin-transform-template-literals': 7.7.4_@babel+core@7.7.7 + '@babel/plugin-transform-typeof-symbol': 7.7.4_@babel+core@7.7.7 + '@babel/plugin-transform-unicode-regex': 7.7.4_@babel+core@7.7.7 + '@babel/types': 7.7.4 + browserslist: 4.7.2 + core-js-compat: 3.6.0 + invariant: 2.2.4 + js-levenshtein: 1.1.6 + semver: 5.7.1 + dev: true + peerDependencies: + '@babel/core': ^7.0.0-0 + resolution: + integrity: sha512-pCu0hrSSDVI7kCVUOdcMNQEbOPJ52E+LrQ14sN8uL2ALfSqePZQlKrOy+tM4uhEdYlCHi4imr8Zz2cZe9oSdIg== + /@babel/runtime/7.7.7: + dependencies: + regenerator-runtime: 0.13.3 + dev: true + resolution: + integrity: sha512-uCnC2JEVAu8AKB5do1WRIsvrdJ0flYx/A/9f/6chdacnEZ7LmavjdsDXr5ksYBegxtuTPR5Va9/+13QF/kFkCA== + /@babel/template/7.7.4: + dependencies: + '@babel/code-frame': 7.5.5 + '@babel/parser': 7.7.7 + '@babel/types': 7.7.4 + dev: true + resolution: + integrity: sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw== + /@babel/traverse/7.7.4: + dependencies: + '@babel/code-frame': 7.5.5 + '@babel/generator': 7.7.7 + '@babel/helper-function-name': 7.7.4 + '@babel/helper-split-export-declaration': 7.7.4 + '@babel/parser': 7.7.7 + '@babel/types': 7.7.4 + debug: 4.1.1 + globals: 11.12.0 + lodash: 4.17.15 + dev: true + resolution: + integrity: sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw== + /@babel/types/7.7.4: + dependencies: + esutils: 2.0.3 + lodash: 4.17.15 + to-fast-properties: 2.0.0 + dev: true + resolution: + integrity: sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA== + /@nodelib/fs.scandir/2.1.3: + dependencies: + '@nodelib/fs.stat': 2.0.3 + run-parallel: 1.1.9 + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== + /@nodelib/fs.stat/2.0.3: + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== + /@nodelib/fs.walk/1.2.4: + dependencies: + '@nodelib/fs.scandir': 2.1.3 + fastq: 1.6.0 + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== + /@octokit/endpoint/5.5.1: + dependencies: + '@octokit/types': 2.0.2 + is-plain-object: 3.0.0 + universal-user-agent: 4.0.0 + dev: true + resolution: + integrity: sha512-nBFhRUb5YzVTCX/iAK1MgQ4uWo89Gu0TH00qQHoYRCsE12dWcG1OiLd7v2EIo2+tpUKPMOQ62QFy9hy9Vg2ULg== + /@octokit/request-error/1.2.0: + dependencies: + '@octokit/types': 2.0.2 + deprecation: 2.3.1 + once: 1.4.0 + dev: true + resolution: + integrity: sha512-DNBhROBYjjV/I9n7A8kVkmQNkqFAMem90dSxqvPq57e2hBr7mNTX98y3R2zDpqMQHVRpBDjsvsfIGgBzy+4PAg== + /@octokit/request/5.3.1: + dependencies: + '@octokit/endpoint': 5.5.1 + '@octokit/request-error': 1.2.0 + '@octokit/types': 2.0.2 + deprecation: 2.3.1 + is-plain-object: 3.0.0 + node-fetch: 2.6.0 + once: 1.4.0 + universal-user-agent: 4.0.0 + dev: true + resolution: + integrity: sha512-5/X0AL1ZgoU32fAepTfEoggFinO3rxsMLtzhlUX+RctLrusn/CApJuGFCd0v7GMFhF+8UiCsTTfsu7Fh1HnEJg== + /@octokit/rest/16.35.2: + dependencies: + '@octokit/request': 5.3.1 + '@octokit/request-error': 1.2.0 + atob-lite: 2.0.0 + before-after-hook: 2.1.0 + btoa-lite: 1.0.0 + deprecation: 2.3.1 + lodash.get: 4.4.2 + lodash.set: 4.3.2 + lodash.uniq: 4.5.0 + octokit-pagination-methods: 1.1.0 + once: 1.4.0 + universal-user-agent: 4.0.0 + dev: true + resolution: + integrity: sha512-iijaNZpn9hBpUdh8YdXqNiWazmq4R1vCUsmxpBB0kCQ0asHZpCx+HNs22eiHuwYKRhO31ZSAGBJLi0c+3XHaKQ== + /@octokit/types/2.0.2: + dependencies: + '@types/node': 12.12.21 + dev: true + resolution: + integrity: sha512-StASIL2lgT3TRjxv17z9pAqbnI7HGu9DrJlg3sEBFfCLaMEqp+O3IQPUF6EZtQ4xkAu2ml6kMBBCtGxjvmtmuQ== + /@rollup/plugin-commonjs/11.0.0_rollup@1.27.14: + dependencies: + '@rollup/pluginutils': 3.0.1_rollup@1.27.14 + estree-walker: 0.6.1 + is-reference: 1.1.4 + magic-string: 0.25.4 + resolve: 1.14.1 + rollup: 1.27.14 + dev: true + engines: + node: '>= 8.0.0' + peerDependencies: + rollup: ^1.20.0 + resolution: + integrity: sha512-jnm//T5ZWOZ6zmJ61fReSCBOif+Ax8dHVoVggA+d2NA7T4qCWgQ3KYr+zN2faGEYLpe1wa03IzvhR+sqVLxUWg== + /@rollup/plugin-node-resolve/6.0.0_rollup@1.27.14: + dependencies: + '@rollup/pluginutils': 3.0.1_rollup@1.27.14 + '@types/resolve': 0.0.8 + builtin-modules: 3.1.0 + is-module: 1.0.0 + resolve: 1.14.1 + rollup: 1.27.14 + dev: true + engines: + node: '>= 8.0.0' + peerDependencies: + rollup: ^1.20.0 + resolution: + integrity: sha512-GqWz1CfXOsqpeVMcoM315+O7zMxpRsmhWyhJoxLFHVSp9S64/u02i7len/FnbTNbmgYs+sZyilasijH8UiuboQ== + /@rollup/pluginutils/3.0.1_rollup@1.27.14: + dependencies: + estree-walker: 0.6.1 + rollup: 1.27.14 + dev: true + engines: + node: '>= 8.0.0' + peerDependencies: + rollup: ^1.20.0 + resolution: + integrity: sha512-PmNurkecagFimv7ZdKCVOfQuqKDPkrcpLFxRBcQ00LYr4HAjJwhCFxBiY2Xoletll2htTIiXBg6g0Yg21h2M3w== + /@semantic-release/commit-analyzer/6.3.3_semantic-release@15.14.0: + dependencies: + conventional-changelog-angular: 5.0.6 + conventional-commits-filter: 2.0.2 + conventional-commits-parser: 3.0.8 + debug: 4.1.1 + import-from: 3.0.0 + lodash: 4.17.15 + semantic-release: 15.14.0_semantic-release@15.14.0 + dev: true + engines: + node: '>=8.16' + peerDependencies: + semantic-release: '>=15.8.0 <16.0.0' + resolution: + integrity: sha512-Pyv1ZL2u5AIOY4YbxFCAB5J1PEh5yON8ylbfiPiriDGGW6Uu1U3Y8lysMtWu+FUD5x7tSnyIzhqx0+fxPxqbgw== + /@semantic-release/error/2.2.0: + dev: true + resolution: + integrity: sha512-9Tj/qn+y2j+sjCI3Jd+qseGtHjOAeg7dU2/lVcqIQ9TV3QDaDXDYXcoOHU+7o2Hwh8L8ymL4gfuO7KxDs3q2zg== + /@semantic-release/github/5.5.5_semantic-release@15.14.0: + dependencies: + '@octokit/rest': 16.35.2 + '@semantic-release/error': 2.2.0 + aggregate-error: 3.0.1 + bottleneck: 2.19.5 + debug: 4.1.1 + dir-glob: 3.0.1 + fs-extra: 8.1.0 + globby: 10.0.1 + http-proxy-agent: 2.1.0 + https-proxy-agent: 3.0.1 + issue-parser: 5.0.0 + lodash: 4.17.15 + mime: 2.4.4 + p-filter: 2.1.0 + p-retry: 4.2.0 + semantic-release: 15.14.0_semantic-release@15.14.0 + url-join: 4.0.1 + dev: true + engines: + node: '>=8.16' + peerDependencies: + semantic-release: '>=15.8.0 <16.0.0' + resolution: + integrity: sha512-Wo9OIULMRydbq+HpFh9yiLvra1XyEULPro9Tp4T5MQJ0WZyAQ3YQm74IdT8Pe/UmVDq2nfpT1oHrWkwOc4loHg== + /@semantic-release/npm/5.3.4_semantic-release@15.14.0: + dependencies: + '@semantic-release/error': 2.2.0 + aggregate-error: 3.0.1 + execa: 3.4.0 + fs-extra: 8.1.0 + lodash: 4.17.15 + nerf-dart: 1.0.0 + normalize-url: 4.5.0 + npm: 6.13.4 + rc: 1.2.8 + read-pkg: 5.2.0 + registry-auth-token: 4.0.0 + semantic-release: 15.14.0_semantic-release@15.14.0 + tempy: 0.3.0 + dev: true + engines: + node: '>=8.16' + peerDependencies: + semantic-release: '>=15.9.0 <16.0.0' + resolution: + integrity: sha512-XjITNRA/oOpJ7BfHk/WaOHs1WniYBszTde/bwADjjk1Luacpxg87jbDQVVt/oA3Zlx+MelxACRIEuRiPC5gu8g== + /@semantic-release/release-notes-generator/7.3.5_semantic-release@15.14.0: + dependencies: + conventional-changelog-angular: 5.0.6 + conventional-changelog-writer: 4.0.11 + conventional-commits-filter: 2.0.2 + conventional-commits-parser: 3.0.8 + debug: 4.1.1 + get-stream: 5.1.0 + import-from: 3.0.0 + into-stream: 5.1.1 + lodash: 4.17.15 + read-pkg-up: 7.0.1 + semantic-release: 15.14.0_semantic-release@15.14.0 + dev: true + engines: + node: '>=8.16' + peerDependencies: + semantic-release: '>=15.8.0 <16.0.0 || >=16.0.0-beta <17.0.0' + resolution: + integrity: sha512-LGjgPBGjjmjap/76O0Md3wc04Y7IlLnzZceLsAkcYRwGQdRPTTFUJKqDQTuieWTs7zfHzQoZqsqPfFxEN+g2+Q== + /@sinonjs/commons/1.7.0: + dependencies: + type-detect: 4.0.8 + dev: true + resolution: + integrity: sha512-qbk9AP+cZUsKdW1GJsBpxPKFmCJ0T8swwzVje3qFd+AkQb74Q/tiuzrdfFg8AD2g5HH/XbE/I8Uc1KYHVYWfhg== + /@sinonjs/formatio/4.0.1: + dependencies: + '@sinonjs/commons': 1.7.0 + '@sinonjs/samsam': 4.2.0 + dev: true + resolution: + integrity: sha512-asIdlLFrla/WZybhm0C8eEzaDNNrzymiTqHMeJl6zPW2881l3uuVRpm0QlRQEjqYWv6CcKMGYME3LbrLJsORBw== + /@sinonjs/samsam/4.2.0: + dependencies: + '@sinonjs/commons': 1.7.0 + array-from: 2.1.1 + lodash.get: 4.4.2 + dev: true + resolution: + integrity: sha512-yG7QbUz38ZPIegfuSMEcbOo0kkLGmPa8a0Qlz4dk7+cXYALDScWjIZzAm/u2+Frh+bcdZF6wZJZwwuJjY0WAjA== + /@sinonjs/text-encoding/0.7.1: + dev: true + resolution: + integrity: sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ== + /@thi.ng/api/6.6.0: + dev: false + resolution: + integrity: sha512-CG4jxoidxdTNAVdGEGj9nLwOts37BszTWSl3RejFL/K2yOxEkB77c0zfvz19sSZVfUWv5dDWgXewbYwBnHvKlA== + /@thi.ng/compose/1.3.6: + dependencies: + '@thi.ng/api': 6.6.0 + '@thi.ng/errors': 1.2.2 + dev: false + resolution: + integrity: sha512-anCFAQqnfOjPXGkkAptJE9gMBtD4jMJc/2sETLl09M3BUMCj3i6We1tCJ9ljcoXwO+jgscTAaMOopiOwslO0SA== + /@thi.ng/errors/1.2.2: + dev: false + resolution: + integrity: sha512-M0T8m+H+FDAFi6Oe8FTYQWTBgx+xrwsstiH4KzSUGjDGmJ7Hi/FSfwmBPIslrRVnrnJKwBk41aYQ1tk3J6CNKw== + /@types/chai/4.2.7: + dev: true + resolution: + integrity: sha512-luq8meHGYwvky0O7u0eQZdA7B4Wd9owUCqvbw2m3XCrCU8mplYOujMBbvyS547AxJkC+pGnd0Cm15eNxEUNU8g== + /@types/color-name/1.1.1: + dev: true + resolution: + integrity: sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + /@types/estree/0.0.39: + dev: true + resolution: + integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + /@types/estree/0.0.40: + dev: true + resolution: + integrity: sha512-p3KZgMto/JyxosKGmnLDJ/dG5wf+qTRMUjHJcspC2oQKa4jP7mz+tv0ND56lLBu3ojHlhzY33Ol+khLyNmilkA== + /@types/events/3.0.0: + dev: true + resolution: + integrity: sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== + /@types/glob/7.1.1: + dependencies: + '@types/events': 3.0.0 + '@types/minimatch': 3.0.3 + '@types/node': 12.12.21 + dev: true + resolution: + integrity: sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== + /@types/minimatch/3.0.3: + dev: true + resolution: + integrity: sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + /@types/mkdirp/0.5.2: + dependencies: + '@types/node': 12.12.21 + dev: true + resolution: + integrity: sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg== + /@types/mocha/5.2.7: + dev: true + resolution: + integrity: sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ== + /@types/node/12.12.21: + dev: true + resolution: + integrity: sha512-8sRGhbpU+ck1n0PGAUgVrWrWdjSW2aqNeyC15W88GRsMpSwzv6RJGlLhE7s2RhVSOdyDmxbqlWSeThq4/7xqlA== + /@types/normalize-package-data/2.4.0: + dev: true + resolution: + integrity: sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== + /@types/object-path/0.11.0: + dev: true + resolution: + integrity: sha512-/tuN8jDbOXcPk+VzEVZzzAgw1Byz7s/itb2YI10qkSyy6nykJH02DuhfrflxVdAdE7AZ91h5X6Cn0dmVdFw2TQ== + /@types/parse-json/4.0.0: + dev: true + resolution: + integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + /@types/resolve/0.0.8: + dependencies: + '@types/node': 12.12.21 + dev: true + resolution: + integrity: sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== + /@types/retry/0.12.0: + dev: true + resolution: + integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== + /@types/semver/6.2.0: + dev: true + resolution: + integrity: sha512-1OzrNb4RuAzIT7wHSsgZRlMBlNsJl+do6UblR7JMW4oB7bbR+uBEYtUh7gEc/jM84GGilh68lSOokyM/zNUlBA== + /@types/sinon/7.5.1: + dev: true + resolution: + integrity: sha512-EZQUP3hSZQyTQRfiLqelC9NMWd1kqLcmQE0dMiklxBkgi84T+cHOhnKpgk4NnOWpGX863yE6+IaGnOXUNFqDnQ== + /@types/ua-parser-js/0.7.33: + dev: true + resolution: + integrity: sha512-ngUKcHnytUodUCL7C6EZ+lVXUjTMQb+9p/e1JjV5tN9TVzS98lHozWEFRPY1QcCdwFeMsmVWfZ3DPPT/udCyIw== + /@wessberg/browserslist-generator/1.0.30: + dependencies: + '@types/object-path': 0.11.0 + '@types/semver': 6.2.0 + '@types/ua-parser-js': 0.7.33 + browserslist: 4.7.2 + caniuse-lite: 1.0.30001016 + mdn-browser-compat-data: 0.0.98 + object-path: 0.11.4 + semver: 6.3.0 + ua-parser-js: 0.7.21 + dev: true + engines: + node: '>=8.0.0' + resolution: + integrity: sha512-Ba1Q36FZhe1KrLWDkxUetrWCEIdmyPvndKp4zTirWHYnTfNyvr4adDIrQaIq1h49DkPDgQEkBw7PcMRSvuFA3g== + /@wessberg/rollup-plugin-ts/1.1.83_rollup@1.27.14+typescript@3.7.4: + dependencies: + '@babel/core': 7.7.7 + '@babel/plugin-transform-runtime': 7.7.6_@babel+core@7.7.7 + '@babel/preset-env': 7.7.7_@babel+core@7.7.7 + '@babel/runtime': 7.7.7 + '@types/mkdirp': 0.5.2 + '@types/node': 12.12.21 + '@types/resolve': 0.0.8 + '@wessberg/browserslist-generator': 1.0.30 + '@wessberg/stringutil': 1.0.19 + '@wessberg/ts-clone-node': 0.0.0 + browserslist: 4.7.2 + find-up: 4.1.0 + magic-string: 0.25.4 + mkdirp: 0.5.1 + resolve: 1.14.1 + rollup: 1.27.14 + rollup-pluginutils: 2.8.2 + slash: 3.0.0 + tslib: 1.10.0 + typescript: 3.7.4 + dev: true + engines: + node: '>=8.0.0' + peerDependencies: + rollup: ^1.27.0 + typescript: ^3.x + resolution: + integrity: sha512-6lbqD/awcGTPhFCxTHS/DBKEy5OQ53AIWoaZd3u1bizJ+Nx6ih1JEGzAak9ghX9+aCW9ItVHU+NPrdDHl03W+w== + /@wessberg/stringutil/1.0.19: + dev: true + engines: + node: '>=8.0.0' + resolution: + integrity: sha512-9AZHVXWlpN8Cn9k5BC/O0Dzb9E9xfEMXzYrNunwvkUTvuK7xgQPVRZpLo+jWCOZ5r8oBa8NIrHuPEu1hzbb6bg== + /@wessberg/ts-clone-node/0.0.0: + dependencies: + '@types/node': 12.12.21 + typescript: 3.7.4 + dev: true + engines: + node: '>=8.0.0' + resolution: + integrity: sha512-bJ+Hoxh6xU8r6N4fOKIC64nAWUqFxUj0IrT66qGKG7IpF9+pC54Xy/2XSZljEnJGtYgv0WiaeEkRaellwFF42A== + /JSONStream/1.3.5: + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + dev: true + hasBin: true + resolution: + integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + /acorn/7.1.0: + dev: true + engines: + node: '>=0.4.0' + hasBin: true + resolution: + integrity: sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ== + /agent-base/4.3.0: + dependencies: + es6-promisify: 5.0.0 + dev: true + engines: + node: '>= 4.0.0' + resolution: + integrity: sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== + /aggregate-error/3.0.1: + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA== + /ansi-align/3.0.0: + dependencies: + string-width: 3.1.0 + dev: true + resolution: + integrity: sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== + /ansi-colors/3.2.3: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== + /ansi-escapes/3.2.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + /ansi-regex/3.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + /ansi-regex/4.1.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + /ansi-regex/5.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + /ansi-styles/3.2.1: + dependencies: + color-convert: 1.9.3 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + /ansi-styles/4.2.0: + dependencies: + '@types/color-name': 1.1.1 + color-convert: 2.0.1 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-7kFQgnEaMdRtwf6uSfUnVr9gSGC7faurn+J/Mv90/W+iTtN0405/nLdopfMWwchyxhbGYl6TC4Sccn9TUkGAgg== + /ansicolors/0.3.2: + dev: true + resolution: + integrity: sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk= + /arg/4.1.2: + dev: true + resolution: + integrity: sha512-+ytCkGcBtHZ3V2r2Z06AncYO8jz46UEamcspGoU8lHcEbpn6J77QK0vdWvChsclg/tM5XIJC5tnjmPp7Eq6Obg== + /argparse/1.0.10: + dependencies: + sprintf-js: 1.0.3 + dev: true + resolution: + integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + /argv-formatter/1.0.0: + dev: true + resolution: + integrity: sha1-oMoMvCmltz6Dbuvhy/bF4OTrgvk= + /array-find-index/1.0.2: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= + /array-from/2.1.1: + dev: true + resolution: + integrity: sha1-z+nYwmYoudxa7MYqn12PHzUsEZU= + /array-ify/1.0.0: + dev: true + resolution: + integrity: sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= + /array-union/2.1.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + /arrify/1.0.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + /assertion-error/1.1.0: + dev: true + resolution: + integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + /atob-lite/2.0.0: + dev: true + resolution: + integrity: sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY= + /babel-plugin-dynamic-import-node/2.3.0: + dependencies: + object.assign: 4.1.0 + dev: true + resolution: + integrity: sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== + /balanced-match/1.0.0: + dev: true + resolution: + integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + /before-after-hook/2.1.0: + dev: true + resolution: + integrity: sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A== + /bottleneck/2.19.5: + dev: true + resolution: + integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw== + /boxen/4.2.0: + dependencies: + ansi-align: 3.0.0 + camelcase: 5.3.1 + chalk: 3.0.0 + cli-boxes: 2.2.0 + string-width: 4.2.0 + term-size: 2.1.1 + type-fest: 0.8.1 + widest-line: 3.1.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== + /brace-expansion/1.1.11: + dependencies: + balanced-match: 1.0.0 + concat-map: 0.0.1 + dev: true + resolution: + integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + /braces/3.0.2: + dependencies: + fill-range: 7.0.1 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + /brotli-size/4.0.0: + dependencies: + duplexer: 0.1.1 + dev: true + engines: + node: '>= 10.16.0' + resolution: + integrity: sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA== + /browser-stdout/1.3.1: + dev: true + resolution: + integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + /browserslist/4.7.2: + dependencies: + caniuse-lite: 1.0.30001016 + electron-to-chromium: 1.3.322 + node-releases: 1.1.43 + dev: true + hasBin: true + resolution: + integrity: sha512-uZavT/gZXJd2UTi9Ov7/Z340WOSQ3+m1iBVRUknf+okKxonL9P83S3ctiBDtuRmRu8PiCHjqyueqQ9HYlJhxiw== + /browserslist/4.8.2: + dependencies: + caniuse-lite: 1.0.30001016 + electron-to-chromium: 1.3.322 + node-releases: 1.1.43 + dev: true + hasBin: true + resolution: + integrity: sha512-+M4oeaTplPm/f1pXDw84YohEv7B1i/2Aisei8s4s6k3QsoSHa7i5sz8u/cGQkkatCPxMASKxPualR4wwYgVboA== + /btoa-lite/1.0.0: + dev: true + resolution: + integrity: sha1-M3dm2hWAEhD92VbCLpxokaudAzc= + /buffer-from/1.1.1: + dev: true + resolution: + integrity: sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + /builtin-modules/3.1.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw== + /callsites/3.1.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + /camelcase-keys/4.2.0: + dependencies: + camelcase: 4.1.0 + map-obj: 2.0.0 + quick-lru: 1.1.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= + /camelcase/4.1.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= + /camelcase/5.3.1: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + /caniuse-lite/1.0.30001016: + dev: true + resolution: + integrity: sha512-yYQ2QfotceRiH4U+h1Us86WJXtVHDmy3nEKIdYPsZCYnOV5/tMgGbmoIlrMzmh2VXlproqYtVaKeGDBkMZifFA== + /cardinal/2.1.1: + dependencies: + ansicolors: 0.3.2 + redeyed: 2.1.1 + dev: true + hasBin: true + resolution: + integrity: sha1-fMEFXYItISlU0HsIXeolHMe8VQU= + /chai/4.2.0: + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.2 + deep-eql: 3.0.1 + get-func-name: 2.0.0 + pathval: 1.1.0 + type-detect: 4.0.8 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw== + /chalk/2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + /chalk/3.0.0: + dependencies: + ansi-styles: 4.2.0 + supports-color: 7.1.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + /check-error/1.0.2: + dev: true + resolution: + integrity: sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= + /clean-stack/2.2.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + /cli-boxes/2.2.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w== + /cli-table/0.3.1: + dependencies: + colors: 1.0.3 + dev: true + engines: + node: '>= 0.2.0' + resolution: + integrity: sha1-9TsFJmqLGguTSz0IIebi3FkUriM= + /cliui/5.0.0: + dependencies: + string-width: 3.1.0 + strip-ansi: 5.2.0 + wrap-ansi: 5.1.0 + dev: true + resolution: + integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + /cliui/6.0.0: + dependencies: + string-width: 4.2.0 + strip-ansi: 6.0.0 + wrap-ansi: 6.2.0 + dev: true + resolution: + integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + /color-convert/1.9.3: + dependencies: + color-name: 1.1.3 + dev: true + resolution: + integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + /color-convert/2.0.1: + dependencies: + color-name: 1.1.4 + dev: true + engines: + node: '>=7.0.0' + resolution: + integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + /color-name/1.1.3: + dev: true + resolution: + integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + /color-name/1.1.4: + dev: true + resolution: + integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + /colors/1.0.3: + dev: true + engines: + node: '>=0.1.90' + resolution: + integrity: sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= + /colors/1.4.0: + dev: true + engines: + node: '>=0.1.90' + resolution: + integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + /commander/2.20.3: + dev: true + resolution: + integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + /compare-func/1.3.2: + dependencies: + array-ify: 1.0.0 + dot-prop: 3.0.0 + dev: true + resolution: + integrity: sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg= + /concat-map/0.0.1: + dev: true + resolution: + integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + /conventional-changelog-angular/5.0.6: + dependencies: + compare-func: 1.3.2 + q: 1.5.1 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-QDEmLa+7qdhVIv8sFZfVxU1VSyVvnXPsxq8Vam49mKUcO1Z8VTLEJk9uI21uiJUsnmm0I4Hrsdc9TgkOQo9WSA== + /conventional-changelog-writer/4.0.11: + dependencies: + compare-func: 1.3.2 + conventional-commits-filter: 2.0.2 + dateformat: 3.0.3 + handlebars: 4.5.3 + json-stringify-safe: 5.0.1 + lodash: 4.17.15 + meow: 5.0.0 + semver: 6.3.0 + split: 1.0.1 + through2: 3.0.1 + dev: true + engines: + node: '>=6.9.0' + hasBin: true + resolution: + integrity: sha512-g81GQOR392I+57Cw3IyP1f+f42ME6aEkbR+L7v1FBBWolB0xkjKTeCWVguzRrp6UiT1O6gBpJbEy2eq7AnV1rw== + /conventional-commits-filter/2.0.2: + dependencies: + lodash.ismatch: 4.4.0 + modify-values: 1.0.1 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-WpGKsMeXfs21m1zIw4s9H5sys2+9JccTzpN6toXtxhpw2VNF2JUXwIakthKBy+LN4DvJm+TzWhxOMWOs1OFCFQ== + /conventional-commits-parser/3.0.8: + dependencies: + JSONStream: 1.3.5 + is-text-path: 1.0.1 + lodash: 4.17.15 + meow: 5.0.0 + split2: 2.2.0 + through2: 3.0.1 + trim-off-newlines: 1.0.1 + dev: true + engines: + node: '>=6.9.0' + hasBin: true + resolution: + integrity: sha512-YcBSGkZbYp7d+Cr3NWUeXbPDFUN6g3SaSIzOybi8bjHL5IJ5225OSCxJJ4LgziyEJ7AaJtE9L2/EU6H7Nt/DDQ== + /convert-source-map/1.7.0: + dependencies: + safe-buffer: 5.1.2 + dev: true + resolution: + integrity: sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + /core-js-compat/3.6.0: + dependencies: + browserslist: 4.8.2 + semver: 7.0.0 + dev: true + resolution: + integrity: sha512-Z3eCNjGgoYluH89Jt4wVkfYsc/VdLrA2/woX5lm0isO/pCT+P+Y+o65bOuEnjDJLthdwTBxbCVzptTXtc18fJg== + /core-util-is/1.0.2: + dev: true + resolution: + integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + /cosmiconfig/6.0.0: + dependencies: + '@types/parse-json': 4.0.0 + import-fresh: 3.2.1 + parse-json: 5.0.0 + path-type: 4.0.0 + yaml: 1.7.2 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== + /cross-spawn/6.0.5: + dependencies: + nice-try: 1.0.5 + path-key: 2.0.1 + semver: 5.7.1 + shebang-command: 1.2.0 + which: 1.3.1 + dev: true + engines: + node: '>=4.8' + resolution: + integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + /cross-spawn/7.0.1: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg== + /crypto-random-string/1.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= + /currently-unhandled/0.4.1: + dependencies: + array-find-index: 1.0.2 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-mI3zP+qxke95mmE2nddsF635V+o= + /dateformat/3.0.3: + dev: true + resolution: + integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== + /debug/3.1.0: + dependencies: + ms: 2.0.0 + dev: true + resolution: + integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + /debug/3.2.6: + dependencies: + ms: 2.1.1 + dev: true + resolution: + integrity: sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + /debug/4.1.1: + dependencies: + ms: 2.1.2 + dev: true + resolution: + integrity: sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + /decamelize-keys/1.1.0: + dependencies: + decamelize: 1.2.0 + map-obj: 1.0.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= + /decamelize/1.2.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + /deep-eql/3.0.1: + dependencies: + type-detect: 4.0.8 + dev: true + engines: + node: '>=0.12' + resolution: + integrity: sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== + /deep-extend/0.6.0: + dev: true + engines: + node: '>=4.0.0' + resolution: + integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + /define-properties/1.1.3: + dependencies: + object-keys: 1.1.1 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + /deprecation/2.3.1: + dev: true + resolution: + integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== + /diff/3.5.0: + dev: true + engines: + node: '>=0.3.1' + resolution: + integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== + /diff/4.0.1: + dev: true + engines: + node: '>=0.3.1' + resolution: + integrity: sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q== + /dir-glob/3.0.1: + dependencies: + path-type: 4.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + /dot-prop/3.0.0: + dependencies: + is-obj: 1.0.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-G3CK8JSknJoOfbyteQq6U52sEXc= + /duplexer/0.1.1: + dev: true + resolution: + integrity: sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= + /duplexer2/0.1.4: + dependencies: + readable-stream: 2.3.6 + dev: true + resolution: + integrity: sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= + /electron-to-chromium/1.3.322: + dev: true + resolution: + integrity: sha512-Tc8JQEfGQ1MzfSzI/bTlSr7btJv/FFO7Yh6tanqVmIWOuNCu6/D1MilIEgLtmWqIrsv+o4IjpLAhgMBr/ncNAA== + /emoji-regex/7.0.3: + dev: true + resolution: + integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + /emoji-regex/8.0.0: + dev: true + resolution: + integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + /end-of-stream/1.4.4: + dependencies: + once: 1.4.0 + dev: true + resolution: + integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + /env-ci/4.5.2: + dependencies: + execa: 3.4.0 + java-properties: 1.0.2 + dev: true + engines: + node: '>=8.3' + resolution: + integrity: sha512-lS+edpNp2+QXEPkx6raEMIjKxKKWnJ4+VWzovYJ2NLYiJAYenSAXotFfVdgaFxdbVnvAbUI8epQDa1u12ERxfQ== + /error-ex/1.3.2: + dependencies: + is-arrayish: 0.2.1 + dev: true + resolution: + integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + /es-abstract/1.17.0: + dependencies: + es-to-primitive: 1.2.1 + function-bind: 1.1.1 + has: 1.0.3 + has-symbols: 1.0.1 + is-callable: 1.1.5 + is-regex: 1.0.5 + object-inspect: 1.7.0 + object-keys: 1.1.1 + object.assign: 4.1.0 + string.prototype.trimleft: 2.1.1 + string.prototype.trimright: 2.1.1 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug== + /es-to-primitive/1.2.1: + dependencies: + is-callable: 1.1.5 + is-date-object: 1.0.2 + is-symbol: 1.0.3 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + /es6-promise/4.2.8: + dev: true + resolution: + integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + /es6-promisify/5.0.0: + dependencies: + es6-promise: 4.2.8 + dev: true + resolution: + integrity: sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= + /escape-string-regexp/1.0.5: + dev: true + engines: + node: '>=0.8.0' + resolution: + integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + /esprima/4.0.1: + dev: true + engines: + node: '>=4' + hasBin: true + resolution: + integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + /estree-walker/0.6.1: + dev: true + resolution: + integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== + /esutils/2.0.3: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + /execa/1.0.0: + dependencies: + cross-spawn: 6.0.5 + get-stream: 4.1.0 + is-stream: 1.1.0 + npm-run-path: 2.0.2 + p-finally: 1.0.0 + signal-exit: 3.0.2 + strip-eof: 1.0.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + /execa/3.4.0: + dependencies: + cross-spawn: 7.0.1 + get-stream: 5.1.0 + human-signals: 1.1.1 + is-stream: 2.0.0 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.0 + p-finally: 2.0.1 + signal-exit: 3.0.2 + strip-final-newline: 2.0.0 + dev: true + engines: + node: ^8.12.0 || >=9.7.0 + resolution: + integrity: sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== + /extend/3.0.2: + dev: true + resolution: + integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + /fast-glob/3.1.1: + dependencies: + '@nodelib/fs.stat': 2.0.3 + '@nodelib/fs.walk': 1.2.4 + glob-parent: 5.1.0 + merge2: 1.3.0 + micromatch: 4.0.2 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-nTCREpBY8w8r+boyFYAx21iL6faSsQynliPHM4Uf56SbkyohCNxpVPEH9xrF5TXKy+IsjkPUHDKiUkzBVRXn9g== + /fastq/1.6.0: + dependencies: + reusify: 1.0.4 + dev: true + resolution: + integrity: sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA== + /figures/2.0.0: + dependencies: + escape-string-regexp: 1.0.5 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= + /figures/3.1.0: + dependencies: + escape-string-regexp: 1.0.5 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg== + /filesize/4.2.1: + dev: true + engines: + node: '>= 0.4.0' + resolution: + integrity: sha512-bP82Hi8VRZX/TUBKfE24iiUGsB/sfm2WUrwTQyAzQrhO3V9IhcBBNBXMyzLY5orACxRyYJ3d2HeRVX+eFv4lmA== + /fill-range/7.0.1: + dependencies: + to-regex-range: 5.0.1 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + /find-up/2.1.0: + dependencies: + locate-path: 2.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + /find-up/3.0.0: + dependencies: + locate-path: 3.0.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + /find-up/4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + /find-versions/3.2.0: + dependencies: + semver-regex: 2.0.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww== + /flat/4.1.0: + dependencies: + is-buffer: 2.0.4 + dev: true + hasBin: true + resolution: + integrity: sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw== + /from2/2.3.0: + dependencies: + inherits: 2.0.4 + readable-stream: 2.3.6 + dev: true + resolution: + integrity: sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + /fs-extra/8.1.0: + dependencies: + graceful-fs: 4.2.3 + jsonfile: 4.0.0 + universalify: 0.1.2 + dev: true + engines: + node: '>=6 <7 || >=8' + resolution: + integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + /fs.realpath/1.0.0: + dev: true + resolution: + integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + /function-bind/1.1.1: + dev: true + resolution: + integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + /get-caller-file/2.0.5: + dev: true + engines: + node: 6.* || 8.* || >= 10.* + resolution: + integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + /get-func-name/2.0.0: + dev: true + resolution: + integrity: sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= + /get-stream/4.1.0: + dependencies: + pump: 3.0.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + /get-stream/5.1.0: + dependencies: + pump: 3.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== + /git-log-parser/1.2.0: + dependencies: + argv-formatter: 1.0.0 + spawn-error-forwarder: 1.0.0 + split2: 1.0.0 + stream-combiner2: 1.1.1 + through2: 2.0.5 + traverse: 0.6.6 + dev: true + resolution: + integrity: sha1-LmpMGxP8AAKCB7p5WnrDFme5/Uo= + /glob-parent/5.1.0: + dependencies: + is-glob: 4.0.1 + dev: true + engines: + node: '>= 6' + resolution: + integrity: sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw== + /glob/7.1.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.0.4 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + resolution: + integrity: sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== + /glob/7.1.6: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.0.4 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + resolution: + integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + /globals/11.12.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + /globby/10.0.1: + dependencies: + '@types/glob': 7.1.1 + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.1.1 + glob: 7.1.6 + ignore: 5.1.4 + merge2: 1.3.0 + slash: 3.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A== + /graceful-fs/4.2.3: + dev: true + resolution: + integrity: sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== + /growl/1.10.5: + dev: true + engines: + node: '>=4.x' + resolution: + integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== + /gzip-size/5.1.1: + dependencies: + duplexer: 0.1.1 + pify: 4.0.1 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== + /handlebars/4.5.3: + dependencies: + neo-async: 2.6.1 + optimist: 0.6.1 + source-map: 0.6.1 + dev: true + engines: + node: '>=0.4.7' + hasBin: true + optionalDependencies: + uglify-js: 3.7.2 + resolution: + integrity: sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA== + /has-flag/2.0.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= + /has-flag/3.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + /has-flag/4.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + /has-symbols/1.0.1: + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + /has/1.0.3: + dependencies: + function-bind: 1.1.1 + dev: true + engines: + node: '>= 0.4.0' + resolution: + integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + /he/1.2.0: + dev: true + hasBin: true + resolution: + integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + /hook-std/2.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-zZ6T5WcuBMIUVh49iPQS9t977t7C0l7OtHrpeMb5uk48JdflRX0NSFvCekfYNmGQETnLq9W/isMyHl69kxGi8g== + /hosted-git-info/2.8.5: + dev: true + resolution: + integrity: sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg== + /hosted-git-info/3.0.2: + dependencies: + lru-cache: 5.1.1 + dev: true + resolution: + integrity: sha512-ezZMWtHXm7Eb7Rq4Mwnx2vs79WUx2QmRg3+ZqeGroKzfDO+EprOcgRPYghsOP9JuYBfK18VojmRTGCg8Ma+ktw== + /http-proxy-agent/2.1.0: + dependencies: + agent-base: 4.3.0 + debug: 3.1.0 + dev: true + engines: + node: '>= 4.5.0' + resolution: + integrity: sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== + /https-proxy-agent/3.0.1: + dependencies: + agent-base: 4.3.0 + debug: 3.2.6 + dev: true + engines: + node: '>= 4.5.0' + resolution: + integrity: sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg== + /human-signals/1.1.1: + dev: true + engines: + node: '>=8.12.0' + resolution: + integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + /ignore/5.1.4: + dev: true + engines: + node: '>= 4' + resolution: + integrity: sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A== + /import-fresh/3.2.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== + /import-from/3.0.0: + dependencies: + resolve-from: 5.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ== + /indent-string/3.2.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= + /indent-string/4.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + /inflight/1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + resolution: + integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + /inherits/2.0.4: + dev: true + resolution: + integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + /ini/1.3.5: + dev: true + resolution: + integrity: sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + /into-stream/5.1.1: + dependencies: + from2: 2.3.0 + p-is-promise: 3.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-krrAJ7McQxGGmvaYbB7Q1mcA+cRwg9Ij2RfWIeVesNBgVDZmzY/Fa4IpZUT3bmdRzMzdf/mzltCG2Dq99IZGBA== + /invariant/2.2.4: + dependencies: + loose-envify: 1.4.0 + dev: true + resolution: + integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + /is-arrayish/0.2.1: + dev: true + resolution: + integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + /is-buffer/2.0.4: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== + /is-callable/1.1.5: + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== + /is-date-object/1.0.2: + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + /is-extglob/2.1.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + /is-fullwidth-code-point/2.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + /is-fullwidth-code-point/3.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + /is-glob/4.0.1: + dependencies: + is-extglob: 2.1.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + /is-module/1.0.0: + dev: true + resolution: + integrity: sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= + /is-number/7.0.0: + dev: true + engines: + node: '>=0.12.0' + resolution: + integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + /is-obj/1.0.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + /is-plain-obj/1.1.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + /is-plain-object/3.0.0: + dependencies: + isobject: 4.0.0 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg== + /is-reference/1.1.4: + dependencies: + '@types/estree': 0.0.39 + dev: true + resolution: + integrity: sha512-uJA/CDPO3Tao3GTrxYn6AwkM4nUPJiGGYu5+cB8qbC7WGFlrKZbiRo7SFKxUAEpFUfiHofWCXBUNhvYJMh+6zw== + /is-regex/1.0.5: + dependencies: + has: 1.0.3 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== + /is-stream/1.1.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + /is-stream/2.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + /is-symbol/1.0.3: + dependencies: + has-symbols: 1.0.1 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + /is-text-path/1.0.1: + dependencies: + text-extensions: 1.9.0 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4= + /isarray/0.0.1: + dev: true + resolution: + integrity: sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + /isarray/1.0.0: + dev: true + resolution: + integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + /isexe/2.0.0: + dev: true + resolution: + integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + /isobject/4.0.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== + /issue-parser/5.0.0: + dependencies: + lodash.capitalize: 4.2.1 + lodash.escaperegexp: 4.1.2 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.uniqby: 4.7.0 + dev: true + engines: + node: '>=8.3' + resolution: + integrity: sha512-q/16W7EPHRL0FKVz9NU++TUsoygXGj6JOi88oulyAcQG+IEZ0T6teVdE+VLbe19OfL/tbV8Wi3Dfo0HedeHW0Q== + /java-properties/1.0.2: + dev: true + engines: + node: '>= 0.6.0' + resolution: + integrity: sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ== + /jest-worker/24.9.0: + dependencies: + merge-stream: 2.0.0 + supports-color: 6.1.0 + dev: true + engines: + node: '>= 6' + resolution: + integrity: sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== + /js-levenshtein/1.1.6: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== + /js-tokens/4.0.0: + dev: true + resolution: + integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + /js-yaml/3.13.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: true + hasBin: true + resolution: + integrity: sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + /jsesc/0.5.0: + dev: true + hasBin: true + resolution: + integrity: sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + /jsesc/2.5.2: + dev: true + engines: + node: '>=4' + hasBin: true + resolution: + integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + /json-parse-better-errors/1.0.2: + dev: true + resolution: + integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + /json-stringify-safe/5.0.1: + dev: true + resolution: + integrity: sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + /json5/2.1.1: + dependencies: + minimist: 1.2.0 + dev: true + engines: + node: '>=6' + hasBin: true + resolution: + integrity: sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ== + /jsonfile/4.0.0: + dev: true + optionalDependencies: + graceful-fs: 4.2.3 + resolution: + integrity: sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + /jsonparse/1.3.1: + dev: true + engines: + '0': node >= 0.2.0 + resolution: + integrity: sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= + /just-extend/4.0.2: + dev: true + resolution: + integrity: sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw== + /lines-and-columns/1.1.6: + dev: true + resolution: + integrity: sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + /load-json-file/4.0.0: + dependencies: + graceful-fs: 4.2.3 + parse-json: 4.0.0 + pify: 3.0.0 + strip-bom: 3.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-L19Fq5HjMhYjT9U62rZo607AmTs= + /locate-path/2.0.0: + dependencies: + p-locate: 2.0.0 + path-exists: 3.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + /locate-path/3.0.0: + dependencies: + p-locate: 3.0.0 + path-exists: 3.0.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + /locate-path/5.0.0: + dependencies: + p-locate: 4.1.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + /lodash.capitalize/4.2.1: + dev: true + resolution: + integrity: sha1-+CbJtOKoUR2E46yinbBeGk87cqk= + /lodash.escaperegexp/4.1.2: + dev: true + resolution: + integrity: sha1-ZHYsSGGAglGKw99Mz11YhtriA0c= + /lodash.get/4.4.2: + dev: true + resolution: + integrity: sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + /lodash.ismatch/4.4.0: + dev: true + resolution: + integrity: sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= + /lodash.isplainobject/4.0.6: + dev: true + resolution: + integrity: sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + /lodash.isstring/4.0.1: + dev: true + resolution: + integrity: sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= + /lodash.merge/4.6.2: + dev: true + resolution: + integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + /lodash.set/4.3.2: + dev: true + resolution: + integrity: sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= + /lodash.toarray/4.4.0: + dev: true + resolution: + integrity: sha1-JMS/zWsvuji/0FlNsRedjptlZWE= + /lodash.uniq/4.5.0: + dev: true + resolution: + integrity: sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + /lodash.uniqby/4.7.0: + dev: true + resolution: + integrity: sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI= + /lodash/4.17.15: + dev: true + resolution: + integrity: sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + /log-symbols/2.2.0: + dependencies: + chalk: 2.4.2 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== + /lolex/5.1.2: + dependencies: + '@sinonjs/commons': 1.7.0 + dev: true + resolution: + integrity: sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A== + /loose-envify/1.4.0: + dependencies: + js-tokens: 4.0.0 + dev: true + hasBin: true + resolution: + integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + /loud-rejection/1.6.0: + dependencies: + currently-unhandled: 0.4.1 + signal-exit: 3.0.2 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= + /lru-cache/5.1.1: + dependencies: + yallist: 3.1.1 + dev: true + resolution: + integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + /macos-release/2.3.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA== + /magic-string/0.25.4: + dependencies: + sourcemap-codec: 1.4.6 + dev: true + resolution: + integrity: sha512-oycWO9nEVAP2RVPbIoDoA4Y7LFIJ3xRYov93gAyJhZkET1tNuB0u7uWkZS2LpBWTJUWnmau/To8ECWRC+jKNfw== + /make-error/1.3.5: + dev: true + resolution: + integrity: sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== + /map-obj/1.0.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + /map-obj/2.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-plzSkIepJZi4eRJXpSPgISIqwfk= + /marked-terminal/3.3.0_marked@0.7.0: + dependencies: + ansi-escapes: 3.2.0 + cardinal: 2.1.1 + chalk: 2.4.2 + cli-table: 0.3.1 + marked: 0.7.0 + node-emoji: 1.10.0 + supports-hyperlinks: 1.0.1 + dev: true + peerDependencies: + marked: ^0.4.0 || ^0.5.0 || ^0.6.0 || ^0.7.0 + resolution: + integrity: sha512-+IUQJ5VlZoAFsM5MHNT7g3RHSkA3eETqhRCdXv4niUMAKHQ7lb1yvAcuGPmm4soxhmtX13u4Li6ZToXtvSEH+A== + /marked/0.7.0: + dev: true + engines: + node: '>=0.10.0' + hasBin: true + resolution: + integrity: sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg== + /mdn-browser-compat-data/0.0.98: + dependencies: + extend: 3.0.2 + dev: true + engines: + node: '>=8.0.0' + resolution: + integrity: sha512-aixrkulXdvMp90I5rWuzBCks9GruwEyNfMgX5qg9lSATyOvI5OPzuFnO98BAsXG5x5MrA9BSxu0jwJbRFaAG/g== + /meow/5.0.0: + dependencies: + camelcase-keys: 4.2.0 + decamelize-keys: 1.1.0 + loud-rejection: 1.6.0 + minimist-options: 3.0.2 + normalize-package-data: 2.5.0 + read-pkg-up: 3.0.0 + redent: 2.0.0 + trim-newlines: 2.0.0 + yargs-parser: 10.1.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig== + /merge-stream/2.0.0: + dev: true + resolution: + integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + /merge2/1.3.0: + dev: true + engines: + node: '>= 6' + resolution: + integrity: sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw== + /micromatch/4.0.2: + dependencies: + braces: 3.0.2 + picomatch: 2.1.1 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + /mime/2.4.4: + dev: true + engines: + node: '>=4.0.0' + hasBin: true + resolution: + integrity: sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== + /mimic-fn/2.1.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + /minimatch/3.0.4: + dependencies: + brace-expansion: 1.1.11 + dev: true + resolution: + integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + /minimist-options/3.0.2: + dependencies: + arrify: 1.0.1 + is-plain-obj: 1.1.0 + dev: true + engines: + node: '>= 4' + resolution: + integrity: sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ== + /minimist/0.0.10: + dev: true + resolution: + integrity: sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= + /minimist/0.0.8: + dev: true + resolution: + integrity: sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + /minimist/1.2.0: + dev: true + resolution: + integrity: sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + /mkdirp/0.5.1: + dependencies: + minimist: 0.0.8 + dev: true + hasBin: true + resolution: + integrity: sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + /mocha/6.2.2: + dependencies: + ansi-colors: 3.2.3 + browser-stdout: 1.3.1 + debug: 3.2.6 + diff: 3.5.0 + escape-string-regexp: 1.0.5 + find-up: 3.0.0 + glob: 7.1.3 + growl: 1.10.5 + he: 1.2.0 + js-yaml: 3.13.1 + log-symbols: 2.2.0 + minimatch: 3.0.4 + mkdirp: 0.5.1 + ms: 2.1.1 + node-environment-flags: 1.0.5 + object.assign: 4.1.0 + strip-json-comments: 2.0.1 + supports-color: 6.0.0 + which: 1.3.1 + wide-align: 1.1.3 + yargs: 13.3.0 + yargs-parser: 13.1.1 + yargs-unparser: 1.6.0 + dev: true + engines: + node: '>= 6.0.0' + hasBin: true + resolution: + integrity: sha512-FgDS9Re79yU1xz5d+C4rv1G7QagNGHZ+iXF81hO8zY35YZZcLEsJVfFolfsqKFWunATEvNzMK0r/CwWd/szO9A== + /modify-values/1.0.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== + /ms/2.0.0: + dev: true + resolution: + integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + /ms/2.1.1: + dev: true + resolution: + integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + /ms/2.1.2: + dev: true + resolution: + integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + /neo-async/2.6.1: + dev: true + resolution: + integrity: sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== + /nerf-dart/1.0.0: + dev: true + resolution: + integrity: sha1-5tq3/r9a2Bbqgc9cYpxaDr3nLBo= + /nice-try/1.0.5: + dev: true + resolution: + integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + /nise/3.0.0: + dependencies: + '@sinonjs/commons': 1.7.0 + '@sinonjs/formatio': 4.0.1 + '@sinonjs/text-encoding': 0.7.1 + just-extend: 4.0.2 + lolex: 5.1.2 + path-to-regexp: 1.8.0 + dev: true + resolution: + integrity: sha512-EObFx5tioBMePHpU/gGczaY2YDqL255iwjmZwswu2CiwEW8xIGrr3E2xij+efIppS1nLQo9NyXSIUySGHUOhHQ== + /node-emoji/1.10.0: + dependencies: + lodash.toarray: 4.4.0 + dev: true + resolution: + integrity: sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw== + /node-environment-flags/1.0.5: + dependencies: + object.getownpropertydescriptors: 2.1.0 + semver: 5.7.1 + dev: true + resolution: + integrity: sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ== + /node-fetch/2.6.0: + dev: true + engines: + node: 4.x || >=6.0.0 + resolution: + integrity: sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== + /node-releases/1.1.43: + dependencies: + semver: 6.3.0 + dev: true + resolution: + integrity: sha512-Rmfnj52WNhvr83MvuAWHEqXVoZXCcDQssSOffU4n4XOL9sPrP61mSZ88g25NqmABDvH7PiAlFCzoSCSdzA293w== + /normalize-package-data/2.5.0: + dependencies: + hosted-git-info: 2.8.5 + resolve: 1.14.1 + semver: 5.7.1 + validate-npm-package-license: 3.0.4 + dev: true + resolution: + integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + /normalize-url/4.5.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== + /npm-run-path/2.0.2: + dependencies: + path-key: 2.0.1 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + /npm-run-path/4.0.1: + dependencies: + path-key: 3.1.1 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + /npm/6.13.4: + bundledDependencies: + - abbrev + - ansicolors + - ansistyles + - aproba + - archy + - bin-links + - bluebird + - byte-size + - cacache + - call-limit + - chownr + - ci-info + - cli-columns + - cli-table3 + - cmd-shim + - columnify + - config-chain + - debuglog + - detect-indent + - detect-newline + - dezalgo + - editor + - figgy-pudding + - find-npm-prefix + - fs-vacuum + - fs-write-stream-atomic + - gentle-fs + - glob + - graceful-fs + - has-unicode + - hosted-git-info + - iferr + - imurmurhash + - infer-owner + - inflight + - inherits + - ini + - init-package-json + - is-cidr + - json-parse-better-errors + - JSONStream + - lazy-property + - libcipm + - libnpm + - libnpmaccess + - libnpmhook + - libnpmorg + - libnpmsearch + - libnpmteam + - libnpx + - lock-verify + - lockfile + - lodash._baseindexof + - lodash._baseuniq + - lodash._bindcallback + - lodash._cacheindexof + - lodash._createcache + - lodash._getnative + - lodash.clonedeep + - lodash.restparam + - lodash.union + - lodash.uniq + - lodash.without + - lru-cache + - meant + - mississippi + - mkdirp + - move-concurrently + - node-gyp + - nopt + - normalize-package-data + - npm-audit-report + - npm-cache-filename + - npm-install-checks + - npm-lifecycle + - npm-package-arg + - npm-packlist + - npm-pick-manifest + - npm-profile + - npm-registry-fetch + - npm-user-validate + - npmlog + - once + - opener + - osenv + - pacote + - path-is-inside + - promise-inflight + - qrcode-terminal + - query-string + - qw + - read-cmd-shim + - read-installed + - read-package-json + - read-package-tree + - read + - readable-stream + - readdir-scoped-modules + - request + - retry + - rimraf + - safe-buffer + - semver + - sha + - slide + - sorted-object + - sorted-union-stream + - ssri + - stringify-package + - tar + - text-table + - tiny-relative-date + - uid-number + - umask + - unique-filename + - unpipe + - update-notifier + - uuid + - validate-npm-package-license + - validate-npm-package-name + - which + - worker-farm + - write-file-atomic + dev: true + hasBin: true + resolution: + integrity: sha512-vTcUL4SCg3AzwInWTbqg1OIaOXlzKSS8Mb8kc5avwrJpcvevDA5J9BhYSuei+fNs3pwOp4lzA5x2FVDXACvoXA== + /object-inspect/1.7.0: + dev: true + resolution: + integrity: sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== + /object-keys/1.1.1: + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + /object-path/0.11.4: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-NwrnUvvzfePqcKhhwju6iRVpGUk= + /object.assign/4.1.0: + dependencies: + define-properties: 1.1.3 + function-bind: 1.1.1 + has-symbols: 1.0.1 + object-keys: 1.1.1 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + /object.getownpropertydescriptors/2.1.0: + dependencies: + define-properties: 1.1.3 + es-abstract: 1.17.0 + dev: true + engines: + node: '>= 0.8' + resolution: + integrity: sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== + /octokit-pagination-methods/1.1.0: + dev: true + resolution: + integrity: sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ== + /once/1.4.0: + dependencies: + wrappy: 1.0.2 + dev: true + resolution: + integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + /onetime/5.1.0: + dependencies: + mimic-fn: 2.1.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== + /optimist/0.6.1: + dependencies: + minimist: 0.0.10 + wordwrap: 0.0.3 + dev: true + resolution: + integrity: sha1-2j6nRob6IaGaERwybpDrFaAZZoY= + /os-name/3.1.0: + dependencies: + macos-release: 2.3.0 + windows-release: 3.2.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg== + /p-filter/2.1.0: + dependencies: + p-map: 2.1.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw== + /p-finally/1.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + /p-finally/2.0.1: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== + /p-is-promise/3.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ== + /p-limit/1.3.0: + dependencies: + p-try: 1.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + /p-limit/2.2.1: + dependencies: + p-try: 2.2.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg== + /p-locate/2.0.0: + dependencies: + p-limit: 1.3.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + /p-locate/3.0.0: + dependencies: + p-limit: 2.2.1 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + /p-locate/4.1.0: + dependencies: + p-limit: 2.2.1 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + /p-map/2.1.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + /p-reduce/2.1.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== + /p-retry/4.2.0: + dependencies: + '@types/retry': 0.12.0 + retry: 0.12.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-jPH38/MRh263KKcq0wBNOGFJbm+U6784RilTmHjB/HM9kH9V8WlCpVUcdOmip9cjXOh6MxZ5yk1z2SjDUJfWmA== + /p-try/1.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + /p-try/2.2.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + /parent-module/1.0.1: + dependencies: + callsites: 3.1.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + /parse-json/4.0.0: + dependencies: + error-ex: 1.3.2 + json-parse-better-errors: 1.0.2 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + /parse-json/5.0.0: + dependencies: + '@babel/code-frame': 7.5.5 + error-ex: 1.3.2 + json-parse-better-errors: 1.0.2 + lines-and-columns: 1.1.6 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw== + /path-exists/3.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + /path-exists/4.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + /path-is-absolute/1.0.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + /path-key/2.0.1: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + /path-key/3.1.1: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + /path-parse/1.0.6: + dev: true + resolution: + integrity: sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + /path-to-regexp/1.8.0: + dependencies: + isarray: 0.0.1 + dev: true + resolution: + integrity: sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + /path-type/3.0.0: + dependencies: + pify: 3.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + /path-type/4.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + /pathval/1.1.0: + dev: true + resolution: + integrity: sha1-uULm1L3mUwBe9rcTYd74cn0GReA= + /picomatch/2.1.1: + dev: true + engines: + node: '>=8.6' + resolution: + integrity: sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA== + /pify/3.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + /pify/4.0.1: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + /pkg-conf/2.1.0: + dependencies: + find-up: 2.1.0 + load-json-file: 4.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg= + /private/0.1.8: + dev: true + engines: + node: '>= 0.6' + resolution: + integrity: sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== + /process-nextick-args/2.0.1: + dev: true + resolution: + integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + /pump/3.0.0: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: true + resolution: + integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + /q/1.5.1: + dev: true + engines: + node: '>=0.6.0' + teleport: '>=0.2.0' + resolution: + integrity: sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + /quick-lru/1.1.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= + /rc/1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.5 + minimist: 1.2.0 + strip-json-comments: 2.0.1 + dev: true + hasBin: true + resolution: + integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + /read-pkg-up/3.0.0: + dependencies: + find-up: 2.1.0 + read-pkg: 3.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= + /read-pkg-up/7.0.1: + dependencies: + find-up: 4.1.0 + read-pkg: 5.2.0 + type-fest: 0.8.1 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + /read-pkg/3.0.0: + dependencies: + load-json-file: 4.0.0 + normalize-package-data: 2.5.0 + path-type: 3.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= + /read-pkg/5.2.0: + dependencies: + '@types/normalize-package-data': 2.4.0 + normalize-package-data: 2.5.0 + parse-json: 5.0.0 + type-fest: 0.6.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + /readable-stream/2.3.6: + dependencies: + core-util-is: 1.0.2 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + dev: true + resolution: + integrity: sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== + /readable-stream/3.4.0: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: true + engines: + node: '>= 6' + resolution: + integrity: sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== + /redent/2.0.0: + dependencies: + indent-string: 3.2.0 + strip-indent: 2.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= + /redeyed/2.1.1: + dependencies: + esprima: 4.0.1 + dev: true + resolution: + integrity: sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs= + /regenerate-unicode-properties/8.1.0: + dependencies: + regenerate: 1.4.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA== + /regenerate/1.4.0: + dev: true + resolution: + integrity: sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== + /regenerator-runtime/0.13.3: + dev: true + resolution: + integrity: sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw== + /regenerator-transform/0.14.1: + dependencies: + private: 0.1.8 + dev: true + resolution: + integrity: sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ== + /regexpu-core/4.6.0: + dependencies: + regenerate: 1.4.0 + regenerate-unicode-properties: 8.1.0 + regjsgen: 0.5.1 + regjsparser: 0.6.2 + unicode-match-property-ecmascript: 1.0.4 + unicode-match-property-value-ecmascript: 1.1.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg== + /registry-auth-token/4.0.0: + dependencies: + rc: 1.2.8 + safe-buffer: 5.2.0 + dev: true + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-lpQkHxd9UL6tb3k/aHAVfnVtn+Bcs9ob5InuFLLEDqSqeq+AljB8GZW9xY0x7F+xYwEcjKe07nyoxzEYz6yvkw== + /regjsgen/0.5.1: + dev: true + resolution: + integrity: sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== + /regjsparser/0.6.2: + dependencies: + jsesc: 0.5.0 + dev: true + hasBin: true + resolution: + integrity: sha512-E9ghzUtoLwDekPT0DYCp+c4h+bvuUpe6rRHCTYn6eGoqj1LgKXxT6I0Il4WbjhQkOghzi/V+y03bPKvbllL93Q== + /require-directory/2.1.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + /require-main-filename/2.0.0: + dev: true + resolution: + integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + /resolve-from/4.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + /resolve-from/5.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + /resolve/1.14.1: + dependencies: + path-parse: 1.0.6 + dev: true + resolution: + integrity: sha512-fn5Wobh4cxbLzuHaE+nphztHy43/b++4M6SsGFC2gB8uYwf0C8LcarfCz1un7UTW8OFQg9iNjZ4xpcFVGebDPg== + /retry/0.12.0: + dev: true + engines: + node: '>= 4' + resolution: + integrity: sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + /reusify/1.0.4: + dev: true + engines: + iojs: '>=1.0.0' + node: '>=0.10.0' + resolution: + integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + /rimraf/3.0.0: + dependencies: + glob: 7.1.6 + dev: true + hasBin: true + resolution: + integrity: sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg== + /rollup-plugin-filesize/6.2.1: + dependencies: + boxen: 4.2.0 + brotli-size: 4.0.0 + colors: 1.4.0 + filesize: 4.2.1 + gzip-size: 5.1.1 + lodash.merge: 4.6.2 + terser: 4.4.3 + dev: true + resolution: + integrity: sha512-JQ2+NMoka81lCR2caGWyngqMKpvJCl7EkFYU7A+T0dA7U1Aml13FW5Ky0aiZIeU3/13cjsKQLRr35SQVmk6i/A== + /rollup-plugin-terser/5.1.3_rollup@1.27.14: + dependencies: + '@babel/code-frame': 7.5.5 + jest-worker: 24.9.0 + rollup: 1.27.14 + rollup-pluginutils: 2.8.2 + serialize-javascript: 2.1.2 + terser: 4.4.3 + dev: true + peerDependencies: + rollup: '>=0.66.0 <2' + resolution: + integrity: sha512-FuFuXE5QUJ7snyxHLPp/0LFXJhdomKlIx/aK7Tg88Yubsx/UU/lmInoJafXJ4jwVVNcORJ1wRUC5T9cy5yk0wA== + /rollup-pluginutils/2.8.2: + dependencies: + estree-walker: 0.6.1 + dev: true + resolution: + integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== + /rollup/1.27.14: + dependencies: + '@types/estree': 0.0.40 + '@types/node': 12.12.21 + acorn: 7.1.0 + dev: true + hasBin: true + resolution: + integrity: sha512-DuDjEyn8Y79ALYXMt+nH/EI58L5pEw5HU9K38xXdRnxQhvzUTI/nxAawhkAHUQeudANQ//8iyrhVRHJBuR6DSQ== + /run-parallel/1.1.9: + dev: true + resolution: + integrity: sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== + /safe-buffer/5.1.2: + dev: true + resolution: + integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + /safe-buffer/5.2.0: + dev: true + resolution: + integrity: sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== + /semantic-release/15.14.0_semantic-release@15.14.0: + dependencies: + '@semantic-release/commit-analyzer': 6.3.3_semantic-release@15.14.0 + '@semantic-release/error': 2.2.0 + '@semantic-release/github': 5.5.5_semantic-release@15.14.0 + '@semantic-release/npm': 5.3.4_semantic-release@15.14.0 + '@semantic-release/release-notes-generator': 7.3.5_semantic-release@15.14.0 + aggregate-error: 3.0.1 + cosmiconfig: 6.0.0 + debug: 4.1.1 + env-ci: 4.5.2 + execa: 3.4.0 + figures: 3.1.0 + find-versions: 3.2.0 + get-stream: 5.1.0 + git-log-parser: 1.2.0 + hook-std: 2.0.0 + hosted-git-info: 3.0.2 + lodash: 4.17.15 + marked: 0.7.0 + marked-terminal: 3.3.0_marked@0.7.0 + p-locate: 4.1.0 + p-reduce: 2.1.0 + read-pkg-up: 7.0.1 + resolve-from: 5.0.0 + semver: 6.3.0 + signale: 1.4.0 + yargs: 15.0.2 + dev: true + engines: + node: '>=8.16' + hasBin: true + peerDependencies: + semantic-release: '*' + resolution: + integrity: sha512-Cn43W35AOLY0RMcDbtwhJODJmWg6YCs1+R5jRQsTmmkEGzkV4B2F/QXkjVZpl4UbH91r93GGH0xhoq9kh7I5PA== + /semver-regex/2.0.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw== + /semver/5.7.1: + dev: true + hasBin: true + resolution: + integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + /semver/6.3.0: + dev: true + hasBin: true + resolution: + integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + /semver/7.0.0: + dev: true + hasBin: true + resolution: + integrity: sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + /serialize-javascript/2.1.2: + dev: true + resolution: + integrity: sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== + /set-blocking/2.0.0: + dev: true + resolution: + integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + /shebang-command/1.2.0: + dependencies: + shebang-regex: 1.0.0 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + /shebang-command/2.0.0: + dependencies: + shebang-regex: 3.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + /shebang-regex/1.0.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + /shebang-regex/3.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + /signal-exit/3.0.2: + dev: true + resolution: + integrity: sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + /signale/1.4.0: + dependencies: + chalk: 2.4.2 + figures: 2.0.0 + pkg-conf: 2.1.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w== + /sinon/8.0.1: + dependencies: + '@sinonjs/commons': 1.7.0 + '@sinonjs/formatio': 4.0.1 + '@sinonjs/samsam': 4.2.0 + diff: 4.0.1 + lolex: 5.1.2 + nise: 3.0.0 + supports-color: 7.1.0 + dev: true + resolution: + integrity: sha512-vbXMHBszVioyPsuRDLEiPEgvkZnbjfdCFvLYV4jONNJqZNLWTwZ/gYSNh3SuiT1w9MRXUz+S7aX0B4Ar2XI8iw== + /slash/3.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + /source-map-support/0.5.16: + dependencies: + buffer-from: 1.1.1 + source-map: 0.6.1 + dev: true + resolution: + integrity: sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== + /source-map/0.5.7: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + /source-map/0.6.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + /sourcemap-codec/1.4.6: + dev: true + resolution: + integrity: sha512-1ZooVLYFxC448piVLBbtOxFcXwnymH9oUF8nRd3CuYDVvkRBxRl6pB4Mtas5a4drtL+E8LDgFkQNcgIw6tc8Hg== + /spawn-error-forwarder/1.0.0: + dev: true + resolution: + integrity: sha1-Gv2Uc46ZmwNG17n8NzvlXgdXcCk= + /spdx-correct/3.1.0: + dependencies: + spdx-expression-parse: 3.0.0 + spdx-license-ids: 3.0.5 + dev: true + resolution: + integrity: sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== + /spdx-exceptions/2.2.0: + dev: true + resolution: + integrity: sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + /spdx-expression-parse/3.0.0: + dependencies: + spdx-exceptions: 2.2.0 + spdx-license-ids: 3.0.5 + dev: true + resolution: + integrity: sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + /spdx-license-ids/3.0.5: + dev: true + resolution: + integrity: sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + /split/1.0.1: + dependencies: + through: 2.3.8 + dev: true + resolution: + integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== + /split2/1.0.0: + dependencies: + through2: 2.0.5 + dev: true + resolution: + integrity: sha1-UuLiIdiMdfmnP5BVbiY/+WdysxQ= + /split2/2.2.0: + dependencies: + through2: 2.0.5 + dev: true + resolution: + integrity: sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw== + /sprintf-js/1.0.3: + dev: true + resolution: + integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + /stream-combiner2/1.1.1: + dependencies: + duplexer2: 0.1.4 + readable-stream: 2.3.6 + dev: true + resolution: + integrity: sha1-+02KFCDqNidk4hrUeAOXvry0HL4= + /string-width/2.1.1: + dependencies: + is-fullwidth-code-point: 2.0.0 + strip-ansi: 4.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + /string-width/3.1.0: + dependencies: + emoji-regex: 7.0.3 + is-fullwidth-code-point: 2.0.0 + strip-ansi: 5.2.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + /string-width/4.2.0: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + /string.prototype.trimleft/2.1.1: + dependencies: + define-properties: 1.1.3 + function-bind: 1.1.1 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag== + /string.prototype.trimright/2.1.1: + dependencies: + define-properties: 1.1.3 + function-bind: 1.1.1 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g== + /string_decoder/1.1.1: + dependencies: + safe-buffer: 5.1.2 + dev: true + resolution: + integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + /string_decoder/1.3.0: + dependencies: + safe-buffer: 5.2.0 + dev: true + resolution: + integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + /strip-ansi/4.0.0: + dependencies: + ansi-regex: 3.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-qEeQIusaw2iocTibY1JixQXuNo8= + /strip-ansi/5.2.0: + dependencies: + ansi-regex: 4.1.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + /strip-ansi/6.0.0: + dependencies: + ansi-regex: 5.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + /strip-bom/3.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + /strip-eof/1.0.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + /strip-final-newline/2.0.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + /strip-indent/2.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= + /strip-json-comments/2.0.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-PFMZQukIwml8DsNEhYwobHygpgo= + /supports-color/5.5.0: + dependencies: + has-flag: 3.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + /supports-color/6.0.0: + dependencies: + has-flag: 3.0.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== + /supports-color/6.1.0: + dependencies: + has-flag: 3.0.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + /supports-color/7.1.0: + dependencies: + has-flag: 4.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + /supports-hyperlinks/1.0.1: + dependencies: + has-flag: 2.0.0 + supports-color: 5.5.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw== + /temp-dir/1.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= + /tempy/0.3.0: + dependencies: + temp-dir: 1.0.0 + type-fest: 0.3.1 + unique-string: 1.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ== + /term-size/2.1.1: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-UqvQSch04R+69g4RDhrslmGvGL3ucDRX/U+snYW0Mab4uCAyKSndUksaoqlJ81QKSpRnIsuOYQCbC2ZWx2896A== + /terser/4.4.3: + dependencies: + commander: 2.20.3 + source-map: 0.6.1 + source-map-support: 0.5.16 + dev: true + engines: + node: '>=6.0.0' + hasBin: true + resolution: + integrity: sha512-0ikKraVtRDKGzHrzkCv5rUNDzqlhmhowOBqC0XqUHFpW+vJ45+20/IFBcebwKfiS2Z9fJin6Eo+F1zLZsxi8RA== + /text-extensions/1.9.0: + dev: true + engines: + node: '>=0.10' + resolution: + integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== + /through/2.3.8: + dev: true + resolution: + integrity: sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + /through2/2.0.5: + dependencies: + readable-stream: 2.3.6 + xtend: 4.0.2 + dev: true + resolution: + integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + /through2/3.0.1: + dependencies: + readable-stream: 3.4.0 + dev: true + resolution: + integrity: sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww== + /to-fast-properties/2.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + /to-regex-range/5.0.1: + dependencies: + is-number: 7.0.0 + dev: true + engines: + node: '>=8.0' + resolution: + integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + /traverse/0.6.6: + dev: true + resolution: + integrity: sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc= + /trim-newlines/2.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= + /trim-off-newlines/1.0.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-n5up2e+odkw4dpi8v+sshI8RrbM= + /ts-node/8.5.4_typescript@3.7.4: + dependencies: + arg: 4.1.2 + diff: 4.0.1 + make-error: 1.3.5 + source-map-support: 0.5.16 + typescript: 3.7.4 + yn: 3.1.1 + dev: true + engines: + node: '>=4.2.0' + hasBin: true + peerDependencies: + typescript: '>=2.0' + resolution: + integrity: sha512-izbVCRV68EasEPQ8MSIGBNK9dc/4sYJJKYA+IarMQct1RtEot6Xp0bXuClsbUSnKpg50ho+aOAx8en5c+y4OFw== + /tslib/1.10.0: + resolution: + integrity: sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== + /type-detect/4.0.8: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + /type-fest/0.3.1: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== + /type-fest/0.6.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + /type-fest/0.8.1: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + /typescript/3.7.4: + dev: true + engines: + node: '>=4.2.0' + hasBin: true + resolution: + integrity: sha512-A25xv5XCtarLwXpcDNZzCGvW2D1S3/bACratYBx2sax8PefsFhlYmkQicKHvpYflFS8if4zne5zT5kpJ7pzuvw== + /ua-parser-js/0.7.21: + dev: true + resolution: + integrity: sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ== + /uglify-js/3.7.2: + dependencies: + commander: 2.20.3 + source-map: 0.6.1 + dev: true + engines: + node: '>=0.8.0' + hasBin: true + optional: true + resolution: + integrity: sha512-uhRwZcANNWVLrxLfNFEdltoPNhECUR3lc+UdJoG9CBpMcSnKyWA94tc3eAujB1GcMY5Uwq8ZMp4qWpxWYDQmaA== + /unicode-canonical-property-names-ecmascript/1.0.4: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + /unicode-match-property-ecmascript/1.0.4: + dependencies: + unicode-canonical-property-names-ecmascript: 1.0.4 + unicode-property-aliases-ecmascript: 1.0.5 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + /unicode-match-property-value-ecmascript/1.1.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== + /unicode-property-aliases-ecmascript/1.0.5: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== + /unique-string/1.0.0: + dependencies: + crypto-random-string: 1.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= + /universal-user-agent/4.0.0: + dependencies: + os-name: 3.1.0 + dev: true + resolution: + integrity: sha512-eM8knLpev67iBDizr/YtqkJsF3GK8gzDc6st/WKzrTuPtcsOKW/0IdL4cnMBsU69pOx0otavLWBDGTwg+dB0aA== + /universalify/0.1.2: + dev: true + engines: + node: '>= 4.0.0' + resolution: + integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + /url-join/4.0.1: + dev: true + resolution: + integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== + /util-deprecate/1.0.2: + dev: true + resolution: + integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + /utility-types/3.10.0: + dev: false + engines: + node: '>= 4' + resolution: + integrity: sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg== + /validate-npm-package-license/3.0.4: + dependencies: + spdx-correct: 3.1.0 + spdx-expression-parse: 3.0.0 + dev: true + resolution: + integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + /which-module/2.0.0: + dev: true + resolution: + integrity: sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + /which/1.3.1: + dependencies: + isexe: 2.0.0 + dev: true + hasBin: true + resolution: + integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + /which/2.0.2: + dependencies: + isexe: 2.0.0 + dev: true + engines: + node: '>= 8' + hasBin: true + resolution: + integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + /wide-align/1.1.3: + dependencies: + string-width: 2.1.1 + dev: true + resolution: + integrity: sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + /widest-line/3.1.0: + dependencies: + string-width: 4.2.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + /windows-release/3.2.0: + dependencies: + execa: 1.0.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-QTlz2hKLrdqukrsapKsINzqMgOUpQW268eJ0OaOpJN32h272waxR9fkB9VoWRtK7uKHG5EHJcTXQBD8XZVJkFA== + /wordwrap/0.0.3: + dev: true + engines: + node: '>=0.4.0' + resolution: + integrity: sha1-o9XabNXAvAAI03I0u68b7WMFkQc= + /wrap-ansi/5.1.0: + dependencies: + ansi-styles: 3.2.1 + string-width: 3.1.0 + strip-ansi: 5.2.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + /wrap-ansi/6.2.0: + dependencies: + ansi-styles: 4.2.0 + string-width: 4.2.0 + strip-ansi: 6.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + /wrappy/1.0.2: + dev: true + resolution: + integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + /xtend/4.0.2: + dev: true + engines: + node: '>=0.4' + resolution: + integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + /y18n/4.0.0: + dev: true + resolution: + integrity: sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + /yallist/3.1.1: + dev: true + resolution: + integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + /yaml/1.7.2: + dependencies: + '@babel/runtime': 7.7.7 + dev: true + engines: + node: '>= 6' + resolution: + integrity: sha512-qXROVp90sb83XtAoqE8bP9RwAkTTZbugRUTm5YeFCBfNRPEp2YzTeqWiz7m5OORHzEvrA/qcGS8hp/E+MMROYw== + /yargs-parser/10.1.0: + dependencies: + camelcase: 4.1.0 + dev: true + resolution: + integrity: sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== + /yargs-parser/13.1.1: + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + dev: true + resolution: + integrity: sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== + /yargs-parser/16.1.0: + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + dev: true + resolution: + integrity: sha512-H/V41UNZQPkUMIT5h5hiwg4QKIY1RPvoBV4XcjUbRM8Bk2oKqqyZ0DIEbTFZB0XjbtSPG8SAa/0DxCQmiRgzKg== + /yargs-unparser/1.6.0: + dependencies: + flat: 4.1.0 + lodash: 4.17.15 + yargs: 13.3.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== + /yargs/13.3.0: + dependencies: + cliui: 5.0.0 + find-up: 3.0.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 3.1.0 + which-module: 2.0.0 + y18n: 4.0.0 + yargs-parser: 13.1.1 + dev: true + resolution: + integrity: sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA== + /yargs/15.0.2: + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.0 + which-module: 2.0.0 + y18n: 4.0.0 + yargs-parser: 16.1.0 + dev: true + resolution: + integrity: sha512-GH/X/hYt+x5hOat4LMnCqMd8r5Cv78heOMIJn1hr7QPPBqfeC6p89Y78+WB9yGDvfpCvgasfmWLzNzEioOUD9Q== + /yn/3.1.1: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== +specifiers: + '@rollup/plugin-commonjs': ^11.0.0 + '@rollup/plugin-node-resolve': ^6.0.0 + '@thi.ng/compose': ^1.3.6 + '@types/chai': ^4.2.7 + '@types/mocha': ^5.2.7 + '@types/node': ^12.12.21 + '@types/sinon': ^7.5.1 + '@wessberg/rollup-plugin-ts': ^1.1.83 + chai: ^4.2.0 + mocha: ^6.2.2 + rimraf: ^3.0.0 + rollup: ^1.27.14 + rollup-plugin-filesize: ^6.2.1 + rollup-plugin-terser: ^5.1.3 + semantic-release: ^15.14.0 + sinon: ^8.0.1 + ts-node: ^8.5.4 + tslib: ^1.10.0 + typescript: ^3.7.4 + utility-types: ^3.10.0 diff --git a/typescript/option/rollup.config.ts b/typescript/option/rollup.config.ts new file mode 100644 index 0000000..485f384 --- /dev/null +++ b/typescript/option/rollup.config.ts @@ -0,0 +1,58 @@ +import { terser } from 'rollup-plugin-terser' +import { resolve } from 'path' +import ts from '@wessberg/rollup-plugin-ts' +import nodeResolve from '@rollup/plugin-node-resolve' +import commonjs from '@rollup/plugin-commonjs' +import _package from './package.json' +import filesize from 'rollup-plugin-filesize' + +const inputFile = resolve(__dirname, 'src/index.ts') + +const dev = Boolean(process.env.ROLLUP_WATCH) + +const commonPlugins = [nodeResolve(), commonjs()] + +export default [ + { + input: inputFile, + output: [ + { + file: _package.main, + format: 'cjs', + sourcemap: true + }, + { + file: _package.browser, + sourcemap: true, + format: 'umd', + name: 'Option' + } + ], + plugins: [...commonPlugins, ts(), !dev && terser()] + }, + { + input: inputFile, + output: [ + { + file: _package.module, + format: 'esm', + sourcemap: true + } + ], + plugins: [ + ...commonPlugins, + ts({ + tsconfig: { + declaration: true, + ...require(resolve(__dirname, 'tsconfig.json'))[ + 'compilerOptions' + ] + } + }), + !dev && terser(), + filesize({ + showBrotliSize: true + }) + ] + } +] diff --git a/typescript/option/src/helpers/bind.test.ts b/typescript/option/src/helpers/bind.test.ts new file mode 100644 index 0000000..d462e70 --- /dev/null +++ b/typescript/option/src/helpers/bind.test.ts @@ -0,0 +1,32 @@ +import { expect } from 'chai' +import { bind } from './bind' +import { Some, None } from '../types' +import { constantly } from '@thi.ng/compose' + +describe('The bind helper', () => { + it('should return None for any callback when given None', () => { + // act + const result = bind(Some, None) + + // assert + expect(result).to.equal(None) + }) + + describe('When given Some', () => { + it('should return None if the callback returns None', () => { + // act + const result = bind(constantly(None), Some(3)) + + // assert + expect(result).to.equal(None) + }) + + it('should return Some if the callback returns Some', () => { + // act + const result = bind(x => Some(x + 1), Some(3)) + + // assert + expect(result).to.equal(Some(4)) + }) + }) +}) diff --git a/typescript/option/src/helpers/bind.ts b/typescript/option/src/helpers/bind.ts new file mode 100644 index 0000000..8f16419 --- /dev/null +++ b/typescript/option/src/helpers/bind.ts @@ -0,0 +1,10 @@ +import { Binder } from '../internalTypes' +import { Option, None } from '../types' +import { unwrap } from './unwrap' + +export const bind = ( + binder: Binder, + option: Option +): Option => { + return unwrap(None, binder, option) +} diff --git a/typescript/option/src/helpers/bindAsync.test.ts b/typescript/option/src/helpers/bindAsync.test.ts new file mode 100644 index 0000000..8610cf6 --- /dev/null +++ b/typescript/option/src/helpers/bindAsync.test.ts @@ -0,0 +1,31 @@ +import { expect } from 'chai' +import { Some, None } from '../types' +import { bindAsync } from './bindAsync' + +describe('The bindAsync helper', () => { + it('should return None for any callback when given None', async () => { + // act + const result = await bindAsync(async v => Some(v), None) + + // assert + expect(result).to.equal(None) + }) + + describe('When given Some', () => { + it('should return None if the callback returns None', async () => { + // act + const result = await bindAsync(async _ => None, Some(3)) + + // assert + expect(result).to.equal(None) + }) + + it('should return Some if the callback returns Some', async () => { + // act + const result = await bindAsync(async x => Some(x + 1), Some(3)) + + // assert + expect(result).to.equal(Some(4)) + }) + }) +}) diff --git a/typescript/option/src/helpers/bindAsync.ts b/typescript/option/src/helpers/bindAsync.ts new file mode 100644 index 0000000..32d55df --- /dev/null +++ b/typescript/option/src/helpers/bindAsync.ts @@ -0,0 +1,10 @@ +import { Mapper } from '../internalTypes' +import { Option, None } from '../types' +import { unwrap } from './unwrap' + +export const bindAsync = ( + binder: Mapper>>, + option: Option +): Promise> => { + return unwrap(Promise.resolve(None), binder, option) +} diff --git a/typescript/option/src/helpers/combine.test.ts b/typescript/option/src/helpers/combine.test.ts new file mode 100644 index 0000000..cd96495 --- /dev/null +++ b/typescript/option/src/helpers/combine.test.ts @@ -0,0 +1,26 @@ +import { expect } from 'chai' +import { combine } from './combine' +import { someX } from '../../test/constants' +import { None } from '../types' +import { isSome } from './isSome' + +describe('The combine helepr', () => { + it('should return None if the iterable contains any Nones', () => { + // act + const result = combine([someX, someX, None, someX, someX]) + + // assert + expect(result).to.equal(None) + }) + + it("should return Some when the iterable doesn't contain any None", () => { + // arrange + const items = Array(50).fill(someX) + + // act + const result = combine(items) + + // act + expect(isSome(result)).to.be.true + }) +}) diff --git a/typescript/option/src/helpers/combine.ts b/typescript/option/src/helpers/combine.ts new file mode 100644 index 0000000..b922a57 --- /dev/null +++ b/typescript/option/src/helpers/combine.ts @@ -0,0 +1,19 @@ +import { Option, None, Some } from '../types' +import { isNone } from './isNone' + +/** + * If every Option in the list is present, return all of the values unwrapped. + * If there are any Nones, the whole function fails and returns None. + * + * @param iterable The iterable to combine. + */ +export const combine = (iterable: Iterable>) => { + const set = new Set(iterable) + + if (set.has(None)) { + return None + } + + const array = Array.from(set) as T[] + return array as Option +} diff --git a/typescript/option/src/helpers/count.test.ts b/typescript/option/src/helpers/count.test.ts new file mode 100644 index 0000000..7450a03 --- /dev/null +++ b/typescript/option/src/helpers/count.test.ts @@ -0,0 +1,22 @@ +import { expect } from 'chai' +import { Some, None } from '../types' +import { count } from './count' +import { x } from '../../test/constants' + +describe('The count helper', () => { + it('should return 1 when given Some', () => { + // act + const result = count(Some(x)) + + // assert + expect(result).to.equal(1) + }) + + it('should return 0 when given None', () => { + // act + const result = count(None) + + // assert + expect(result).to.equal(0) + }) +}) diff --git a/typescript/option/src/helpers/count.ts b/typescript/option/src/helpers/count.ts new file mode 100644 index 0000000..b47ef46 --- /dev/null +++ b/typescript/option/src/helpers/count.ts @@ -0,0 +1,4 @@ +import { isSome } from './isSome' +import { Option } from '../types' + +export const count = (option: Option) => Number(isSome(option)) diff --git a/typescript/option/src/helpers/exists.test.ts b/typescript/option/src/helpers/exists.test.ts new file mode 100644 index 0000000..32f8494 --- /dev/null +++ b/typescript/option/src/helpers/exists.test.ts @@ -0,0 +1,33 @@ +import { expect } from 'chai' +import { exists } from './exists' +import { constantly } from '@thi.ng/compose' +import { None, Some } from '../types' +import { x } from '../../test/constants' + +describe('The exists helper', () => { + it('should return false when given None', () => { + // act + const result = exists(constantly(true), None) + + // assert + expect(result).to.equal(false) + }) + + describe('When given Some', () => { + it('should return true if the callback returns true', () => { + // act + const result = exists(constantly(true), Some(x)) + + // assert + expect(result).to.equal(true) + }) + + it('should return false if the callback returns false', () => { + // act + const result = exists(constantly(false), Some(x)) + + // assert + expect(result).to.equal(false) + }) + }) +}) diff --git a/typescript/option/src/helpers/exists.ts b/typescript/option/src/helpers/exists.ts new file mode 100644 index 0000000..c984532 --- /dev/null +++ b/typescript/option/src/helpers/exists.ts @@ -0,0 +1,7 @@ +import { unwrap } from './unwrap' +import { Predicate } from '../internalTypes' +import { Option } from '../types' + +export const exists = (predicate: Predicate, option: Option) => { + return unwrap(false, predicate, option) +} diff --git a/typescript/option/src/helpers/external.ts b/typescript/option/src/helpers/external.ts new file mode 100644 index 0000000..a992f59 --- /dev/null +++ b/typescript/option/src/helpers/external.ts @@ -0,0 +1,30 @@ +export * from './bind' +export * from './bindAsync' +export * from './combine' +export * from './count' +export * from './exists' +export * from './filter' +export * from './first' +export * from './flat' +export * from './fold' +export * from './foldback' +export * from './forall' +export * from './fromArray' +export * from './fromNullable' +export * from './get' +export * from './isNone' +export * from './isSome' +export * from './iter' +export * from './map' +export * from './mapAsync' +export * from './oneOf' +export * from './optionify' +export * from './or' +export * from './orLazy' +export * from './toArray' +export * from './toNullable' +export * from './unpack' +export * from './unwrap' +export * from './values' +export * from './withDefault' +export * from './withDefaultLazy' diff --git a/typescript/option/src/helpers/filter.test.ts b/typescript/option/src/helpers/filter.test.ts new file mode 100644 index 0000000..5a38f88 --- /dev/null +++ b/typescript/option/src/helpers/filter.test.ts @@ -0,0 +1,47 @@ +import { expect } from 'chai' +import { constantly } from '@thi.ng/compose' +import { filter } from './filter' +import { None, Some } from '../types' +import { someX } from '../../test/constants' + +describe('The filter helper', () => { + describe('When the predicate returns true', () => { + const predicate = constantly(true) + + it('should return None when given None', () => { + // act + const result = filter(predicate, None) + + // assert + expect(result).to.equal(None) + }) + + it('should return Some(x) when given Some(x)', () => { + // act + const result = filter(predicate, someX) + + // assert + expect(result).to.equal(someX) + }) + }) + + describe('When the predicate returns false', () => { + const predicate = constantly(false) + + it('should return None when given Some', () => { + // act + const result = filter(predicate, someX) + + // assert + expect(result).to.equal(None) + }) + + it('should return None when given None', () => { + // act + const result = filter(predicate, None) + + // assert + expect(result).to.equal(None) + }) + }) +}) diff --git a/typescript/option/src/helpers/filter.ts b/typescript/option/src/helpers/filter.ts new file mode 100644 index 0000000..04891a6 --- /dev/null +++ b/typescript/option/src/helpers/filter.ts @@ -0,0 +1,7 @@ +import { unwrap } from './unwrap' +import { Some, None, Option } from '../types' +import { Predicate } from '../internalTypes' + +export const filter = (predicate: Predicate, option: Option) => { + return unwrap(None, v => (predicate(v) ? Some(v) : None), option) +} diff --git a/typescript/option/src/helpers/first.test.ts b/typescript/option/src/helpers/first.test.ts new file mode 100644 index 0000000..3a410cf --- /dev/null +++ b/typescript/option/src/helpers/first.test.ts @@ -0,0 +1,32 @@ +import { constantly } from '@thi.ng/compose' +import { expect } from 'chai' +import { someX } from '../../test/constants' +import { None, Option } from '../types' +import { first } from './first' + +describe('The first helper', () => { + it('should return the first Some if there is any', () => { + // act + const head = first([someX, None]) + const middle = first([None, someX, None]) + const tail = first([None, someX]) + + // assert + expect(head).to.equal(someX) + expect(middle).to.equal(someX) + expect(tail).to.equal(someX) + }) + + it("should return None if there isn't any Some", () => { + // arrange + const array: Option[] = Array(50) + .fill(1) + .map(constantly(None)) + + // act + const result = first(array) + + // assert + expect(result).to.equal(None) + }) +}) diff --git a/typescript/option/src/helpers/first.ts b/typescript/option/src/helpers/first.ts new file mode 100644 index 0000000..9a03d12 --- /dev/null +++ b/typescript/option/src/helpers/first.ts @@ -0,0 +1,17 @@ +import { isSome } from './isSome' +import { Option, None } from '../types' + +/** + * Returns the first Some in an iterable. If there isn't any returns None. + * + * @param elemenets The elements to find the first Some in. + */ +export const first = (elemenets: Iterable>) => { + for (const option of elemenets) { + if (isSome(option)) { + return option + } + } + + return None +} diff --git a/typescript/option/src/helpers/flat.test.ts b/typescript/option/src/helpers/flat.test.ts new file mode 100644 index 0000000..2f52ec2 --- /dev/null +++ b/typescript/option/src/helpers/flat.test.ts @@ -0,0 +1,25 @@ +import { expect } from 'chai' +import { flat } from './flat' +import { None, Some } from '../types' +import { someX } from '../../test/constants' + +describe('The flat helper', () => { + it('should return None when given None', () => { + // act + const result = flat(None) + + // assert + expect(result).to.equal(None) + }) + + it('should return the inner Some(x) when given Some(Some(x))', () => { + // arrange + const value = Some(someX) + + // act + const result = flat(value) + + // assert + expect(result).to.equal(someX) + }) +}) diff --git a/typescript/option/src/helpers/flat.ts b/typescript/option/src/helpers/flat.ts new file mode 100644 index 0000000..0d5f1f2 --- /dev/null +++ b/typescript/option/src/helpers/flat.ts @@ -0,0 +1,7 @@ +import { bind } from './bind' +import { identity } from '@thi.ng/compose' +import { Option } from '../types' + +export const flat = (option: Option>): Option => { + return bind(identity, option) +} diff --git a/typescript/option/src/helpers/fold.ts b/typescript/option/src/helpers/fold.ts new file mode 100644 index 0000000..7ddb023 --- /dev/null +++ b/typescript/option/src/helpers/fold.ts @@ -0,0 +1,11 @@ +import { unwrap } from './unwrap' +import { Option } from '../types' +import { Folder } from '../internalTypes' + +export const fold = ( + folder: Folder, + initial: U, + option: Option +) => { + return unwrap(initial, v => folder(initial, v), option) +} diff --git a/typescript/option/src/helpers/foldback.ts b/typescript/option/src/helpers/foldback.ts new file mode 100644 index 0000000..dedcf88 --- /dev/null +++ b/typescript/option/src/helpers/foldback.ts @@ -0,0 +1,11 @@ +import { unwrap } from './unwrap' +import { Option } from '../types' +import { BackFolder } from '../internalTypes' + +export const foldback = ( + folder: BackFolder, + option: Option, + initial: U +) => { + return unwrap(initial, v => folder(v, initial), option) +} diff --git a/typescript/option/src/helpers/forall.ts b/typescript/option/src/helpers/forall.ts new file mode 100644 index 0000000..634d0d2 --- /dev/null +++ b/typescript/option/src/helpers/forall.ts @@ -0,0 +1,7 @@ +import { unwrap } from './unwrap' +import { Predicate } from '../internalTypes' +import { Option } from '../types' + +export const forall = (predicate: Predicate, option: Option) => { + return unwrap(true, predicate, option) +} diff --git a/typescript/option/src/helpers/fromArray.ts b/typescript/option/src/helpers/fromArray.ts new file mode 100644 index 0000000..0d29b1e --- /dev/null +++ b/typescript/option/src/helpers/fromArray.ts @@ -0,0 +1,5 @@ +import { None, Some, Option } from '../types' + +export const fromArray = (value: [T] | []): Option => { + return value[0] === undefined ? None : Some(value[0]) +} diff --git a/typescript/option/src/helpers/fromNullable.ts b/typescript/option/src/helpers/fromNullable.ts new file mode 100644 index 0000000..6ebb984 --- /dev/null +++ b/typescript/option/src/helpers/fromNullable.ts @@ -0,0 +1,6 @@ +import { Nullable } from '../internalTypes' +import { Some, None, Option } from '../types' + +export const fromNullable = (value: Nullable): Option => { + return value === null ? None : Some(value) +} diff --git a/typescript/option/src/helpers/get.test.ts b/typescript/option/src/helpers/get.test.ts new file mode 100644 index 0000000..b0a21ba --- /dev/null +++ b/typescript/option/src/helpers/get.test.ts @@ -0,0 +1,22 @@ +import { expect } from 'chai' +import { get } from './get' +import { None } from '../types' +import { someX, x } from '../../test/constants' + +describe('The get helper', () => { + it('should throw when given None', () => { + // act + const callable = () => get(None) + + // assert + expect(callable).to.throw() + }) + + it('should return the innter value when given Some', () => { + // act + const result = get(someX) + + // assert + expect(result).to.equal(x) + }) +}) diff --git a/typescript/option/src/helpers/get.ts b/typescript/option/src/helpers/get.ts new file mode 100644 index 0000000..72fc4de --- /dev/null +++ b/typescript/option/src/helpers/get.ts @@ -0,0 +1,10 @@ +import { Option } from '../types' +import { isSome } from './isSome' + +export const get = (option: Option): T => { + if (isSome(option)) { + return option as T + } + + throw new Error(`Cannot get value of None`) +} diff --git a/typescript/option/src/helpers/isNone.test.ts b/typescript/option/src/helpers/isNone.test.ts new file mode 100644 index 0000000..40558b2 --- /dev/null +++ b/typescript/option/src/helpers/isNone.test.ts @@ -0,0 +1,22 @@ +import { expect } from 'chai' +import { isNone } from './isNone' +import { None } from '../types' +import { someX } from '../../test/constants' + +describe('The isNone helper', () => { + it('should return false when given Some', () => { + // act + const result = isNone(someX) + + // assert + expect(result).to.equal(false) + }) + + it('should return true when given None', () => { + // act + const result = isNone(None) + + // assert + expect(result).to.equal(true) + }) +}) diff --git a/typescript/option/src/helpers/isNone.ts b/typescript/option/src/helpers/isNone.ts new file mode 100644 index 0000000..b2a90e0 --- /dev/null +++ b/typescript/option/src/helpers/isNone.ts @@ -0,0 +1,4 @@ +import { Option } from '../types' +import { none } from '../internals' + +export const isNone = (option: Option) => option.__brand === none diff --git a/typescript/option/src/helpers/isSome.test.ts b/typescript/option/src/helpers/isSome.test.ts new file mode 100644 index 0000000..b1f2361 --- /dev/null +++ b/typescript/option/src/helpers/isSome.test.ts @@ -0,0 +1,22 @@ +import { expect } from 'chai' +import { None } from '../types' +import { someX } from '../../test/constants' +import { isSome } from './isSome' + +describe('The isSome helper', () => { + it('should return true when given Some', () => { + // act + const result = isSome(someX) + + // assert + expect(result).to.equal(true) + }) + + it('should return false when given None', () => { + // act + const result = isSome(None) + + // assert + expect(result).to.equal(false) + }) +}) diff --git a/typescript/option/src/helpers/isSome.ts b/typescript/option/src/helpers/isSome.ts new file mode 100644 index 0000000..7839bb6 --- /dev/null +++ b/typescript/option/src/helpers/isSome.ts @@ -0,0 +1,4 @@ +import { Option } from '../types' +import { isNone } from './isNone' + +export const isSome = (option: Option) => !isNone(option) diff --git a/typescript/option/src/helpers/iter.ts b/typescript/option/src/helpers/iter.ts new file mode 100644 index 0000000..6c8108f --- /dev/null +++ b/typescript/option/src/helpers/iter.ts @@ -0,0 +1,9 @@ +import { Mapper } from '../internalTypes' +import { Option } from '../types' +import { isSome } from './isSome' + +export const iter = (mapper: Mapper, option: Option) => { + if (isSome(option)) { + mapper(option as T) + } +} diff --git a/typescript/option/src/helpers/map.ts b/typescript/option/src/helpers/map.ts new file mode 100644 index 0000000..5c53f16 --- /dev/null +++ b/typescript/option/src/helpers/map.ts @@ -0,0 +1,10 @@ +import { unwrap } from './unwrap' +import { Mapper } from '../internalTypes' +import { Option, Some, None } from '../types' + +export const map = ( + mapper: Mapper, + option: Option +): Option => { + return unwrap(None, v => Some(mapper(v)), option) +} diff --git a/typescript/option/src/helpers/mapAsync.ts b/typescript/option/src/helpers/mapAsync.ts new file mode 100644 index 0000000..08c124c --- /dev/null +++ b/typescript/option/src/helpers/mapAsync.ts @@ -0,0 +1,14 @@ +import { Option, None, Some } from '../types' +import { Mapper } from '../internalTypes' +import { unwrap } from './unwrap' + +export const mapAsync = ( + mapper: Mapper>, + option: Option +) => { + return unwrap( + Promise.resolve(None), + value => mapper(value).then(Some), + option + ) +} diff --git a/typescript/option/src/helpers/oneOf.test.ts b/typescript/option/src/helpers/oneOf.test.ts new file mode 100644 index 0000000..d7e91ef --- /dev/null +++ b/typescript/option/src/helpers/oneOf.test.ts @@ -0,0 +1,55 @@ +import { constantly } from '@thi.ng/compose' +import { expect } from 'chai' +import { spy } from 'sinon' +import { x, alwaysSomeX } from '../../test/constants' +import { None, Some } from '../types' +import { oneOf } from './oneOf' + +const alwaysSome = (v: T) => constantly(Some(v)) + +describe('The oneOf helper', () => { + it('should return None on an empty array', () => { + // act + const result = oneOf(x, []) + + // assert + expect(result).to.equal(None) + }) + + it('should return the result of the first function which evaluates to Some', () => { + // arrange + const alwaysNone = constantly(None) + + // act + const head = oneOf(x, [alwaysSome('head'), alwaysNone]) + const middle = oneOf(x, [alwaysNone, alwaysSome('middle'), alwaysNone]) + const tail = oneOf(x, [alwaysNone, alwaysSome('tail')]) + + // assert + expect(head).to.equal(Some('head')) + expect(middle).to.equal(Some('middle')) + expect(tail).to.equal(Some('tail')) + }) + + it('should not evaluate any more functions after it found the result', () => { + // arrange + const func = spy(alwaysSomeX) + + // act + oneOf(x, [alwaysSomeX, func]) + + // assert + expect(func.called).to.be.false + }) + + it('should pass the provided input to the functions', () => { + // arrange + const func = spy(alwaysSomeX) + + // act + oneOf(x, [func]) + + // assert + expect(func.calledWith(x)).to.be.true + }) +}) diff --git a/typescript/option/src/helpers/oneOf.ts b/typescript/option/src/helpers/oneOf.ts new file mode 100644 index 0000000..99fb6a8 --- /dev/null +++ b/typescript/option/src/helpers/oneOf.ts @@ -0,0 +1,23 @@ +import { Binder } from '../internalTypes' +import { isSome } from './isSome' +import { None } from '../types' + +/** + * Try a list of functions against a value. + * Return the value of the first call that succeeds (aka returns Some). + * If no function retursn Some this will default to None. + * + * @param input The input to pass to the functions. + * @param functions Iterable of functions to try against the input. + */ +export const oneOf = (input: T, functions: Binder[]) => { + for (const func of functions) { + const result = func(input) + + if (isSome(result)) { + return result + } + } + + return None +} diff --git a/typescript/option/src/helpers/optionify.test.ts b/typescript/option/src/helpers/optionify.test.ts new file mode 100644 index 0000000..04e6e9e --- /dev/null +++ b/typescript/option/src/helpers/optionify.test.ts @@ -0,0 +1,17 @@ +import { expect } from 'chai' +import { optionify } from './optionify' +import { fromNullable } from './fromNullable' + +describe('The optionify helper', () => { + it('should create a function which returns an option instead of a nullable', () => { + // arrange + const func = (a: number, b: number) => (a > b ? a + b : null) + + // act + const result = optionify(func) + + // assert + expect(result(1, 2)).to.equal(fromNullable(func(1, 2))) + expect(result(2, 1)).to.equal(fromNullable(func(2, 1))) + }) +}) diff --git a/typescript/option/src/helpers/optionify.ts b/typescript/option/src/helpers/optionify.ts new file mode 100644 index 0000000..d617f30 --- /dev/null +++ b/typescript/option/src/helpers/optionify.ts @@ -0,0 +1,15 @@ +import { fromNullable } from './fromNullable' + +/** + * Takes a function which returns a nullable and creates + * a function which returns an Option. + * In functional programming this would be the same as + * composing the function with fromNullable. + * + * @param f The function to optionify + */ +export const optionify = ( + f: (...args: T) => U | null +) => { + return (...args: T) => fromNullable(f(...args)) +} diff --git a/typescript/option/src/helpers/or.test.ts b/typescript/option/src/helpers/or.test.ts new file mode 100644 index 0000000..a7205d0 --- /dev/null +++ b/typescript/option/src/helpers/or.test.ts @@ -0,0 +1,26 @@ +import { expect } from 'chai' +import { or } from './or' +import { someX } from '../../test/constants' +import { None } from '../types' + +describe('The or helper', () => { + describe('When the first argument is None', () => { + it('should return the second argument', () => { + // act + const orSome = or(None, someX) + const orNone = or(None, None) + + // assert + expect(orSome).to.equal(someX) + expect(orNone).to.equal(None) + }) + }) + + it("should return the first argument when it's not None", () => { + // act + const result = or(someX, None) + + // assert + expect(result).to.equal(someX) + }) +}) diff --git a/typescript/option/src/helpers/or.ts b/typescript/option/src/helpers/or.ts new file mode 100644 index 0000000..b717565 --- /dev/null +++ b/typescript/option/src/helpers/or.ts @@ -0,0 +1,20 @@ +import { Option } from '../types' +import { isSome } from './isSome' + +/** + * Returns the first value that is present, like the boolean ||. + * Both values will be computed. + * There is no short-circuiting. + * If your second argument is expensive to calculate and + * you need short circuiting, use orLazy instead. + * + * @param a The first argument. + * @param b The second argument. + */ +export const or = (a: Option, b: Option): Option => { + if (isSome(a)) { + return a + } else { + return b + } +} diff --git a/typescript/option/src/helpers/orLazy.test.ts b/typescript/option/src/helpers/orLazy.test.ts new file mode 100644 index 0000000..3cdb4c8 --- /dev/null +++ b/typescript/option/src/helpers/orLazy.test.ts @@ -0,0 +1,48 @@ +import { expect } from 'chai' +import { constantly } from '@thi.ng/compose' +import { orLazy } from './orLazy' +import { someX } from '../../test/constants' +import { None } from '../types' +import { spy } from 'sinon' + +describe('The orLazy helper', () => { + it("should return the first argument if it's Some", () => { + // act + const result = orLazy(someX, constantly(None)) + + // asser + expect(result).to.equal(someX) + }) + + it('should return the return of the second argument if the first is None', () => { + // act + const orSome = orLazy(None, constantly(someX)) + const orNone = orLazy(None, constantly(None)) + + // assert + expect(orSome).to.equal(someX) + expect(orNone).to.equal(None) + }) + + it('should not evaluate the second argument if the first one is Some', () => { + // arrange + const func = spy(constantly(someX)) + + // act + orLazy(someX, func) + + // assert + expect(func.called).to.be.false + }) + + it('should evaluate the second argument if the first one is None', () => { + // arrange + const func = spy(constantly(someX)) + + // act + orLazy(None, func) + + // assert + expect(func.called).to.be.true + }) +}) diff --git a/typescript/option/src/helpers/orLazy.ts b/typescript/option/src/helpers/orLazy.ts new file mode 100644 index 0000000..a4d83e9 --- /dev/null +++ b/typescript/option/src/helpers/orLazy.ts @@ -0,0 +1,17 @@ +import { isSome } from './isSome' +import { Option } from '../types' + +/** + * Lazy version of or. + * The second argument will only be evaluated if the first argument is Nothing. + * + * @param a The first argument. + * @param b The second argument. + */ +export const orLazy = (a: Option, b: () => Option) => { + if (isSome(a)) { + return a + } + + return b() +} diff --git a/typescript/option/src/helpers/toArray.ts b/typescript/option/src/helpers/toArray.ts new file mode 100644 index 0000000..d704e2d --- /dev/null +++ b/typescript/option/src/helpers/toArray.ts @@ -0,0 +1,6 @@ +import { unwrap } from './unwrap' +import { Option } from '../types' + +export const toArray = (option: Option) => { + return unwrap([], v => [v], option) +} diff --git a/typescript/option/src/helpers/toNullable.ts b/typescript/option/src/helpers/toNullable.ts new file mode 100644 index 0000000..2275211 --- /dev/null +++ b/typescript/option/src/helpers/toNullable.ts @@ -0,0 +1,7 @@ +import { unwrap } from './unwrap' +import { identity } from '@thi.ng/compose' +import { Option } from '../types' + +export const toNullable = (option: Option) => { + return unwrap(null, identity, option) +} diff --git a/typescript/option/src/helpers/unpack.test.ts b/typescript/option/src/helpers/unpack.test.ts new file mode 100644 index 0000000..802f6aa --- /dev/null +++ b/typescript/option/src/helpers/unpack.test.ts @@ -0,0 +1,61 @@ +import { expect } from 'chai' +import { None } from '../types' +import { alwaysX, x, someX } from '../../test/constants' +import { constantly } from '@thi.ng/compose' +import { spy } from 'sinon' +import { unpack } from './unpack' + +describe('The unpack helper', () => { + describe('When given None', () => { + it('should return the default when given None', () => { + // act + const result = unpack(constantly(0), constantly(1), None) + + // assert + expect(result).to.equal(0) + }) + + it('should call the lazy default', () => { + // arrange + const func = spy(alwaysX) + + // act + unpack(func, alwaysX, None) + + // assert + expect(func.called).to.be.true + }) + }) + + describe('When given Some', () => { + it('should return the return of the mapper', () => { + // act + const result = unpack(constantly(0), constantly(1), someX) + + // assert + expect(result).to.equal(1) + }) + + it('should not call the lazy default', () => { + // arrange + const func = spy(alwaysX) + + // act + unpack(func, alwaysX, someX) + + // assert + expect(func.called).to.be.false + }) + + it('should pass the inner value to the mapper', () => { + // arrange + const mapper = spy(alwaysX) + + // act + unpack(alwaysX, mapper, someX) + + // assert + expect(mapper.calledWith(x)).to.be.true + }) + }) +}) diff --git a/typescript/option/src/helpers/unpack.ts b/typescript/option/src/helpers/unpack.ts new file mode 100644 index 0000000..07c2562 --- /dev/null +++ b/typescript/option/src/helpers/unpack.ts @@ -0,0 +1,20 @@ +import { Lazy, Mapper } from '../internalTypes' +import { Option } from '../types' +import { withDefaultLazy } from './withDefaultLazy' +import { map } from './map' + +/** + * Like unwrap, but the default value is lazy, + * and will only be computed if the Option is None. + * + * @param _default The lazy value to use in case option is None. + * @param mapper The function to pass the inner value to. + * @param option The option to unpack. + */ +export const unpack = ( + _default: Lazy, + mapper: Mapper, + option: Option +) => { + return withDefaultLazy(_default, map(mapper, option)) +} diff --git a/typescript/option/src/helpers/unwrap.test.ts b/typescript/option/src/helpers/unwrap.test.ts new file mode 100644 index 0000000..5f2ee43 --- /dev/null +++ b/typescript/option/src/helpers/unwrap.test.ts @@ -0,0 +1,37 @@ +import { constantly, identity } from '@thi.ng/compose' +import { expect } from 'chai' +import { spy } from 'sinon' +import { someX, x } from '../../test/constants' +import { None } from '../types' +import { unwrap } from './unwrap' + +describe('The unwrap helper', () => { + it('should return the default when given None', () => { + // act + const result = unwrap(0, constantly(1), None) + + // assert + expect(result).to.equal(0) + }) + + describe('When given Some', () => { + it('should return the result of the mapper ', () => { + // act + const result = unwrap(0, constantly(1), someX) + + // assert + expect(result).to.equal(1) + }) + + it('should pass the inner value to the mapper', () => { + // arrange + const mapper = spy(identity) + + // act + unwrap(0, mapper, someX) + + // assert + expect(mapper.calledWith(x)).to.be.true + }) + }) +}) diff --git a/typescript/option/src/helpers/unwrap.ts b/typescript/option/src/helpers/unwrap.ts new file mode 100644 index 0000000..062a676 --- /dev/null +++ b/typescript/option/src/helpers/unwrap.ts @@ -0,0 +1,23 @@ +import { Option } from '../types' +import { Mapper } from '../internalTypes' +import { isSome } from './isSome' + +/** + * Apply the function to the value in the Option and return it unwrapped. + * If the Option is None, use the default value instead. + * + * @param _default The default value to use. + * @param mapper Function to apply to the inner value. + * @param option Option to unwrap. + */ +export const unwrap = ( + _default: U, + caseSome: Mapper, + option: Option +) => { + if (isSome(option)) { + return caseSome(option as T) + } + + return _default +} diff --git a/typescript/option/src/helpers/values.test.ts b/typescript/option/src/helpers/values.test.ts new file mode 100644 index 0000000..ceb78c1 --- /dev/null +++ b/typescript/option/src/helpers/values.test.ts @@ -0,0 +1,19 @@ +import { expect } from 'chai' +import { values } from './values' +import { Some, None } from '../types' + +describe('The values helper', () => { + it('should ignore all None values', () => { + // arrange + const items = Array(50) + .fill(1) + .map((_, i) => (i % 2 ? Some(i) : None)) + + // act + const result = values(items) + + // assert + expect(result).to.not.contain(None) + expect(result, "ensure it didn't clear everything").to.not.be.empty + }) +}) diff --git a/typescript/option/src/helpers/values.ts b/typescript/option/src/helpers/values.ts new file mode 100644 index 0000000..c973b65 --- /dev/null +++ b/typescript/option/src/helpers/values.ts @@ -0,0 +1,11 @@ +import { Option } from '../types' +import { toArray } from './toArray' + +/** + * Take all the values that are present, throwing away any None + * + * @param iterable The iterable to collect the values from. + */ +export const values = (iterable: Iterable>) => { + return Array.from(iterable).flatMap(toArray) +} diff --git a/typescript/option/src/helpers/withDefault.test.ts b/typescript/option/src/helpers/withDefault.test.ts new file mode 100644 index 0000000..a661b2a --- /dev/null +++ b/typescript/option/src/helpers/withDefault.test.ts @@ -0,0 +1,22 @@ +import { expect } from 'chai' +import { withDefault } from './withDefault' +import { x } from '../../test/constants' +import { None, Some } from '../types' + +describe('The withDefault helper', () => { + it('should return the default when given None', () => { + // act + const result = withDefault(x, None) + + // assert + expect(result).to.equal(x) + }) + + it('should return x when given Some(x)', () => { + // act + const result = withDefault(0, Some(1)) + + // assert + expect(result).to.equal(1) + }) +}) diff --git a/typescript/option/src/helpers/withDefault.ts b/typescript/option/src/helpers/withDefault.ts new file mode 100644 index 0000000..9a6db91 --- /dev/null +++ b/typescript/option/src/helpers/withDefault.ts @@ -0,0 +1,13 @@ +import { unwrap } from './unwrap' +import { identity } from '@thi.ng/compose' +import { Option } from '../types' + +/** + * Provide a default value, turning an optional value into a normal value. + * + * @param _default The default value to use. + * @param option The option to get the default of. + */ +export const withDefault = (_default: T, option: Option) => { + return unwrap(_default, identity, option) +} diff --git a/typescript/option/src/helpers/withDefaultLazy.test.ts b/typescript/option/src/helpers/withDefaultLazy.test.ts new file mode 100644 index 0000000..5ec7d97 --- /dev/null +++ b/typescript/option/src/helpers/withDefaultLazy.test.ts @@ -0,0 +1,50 @@ +import { expect } from 'chai' +import { withDefaultLazy } from './withDefaultLazy' +import { None, Some } from '../types' +import { alwaysX, x, someX } from '../../test/constants' +import { constantly } from '@thi.ng/compose' +import { spy } from 'sinon' + +describe('The withDefaultLazy helper', () => { + describe('When given None', () => { + it('should return the default when given None', () => { + // act + const result = withDefaultLazy(alwaysX, None) + + // assert + expect(result).to.equal(x) + }) + + it('should call the lazy default', () => { + // arrange + const func = spy(constantly(x)) + + // act + withDefaultLazy(func, None) + + // assert + expect(func.called).to.be.true + }) + }) + + describe('When given Some', () => { + it('should return the inner value', () => { + // act + const result = withDefaultLazy(constantly(0), Some(1)) + + // assert + expect(result).to.equal(1) + }) + + it('should not call the lazy default', () => { + // arrange + const func = spy(constantly(x)) + + // act + withDefaultLazy(func, someX) + + // assert + expect(func.called).to.be.false + }) + }) +}) diff --git a/typescript/option/src/helpers/withDefaultLazy.ts b/typescript/option/src/helpers/withDefaultLazy.ts new file mode 100644 index 0000000..da46a15 --- /dev/null +++ b/typescript/option/src/helpers/withDefaultLazy.ts @@ -0,0 +1,16 @@ +import { Option } from '../types' +import { isSome } from './isSome' +import { Lazy } from '../internalTypes' +import { get } from './get' + +/** + * Same as withDefault but the default is only evaluated when the option is None. + * + * @param _default Function returning the default value to use. + * @param option The option to get the default of. + */ +export const withDefaultLazy = (_default: Lazy, option: Option) => { + if (isSome(option)) { + return get(option) + } else return _default() +} diff --git a/typescript/option/src/index.ts b/typescript/option/src/index.ts new file mode 100644 index 0000000..37d7557 --- /dev/null +++ b/typescript/option/src/index.ts @@ -0,0 +1,2 @@ +export * from './helpers/external' +export * from './types' diff --git a/typescript/option/src/internalTypes.ts b/typescript/option/src/internalTypes.ts new file mode 100644 index 0000000..bbe0938 --- /dev/null +++ b/typescript/option/src/internalTypes.ts @@ -0,0 +1,9 @@ +import { Option } from './types' + +export type Mapper = (v: T) => U +export type Binder = (v: T) => Option +export type Predicate = (v: T) => boolean +export type Folder = (s: U, v: T) => U +export type BackFolder = (v: T, s: U) => U +export type Nullable = T | null +export type Lazy = () => T diff --git a/typescript/option/src/internals.ts b/typescript/option/src/internals.ts new file mode 100644 index 0000000..09b8392 --- /dev/null +++ b/typescript/option/src/internals.ts @@ -0,0 +1 @@ +export const none = Symbol('none') diff --git a/typescript/option/src/types.ts b/typescript/option/src/types.ts new file mode 100644 index 0000000..397841e --- /dev/null +++ b/typescript/option/src/types.ts @@ -0,0 +1,17 @@ +import { identity } from '@thi.ng/compose' +import { Brand } from 'utility-types' +import { none } from './internals' + +// This is never actually used outside of typing so we can just declare it +declare const some: unique symbol + +type None = Brand +type Some = Brand + +export type Option = Some | None + +export const None = { + __brand: none, + toString: () => 'None' +} as None +export const Some = identity as (value: T) => Option diff --git a/typescript/option/test/constants.ts b/typescript/option/test/constants.ts new file mode 100644 index 0000000..31bd9c5 --- /dev/null +++ b/typescript/option/test/constants.ts @@ -0,0 +1,11 @@ +import { constantly } from '@thi.ng/compose' +import { Some } from '../src' + +// general value to pass around +export const x = Symbol('x') + +// same as x but for some +export const someX = Some(x) + +export const alwaysX = constantly(x) +export const alwaysSomeX = constantly(someX) diff --git a/typescript/option/tsconfig.json b/typescript/option/tsconfig.json new file mode 100644 index 0000000..2e31f4d --- /dev/null +++ b/typescript/option/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "module": "CommonJS", + "lib": ["esnext", "dom", "es2015.iterable"], + "moduleResolution": "node", + "strictNullChecks": true, + "sourceMap": true, + "downlevelIteration": true, + "target": "es6", + + "resolveJsonModule": true + }, + "include": ["src", "sandbox", "test", "package.json"], + "exclude": ["dist"] +}