├── .circleci └── config.yml ├── .editorconfig ├── .eslintrc.json ├── .gitattributes ├── .markdownlint.json ├── .packit.yaml ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── dist ├── jowl.spec └── packit-post-upstream-clone.sh ├── docs └── reference.md ├── package.json ├── src ├── bin │ └── jowl.js └── lib │ ├── .eslintrc.js │ ├── format.js │ └── run.js ├── test ├── .eslintrc.js ├── integration │ └── jowl.js └── unit │ └── lib │ ├── format.js │ └── run.js └── yarn.lock /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | version: 2.1 2 | 3 | orbs: 4 | node: circleci/node@5.0.0 5 | 6 | workflows: 7 | build-deploy: 8 | jobs: 9 | - build: 10 | matrix: 11 | parameters: 12 | os: 13 | - linux 14 | - macos 15 | - windows 16 | node-version: 17 | - "6" # Best effort support 18 | - "8" # Best effort support 19 | - "10" # Best effort support 20 | - "12" # Best effort support 21 | - "14" # Best effort support 22 | - "16" # Best effort support 23 | - "18" # Fully supported 24 | - "20" # Fully supported 25 | - "22" # Fully supported 26 | filters: 27 | # Runs on all branches by default 28 | # Runs on no tags by default, so must add version tags to allow deploy jobs to run 29 | tags: 30 | only: /^v.*/ 31 | - deploy-npm: 32 | requires: 33 | - build 34 | filters: 35 | # Only version tags 36 | tags: 37 | only: /^v.*/ 38 | # Necessary to prevent building on every branch even though tags are restricted 39 | branches: 40 | ignore: /.*/ 41 | - deploy-homebrew: 42 | requires: 43 | # Homebrew automation depends on pulling the published package from npmjs.org 44 | - deploy-npm 45 | filters: 46 | # Only version tags 47 | tags: 48 | only: /^v.*/ 49 | # Necessary to prevent building on every branch even though tags are restricted 50 | branches: 51 | ignore: /.*/ 52 | 53 | executors: 54 | linux: 55 | docker: 56 | # Use a base image rather than a node image because the node image requires us to already know 57 | # the Node version when defining the executor, but our marix build takes the executor and 58 | # node version as an argument, so we can't parameterize this at executor definition time. 59 | - image: cimg/base:2022.01 # Version chosen arbitrarily as newest at time of writing 60 | macos: &macos-executor 61 | macos: 62 | xcode: 14.3.1 # Version chosen arbitrarily as newest at time of writing 63 | # Circle's docs recommend using the executor definition from the windows orb. However, it does 64 | # not appear to be possible to use that in an executors section that is compatible with matrix builds, 65 | # so we instead expand it manually. The anchor allows us to reference it in conditionals below. 66 | windows: &windows-executor 67 | machine: 68 | image: windows-server-2019-vs2019:stable # Version chosen arbitrarily as newest at time of writing 69 | resource_class: windows.medium # Need to specify this explicitly or it defaults to a non-windows size 70 | shell: powershell.exe 71 | 72 | jobs: 73 | build: 74 | parameters: 75 | os: 76 | type: executor 77 | node-version: 78 | type: string 79 | executor: << parameters.os >> 80 | steps: 81 | - checkout 82 | # The node orb is not compatible with Windows executors, but they already have nvm installed. 83 | # Unfortunately, https://github.com/coreybutler/nvm-windows/issues/708 means that we would 84 | # need to specify an exact dot version of Node to use, and https://github.com/coreybutler/nvm-windows/issues/738 85 | # means that nvm will silently fail. Instead, use nvs, which has addressed both of these problems. 86 | - when: 87 | condition: 88 | equal: [ *windows-executor, << parameters.os >> ] 89 | steps: 90 | - run: choco install nvs 91 | - run: nvs add node/<< parameters.node-version >> 92 | - run: nvs use node/<< parameters.node-version >> 93 | - run: npm install --global yarn 94 | # NodeJS only provides Apple Silicon builds of versions 16 and up on macOS. 95 | # Until we drop support for earlier versions, use the workaround documented in 96 | # https://github.com/nvm-sh/nvm#macos-troubleshooting 97 | # to install an x86_64 architecture build of Node. Do this for all Node versions because 98 | # the conditional logic for versions less than 16 isn't worth the complexity. 99 | - when: 100 | condition: 101 | equal: [ *macos-executor, << parameters.os >> ] 102 | steps: 103 | - run: softwareupdate --install-rosetta --agree-to-license 104 | - run: 'arch -x86_64 bash -c "source $HOME/.nvm/nvm.sh --no-use && nvm install << parameters.node-version >> --shared-zlib"' 105 | - run: nvm alias default << parameters.node-version >> 106 | - run: nvm use default 107 | - node/install-yarn 108 | 109 | # All other executors can use the orb to install Node 110 | - unless: 111 | condition: 112 | or: 113 | - equal: [ *windows-executor, << parameters.os >> ] 114 | - equal: [ *macos-executor, << parameters.os >> ] 115 | steps: 116 | - node/install: 117 | node-version: << parameters.node-version >> 118 | install-yarn: true 119 | - restore_cache: 120 | keys: 121 | # parameters.os is an Executor object, not a string. Nevertheless, its string representation does seem to be stable 122 | # between runs. If that ever changes, the worst case would just be a cache miss. 123 | - v4-dependencies-<>-<>-{{ checksum "package.json" }}{{ checksum "yarn.lock" }} 124 | # fallback to using the latest cache if no exact match is found 125 | - v4-dependencies-<>-<> 126 | - run: yarn install --frozen-lockfile 127 | - save_cache: 128 | paths: 129 | - node_modules 130 | key: v4-dependencies-<>-<>-{{ checksum "package.json" }}{{ checksum "yarn.lock" }} 131 | - save_cache: 132 | paths: 133 | - node_modules 134 | key: v4-dependencies-<>-<> 135 | - run: yarn run build 136 | deploy-npm: 137 | executor: linux 138 | steps: 139 | - checkout 140 | - node/install: 141 | node-version: "16" 142 | - run: npm config set "//registry.npmjs.org/:_authToken=$NPM_TOKEN" 143 | - run: npm publish 144 | deploy-homebrew: 145 | docker: 146 | - image: homebrew/brew:3.3.15 # Version chosen arbitrarily as newest at time of writing 147 | steps: 148 | - add_ssh_keys: 149 | fingerprints: 150 | - "56:e9:ae:84:c0:ae:f2:55:2a:9a:f9:73:8a:0d:06:f4" # "CircleCI Push" Deploy Key in Github 151 | - run: | 152 | export JOWL_VERSION="$(echo ${CIRCLE_TAG} | sed 's/^v//')" 153 | git config --global user.email "git@danonline.net" 154 | git config --global user.name "Daniel Axelrod (via CircleCI)" 155 | export HOMEBREW_NO_ANALYTICS=1 HOMEBREW_NO_AUTO_UPDATE=1 156 | brew tap daxelrod/jowl 157 | brew bump-formula-pr daxelrod/jowl/jowl --version="${JOWL_VERSION}" --write-only --commit 158 | brew audit daxelrod/jowl/jowl --strict 159 | cd "$(dirname $(brew formula daxelrod/jowl/jowl))" 160 | # bump-formula-pr --message only affects the PR message, not the commit message 161 | git commit --amend -m "chore(release): jowl ${JOWL_VERSION}" -m "" -m "Created automatically by deploy-homebrew CircleCI job in main jowl repo" 162 | git --no-pager show 163 | git push 164 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # Automatic text editor configuration. http://editorconfig.org 2 | 3 | root = true 4 | 5 | [*] 6 | charset = utf-8 7 | end_of_line = lf 8 | indent_style = space 9 | indent_size = 2 10 | insert_final_newline = true 11 | trim_trailing_whitespace = true 12 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "airbnb-base", 3 | "env": { 4 | "node": true 5 | }, 6 | "parserOptions": { 7 | "ecmaVersion": 6, 8 | 9 | // Airbnb preset sets this to "module" 10 | // but everything outside of lib is a script 11 | "sourceType": "script" 12 | }, 13 | "rules": { 14 | // Have to override the airbnb rules, which want training commas for function 15 | // arguments, even though these are only supported in ES2017 and up. 16 | // Overriding this rule involves setting all of the same options except for 17 | // "functions". https://github.com/eslint/eslint/issues/7851#issuecomment-270428874 18 | "comma-dangle": ["warn", { 19 | "arrays": "always-multiline", 20 | "objects": "always-multiline", 21 | "imports": "always-multiline", 22 | "exports": "always-multiline", 23 | "functions": "never" // This is the actual change from the airbnb rules 24 | }], 25 | 26 | // The Airbnb style guide says nothing about using console, 27 | // and we legitimately need it for output 28 | "no-console": "off", 29 | 30 | // Airbnb sets this to "never" even though their written style guide 31 | // never actually mentions it. Babel inserts it for them, but we're 32 | // not using Babel. 33 | "strict": ["error", "safe"], 34 | 35 | // The Airbnb style guide never mentions this, but the airbnb eslint rules 36 | // consider it an error. Shadowing is a useful language feature, and now 37 | // that we have lexical scoping, it's not as dangerous as it once was. 38 | "no-shadow": "off" 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=lf 2 | 3 | # Files types to convert to lf when being committed or checked out 4 | *.js text 5 | *.json text 6 | *.md text 7 | *.yml text 8 | -------------------------------------------------------------------------------- /.markdownlint.json: -------------------------------------------------------------------------------- 1 | { 2 | "default": true, 3 | "MD013": false, 4 | "MD031": false 5 | } 6 | -------------------------------------------------------------------------------- /.packit.yaml: -------------------------------------------------------------------------------- 1 | # See the documentation for more information: 2 | # https://packit.dev/docs/configuration/ 3 | 4 | specfile_path: dist/jowl.spec 5 | 6 | # add or remove files that should be synced 7 | files_to_sync: 8 | - .packit.yaml 9 | - src: 10 | - dist/jowl-*-bundled-licenses.txt 11 | - dist/jowl-*-nm-dev.tgz 12 | - dist/jowl-*-nm-prod.tgz 13 | dest: . 14 | - src: 15 | - dist/jowl.spec 16 | - dist/packit-post-upstream-clone.sh 17 | dest: dist/ 18 | mkpath: true 19 | 20 | # name in upstream package repository or registry (e.g. in PyPI) 21 | upstream_package_name: jowl 22 | upstream_tag_template: 'v{version}' 23 | # downstream (Fedora) RPM package name 24 | downstream_package_name: jowl 25 | 26 | srpm_build_deps: 27 | - nodejs-packaging-bundler 28 | - /usr/bin/node # Hack to work around https://src.fedoraproject.org/rpms/nodejs20/c/92480e045911151ae470f279ceef834f0f5b4370 not yet being released 29 | 30 | actions: 31 | post-upstream-clone: 32 | - dist/packit-post-upstream-clone.sh 33 | 34 | jobs: 35 | - job: copr_build 36 | trigger: pull_request 37 | targets: [fedora-all] 38 | 39 | - job: tests 40 | trigger: pull_request 41 | targets: [fedora-all] 42 | 43 | - job: propose_downstream 44 | trigger: release 45 | dist_git_branches: 46 | - fedora-all 47 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## [2.3.3](https://github.com/daxelrod/jowl/tree/v2.3.3) (2024-07-23) 4 | 5 | Contains no changes to any of the source code in the package from 2.3.2. 6 | 7 | Fix a bug in the automation that prevented previous versions from being published to Fedora without manual intervention. 8 | 9 | ## [2.3.2](https://github.com/daxelrod/jowl/tree/v2.3.2) (2024-07-15) 10 | 11 | Add support for Node version 22, which will become LTS. 12 | 13 | Fedora's next version will use node 22. 14 | 15 | ## [2.3.1](https://github.com/daxelrod/jowl/tree/v2.3.1) (2023-08-21) 16 | 17 | Contains no changes to any of the source code in the package from 2.0.1. 18 | 19 | Fix a bug in the automation that prevented 2.3.0 from being published to Fedora. 20 | 21 | ## [2.3.0](https://github.com/daxelrod/jowl/tree/v2.3.0) (2023-08-05) 22 | 23 | Add support for Node version 20, which will become LTS. 24 | 25 | Fedora's next version will use node 20. 26 | 27 | ## [2.2.0](https://github.com/daxelrod/jowl/tree/v2.2.0) (2022-09-21) 28 | 29 | Add support for packaging in Fedora. 30 | 31 | Make Jowl more convenient to install by packaging it for Fedora. 32 | Packaging for more platforms is on its way. 33 | 34 | ## [2.1.0](https://github.com/daxelrod/jowl/tree/v2.1.0) (2022-09-18) 35 | 36 | Add support for Node version 18, which will become LTS. 37 | This paves the way for adding Jowl to Fedora, whose next version will use 38 | node 18. 39 | 40 | ## [2.0.2](https://github.com/daxelrod/jowl/tree/v2.0.2) (2022-02-22) 41 | 42 | Contains no changes to any of the source code in the package from 2.0.1. 43 | 44 | Fix a bug in the automation that prevented 2.0.1 from being published to npmjs.org. 45 | 46 | ## [2.0.1](https://github.com/daxelrod/jowl/tree/v2.0.1) (2022-02-22) 47 | 48 | (This release was never published to npmjs.org nor the Homebrew daxelrod/jowl tap due to a CI bug.) 49 | 50 | Improve color contrast on a variety of common terminals' built in color schemes. 51 | 52 | Jowl intentionally uses colors from the 16 color palette, which names colors like "green" but does not assign them specific values in color space, which means they are mapped by the terminal's color scheme to specific RGB values. 53 | Unfortunately, in the built-in color schemes across many popular terminals, many colors do not have sufficient contrast against the background color in the color scheme to be legible. 54 | 55 | After [testing against all built-in color schemes](https://github.com/daxelrod/jowl/issues/39) across widely used terminals on all OSes we support, make a couple of tweaks to maximize legibility. 56 | 57 | As a reminder, the color codes that are output are not considered a stable interface. 58 | If this change has broken one of your workflows, please use the `--no-color` flag in that workflow. 59 | 60 | ## [2.0.0](https://github.com/daxelrod/jowl/tree/v2.0.0) (2022-01-15) 61 | 62 | ### Syntax Highlighting 63 | 64 | Add colors for syntax highlighting! It's been a long road to get here, but now, when outputting to a TTY that supports color, Jowl's output is syntax-highlighted. 65 | This makes it both a more useful pretty-printer and makes output easier to understand in general. 66 | 67 | The colors are intended to be readable on a wide variety of terminal color schemes. 68 | If you use an even mildly common color scheme and you find the output hard to read, please file an issue with a screenshot. 69 | Future releases will tweak the colors after testing across more terminals. 70 | 71 | When output is not to a TTY (for example, a pipe), it does not contain ANSI color codes and continues to be valid JSON, and the behavior can be customized via [command line switches](https://github.com/daxelrod/jowl/blob/master/docs/reference.md#color) or [environment variables](https://github.com/daxelrod/jowl/blob/master/docs/reference.md#force-color). 72 | 73 | Since this means some Jowl output is no longer valid JSON (because of the added ANSI codes), this is a **Breaking Change**. 74 | That said, it is not expected to break most use cases in practice. 75 | Note that the precise color codes output are not considered a stable interface and may change from release to release without that being considered a breaking change. 76 | 77 | ### Node Compatability 78 | 79 | Adopt a new policy for compatability where current LTS versions of Node are officially supported and tested, and end-of-life LTS versions are supported on a best-effort basis. 80 | 81 | The Node ecosystem moves fast. 82 | Supporting end-of-life Node versions requires pinning Jowl's dependencies to old versions, and these versions tend not to get security updates. 83 | Jowl's release cadence has also been such that it's not worth adding and quickly dropping support for non-LTS versions of Node. 84 | 85 | For Jowl major version 2, that means that support for Node 4 and Node 5 have been dropped, which is a **Breaking Change**, and the following node versions are now supported: 86 | 87 | * 6 (left in to have some overlap with supported Node versions from Jowl 1.0, but in practice a huge pain to support) 88 | * 8 89 | * 10 90 | * 12 91 | * 14 92 | * 16 93 | 94 | Be advised that Jowl major version 3 will likely only support maintained Node LTS versions, and that if vulnerabilities are discovered in Jowl 2's dependencies, the only remediation may be to upgrade to Jowl 3 because no available version of the dependencies will likely exist that runs on the older Nodes that Jowl 2 supports. 95 | 96 | ### Other Changes 97 | 98 | * **Breaking Change** Indent output JSON to 2 spaces instead of 4. 99 | 100 | ## [1.0.0](https://github.com/daxelrod/jowl/tree/v1.0.0) (2017-05-23) 101 | 102 | Add passthrough mode: when no command is provided, Jowl acts as a JSON pretty-printer. 103 | 104 | Update the provided [Lodash to version 4](https://github.com/lodash/lodash/wiki/Changelog#v400). 105 | Unfortunately, this forced us to drop support for versions of Node older than 4. 106 | 107 | Add support for Windows. 108 | 109 | ## [0.3.0](https://github.com/daxelrod/jowl/tree/v0.3.0) (2017-04-23) 110 | 111 | Add new `p()` function for printing. 112 | 113 | Add associated new `--quiet` mode to supress output not produced by `p()`. 114 | 115 | ## [0.2.0](https://github.com/daxelrod/jowl/tree/v0.2.0) (2015-12-28) 116 | 117 | **Breaking Change: Remove Chain Mode.** 118 | 119 | Remove the `-c` option and Chain Mode altogether. Instead of passing `-c`, begin your command 120 | with `c.`. 121 | 122 | Chain Mode did not save any typing, and made jowl harder to learn and explain. 123 | 124 | ## [0.1.0](https://github.com/daxelrod/jowl/tree/v0.1.0) (2015-12-28) 125 | 126 | Initial release. 127 | 128 | ## [0.0.1](https://github.com/daxelrod/jowl/commit/84eb190b68a935f2f505998aee640e749d22e8a3) (2015-12-15) 129 | 130 | First commit. 131 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | [![Build Status](https://circleci.com/gh/daxelrod/jowl.svg?style=svg)](https://circleci.com/gh/daxelrod/jowl) 4 | 5 | I'm glad you find Jowl useful enough that you want to help out! Thank you! 6 | 7 | Please note that I get time to work on Jowl in fits and bursts, so issues and pull requests may sit for up to a month before I have a chance to initially respond to them. 8 | Please don't be discouraged if it takes a little while. 9 | 10 | ## Issues 11 | 12 | Please file an issue for any of the following reasons: 13 | 14 | * You've encountered a bug 15 | * You found behavior that surprised you (ease-of-use is an explicit Jowl design goal) 16 | * You have an idea for new feature that would fit well into Jowl 17 | * To tell me how you're using Jowl (understanding people's use-cases helps me to improve Jowl) 18 | * [Just to say thanks](https://github.com/daxelrod/jowl/issues/4) 19 | 20 | If applicable, please include your OS and version of Node. 21 | 22 | ## Pull Requests 23 | 24 | I welcome pull requests for bugfixes or features! 25 | Consider filing an issue for your feature before spending a lot of time on it to ensure it fits in with Jowl's design philosophy. 26 | 27 | Contributions should be licensed [under the same license as Jowl](LICENSE). 28 | 29 | Don't worry about modifying the changelog or incrementing the package version, I will do that upon release. 30 | 31 | See [Developing Jowl](#developing-jowl) for detailed instructions. 32 | 33 | ## Developing Jowl 34 | 35 | First, ensure the following dependencies are installed: 36 | 37 | * [Git](https://git-scm.com/) 38 | * [Node](https://nodejs.org/en/) at a [compatible version](#compatability) 39 | * [Yarn Classic](https://classic.yarnpkg.com/en/docs/install) (to ensure that if you update dependencies in package.json, the yarnfile.lock is also updated) 40 | 41 | 1. [Fork](https://help.github.com/articles/fork-a-repo/) the Jowl repository and create a local clone of your fork. 42 | 1. Create a topic branch for the feature or bugfix you'd like to work on. 43 | ```bash 44 | git checkout master 45 | git checkout -b fix/terrible-bug 46 | ``` 47 | 1. Install dependencies 48 | ```bash 49 | yarn 50 | ``` 51 | 1. Run a build 52 | ```bash 53 | yarn run build 54 | ``` 55 | 56 | This will run tests, linters, and style checkers for code and documentation. 57 | 58 | Note that build output may be a little difficult to read as [lines from different tests are interleaved](https://github.com/daxelrod/jowl/issues/1). 59 | Sorry about that. 60 | 61 | If the build doesn't pass, but [Continuous Integration](https://circleci.com/gh/daxelrod/jowl) shows the same commit passing, there's either something wrong with your development environment, or your platform is different than the ones Jowl is tested on. 62 | Feel free to file an issue (and link to the Continuous Integration build for the commit) and we'll get to the bottom of it. 63 | 1. Ensure your text editor is using LF (Unix) line endings. 64 | 1. [Write a test](#testing) for your new behavior and verify that it fails. 65 | 1. Modify the [source code](src/) or until the build passes again. 66 | 67 | Please conform to the [coding standards](#coding-standards), which are enforced at build time. 68 | 1. Commit your change. Please conform to the [commit standards](#commit-standards). 69 | 1. Repeat the previous three steps until your feature or bugfix is complete. 70 | 1. If you've added a feature, please write documentation for it in the [Reference](docs/reference.md) and add that as one last commit (alternatively, it's OK to add docs in the same commit where you change functionality). 71 | 1. Push your topic branch to your fork 72 | ```bash 73 | git push -u origin fix/terrible-bug 74 | ``` 75 | 1. Use the GitHub interface to [Create a Pull Request](https://help.github.com/articles/creating-a-pull-request/). 76 | 1. CircleCI will begin building your changes and will report their status back to the Pull Request. 77 | 78 | ## Testing 79 | 80 | Tests can be run with `yarn test`. 81 | 82 | Every intended behavior in Jowl is tested either with a [unit test of the function implementing the behavior](test/unit) 83 | or an [integration test of the entire program](test/integration). 84 | Prefer unit tests, but if integration tests are useful for externally-facing behavior such as output or options parsing, 85 | There is no need to write both unit and integration tests for the same behavior. 86 | 87 | Each `it()` block should work in isolation without depending on other `it()` blocks having executed. 88 | 89 | Jowl's tests use [Mocha](https://mochajs.org/) with [Chai `expect()` matchers](http://chaijs.com/api/bdd/). 90 | 91 | ## Standards 92 | 93 | ### Compatability 94 | 95 | Jowl is compatible will [all current Node LTS versions](.circleci/config.yml) on both Unix and Windows. 96 | 97 | Additionally, several previously-supported Node versions that have been end-of-lifed are supported on a best-effort basis. 98 | New changes should make reasonable efforts not to break compatability with end-of-lifed node vesions, but if this becomes too difficult, we'll drop them. 99 | 100 | ### Coding Standards 101 | 102 | Jowl is written in ES6. 103 | 104 | Source code conforms to the [Airbnb Style Guide](https://github.com/airbnb/javascript) with a few [exceptions](.eslintrc.json). 105 | This is checked automatically at build time. 106 | 107 | Markdown conforms to [Markdownlint rules](https://github.com/mivok/markdownlint/blob/master/docs/RULES.md) except for MD013 Line Length. 108 | Please write one sentence per line instead, for more useful git diffs. 109 | Rules are checked automatically at build time. 110 | 111 | All text files use LF (Unix) line endings. 112 | This is done because the Airbnb eslint style rules expect LF line endings on disk, and because [bin scripts should use LF when being published to NPM](https://github.com/npm/npm/issues/12371). 113 | Git is configured convert other line endings to LF on commit so that they are represented as LF in the object database and to check out files as LF in the working directory. 114 | A [`.editorconfig`](.editorconfig) is provided to automatically set line endings in many editors. 115 | 116 | ### Commit Standards 117 | 118 | ```text 119 | feat(run): add chain runner 120 | 121 | Add command runner which works in chain mode. This library will 122 | be used by the executable, which will handle command line 123 | processing and JSON parsing and serialization. 124 | 125 | In chain mode, the command is prefixed with a Lodash chain with 126 | the data as the context. After the command, .value() is 127 | automatically called. 128 | ``` 129 | 130 | Please follow [The Seven Rules of a Great Commit Message](https://chris.beams.io/posts/git-commit/#seven-rules) except for #3 (please don't capitalize the first word). 131 | 132 | Commit also messages conform to the [Angular Git Commit Guidelines](https://github.com/angular/angular.js/blob/master/CONTRIBUTING.md#commit) 133 | except that the `scope` in the parentheses should be one of the following: 134 | 135 | * **General** 136 | * `run` 137 | * `cli` 138 | * `lint` 139 | * `format` 140 | * **`docs` type only** 141 | * `readme` 142 | * `reference` 143 | * `help` (text output by running `jowl --help`) 144 | * **`chore` type only** 145 | * `ci` (continuous integration configuration) 146 | * `release` 147 | * `deps` 148 | * **`test` type only** 149 | * `integration` 150 | 151 | Note that unlike Angular, the changelogs are not generated automatically from commit messages. 152 | I do not believe a one-to-one correspondance between commit messages and changelog lines is useful. 153 | Further, the audience for commit messages is other developers, while the audience for changelogs is users. 154 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License 2 | Copyright (c) 2015-2022 Daniel Axelrod 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy of 5 | this software and associated documentation files (the "Software"), to deal in 6 | the Software without restriction, including without limitation the rights to 7 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 8 | the Software, and to permit persons to whom the Software is furnished to do so, 9 | subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 16 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 17 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 18 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 19 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Jowl - JSON Operations With Lodash 2 | 3 | 4 | 5 | ```bash 6 | $ jowl '{"messages" : _.map(d, "commit.author.date")}' < commits.json 7 | ``` 8 | 9 | 10 | 11 | Jowl is a command-line filter for JSON expressions that uses plain JavaScript 12 | with [Lodash](https://lodash.com/). It takes JSON on standard in, and writes 13 | pretty-printed JSON to standard out. 14 | 15 | Jowl's goals are: 16 | 17 | * **Easy to learn**: Syntax you already know, as little magic as pratical 18 | * **Concise**: intended to be used in one-liners, where keystrokes are at a premium 19 | * **Convenient**: Do What I Mean shortcuts exist, but are not required for use 20 | 21 | ## Installation 22 | 23 | ### macOS or Linux via Homebrew 24 | 25 | Install [Homebrew](https://brew.sh/). Then run: 26 | 27 | ```bash 28 | brew install daxelrod/jowl/jowl 29 | ``` 30 | 31 | ### macOS, Linux, or Windows via NPM 32 | 33 | Jowl requires [NodeJS](https://nodejs.org/en/download/)(all LTS versions are supported) running on either Unix or Windows. 34 | 35 | ```bash 36 | npm install --global --production jowl 37 | ``` 38 | 39 | ## Reference 40 | 41 | See the [complete reference](docs/reference.md). 42 | 43 | ## Comparison to similar programs 44 | 45 | Several programs fulfill the same needs as Jowl. They are more mature and better 46 | polished. However, there is still a sweet spot among them that Jowl hits. 47 | 48 | ### JQ 49 | 50 | [JQ](https://stedolan.github.io/jq/) is an awesome program for querying and 51 | transforming JSON that is better than Jowl in almost every way. Unfortunately, it 52 | uses its own syntax that can be hard to remember unless used frequently. Jowl's 53 | main benefit is that it uses familiar JavaScript syntax and Lodash functions. 54 | 55 | ### Underscore-CLI 56 | 57 | [Underscore-CLI](https://github.com/ddopson/underscore-cli) also processes JSON with 58 | JavaScript expressions and Underscore. It supports multiple kinds of operations, can 59 | output to several formats, and can even handle CoffeeScript input. It's extremely 60 | polished. Unfortunately, it either requires more typing than Jowl: 61 | `underscore process "data[0]"` vs `jowl "d[0]"` or learning its shortcuts, which are 62 | subcommands on the command line. 63 | 64 | ## Contributing 65 | 66 | See the [guide to contributing](CONTRIBUTING.md). 67 | 68 | ## License 69 | 70 | [MIT](LICENSE) 71 | -------------------------------------------------------------------------------- /dist/jowl.spec: -------------------------------------------------------------------------------- 1 | Name: jowl 2 | Version: 2.3.3 3 | Release: 1%{?dist} 4 | Summary: CLI for JSON operations with Lodash 5 | 6 | License: MIT 7 | URL: https://jowl.app 8 | Source0: https://github.com/daxelrod/%{name}/archive/v%{version}/%{name}-%{version}.tar.gz 9 | # Also at https://registry.npmjs.org/{name}/-/{name}-{version}.tgz 10 | # however, npmjs.org has a build product which does not contain docs or tests 11 | 12 | # The following sources are generated by running 13 | # nodejs-packaging-bundler against Source0: 14 | Source1: %{name}-%{version}-nm-prod.tgz 15 | Source2: %{name}-%{version}-nm-dev.tgz 16 | Source3: %{name}-%{version}-bundled-licenses.txt 17 | 18 | BuildArch: noarch 19 | ExclusiveArch: %{nodejs_arches} noarch 20 | Requires: nodejs 21 | BuildRequires: nodejs-devel 22 | BuildRequires: yarnpkg 23 | BuildRequires: fdupes 24 | 25 | %description 26 | Jowl is a command-line filter for JSON expressions that uses plain JavaScript 27 | with Lodash. It takes JSON on standard in, and writes pretty-printed JSON to 28 | standard out. 29 | 30 | %prep 31 | %setup -q -n %{name}-%{version} 32 | cp %{SOURCE3} . 33 | # Setup bundled runtime(prod) node modules 34 | tar xfz %{SOURCE1} 35 | mkdir -p node_modules 36 | pushd node_modules 37 | ln -s ../node_modules_prod/* . 38 | popd 39 | 40 | %build 41 | #nothing to do 42 | 43 | %install 44 | mkdir -p %{buildroot}%{nodejs_sitelib}/%{name} 45 | cp -pr package.json src/bin/jowl.js src/lib/ \ 46 | %{buildroot}%{nodejs_sitelib}/%{name} 47 | # Copy over bundled nodejs modules 48 | cp -pr node_modules node_modules_prod \ 49 | %{buildroot}%{nodejs_sitelib}/%{name} 50 | 51 | mkdir -p %{buildroot}%{nodejs_sitelib}/%{name}/bin 52 | # Intentionally not a symlink. If it were a symlink, jowl would be unable to find 53 | # its node-modules 54 | install -p -D -m0755 src/bin/jowl.js %{buildroot}%{nodejs_sitelib}/%{name}/bin/jowl 55 | mkdir -p %{buildroot}%{_bindir} 56 | ln -sf %{nodejs_sitelib}/%{name}/bin/jowl %{buildroot}%{_bindir}/jowl 57 | 58 | # Fix the shebang because brp-mangle-shebangs fails to detect this properly (rhbz#1998924) 59 | # This is fixed in fc36 and above 60 | sed -e "s|^#!/usr/bin/env node$|#!/usr/bin/node|" \ 61 | -i %{buildroot}%{nodejs_sitelib}/%{name}/bin/jowl \ 62 | -i %{buildroot}%{nodejs_sitelib}/%{name}/jowl.js 63 | 64 | %fdupes %{buildroot}%{nodejs_sitelib}/%{name} 65 | 66 | %check 67 | # Setup bundled dev node_modules for testing 68 | # Note: this cannot be in %%prep or the dev node_modules 69 | # can get pulled into the regular rpm 70 | tar xfz %{SOURCE2} 71 | # Ensure that this dir exists to be a target of the symlink 72 | mkdir -p node_modules_prod/.bin 73 | pushd node_modules 74 | ln -s -f ../node_modules_dev/* . 75 | popd 76 | mkdir -p node_modules/.bin 77 | pushd node_modules/.bin 78 | ln -s ../../node_modules_dev/.bin/* . 79 | popd 80 | # Run tests 81 | yarn run test 82 | 83 | 84 | %files 85 | %doc docs/reference.md 86 | %license LICENSE %{name}-%{version}-bundled-licenses.txt 87 | %{nodejs_sitelib}/%{name}/ 88 | %{_bindir}/jowl 89 | 90 | 91 | %changelog 92 | * Tue Jul 23 2024 Daniel Axelrod - 2.3.3-1 93 | - Fix Packit configuration 94 | * Mon Jul 15 2024 Daniel Axelrod - 2.3.2-1 95 | - Add support for Node 22 96 | * Mon Aug 21 2023 Daniel Axelrod - 2.3.1-1 97 | - Fix Packit configuration 98 | * Sat Aug 05 2023 Daniel Axelrod - 2.3.0-1 99 | - Add support for Node 20 100 | * Wed Sep 21 2022 Daniel Axelrod - 2.2.0-1 101 | - Package Jowl according to Fedora Packaging Guide 102 | -------------------------------------------------------------------------------- /dist/packit-post-upstream-clone.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -x 4 | set -o pipefail 5 | 6 | # Intended to be run as packit's post-upstream-clone action in order to 7 | # create tarballs of dependencies and their licenses. 8 | # If running manually, only the lines up through the invocation of 9 | # nodejs-packaging-bundler are necessary to generate sources, after 10 | # which a normal rpm build will work. 11 | JOWL_VERSION="$(echo "console.log(require('./package.json').version);" | node)" 12 | npm pack 13 | nodejs-packaging-bundler jowl "$JOWL_VERSION" "jowl-${JOWL_VERSION}.tgz" 14 | 15 | # nodejs-packaging-bundler puts its output in SOURCES, but packit expects them 16 | # in the same directory as the specfile. 17 | SOURCES="$(rpm -E '%{_sourcedir}')" 18 | 19 | # Copy node modules and bundled licenses back into the specfile's directory 20 | # but exclude the project archive that nodejs-packaging-bundler-jowl has 21 | # also copied to SOURCES so that it doesn't overwrite the one packit has 22 | # generated. 23 | mv "${SOURCES}/jowl-${JOWL_VERSION}-bundled-licenses.txt" dist/ 24 | mv "${SOURCES}/jowl-${JOWL_VERSION}-nm-dev.tgz" dist/ 25 | mv "${SOURCES}/jowl-${JOWL_VERSION}-nm-prod.tgz" dist/ 26 | 27 | echo "post-upstream-clone done" 28 | -------------------------------------------------------------------------------- /docs/reference.md: -------------------------------------------------------------------------------- 1 | # Jowl Reference 2 | 3 | jowl [options] [command] 4 | 5 | Jowl takes JSON on standard in, and writes the JSON-strigified value of `command` to standard out. 6 | 7 | The only current option is [`--quiet`](#quiet) (or `-q` for short) which disables writing of `command`'s value to standard out. 8 | 9 | *All examples use Bourne shell syntax.* 10 | 11 | ## Command 12 | 13 | ```bash 14 | $ echo 'true' | jowl '{"name": "jowl", "awesome": d}' 15 | { 16 | "name": "jowl", 17 | "awesome": "true" 18 | } 19 | ``` 20 | 21 | `command` is evaluated as a JavaScript expression, and its value is converted to JSON and outputted. 22 | 23 | It is run in something close to `var value = eval('(' + command + ') )` to ensure that curly 24 | braces are interepreted as object constructors rather than blocks. 25 | 26 | If `command` is not supplied, Jowl simply acts as a pretty-printer. 27 | 28 | ## Input and Output 29 | 30 | **Standard In** is expected to be a string representing a single JSON object. (This may eventually be 31 | expanded to a stream of multiple JSON objects.) Processing does not start until input ends. The parsed 32 | JSON will be available as the `d` variable. 33 | 34 | The value of `command` will have `.value()` called on it if it is a Lodash chain. The results of this 35 | will be run through JSON.stringify, optionally syntax highlighted, and output to **Standard Out** (except in [quiet mode](#quiet)). 36 | 37 | Syntax highlighting will be automatically applied when **Standard Out** is a color-supporting TTY by adding ANSI color codes. 38 | ANSI color codes are not added if not outputting to a TTY. 39 | The specific colors used are subject to change in future versions without this being considered a breaking change. 40 | See the [`--color` & `--no-color` options](#color) or the [`FORCE_COLOR` environment variable](#force-color). 41 | 42 | ## Variables 43 | 44 | ```bash 45 | $ echo '[{"name":"jowl"}, {"name":"jq"}, {"name":"underscore"}]' | jowl '{"all": c.map("name").value(), "newest": _.capitalize(d[0].name)}' 46 | { 47 | "all": [ 48 | "jowl", 49 | "jq", 50 | "underscore" 51 | ], 52 | "newest": "Jowl" 53 | } 54 | ``` 55 | 56 | The following variables are available within `command`'s execution environment: 57 | 58 | Variable | Value 59 | ---------|------ 60 | `_` | [Lodash](https://lodash.com/docs) 61 | `d` | Parsed input **data** 62 | `c` | **[Chain](https://lodash.com/docs#chain)**. Shortcut for `_.chain(d)` 63 | `p()` | **[Print](#print-function)**. Pretty-prints its argument 64 | 65 | ### Print Function 66 | 67 | ```bash 68 | $ echo '[1,2,3]' | jowl -q 'c.each(p)' 69 | 1 70 | 2 71 | 3 72 | ``` 73 | 74 | `p()` prints its first argument to standard out. This is useful for creating non-JSON output, or when it makes more sense to write your command imperatively rather than 75 | a transformation to a different data structure. 76 | 77 | It is often used with the [`--quiet`](#quiet) option so that the results of the command are not written to standard out 78 | in addition to `p()`'s output. 79 | 80 | `p()` is actually a call to [`console.json`](https://www.npmjs.com/package/console.json), which prints a single string 81 | or number verbatim, but pretty-prints more complex data structures as JSON. 82 | 83 | Its return value is the argument that was passed in, for maximum utility when chaining. 84 | 85 | ## Options 86 | 87 | ### Quiet 88 | 89 | `--quiet` or `-q` 90 | 91 | Disables the writing the the value of `command` to standard out. 92 | The output of the [Print Function`p()`](#print) is still written. 93 | 94 | ### Color 95 | 96 | `--color` or instead `--no-color` 97 | 98 | By default, Jowl will use various heuristics to decide whether to output ANSI color codes to syntax-highlight the value of `command`. 99 | 100 | These mutually-exclusive options override the heuristics to force always writing ANSI color codes (`--color`) or never writing them (`--no-color`). 101 | 102 | Specifying both options will result in undefined behavior and will likely be disallowed later. 103 | 104 | See also the [`FORCE_COLOR` environment variable](#force-color) environment variable as another mechanism to control this behavior. 105 | 106 | ## Environment Variables 107 | 108 | ### Force Color 109 | 110 | `FORCE_COLOR` 111 | 112 | By default, Jowl will use various heuristics to decide whether to output ANSI color codes to syntax-highlight the value of `command`. 113 | 114 | This environment variable overrides both these heuristics and the [`--color` or `--no-color` options](#color). 115 | 116 | When set to `1`, forces always writing ANSI color codes. 117 | 118 | When set to `0`, forces never writing ANSI color codes. 119 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jowl", 3 | "version": "2.3.3", 4 | "description": "CLI for JSON operations with Lodash", 5 | "bin": "src/bin/jowl.js", 6 | "dependencies": { 7 | "commander": "^6.2.1", 8 | "console.json": "^0.2.1", 9 | "json-colorizer": "^2.2.2", 10 | "lodash": "^4.17.21" 11 | }, 12 | "devDependencies": { 13 | "chai": "^4.3.4", 14 | "chalk": "^2.4.1", 15 | "cross-spawn": "^6.0.5", 16 | "eslint": "^5.0.0", 17 | "eslint-config-airbnb-base": "^14.2.1", 18 | "eslint-plugin-import": "^2.2.0", 19 | "markdownlint-cli": "^0.15.0", 20 | "mocha": "^6.2.2", 21 | "sinon": "^7.5.0" 22 | }, 23 | "engines": { 24 | "node": "^6.0.0 || ^8.0.0 || ^10.0.0 || ^12.0.0 || ^14.0.0 || ^16.0.0 || ^18.0.0 || ^20.0.0 || ^22.0.0", 25 | "yarn": "^1.0.0" 26 | }, 27 | "scripts": { 28 | "test": "yarn run test:unit && yarn run test:integration", 29 | "test:unit": "mocha \"test/unit/**/*.js\"", 30 | "test:integration": "mocha \"test/integration/**/*.js\"", 31 | "lint": "eslint \"src/**/*.js\" \"test/**/*.js\"", 32 | "docs": "markdownlint \"*.md\" \"docs/**/*.md\"", 33 | "build": "yarn run lint && yarn run docs && yarn run test" 34 | }, 35 | "repository": { 36 | "type": "git", 37 | "url": "git+https://github.com/daxelrod/jowl.git" 38 | }, 39 | "keywords": [ 40 | "cli", 41 | "json", 42 | "lodash" 43 | ], 44 | "author": "Daniel Axelrod ", 45 | "license": "MIT", 46 | "bugs": { 47 | "url": "https://github.com/daxelrod/jowl/issues" 48 | }, 49 | "homepage": "https://github.com/daxelrod/jowl#readme", 50 | "files": [ 51 | "README.md", 52 | "src", 53 | "!**/.eslintrc.js" 54 | ] 55 | } 56 | -------------------------------------------------------------------------------- /src/bin/jowl.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | 'use strict'; 4 | 5 | const program = require('commander'); 6 | const format = require('../lib/format'); 7 | 8 | let command; 9 | 10 | program 11 | .version('2.3.3') 12 | .option('-q, --quiet', 'Supress output of command return value') 13 | .option('--color', 'Always produce color output even if STDOUT would not support it') 14 | .option('--no-color', 'Never produce color output even if STDOUT would support it') 15 | .arguments('[command]') 16 | .action((cmd) => { 17 | command = cmd; 18 | }) 19 | .on('--help', () => { 20 | console.log( 21 | ' Jowl is a command-line filter for JSON expressions that uses\n' 22 | + ' JavaScript with Lodash as its command argument.\n' 23 | + '\n' 24 | + ' It takes JSON on standard in and writes JSON to standard out.\n' 25 | + '\n' 26 | + ' For a complete reference, see\n' 27 | + ' https://github.com/daxelrod/jowl/blob/master/docs/reference.md' 28 | ); 29 | }) 30 | .parse(process.argv); 31 | 32 | const options = { 33 | quiet: program.quiet, 34 | }; 35 | 36 | if (command == null) { 37 | // If no command was specified, pass through the JSON and act as a pretty-printer 38 | command = 'd'; 39 | } 40 | 41 | let data = ''; 42 | 43 | process.stdin.setEncoding('utf8'); 44 | 45 | process.stdin.on('readable', () => { 46 | const chunk = process.stdin.read(); 47 | if (chunk !== null) { 48 | data += chunk; 49 | } 50 | }); 51 | 52 | process.stdin.on('end', () => { 53 | const result = format.runFormat(data, command, options); 54 | 55 | if (result !== null) { 56 | console.log(result); 57 | } 58 | }); 59 | -------------------------------------------------------------------------------- /src/lib/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | 'parserOptions': { 3 | 'sourceType': 'module' 4 | }, 5 | }; 6 | -------------------------------------------------------------------------------- /src/lib/format.js: -------------------------------------------------------------------------------- 1 | const _ = require('lodash'); 2 | const colorize = require('json-colorizer'); 3 | const run = require('./run'); 4 | 5 | const format = {}; 6 | 7 | // Make json-colorizer's single exported function a method 8 | // so that we can hook it in unit tests. This is ugly, 9 | // but is more straightforward than another dependency 10 | // that redefines how require() works. 11 | format.jsonColorizer = colorize; 12 | 13 | format.parseInput = function parseInput(input) { 14 | return JSON.parse(input); 15 | }; 16 | 17 | format.formatOutput = function formatOutput(resultData) { 18 | // We must stringify the JSON ourselves before passing it 19 | // to json-colorizer because we may be serializing a single 20 | // string, which json-colorizer would try to parse as json 21 | return this.jsonColorizer(JSON.stringify(resultData, null, 2), { 22 | colors: { 23 | STRING_KEY: 'cyan', // On terminals where pure blue defaults to 0000FF, it can be hard to read against black 24 | STRING_LITERAL: 'reset', // The default color is likely to be the most readable 25 | NUMBER_LITERAL: 'green', // green.bold did not have enough contrast on many color schemes 26 | BOOLEAN_LITERAL: 'magentaBright', // Don't want to make this red or green because of associations with true and false; magenta had too little contrast 27 | NULL_LITERAL: 'red', 28 | BRACE: 'reset', // Because of indentation, visually distinct anyway 29 | BRACKET: 'reset', // Same as brace 30 | COLON: 'reset', // Visually distinct from other tokens without special coloring 31 | COMMA: 'gray', // These appear at entirely predictable places, so they can be less emphasized 32 | }, 33 | }); 34 | }; 35 | 36 | // Returns either a string to be output, or null if output should be supressed 37 | format.runFormat = function runFormat(json, command, options) { 38 | const data = this.parseInput(json); 39 | const result = run.run(data, command); 40 | 41 | // Need to unconditionally stringify because _.chain is lazy and 42 | // we need p() output even in quiet mode 43 | const output = this.formatOutput(result); 44 | 45 | // options might be undefined if called from tests 46 | return _.get(options, 'quiet') ? null : output; 47 | }; 48 | 49 | module.exports = format; 50 | -------------------------------------------------------------------------------- /src/lib/run.js: -------------------------------------------------------------------------------- 1 | const _ = require('lodash'); 2 | const vm = require('vm'); 3 | require('console.json'); // Injects itself directly into the console object 4 | 5 | const run = {}; 6 | 7 | function p(data) { 8 | // intentionally limit to just one argument 9 | console.json(data); // returns undefined 10 | return data; 11 | } 12 | 13 | run.run = function run(data, command) { 14 | // Parens are needed to disambiguate that curly braces are an object and 15 | // not a block. 16 | const script = new vm.Script(`(${command})`, { 17 | filename: 'command', 18 | }); 19 | 20 | return script.runInNewContext({ 21 | _, 22 | p, 23 | d: data, 24 | c: _.chain(data), 25 | }); 26 | }; 27 | 28 | module.exports = run; 29 | -------------------------------------------------------------------------------- /test/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | 'env': { 3 | 'mocha': true 4 | }, 5 | 'rules': { 6 | 'no-unused-expressions': 'off' // Allow chai matchers like expect().to.be.null 7 | } 8 | }; 9 | -------------------------------------------------------------------------------- /test/integration/jowl.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const { expect } = require('chai'); 4 | const globalChalk = require('chalk'); 5 | const spawn = require('cross-spawn'); 6 | 7 | const jowlCommand = 'src/bin/jowl.js'; 8 | 9 | function runCommand(command, args, stdin, env, callback) { 10 | const defaultEnv = { 11 | HOME: process.env.HOME, 12 | PATH: process.env.PATH, 13 | SHELL: process.env.shell, 14 | }; 15 | 16 | const commandEnv = Object.assign(defaultEnv, env); 17 | 18 | const child = spawn(command, args, { env: commandEnv }); 19 | let stdout; 20 | let stderr; 21 | 22 | child.stdout.setEncoding('utf8'); 23 | child.stderr.setEncoding('utf8'); 24 | 25 | if (stdin !== null) { 26 | child.stdin.write(stdin); 27 | } 28 | 29 | child.stdin.end(); 30 | 31 | child.stdout.on('data', (data) => { 32 | if (data != null) { 33 | stdout = stdout == null ? data : stdout + data; 34 | } 35 | }); 36 | 37 | child.stderr.on('data', (data) => { 38 | if (data != null) { 39 | stderr = stderr == null ? data : stderr + data; 40 | } 41 | }); 42 | 43 | child.on('close', (status) => { 44 | callback( 45 | status === 0, 46 | { 47 | status, 48 | stdout, 49 | stderr, 50 | } 51 | ); 52 | }); 53 | } 54 | 55 | function generateColorString(chalkLevel) { 56 | const chalk = new globalChalk.constructor({ level: chalkLevel }); 57 | return `${chalk.reset('{')} 58 | ${chalk.cyan('"STRING_LITERAL"')}${chalk.reset(':')} ${chalk.reset('"yay a string"')}${chalk.gray(',')} 59 | ${chalk.cyan('"NUMBER_LITERAL"')}${chalk.reset(':')} ${chalk.green('12.1')}${chalk.gray(',')} 60 | ${chalk.cyan('"BOOLEAN_LITERAL"')}${chalk.reset(':')} ${chalk.magentaBright('true')}${chalk.gray(',')} 61 | ${chalk.cyan('"NULL_LITERAL"')}${chalk.reset(':')} ${chalk.red('null')}${chalk.gray(',')} 62 | ${chalk.cyan('"BRACKET"')}${chalk.reset(':')} ${chalk.reset('[')}${chalk.reset(']')} 63 | ${chalk.reset('}')}`; 64 | } 65 | 66 | describe('jowl cli', () => { 67 | it('should run', (done) => { 68 | runCommand(jowlCommand, [ 69 | 'd[0]', 70 | ], '["one", "two"]', {}, (err, result) => { 71 | expect(result).to.have.property('stderr').that.is.undefined; 72 | expect(result).to.have.property('stdout', '"one"\n'); 73 | expect(result).to.have.property('status', 0); 74 | 75 | done(); 76 | }); 77 | }); 78 | 79 | it('should handle chains within the command', (done) => { 80 | runCommand(jowlCommand, [ 81 | '_.chain({key: {foo: c}, array: ["bar", c]})', 82 | ], '"one"', {}, (err, result) => { 83 | expect(result).to.have.property('stderr').that.is.undefined; 84 | expect(result).to.have.property('stdout', `${JSON.stringify({ 85 | key: { 86 | foo: 'one', 87 | }, 88 | array: [ 89 | 'bar', 90 | 'one', 91 | ], 92 | }, null, 2)}\n`); 93 | expect(result).to.have.property('status', 0); 94 | 95 | done(); 96 | }); 97 | }); 98 | 99 | it('should print using p', (done) => { 100 | runCommand(jowlCommand, [ 101 | 'p(d[0])', 102 | ], '["one", "two"]', {}, (err, result) => { 103 | // It is not defined whether p or the value will be printed first 104 | expect(result).to.have.property('stdout').that.contains( 105 | 'one\n', 'output of p' 106 | ); 107 | expect(result).to.have.property('stdout').that.contains( 108 | '"one"\n', 'output of value' 109 | ); 110 | expect(result).to.have.property('stderr').that.is.undefined; 111 | expect(result).to.have.property('status', 0); 112 | 113 | done(); 114 | }); 115 | }); 116 | 117 | describe('in quiet mode', () => { 118 | it('should supress output of expression return value', (done) => { 119 | runCommand(jowlCommand, [ 120 | '-q', 121 | 'd[0]', 122 | ], '["one", "two"]', {}, (err, result) => { 123 | expect(result).to.have.property('stdout').that.is.undefined; 124 | expect(result).to.have.property('status', 0); 125 | expect(result).to.have.property('stderr').that.is.undefined; 126 | 127 | done(); 128 | }); 129 | }); 130 | 131 | it('should still print using p', (done) => { 132 | runCommand(jowlCommand, [ 133 | '--quiet', 134 | 'p(d[0])', 135 | ], '["one", "two"]', {}, (err, result) => { 136 | expect(result).to.have.property('stdout', 'one\n'); 137 | expect(result).to.have.property('status', 0); 138 | expect(result).to.have.property('stderr').that.is.undefined; 139 | 140 | done(); 141 | }); 142 | }); 143 | 144 | it('should still print using a chain', (done) => { 145 | runCommand(jowlCommand, [ 146 | '-q', 147 | 'c.each(p)', 148 | ], '["one", "two"]', {}, (err, result) => { 149 | expect(result).to.have.property('stdout', 'one\ntwo\n'); 150 | expect(result).to.have.property('status', 0); 151 | expect(result).to.have.property('stderr').that.is.undefined; 152 | 153 | done(); 154 | }); 155 | }); 156 | }); 157 | 158 | it('should have --help', (done) => { 159 | runCommand(jowlCommand, [ 160 | '--help', 161 | ], null, {}, (err, result) => { 162 | expect(result).to.have.property('stderr').that.is.undefined; 163 | expect(result).to.have.property('stdout').to.contain('--help'); 164 | expect(result).to.have.property('stdout').to.contain('reference'); 165 | expect(result).to.have.property('status', 0); 166 | 167 | done(); 168 | }); 169 | }); 170 | 171 | it('should treat no command as passthrough', (done) => { 172 | runCommand(jowlCommand, [], '["one", "two"]', {}, (err, result) => { 173 | const jsonFormatted = '[\n "one",\n "two"\n]\n'; 174 | expect(result).to.have.property('stdout', jsonFormatted); 175 | expect(result).to.have.property('stderr').that.is.undefined; 176 | expect(result).to.have.property('status', 0); 177 | 178 | done(); 179 | }); 180 | }); 181 | 182 | describe('color support', () => { 183 | it('should output syntax-highlighted color when --color is passed', (done) => { 184 | // Since we are deliberately using colors that are part of the 16 color set, 185 | // chalk will output the same colors in every level other than 0 186 | runCommand(jowlCommand, ['--color'], generateColorString(0), {}, (err, result) => { 187 | expect(result).to.have.property('stdout', `${generateColorString(1)}\n`); 188 | expect(result).to.have.property('stderr').that.is.undefined; 189 | expect(result).to.have.property('status', 0); 190 | 191 | done(); 192 | }); 193 | }); 194 | 195 | it('should not output color when -no-color is passed', (done) => { 196 | // Since tests set up STDOUT to not-a-tty, we'd expect this same 197 | // behavior without the flag. It's still valuable to test that 198 | // the flag exists. 199 | runCommand(jowlCommand, ['--no-color'], generateColorString(0), {}, (err, result) => { 200 | expect(result).to.have.property('stdout', `${generateColorString(0)}\n`); 201 | expect(result).to.have.property('stderr').that.is.undefined; 202 | expect(result).to.have.property('status', 0); 203 | 204 | done(); 205 | }); 206 | }); 207 | 208 | it('should output syntax-highlighted color when FORCE_COLOR=1 is passed', (done) => { 209 | // Since we are deliberately using colors that are part of the 16 color set, 210 | // chalk will output the same colors in every level other than 0 211 | runCommand(jowlCommand, [], generateColorString(0), { FORCE_COLOR: 1 }, (err, result) => { 212 | expect(result).to.have.property('stdout', `${generateColorString(1)}\n`); 213 | expect(result).to.have.property('stderr').that.is.undefined; 214 | expect(result).to.have.property('status', 0); 215 | 216 | done(); 217 | }); 218 | }); 219 | 220 | it('should not output color when FORCE_COLOR=0 is passed, even when --color is passed', (done) => { 221 | runCommand(jowlCommand, ['--color'], generateColorString(0), { FORCE_COLOR: 0 }, (err, result) => { 222 | expect(result).to.have.property('stdout', `${generateColorString(0)}\n`); 223 | expect(result).to.have.property('stderr').that.is.undefined; 224 | expect(result).to.have.property('status', 0); 225 | 226 | done(); 227 | }); 228 | }); 229 | }); 230 | }); 231 | -------------------------------------------------------------------------------- /test/unit/lib/format.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const { expect } = require('chai'); 4 | const sinon = require('sinon'); 5 | const format = require('../../../src/lib/format'); 6 | const run = require('../../../src/lib/run'); 7 | 8 | describe('formatting library', () => { 9 | describe('parseInput method', () => { 10 | beforeEach(() => { 11 | sinon.spy(JSON, 'parse'); 12 | }); 13 | 14 | afterEach(() => { 15 | JSON.parse.restore(); 16 | }); 17 | 18 | it('should parse JSON by calling JSON.parse', () => { 19 | const json = '["one", "two"]'; 20 | const result = format.parseInput(json); 21 | 22 | expect(result).to.deep.equal(['one', 'two']); 23 | sinon.assert.calledOnce(JSON.parse); 24 | sinon.assert.calledWithExactly(JSON.parse, sinon.match(json)); 25 | }); 26 | }); 27 | 28 | describe('formatOutput method', () => { 29 | beforeEach(() => { 30 | sinon.spy(format, 'jsonColorizer'); 31 | sinon.spy(JSON, 'stringify'); 32 | }); 33 | 34 | afterEach(() => { 35 | JSON.stringify.restore(); 36 | format.jsonColorizer.restore(); 37 | }); 38 | 39 | it('should pretty-print the output by calling JSON.stringify', () => { 40 | const data = { a: 'b' }; 41 | expect( 42 | format.formatOutput(data) 43 | ).to.equal(format.jsonColorizer.returnValues[0]); 44 | 45 | sinon.assert.calledOnce(JSON.stringify); 46 | sinon.assert.calledWithExactly( 47 | JSON.stringify, sinon.match(data), null, 2 48 | ); 49 | 50 | sinon.assert.calledOnce(format.jsonColorizer); 51 | sinon.assert.calledWithExactly( 52 | format.jsonColorizer, 53 | JSON.stringify.returnValues[0], 54 | sinon.match({}) 55 | ); 56 | }); 57 | }); 58 | 59 | describe('runFormat method', () => { 60 | beforeEach(() => { 61 | sinon.spy(run, 'run'); 62 | sinon.spy(format, 'parseInput'); 63 | sinon.spy(format, 'formatOutput'); 64 | }); 65 | 66 | afterEach(() => { 67 | run.run.restore(); 68 | format.parseInput.restore(); 69 | format.formatOutput.restore(); 70 | }); 71 | 72 | const json = '["one", "two"]'; 73 | const command = 'd[0]'; 74 | 75 | it('should use parseInput to parse input data', () => { 76 | format.runFormat(json); 77 | sinon.assert.calledOnce(format.parseInput); 78 | sinon.assert.calledWithExactly(format.parseInput, json); 79 | }); 80 | 81 | it('should pass arguments through to run method', () => { 82 | expect( 83 | format.runFormat(json, command) 84 | ).to.equal(format.formatOutput.returnValues[0]); 85 | 86 | sinon.assert.calledOnce(run.run); 87 | sinon.assert.calledWithExactly( 88 | run.run, 89 | sinon.match(['one', 'two']), 90 | command 91 | ); 92 | }); 93 | 94 | it('should use formatOutput to format the results', () => { 95 | format.runFormat(json, command); 96 | sinon.assert.calledOnce(format.formatOutput); 97 | sinon.assert.calledWithExactly(format.formatOutput, 'one'); 98 | }); 99 | 100 | it('should return null in quiet mode', () => { 101 | expect( 102 | format.runFormat(json, command, { quiet: true }) 103 | ).to.be.null; 104 | }); 105 | }); 106 | }); 107 | -------------------------------------------------------------------------------- /test/unit/lib/run.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const { expect } = require('chai'); 4 | const _ = require('lodash'); 5 | const sinon = require('sinon'); 6 | const run = require('../../../src/lib/run'); 7 | 8 | describe('Command runner library', () => { 9 | describe('run method', () => { 10 | const data = [ 11 | { 12 | name: 'first', 13 | words: ['foo', 'bar'], 14 | }, 15 | { 16 | name: 'second', 17 | words: ['baz', 'quux'], 18 | }, 19 | ]; 20 | 21 | it('should handle a basic expression', () => { 22 | expect(run.run(data, '["foo"]')).to.eql(['foo']); 23 | }); 24 | 25 | it('should handle an object', () => { 26 | expect( 27 | run.run(data, '{"foo": "bar"}') 28 | ).to.eql({ foo: 'bar' }); 29 | }); 30 | 31 | describe('provided variables to the command', () => { 32 | it('should include parsed data as "d"', () => { 33 | expect( 34 | run.run(data, '{"word": d[1].words[0]}') 35 | ).to.eql({ word: 'baz' }); 36 | }); 37 | 38 | it('should include the chain as "c"', () => { 39 | expect( 40 | run.run(data, 'c.get(0).value()') 41 | ).to.eql(data[0]); 42 | }); 43 | 44 | it('should include lodash as "_"', () => { 45 | expect( 46 | run.run(data, 'c.get("0.words").map(_.capitalize).value()') 47 | ).to.eql(['Foo', 'Bar']); 48 | }); 49 | 50 | describe('"p"', () => { 51 | beforeEach(() => { 52 | sinon.spy(console, 'json'); 53 | }); 54 | 55 | afterEach(() => { 56 | console.json.restore(); 57 | }); 58 | 59 | it('should include console.json as "p"', () => { 60 | // console.json does not document its return value, 61 | // so don't test for it 62 | run.run(data, 'p(d)'); 63 | sinon.assert.calledOnce(console.json); 64 | sinon.assert.calledWithExactly(console.json, data); 65 | }); 66 | 67 | it('should return the first item passed to it', () => { 68 | expect( 69 | run.run(data, 'p(d,d)') 70 | ).to.eql(data); 71 | }); 72 | }); 73 | 74 | it('should not include other variables leaked into scope', () => { 75 | expect( 76 | _.bind(run.run, run, data, 'command') 77 | ).to.throw(); 78 | }); 79 | }); 80 | }); 81 | }); 82 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.0.0": 6 | version "7.16.7" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" 8 | integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== 9 | dependencies: 10 | "@babel/highlight" "^7.16.7" 11 | 12 | "@babel/helper-validator-identifier@^7.16.7": 13 | version "7.16.7" 14 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" 15 | integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== 16 | 17 | "@babel/highlight@^7.16.7": 18 | version "7.16.10" 19 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" 20 | integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== 21 | dependencies: 22 | "@babel/helper-validator-identifier" "^7.16.7" 23 | chalk "^2.0.0" 24 | js-tokens "^4.0.0" 25 | 26 | "@sinonjs/commons@^1", "@sinonjs/commons@^1.3.0", "@sinonjs/commons@^1.4.0", "@sinonjs/commons@^1.7.0": 27 | version "1.8.3" 28 | resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" 29 | integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== 30 | dependencies: 31 | type-detect "4.0.8" 32 | 33 | "@sinonjs/formatio@^3.2.1": 34 | version "3.2.2" 35 | resolved "https://registry.yarnpkg.com/@sinonjs/formatio/-/formatio-3.2.2.tgz#771c60dfa75ea7f2d68e3b94c7e888a78781372c" 36 | integrity sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ== 37 | dependencies: 38 | "@sinonjs/commons" "^1" 39 | "@sinonjs/samsam" "^3.1.0" 40 | 41 | "@sinonjs/samsam@^3.1.0", "@sinonjs/samsam@^3.3.3": 42 | version "3.3.3" 43 | resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-3.3.3.tgz#46682efd9967b259b81136b9f120fd54585feb4a" 44 | integrity sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ== 45 | dependencies: 46 | "@sinonjs/commons" "^1.3.0" 47 | array-from "^2.1.1" 48 | lodash "^4.17.15" 49 | 50 | "@sinonjs/text-encoding@^0.7.1": 51 | version "0.7.1" 52 | resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz#8da5c6530915653f3a1f38fd5f101d8c3f8079c5" 53 | integrity sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ== 54 | 55 | "@types/json5@^0.0.29": 56 | version "0.0.29" 57 | resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" 58 | integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= 59 | 60 | acorn-jsx@^5.0.0: 61 | version "5.3.2" 62 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" 63 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 64 | 65 | acorn@^6.0.7: 66 | version "6.4.2" 67 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" 68 | integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== 69 | 70 | ajv@^6.10.2, ajv@^6.9.1: 71 | version "6.12.6" 72 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 73 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 74 | dependencies: 75 | fast-deep-equal "^3.1.1" 76 | fast-json-stable-stringify "^2.0.0" 77 | json-schema-traverse "^0.4.1" 78 | uri-js "^4.2.2" 79 | 80 | ansi-colors@3.2.3: 81 | version "3.2.3" 82 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" 83 | integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== 84 | 85 | ansi-escapes@^3.2.0: 86 | version "3.2.0" 87 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" 88 | integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== 89 | 90 | ansi-regex@^3.0.0: 91 | version "3.0.1" 92 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" 93 | integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== 94 | 95 | ansi-regex@^4.1.0: 96 | version "4.1.0" 97 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 98 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== 99 | 100 | ansi-styles@^3.2.0, ansi-styles@^3.2.1: 101 | version "3.2.1" 102 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 103 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 104 | dependencies: 105 | color-convert "^1.9.0" 106 | 107 | argparse@^1.0.7: 108 | version "1.0.10" 109 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 110 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 111 | dependencies: 112 | sprintf-js "~1.0.2" 113 | 114 | array-from@^2.1.1: 115 | version "2.1.1" 116 | resolved "https://registry.yarnpkg.com/array-from/-/array-from-2.1.1.tgz#cfe9d8c26628b9dc5aecc62a9f5d8f1f352c1195" 117 | integrity sha1-z+nYwmYoudxa7MYqn12PHzUsEZU= 118 | 119 | array-includes@^3.1.4: 120 | version "3.1.4" 121 | resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9" 122 | integrity sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw== 123 | dependencies: 124 | call-bind "^1.0.2" 125 | define-properties "^1.1.3" 126 | es-abstract "^1.19.1" 127 | get-intrinsic "^1.1.1" 128 | is-string "^1.0.7" 129 | 130 | array.prototype.flat@^1.2.5: 131 | version "1.2.5" 132 | resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz#07e0975d84bbc7c48cd1879d609e682598d33e13" 133 | integrity sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg== 134 | dependencies: 135 | call-bind "^1.0.2" 136 | define-properties "^1.1.3" 137 | es-abstract "^1.19.0" 138 | 139 | assertion-error@^1.1.0: 140 | version "1.1.0" 141 | resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" 142 | integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== 143 | 144 | astral-regex@^1.0.0: 145 | version "1.0.0" 146 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" 147 | integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== 148 | 149 | balanced-match@^1.0.0: 150 | version "1.0.2" 151 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 152 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 153 | 154 | brace-expansion@^1.1.7: 155 | version "1.1.11" 156 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 157 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 158 | dependencies: 159 | balanced-match "^1.0.0" 160 | concat-map "0.0.1" 161 | 162 | browser-stdout@1.3.1: 163 | version "1.3.1" 164 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 165 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== 166 | 167 | call-bind@^1.0.0, call-bind@^1.0.2: 168 | version "1.0.2" 169 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" 170 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== 171 | dependencies: 172 | function-bind "^1.1.1" 173 | get-intrinsic "^1.0.2" 174 | 175 | callsites@^3.0.0: 176 | version "3.1.0" 177 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 178 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 179 | 180 | camelcase@^5.0.0: 181 | version "5.3.1" 182 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 183 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 184 | 185 | chai@^4.3.4: 186 | version "4.3.6" 187 | resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.6.tgz#ffe4ba2d9fa9d6680cc0b370adae709ec9011e9c" 188 | integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q== 189 | dependencies: 190 | assertion-error "^1.1.0" 191 | check-error "^1.0.2" 192 | deep-eql "^3.0.1" 193 | get-func-name "^2.0.0" 194 | loupe "^2.3.1" 195 | pathval "^1.1.1" 196 | type-detect "^4.0.5" 197 | 198 | chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: 199 | version "2.4.2" 200 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 201 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 202 | dependencies: 203 | ansi-styles "^3.2.1" 204 | escape-string-regexp "^1.0.5" 205 | supports-color "^5.3.0" 206 | 207 | chardet@^0.7.0: 208 | version "0.7.0" 209 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" 210 | integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== 211 | 212 | check-error@^1.0.2: 213 | version "1.0.2" 214 | resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" 215 | integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= 216 | 217 | cli-cursor@^2.1.0: 218 | version "2.1.0" 219 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" 220 | integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= 221 | dependencies: 222 | restore-cursor "^2.0.0" 223 | 224 | cli-width@^2.0.0: 225 | version "2.2.1" 226 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" 227 | integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== 228 | 229 | cliui@^5.0.0: 230 | version "5.0.0" 231 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" 232 | integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== 233 | dependencies: 234 | string-width "^3.1.0" 235 | strip-ansi "^5.2.0" 236 | wrap-ansi "^5.1.0" 237 | 238 | color-convert@^1.9.0: 239 | version "1.9.3" 240 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 241 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 242 | dependencies: 243 | color-name "1.1.3" 244 | 245 | color-name@1.1.3: 246 | version "1.1.3" 247 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 248 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 249 | 250 | commander@^6.2.1: 251 | version "6.2.1" 252 | resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" 253 | integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== 254 | 255 | commander@~2.9.0: 256 | version "2.9.0" 257 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" 258 | integrity sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q= 259 | dependencies: 260 | graceful-readlink ">= 1.0.0" 261 | 262 | concat-map@0.0.1: 263 | version "0.0.1" 264 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 265 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 266 | 267 | confusing-browser-globals@^1.0.10: 268 | version "1.0.11" 269 | resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" 270 | integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== 271 | 272 | console.json@^0.2.1: 273 | version "0.2.1" 274 | resolved "https://registry.yarnpkg.com/console.json/-/console.json-0.2.1.tgz#40951b4f550452dae0067479e50f7fc8e677939e" 275 | integrity sha1-QJUbT1UEUtrgBnR55Q9/yOZ3k54= 276 | 277 | cross-spawn@^6.0.5: 278 | version "6.0.5" 279 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" 280 | integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== 281 | dependencies: 282 | nice-try "^1.0.4" 283 | path-key "^2.0.1" 284 | semver "^5.5.0" 285 | shebang-command "^1.2.0" 286 | which "^1.2.9" 287 | 288 | debug@3.2.6: 289 | version "3.2.6" 290 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" 291 | integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== 292 | dependencies: 293 | ms "^2.1.1" 294 | 295 | debug@^2.6.9: 296 | version "2.6.9" 297 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 298 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 299 | dependencies: 300 | ms "2.0.0" 301 | 302 | debug@^3.2.7: 303 | version "3.2.7" 304 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" 305 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== 306 | dependencies: 307 | ms "^2.1.1" 308 | 309 | debug@^4.0.1: 310 | version "4.3.3" 311 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" 312 | integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== 313 | dependencies: 314 | ms "2.1.2" 315 | 316 | decamelize@^1.2.0: 317 | version "1.2.0" 318 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 319 | integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= 320 | 321 | deep-eql@^3.0.1: 322 | version "3.0.1" 323 | resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" 324 | integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== 325 | dependencies: 326 | type-detect "^4.0.0" 327 | 328 | deep-extend@^0.6.0: 329 | version "0.6.0" 330 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" 331 | integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== 332 | 333 | deep-extend@~0.5.1: 334 | version "0.5.1" 335 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.5.1.tgz#b894a9dd90d3023fbf1c55a394fb858eb2066f1f" 336 | integrity sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w== 337 | 338 | deep-is@~0.1.3: 339 | version "0.1.4" 340 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" 341 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 342 | 343 | define-properties@^1.1.2, define-properties@^1.1.3: 344 | version "1.1.3" 345 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 346 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== 347 | dependencies: 348 | object-keys "^1.0.12" 349 | 350 | diff@3.5.0, diff@^3.5.0: 351 | version "3.5.0" 352 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" 353 | integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== 354 | 355 | doctrine@^2.1.0: 356 | version "2.1.0" 357 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" 358 | integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== 359 | dependencies: 360 | esutils "^2.0.2" 361 | 362 | doctrine@^3.0.0: 363 | version "3.0.0" 364 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 365 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 366 | dependencies: 367 | esutils "^2.0.2" 368 | 369 | emoji-regex@^7.0.1: 370 | version "7.0.3" 371 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 372 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== 373 | 374 | entities@~1.1.1: 375 | version "1.1.2" 376 | resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" 377 | integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== 378 | 379 | es-abstract@^1.19.0, es-abstract@^1.19.1: 380 | version "1.19.1" 381 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3" 382 | integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w== 383 | dependencies: 384 | call-bind "^1.0.2" 385 | es-to-primitive "^1.2.1" 386 | function-bind "^1.1.1" 387 | get-intrinsic "^1.1.1" 388 | get-symbol-description "^1.0.0" 389 | has "^1.0.3" 390 | has-symbols "^1.0.2" 391 | internal-slot "^1.0.3" 392 | is-callable "^1.2.4" 393 | is-negative-zero "^2.0.1" 394 | is-regex "^1.1.4" 395 | is-shared-array-buffer "^1.0.1" 396 | is-string "^1.0.7" 397 | is-weakref "^1.0.1" 398 | object-inspect "^1.11.0" 399 | object-keys "^1.1.1" 400 | object.assign "^4.1.2" 401 | string.prototype.trimend "^1.0.4" 402 | string.prototype.trimstart "^1.0.4" 403 | unbox-primitive "^1.0.1" 404 | 405 | es-to-primitive@^1.2.1: 406 | version "1.2.1" 407 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" 408 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== 409 | dependencies: 410 | is-callable "^1.1.4" 411 | is-date-object "^1.0.1" 412 | is-symbol "^1.0.2" 413 | 414 | escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: 415 | version "1.0.5" 416 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 417 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 418 | 419 | eslint-config-airbnb-base@^14.2.1: 420 | version "14.2.1" 421 | resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz#8a2eb38455dc5a312550193b319cdaeef042cd1e" 422 | integrity sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA== 423 | dependencies: 424 | confusing-browser-globals "^1.0.10" 425 | object.assign "^4.1.2" 426 | object.entries "^1.1.2" 427 | 428 | eslint-import-resolver-node@^0.3.6: 429 | version "0.3.6" 430 | resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" 431 | integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== 432 | dependencies: 433 | debug "^3.2.7" 434 | resolve "^1.20.0" 435 | 436 | eslint-module-utils@^2.7.2: 437 | version "2.7.3" 438 | resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee" 439 | integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ== 440 | dependencies: 441 | debug "^3.2.7" 442 | find-up "^2.1.0" 443 | 444 | eslint-plugin-import@^2.2.0: 445 | version "2.25.4" 446 | resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz#322f3f916a4e9e991ac7af32032c25ce313209f1" 447 | integrity sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA== 448 | dependencies: 449 | array-includes "^3.1.4" 450 | array.prototype.flat "^1.2.5" 451 | debug "^2.6.9" 452 | doctrine "^2.1.0" 453 | eslint-import-resolver-node "^0.3.6" 454 | eslint-module-utils "^2.7.2" 455 | has "^1.0.3" 456 | is-core-module "^2.8.0" 457 | is-glob "^4.0.3" 458 | minimatch "^3.0.4" 459 | object.values "^1.1.5" 460 | resolve "^1.20.0" 461 | tsconfig-paths "^3.12.0" 462 | 463 | eslint-scope@^4.0.3: 464 | version "4.0.3" 465 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" 466 | integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== 467 | dependencies: 468 | esrecurse "^4.1.0" 469 | estraverse "^4.1.1" 470 | 471 | eslint-utils@^1.3.1: 472 | version "1.4.3" 473 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" 474 | integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== 475 | dependencies: 476 | eslint-visitor-keys "^1.1.0" 477 | 478 | eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: 479 | version "1.3.0" 480 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" 481 | integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== 482 | 483 | eslint@^5.0.0: 484 | version "5.16.0" 485 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" 486 | integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg== 487 | dependencies: 488 | "@babel/code-frame" "^7.0.0" 489 | ajv "^6.9.1" 490 | chalk "^2.1.0" 491 | cross-spawn "^6.0.5" 492 | debug "^4.0.1" 493 | doctrine "^3.0.0" 494 | eslint-scope "^4.0.3" 495 | eslint-utils "^1.3.1" 496 | eslint-visitor-keys "^1.0.0" 497 | espree "^5.0.1" 498 | esquery "^1.0.1" 499 | esutils "^2.0.2" 500 | file-entry-cache "^5.0.1" 501 | functional-red-black-tree "^1.0.1" 502 | glob "^7.1.2" 503 | globals "^11.7.0" 504 | ignore "^4.0.6" 505 | import-fresh "^3.0.0" 506 | imurmurhash "^0.1.4" 507 | inquirer "^6.2.2" 508 | js-yaml "^3.13.0" 509 | json-stable-stringify-without-jsonify "^1.0.1" 510 | levn "^0.3.0" 511 | lodash "^4.17.11" 512 | minimatch "^3.0.4" 513 | mkdirp "^0.5.1" 514 | natural-compare "^1.4.0" 515 | optionator "^0.8.2" 516 | path-is-inside "^1.0.2" 517 | progress "^2.0.0" 518 | regexpp "^2.0.1" 519 | semver "^5.5.1" 520 | strip-ansi "^4.0.0" 521 | strip-json-comments "^2.0.1" 522 | table "^5.2.3" 523 | text-table "^0.2.0" 524 | 525 | espree@^5.0.1: 526 | version "5.0.1" 527 | resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" 528 | integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== 529 | dependencies: 530 | acorn "^6.0.7" 531 | acorn-jsx "^5.0.0" 532 | eslint-visitor-keys "^1.0.0" 533 | 534 | esprima@^4.0.0: 535 | version "4.0.1" 536 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 537 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 538 | 539 | esquery@^1.0.1: 540 | version "1.4.0" 541 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" 542 | integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== 543 | dependencies: 544 | estraverse "^5.1.0" 545 | 546 | esrecurse@^4.1.0: 547 | version "4.3.0" 548 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 549 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 550 | dependencies: 551 | estraverse "^5.2.0" 552 | 553 | estraverse@^4.1.1: 554 | version "4.3.0" 555 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 556 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 557 | 558 | estraverse@^5.1.0, estraverse@^5.2.0: 559 | version "5.3.0" 560 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 561 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 562 | 563 | esutils@^2.0.2: 564 | version "2.0.3" 565 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 566 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 567 | 568 | external-editor@^3.0.3: 569 | version "3.1.0" 570 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" 571 | integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== 572 | dependencies: 573 | chardet "^0.7.0" 574 | iconv-lite "^0.4.24" 575 | tmp "^0.0.33" 576 | 577 | fast-deep-equal@^3.1.1: 578 | version "3.1.3" 579 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 580 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 581 | 582 | fast-json-stable-stringify@^2.0.0: 583 | version "2.1.0" 584 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 585 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 586 | 587 | fast-levenshtein@~2.0.6: 588 | version "2.0.6" 589 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 590 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 591 | 592 | figures@^2.0.0: 593 | version "2.0.0" 594 | resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" 595 | integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= 596 | dependencies: 597 | escape-string-regexp "^1.0.5" 598 | 599 | file-entry-cache@^5.0.1: 600 | version "5.0.1" 601 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" 602 | integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== 603 | dependencies: 604 | flat-cache "^2.0.1" 605 | 606 | find-up@3.0.0, find-up@^3.0.0: 607 | version "3.0.0" 608 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" 609 | integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== 610 | dependencies: 611 | locate-path "^3.0.0" 612 | 613 | find-up@^2.1.0: 614 | version "2.1.0" 615 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" 616 | integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= 617 | dependencies: 618 | locate-path "^2.0.0" 619 | 620 | flat-cache@^2.0.1: 621 | version "2.0.1" 622 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" 623 | integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== 624 | dependencies: 625 | flatted "^2.0.0" 626 | rimraf "2.6.3" 627 | write "1.0.3" 628 | 629 | flat@^4.1.0: 630 | version "4.1.1" 631 | resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.1.tgz#a392059cc382881ff98642f5da4dde0a959f309b" 632 | integrity sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA== 633 | dependencies: 634 | is-buffer "~2.0.3" 635 | 636 | flatted@^2.0.0: 637 | version "2.0.2" 638 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" 639 | integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== 640 | 641 | fs.realpath@^1.0.0: 642 | version "1.0.0" 643 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 644 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 645 | 646 | function-bind@^1.1.1: 647 | version "1.1.1" 648 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 649 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 650 | 651 | functional-red-black-tree@^1.0.1: 652 | version "1.0.1" 653 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 654 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= 655 | 656 | get-caller-file@^2.0.1: 657 | version "2.0.5" 658 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 659 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 660 | 661 | get-func-name@^2.0.0: 662 | version "2.0.0" 663 | resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" 664 | integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= 665 | 666 | get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: 667 | version "1.1.1" 668 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" 669 | integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== 670 | dependencies: 671 | function-bind "^1.1.1" 672 | has "^1.0.3" 673 | has-symbols "^1.0.1" 674 | 675 | get-stdin@~5.0.1: 676 | version "5.0.1" 677 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" 678 | integrity sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g= 679 | 680 | get-symbol-description@^1.0.0: 681 | version "1.0.0" 682 | resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" 683 | integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== 684 | dependencies: 685 | call-bind "^1.0.2" 686 | get-intrinsic "^1.1.1" 687 | 688 | glob@7.1.3: 689 | version "7.1.3" 690 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" 691 | integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== 692 | dependencies: 693 | fs.realpath "^1.0.0" 694 | inflight "^1.0.4" 695 | inherits "2" 696 | minimatch "^3.0.4" 697 | once "^1.3.0" 698 | path-is-absolute "^1.0.0" 699 | 700 | glob@^7.1.2, glob@^7.1.3: 701 | version "7.2.0" 702 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" 703 | integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== 704 | dependencies: 705 | fs.realpath "^1.0.0" 706 | inflight "^1.0.4" 707 | inherits "2" 708 | minimatch "^3.0.4" 709 | once "^1.3.0" 710 | path-is-absolute "^1.0.0" 711 | 712 | glob@~7.1.2: 713 | version "7.1.7" 714 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" 715 | integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== 716 | dependencies: 717 | fs.realpath "^1.0.0" 718 | inflight "^1.0.4" 719 | inherits "2" 720 | minimatch "^3.0.4" 721 | once "^1.3.0" 722 | path-is-absolute "^1.0.0" 723 | 724 | globals@^11.7.0: 725 | version "11.12.0" 726 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 727 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 728 | 729 | "graceful-readlink@>= 1.0.0": 730 | version "1.0.1" 731 | resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" 732 | integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU= 733 | 734 | growl@1.10.5: 735 | version "1.10.5" 736 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" 737 | integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== 738 | 739 | has-bigints@^1.0.1: 740 | version "1.0.1" 741 | resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" 742 | integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== 743 | 744 | has-flag@^3.0.0: 745 | version "3.0.0" 746 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 747 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 748 | 749 | has-symbols@^1.0.0, has-symbols@^1.0.1, has-symbols@^1.0.2: 750 | version "1.0.2" 751 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" 752 | integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== 753 | 754 | has-tostringtag@^1.0.0: 755 | version "1.0.0" 756 | resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" 757 | integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== 758 | dependencies: 759 | has-symbols "^1.0.2" 760 | 761 | has@^1.0.3: 762 | version "1.0.3" 763 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 764 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 765 | dependencies: 766 | function-bind "^1.1.1" 767 | 768 | he@1.2.0: 769 | version "1.2.0" 770 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 771 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 772 | 773 | iconv-lite@^0.4.24: 774 | version "0.4.24" 775 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 776 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 777 | dependencies: 778 | safer-buffer ">= 2.1.2 < 3" 779 | 780 | ignore@^4.0.6: 781 | version "4.0.6" 782 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" 783 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== 784 | 785 | import-fresh@^3.0.0: 786 | version "3.3.0" 787 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 788 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 789 | dependencies: 790 | parent-module "^1.0.0" 791 | resolve-from "^4.0.0" 792 | 793 | imurmurhash@^0.1.4: 794 | version "0.1.4" 795 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 796 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 797 | 798 | inflight@^1.0.4: 799 | version "1.0.6" 800 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 801 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 802 | dependencies: 803 | once "^1.3.0" 804 | wrappy "1" 805 | 806 | inherits@2: 807 | version "2.0.4" 808 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 809 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 810 | 811 | ini@~1.3.0: 812 | version "1.3.8" 813 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" 814 | integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== 815 | 816 | inquirer@^6.2.2: 817 | version "6.5.2" 818 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" 819 | integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== 820 | dependencies: 821 | ansi-escapes "^3.2.0" 822 | chalk "^2.4.2" 823 | cli-cursor "^2.1.0" 824 | cli-width "^2.0.0" 825 | external-editor "^3.0.3" 826 | figures "^2.0.0" 827 | lodash "^4.17.12" 828 | mute-stream "0.0.7" 829 | run-async "^2.2.0" 830 | rxjs "^6.4.0" 831 | string-width "^2.1.0" 832 | strip-ansi "^5.1.0" 833 | through "^2.3.6" 834 | 835 | internal-slot@^1.0.3: 836 | version "1.0.3" 837 | resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" 838 | integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== 839 | dependencies: 840 | get-intrinsic "^1.1.0" 841 | has "^1.0.3" 842 | side-channel "^1.0.4" 843 | 844 | is-bigint@^1.0.1: 845 | version "1.0.4" 846 | resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" 847 | integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== 848 | dependencies: 849 | has-bigints "^1.0.1" 850 | 851 | is-boolean-object@^1.1.0: 852 | version "1.1.2" 853 | resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" 854 | integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== 855 | dependencies: 856 | call-bind "^1.0.2" 857 | has-tostringtag "^1.0.0" 858 | 859 | is-buffer@~2.0.3: 860 | version "2.0.5" 861 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" 862 | integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== 863 | 864 | is-callable@^1.1.4, is-callable@^1.2.4: 865 | version "1.2.4" 866 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" 867 | integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== 868 | 869 | is-core-module@^2.8.0, is-core-module@^2.8.1: 870 | version "2.8.1" 871 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" 872 | integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== 873 | dependencies: 874 | has "^1.0.3" 875 | 876 | is-date-object@^1.0.1: 877 | version "1.0.5" 878 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" 879 | integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== 880 | dependencies: 881 | has-tostringtag "^1.0.0" 882 | 883 | is-extglob@^2.1.1: 884 | version "2.1.1" 885 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 886 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 887 | 888 | is-fullwidth-code-point@^2.0.0: 889 | version "2.0.0" 890 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 891 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 892 | 893 | is-glob@^4.0.3: 894 | version "4.0.3" 895 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 896 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 897 | dependencies: 898 | is-extglob "^2.1.1" 899 | 900 | is-negative-zero@^2.0.1: 901 | version "2.0.2" 902 | resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" 903 | integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== 904 | 905 | is-number-object@^1.0.4: 906 | version "1.0.6" 907 | resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" 908 | integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g== 909 | dependencies: 910 | has-tostringtag "^1.0.0" 911 | 912 | is-regex@^1.1.4: 913 | version "1.1.4" 914 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" 915 | integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== 916 | dependencies: 917 | call-bind "^1.0.2" 918 | has-tostringtag "^1.0.0" 919 | 920 | is-shared-array-buffer@^1.0.1: 921 | version "1.0.1" 922 | resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6" 923 | integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA== 924 | 925 | is-string@^1.0.5, is-string@^1.0.7: 926 | version "1.0.7" 927 | resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" 928 | integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== 929 | dependencies: 930 | has-tostringtag "^1.0.0" 931 | 932 | is-symbol@^1.0.2, is-symbol@^1.0.3: 933 | version "1.0.4" 934 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" 935 | integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== 936 | dependencies: 937 | has-symbols "^1.0.2" 938 | 939 | is-weakref@^1.0.1: 940 | version "1.0.2" 941 | resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" 942 | integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== 943 | dependencies: 944 | call-bind "^1.0.2" 945 | 946 | isarray@0.0.1: 947 | version "0.0.1" 948 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" 949 | integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= 950 | 951 | isexe@^2.0.0: 952 | version "2.0.0" 953 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 954 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 955 | 956 | js-tokens@^4.0.0: 957 | version "4.0.0" 958 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 959 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 960 | 961 | js-yaml@3.13.1, js-yaml@~3.13.0: 962 | version "3.13.1" 963 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" 964 | integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== 965 | dependencies: 966 | argparse "^1.0.7" 967 | esprima "^4.0.0" 968 | 969 | js-yaml@^3.13.0: 970 | version "3.14.1" 971 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" 972 | integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== 973 | dependencies: 974 | argparse "^1.0.7" 975 | esprima "^4.0.0" 976 | 977 | json-colorizer@^2.2.2: 978 | version "2.2.2" 979 | resolved "https://registry.yarnpkg.com/json-colorizer/-/json-colorizer-2.2.2.tgz#07c2ac8cef36558075948e1566c6cfb4ac1668e6" 980 | integrity sha512-56oZtwV1piXrQnRNTtJeqRv+B9Y/dXAYLqBBaYl/COcUdoZxgLBLAO88+CnkbT6MxNs0c5E9mPBIb2sFcNz3vw== 981 | dependencies: 982 | chalk "^2.4.1" 983 | lodash.get "^4.4.2" 984 | 985 | json-schema-traverse@^0.4.1: 986 | version "0.4.1" 987 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 988 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 989 | 990 | json-stable-stringify-without-jsonify@^1.0.1: 991 | version "1.0.1" 992 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 993 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 994 | 995 | json5@^1.0.1: 996 | version "1.0.1" 997 | resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" 998 | integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== 999 | dependencies: 1000 | minimist "^1.2.0" 1001 | 1002 | just-extend@^4.0.2: 1003 | version "4.2.1" 1004 | resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.2.1.tgz#ef5e589afb61e5d66b24eca749409a8939a8c744" 1005 | integrity sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg== 1006 | 1007 | levn@^0.3.0, levn@~0.3.0: 1008 | version "0.3.0" 1009 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 1010 | integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= 1011 | dependencies: 1012 | prelude-ls "~1.1.2" 1013 | type-check "~0.3.2" 1014 | 1015 | linkify-it@^2.0.0: 1016 | version "2.2.0" 1017 | resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.2.0.tgz#e3b54697e78bf915c70a38acd78fd09e0058b1cf" 1018 | integrity sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw== 1019 | dependencies: 1020 | uc.micro "^1.0.1" 1021 | 1022 | locate-path@^2.0.0: 1023 | version "2.0.0" 1024 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" 1025 | integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= 1026 | dependencies: 1027 | p-locate "^2.0.0" 1028 | path-exists "^3.0.0" 1029 | 1030 | locate-path@^3.0.0: 1031 | version "3.0.0" 1032 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" 1033 | integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== 1034 | dependencies: 1035 | p-locate "^3.0.0" 1036 | path-exists "^3.0.0" 1037 | 1038 | lodash.differencewith@~4.5.0: 1039 | version "4.5.0" 1040 | resolved "https://registry.yarnpkg.com/lodash.differencewith/-/lodash.differencewith-4.5.0.tgz#bafafbc918b55154e179176a00bb0aefaac854b7" 1041 | integrity sha1-uvr7yRi1UVTheRdqALsK76rIVLc= 1042 | 1043 | lodash.flatten@~4.4.0: 1044 | version "4.4.0" 1045 | resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" 1046 | integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= 1047 | 1048 | lodash.get@^4.4.2: 1049 | version "4.4.2" 1050 | resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" 1051 | integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= 1052 | 1053 | lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.21: 1054 | version "4.17.21" 1055 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 1056 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 1057 | 1058 | log-symbols@2.2.0: 1059 | version "2.2.0" 1060 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" 1061 | integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== 1062 | dependencies: 1063 | chalk "^2.0.1" 1064 | 1065 | lolex@^4.2.0: 1066 | version "4.2.0" 1067 | resolved "https://registry.yarnpkg.com/lolex/-/lolex-4.2.0.tgz#ddbd7f6213ca1ea5826901ab1222b65d714b3cd7" 1068 | integrity sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg== 1069 | 1070 | lolex@^5.0.1: 1071 | version "5.1.2" 1072 | resolved "https://registry.yarnpkg.com/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367" 1073 | integrity sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A== 1074 | dependencies: 1075 | "@sinonjs/commons" "^1.7.0" 1076 | 1077 | loupe@^2.3.1: 1078 | version "2.3.4" 1079 | resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.4.tgz#7e0b9bffc76f148f9be769cb1321d3dcf3cb25f3" 1080 | integrity sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ== 1081 | dependencies: 1082 | get-func-name "^2.0.0" 1083 | 1084 | markdown-it@8.4.2: 1085 | version "8.4.2" 1086 | resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-8.4.2.tgz#386f98998dc15a37722aa7722084f4020bdd9b54" 1087 | integrity sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ== 1088 | dependencies: 1089 | argparse "^1.0.7" 1090 | entities "~1.1.1" 1091 | linkify-it "^2.0.0" 1092 | mdurl "^1.0.1" 1093 | uc.micro "^1.0.5" 1094 | 1095 | markdownlint-cli@^0.15.0: 1096 | version "0.15.0" 1097 | resolved "https://registry.yarnpkg.com/markdownlint-cli/-/markdownlint-cli-0.15.0.tgz#12a820d3745a955cff2877157d132248e9d3802b" 1098 | integrity sha512-UTstPEXMix4CO1RIgjX3Bd1M+xklc4KXMP2309Zfp5y3UJOASWLSXnTnzkztBn5aZRt7bzLZmxTaR8M4J8cbbQ== 1099 | dependencies: 1100 | commander "~2.9.0" 1101 | deep-extend "~0.5.1" 1102 | get-stdin "~5.0.1" 1103 | glob "~7.1.2" 1104 | js-yaml "~3.13.0" 1105 | lodash.differencewith "~4.5.0" 1106 | lodash.flatten "~4.4.0" 1107 | markdownlint "~0.13.0" 1108 | minimatch "~3.0.4" 1109 | rc "~1.2.7" 1110 | 1111 | markdownlint@~0.13.0: 1112 | version "0.13.0" 1113 | resolved "https://registry.yarnpkg.com/markdownlint/-/markdownlint-0.13.0.tgz#39ffd5ffbf1198c761a5ef3e28c195e5eb8dd669" 1114 | integrity sha512-mGeDEbvmRk2T8f043lK7Lhcdi7mr68hQqGsJCS4p52uvEyOLym28s3r7GA6aaFQFtwT0MfFaJ/7Ex4n/HVPUnQ== 1115 | dependencies: 1116 | markdown-it "8.4.2" 1117 | 1118 | mdurl@^1.0.1: 1119 | version "1.0.1" 1120 | resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" 1121 | integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= 1122 | 1123 | mimic-fn@^1.0.0: 1124 | version "1.2.0" 1125 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" 1126 | integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== 1127 | 1128 | minimatch@3.0.4: 1129 | version "3.0.4" 1130 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1131 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 1132 | dependencies: 1133 | brace-expansion "^1.1.7" 1134 | 1135 | minimatch@^3.0.4: 1136 | version "3.1.2" 1137 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 1138 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 1139 | dependencies: 1140 | brace-expansion "^1.1.7" 1141 | 1142 | minimatch@~3.0.4: 1143 | version "3.0.8" 1144 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1" 1145 | integrity sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q== 1146 | dependencies: 1147 | brace-expansion "^1.1.7" 1148 | 1149 | minimist@^1.2.0, minimist@^1.2.5: 1150 | version "1.2.6" 1151 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" 1152 | integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== 1153 | 1154 | mkdirp@0.5.4: 1155 | version "0.5.4" 1156 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.4.tgz#fd01504a6797ec5c9be81ff43d204961ed64a512" 1157 | integrity sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw== 1158 | dependencies: 1159 | minimist "^1.2.5" 1160 | 1161 | mkdirp@^0.5.1: 1162 | version "0.5.5" 1163 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" 1164 | integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== 1165 | dependencies: 1166 | minimist "^1.2.5" 1167 | 1168 | mocha@^6.2.2: 1169 | version "6.2.3" 1170 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-6.2.3.tgz#e648432181d8b99393410212664450a4c1e31912" 1171 | integrity sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg== 1172 | dependencies: 1173 | ansi-colors "3.2.3" 1174 | browser-stdout "1.3.1" 1175 | debug "3.2.6" 1176 | diff "3.5.0" 1177 | escape-string-regexp "1.0.5" 1178 | find-up "3.0.0" 1179 | glob "7.1.3" 1180 | growl "1.10.5" 1181 | he "1.2.0" 1182 | js-yaml "3.13.1" 1183 | log-symbols "2.2.0" 1184 | minimatch "3.0.4" 1185 | mkdirp "0.5.4" 1186 | ms "2.1.1" 1187 | node-environment-flags "1.0.5" 1188 | object.assign "4.1.0" 1189 | strip-json-comments "2.0.1" 1190 | supports-color "6.0.0" 1191 | which "1.3.1" 1192 | wide-align "1.1.3" 1193 | yargs "13.3.2" 1194 | yargs-parser "13.1.2" 1195 | yargs-unparser "1.6.0" 1196 | 1197 | ms@2.0.0: 1198 | version "2.0.0" 1199 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1200 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 1201 | 1202 | ms@2.1.1: 1203 | version "2.1.1" 1204 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 1205 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== 1206 | 1207 | ms@2.1.2: 1208 | version "2.1.2" 1209 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1210 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1211 | 1212 | ms@^2.1.1: 1213 | version "2.1.3" 1214 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 1215 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 1216 | 1217 | mute-stream@0.0.7: 1218 | version "0.0.7" 1219 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" 1220 | integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= 1221 | 1222 | natural-compare@^1.4.0: 1223 | version "1.4.0" 1224 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1225 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 1226 | 1227 | nice-try@^1.0.4: 1228 | version "1.0.5" 1229 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" 1230 | integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== 1231 | 1232 | nise@^1.5.2: 1233 | version "1.5.3" 1234 | resolved "https://registry.yarnpkg.com/nise/-/nise-1.5.3.tgz#9d2cfe37d44f57317766c6e9408a359c5d3ac1f7" 1235 | integrity sha512-Ymbac/94xeIrMf59REBPOv0thr+CJVFMhrlAkW/gjCIE58BGQdCj0x7KRCb3yz+Ga2Rz3E9XXSvUyyxqqhjQAQ== 1236 | dependencies: 1237 | "@sinonjs/formatio" "^3.2.1" 1238 | "@sinonjs/text-encoding" "^0.7.1" 1239 | just-extend "^4.0.2" 1240 | lolex "^5.0.1" 1241 | path-to-regexp "^1.7.0" 1242 | 1243 | node-environment-flags@1.0.5: 1244 | version "1.0.5" 1245 | resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.5.tgz#fa930275f5bf5dae188d6192b24b4c8bbac3d76a" 1246 | integrity sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ== 1247 | dependencies: 1248 | object.getownpropertydescriptors "^2.0.3" 1249 | semver "^5.7.0" 1250 | 1251 | object-inspect@^1.11.0, object-inspect@^1.9.0: 1252 | version "1.12.0" 1253 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" 1254 | integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== 1255 | 1256 | object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: 1257 | version "1.1.1" 1258 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 1259 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 1260 | 1261 | object.assign@4.1.0: 1262 | version "4.1.0" 1263 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" 1264 | integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== 1265 | dependencies: 1266 | define-properties "^1.1.2" 1267 | function-bind "^1.1.1" 1268 | has-symbols "^1.0.0" 1269 | object-keys "^1.0.11" 1270 | 1271 | object.assign@^4.1.2: 1272 | version "4.1.2" 1273 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" 1274 | integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== 1275 | dependencies: 1276 | call-bind "^1.0.0" 1277 | define-properties "^1.1.3" 1278 | has-symbols "^1.0.1" 1279 | object-keys "^1.1.1" 1280 | 1281 | object.entries@^1.1.2: 1282 | version "1.1.5" 1283 | resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861" 1284 | integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g== 1285 | dependencies: 1286 | call-bind "^1.0.2" 1287 | define-properties "^1.1.3" 1288 | es-abstract "^1.19.1" 1289 | 1290 | object.getownpropertydescriptors@^2.0.3: 1291 | version "2.1.3" 1292 | resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz#b223cf38e17fefb97a63c10c91df72ccb386df9e" 1293 | integrity sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw== 1294 | dependencies: 1295 | call-bind "^1.0.2" 1296 | define-properties "^1.1.3" 1297 | es-abstract "^1.19.1" 1298 | 1299 | object.values@^1.1.5: 1300 | version "1.1.5" 1301 | resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" 1302 | integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== 1303 | dependencies: 1304 | call-bind "^1.0.2" 1305 | define-properties "^1.1.3" 1306 | es-abstract "^1.19.1" 1307 | 1308 | once@^1.3.0: 1309 | version "1.4.0" 1310 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1311 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1312 | dependencies: 1313 | wrappy "1" 1314 | 1315 | onetime@^2.0.0: 1316 | version "2.0.1" 1317 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" 1318 | integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= 1319 | dependencies: 1320 | mimic-fn "^1.0.0" 1321 | 1322 | optionator@^0.8.2: 1323 | version "0.8.3" 1324 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" 1325 | integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== 1326 | dependencies: 1327 | deep-is "~0.1.3" 1328 | fast-levenshtein "~2.0.6" 1329 | levn "~0.3.0" 1330 | prelude-ls "~1.1.2" 1331 | type-check "~0.3.2" 1332 | word-wrap "~1.2.3" 1333 | 1334 | os-tmpdir@~1.0.2: 1335 | version "1.0.2" 1336 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 1337 | integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= 1338 | 1339 | p-limit@^1.1.0: 1340 | version "1.3.0" 1341 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" 1342 | integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== 1343 | dependencies: 1344 | p-try "^1.0.0" 1345 | 1346 | p-limit@^2.0.0: 1347 | version "2.3.0" 1348 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 1349 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 1350 | dependencies: 1351 | p-try "^2.0.0" 1352 | 1353 | p-locate@^2.0.0: 1354 | version "2.0.0" 1355 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" 1356 | integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= 1357 | dependencies: 1358 | p-limit "^1.1.0" 1359 | 1360 | p-locate@^3.0.0: 1361 | version "3.0.0" 1362 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" 1363 | integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== 1364 | dependencies: 1365 | p-limit "^2.0.0" 1366 | 1367 | p-try@^1.0.0: 1368 | version "1.0.0" 1369 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" 1370 | integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= 1371 | 1372 | p-try@^2.0.0: 1373 | version "2.2.0" 1374 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 1375 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 1376 | 1377 | parent-module@^1.0.0: 1378 | version "1.0.1" 1379 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1380 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1381 | dependencies: 1382 | callsites "^3.0.0" 1383 | 1384 | path-exists@^3.0.0: 1385 | version "3.0.0" 1386 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 1387 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= 1388 | 1389 | path-is-absolute@^1.0.0: 1390 | version "1.0.1" 1391 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1392 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1393 | 1394 | path-is-inside@^1.0.2: 1395 | version "1.0.2" 1396 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" 1397 | integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= 1398 | 1399 | path-key@^2.0.1: 1400 | version "2.0.1" 1401 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 1402 | integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= 1403 | 1404 | path-parse@^1.0.7: 1405 | version "1.0.7" 1406 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 1407 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 1408 | 1409 | path-to-regexp@^1.7.0: 1410 | version "1.8.0" 1411 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" 1412 | integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== 1413 | dependencies: 1414 | isarray "0.0.1" 1415 | 1416 | pathval@^1.1.1: 1417 | version "1.1.1" 1418 | resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" 1419 | integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== 1420 | 1421 | prelude-ls@~1.1.2: 1422 | version "1.1.2" 1423 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 1424 | integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= 1425 | 1426 | progress@^2.0.0: 1427 | version "2.0.3" 1428 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 1429 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 1430 | 1431 | punycode@^2.1.0: 1432 | version "2.1.1" 1433 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1434 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1435 | 1436 | rc@~1.2.7: 1437 | version "1.2.8" 1438 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" 1439 | integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== 1440 | dependencies: 1441 | deep-extend "^0.6.0" 1442 | ini "~1.3.0" 1443 | minimist "^1.2.0" 1444 | strip-json-comments "~2.0.1" 1445 | 1446 | regexpp@^2.0.1: 1447 | version "2.0.1" 1448 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" 1449 | integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== 1450 | 1451 | require-directory@^2.1.1: 1452 | version "2.1.1" 1453 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 1454 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 1455 | 1456 | require-main-filename@^2.0.0: 1457 | version "2.0.0" 1458 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" 1459 | integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== 1460 | 1461 | resolve-from@^4.0.0: 1462 | version "4.0.0" 1463 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1464 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1465 | 1466 | resolve@^1.20.0: 1467 | version "1.22.0" 1468 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" 1469 | integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== 1470 | dependencies: 1471 | is-core-module "^2.8.1" 1472 | path-parse "^1.0.7" 1473 | supports-preserve-symlinks-flag "^1.0.0" 1474 | 1475 | restore-cursor@^2.0.0: 1476 | version "2.0.0" 1477 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" 1478 | integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= 1479 | dependencies: 1480 | onetime "^2.0.0" 1481 | signal-exit "^3.0.2" 1482 | 1483 | rimraf@2.6.3: 1484 | version "2.6.3" 1485 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" 1486 | integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== 1487 | dependencies: 1488 | glob "^7.1.3" 1489 | 1490 | run-async@^2.2.0: 1491 | version "2.4.1" 1492 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" 1493 | integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== 1494 | 1495 | rxjs@^6.4.0: 1496 | version "6.6.7" 1497 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" 1498 | integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== 1499 | dependencies: 1500 | tslib "^1.9.0" 1501 | 1502 | "safer-buffer@>= 2.1.2 < 3": 1503 | version "2.1.2" 1504 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1505 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 1506 | 1507 | semver@^5.5.0, semver@^5.5.1, semver@^5.7.0: 1508 | version "5.7.1" 1509 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 1510 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 1511 | 1512 | set-blocking@^2.0.0: 1513 | version "2.0.0" 1514 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 1515 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= 1516 | 1517 | shebang-command@^1.2.0: 1518 | version "1.2.0" 1519 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 1520 | integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= 1521 | dependencies: 1522 | shebang-regex "^1.0.0" 1523 | 1524 | shebang-regex@^1.0.0: 1525 | version "1.0.0" 1526 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 1527 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= 1528 | 1529 | side-channel@^1.0.4: 1530 | version "1.0.4" 1531 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" 1532 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== 1533 | dependencies: 1534 | call-bind "^1.0.0" 1535 | get-intrinsic "^1.0.2" 1536 | object-inspect "^1.9.0" 1537 | 1538 | signal-exit@^3.0.2: 1539 | version "3.0.7" 1540 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" 1541 | integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== 1542 | 1543 | sinon@^7.5.0: 1544 | version "7.5.0" 1545 | resolved "https://registry.yarnpkg.com/sinon/-/sinon-7.5.0.tgz#e9488ea466070ea908fd44a3d6478fd4923c67ec" 1546 | integrity sha512-AoD0oJWerp0/rY9czP/D6hDTTUYGpObhZjMpd7Cl/A6+j0xBE+ayL/ldfggkBXUs0IkvIiM1ljM8+WkOc5k78Q== 1547 | dependencies: 1548 | "@sinonjs/commons" "^1.4.0" 1549 | "@sinonjs/formatio" "^3.2.1" 1550 | "@sinonjs/samsam" "^3.3.3" 1551 | diff "^3.5.0" 1552 | lolex "^4.2.0" 1553 | nise "^1.5.2" 1554 | supports-color "^5.5.0" 1555 | 1556 | slice-ansi@^2.1.0: 1557 | version "2.1.0" 1558 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" 1559 | integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== 1560 | dependencies: 1561 | ansi-styles "^3.2.0" 1562 | astral-regex "^1.0.0" 1563 | is-fullwidth-code-point "^2.0.0" 1564 | 1565 | sprintf-js@~1.0.2: 1566 | version "1.0.3" 1567 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 1568 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 1569 | 1570 | "string-width@^1.0.2 || 2", string-width@^2.1.0: 1571 | version "2.1.1" 1572 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 1573 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 1574 | dependencies: 1575 | is-fullwidth-code-point "^2.0.0" 1576 | strip-ansi "^4.0.0" 1577 | 1578 | string-width@^3.0.0, string-width@^3.1.0: 1579 | version "3.1.0" 1580 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 1581 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== 1582 | dependencies: 1583 | emoji-regex "^7.0.1" 1584 | is-fullwidth-code-point "^2.0.0" 1585 | strip-ansi "^5.1.0" 1586 | 1587 | string.prototype.trimend@^1.0.4: 1588 | version "1.0.4" 1589 | resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" 1590 | integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== 1591 | dependencies: 1592 | call-bind "^1.0.2" 1593 | define-properties "^1.1.3" 1594 | 1595 | string.prototype.trimstart@^1.0.4: 1596 | version "1.0.4" 1597 | resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" 1598 | integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== 1599 | dependencies: 1600 | call-bind "^1.0.2" 1601 | define-properties "^1.1.3" 1602 | 1603 | strip-ansi@^4.0.0: 1604 | version "4.0.0" 1605 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 1606 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 1607 | dependencies: 1608 | ansi-regex "^3.0.0" 1609 | 1610 | strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: 1611 | version "5.2.0" 1612 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 1613 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 1614 | dependencies: 1615 | ansi-regex "^4.1.0" 1616 | 1617 | strip-bom@^3.0.0: 1618 | version "3.0.0" 1619 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 1620 | integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= 1621 | 1622 | strip-json-comments@2.0.1, strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: 1623 | version "2.0.1" 1624 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 1625 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 1626 | 1627 | supports-color@6.0.0: 1628 | version "6.0.0" 1629 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" 1630 | integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== 1631 | dependencies: 1632 | has-flag "^3.0.0" 1633 | 1634 | supports-color@^5.3.0, supports-color@^5.5.0: 1635 | version "5.5.0" 1636 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1637 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1638 | dependencies: 1639 | has-flag "^3.0.0" 1640 | 1641 | supports-preserve-symlinks-flag@^1.0.0: 1642 | version "1.0.0" 1643 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 1644 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 1645 | 1646 | table@^5.2.3: 1647 | version "5.4.6" 1648 | resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" 1649 | integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== 1650 | dependencies: 1651 | ajv "^6.10.2" 1652 | lodash "^4.17.14" 1653 | slice-ansi "^2.1.0" 1654 | string-width "^3.0.0" 1655 | 1656 | text-table@^0.2.0: 1657 | version "0.2.0" 1658 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 1659 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 1660 | 1661 | through@^2.3.6: 1662 | version "2.3.8" 1663 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 1664 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= 1665 | 1666 | tmp@^0.0.33: 1667 | version "0.0.33" 1668 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" 1669 | integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== 1670 | dependencies: 1671 | os-tmpdir "~1.0.2" 1672 | 1673 | tsconfig-paths@^3.12.0: 1674 | version "3.12.0" 1675 | resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz#19769aca6ee8f6a1a341e38c8fa45dd9fb18899b" 1676 | integrity sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg== 1677 | dependencies: 1678 | "@types/json5" "^0.0.29" 1679 | json5 "^1.0.1" 1680 | minimist "^1.2.0" 1681 | strip-bom "^3.0.0" 1682 | 1683 | tslib@^1.9.0: 1684 | version "1.14.1" 1685 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 1686 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 1687 | 1688 | type-check@~0.3.2: 1689 | version "0.3.2" 1690 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 1691 | integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= 1692 | dependencies: 1693 | prelude-ls "~1.1.2" 1694 | 1695 | type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5: 1696 | version "4.0.8" 1697 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" 1698 | integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== 1699 | 1700 | uc.micro@^1.0.1, uc.micro@^1.0.5: 1701 | version "1.0.6" 1702 | resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" 1703 | integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== 1704 | 1705 | unbox-primitive@^1.0.1: 1706 | version "1.0.1" 1707 | resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" 1708 | integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== 1709 | dependencies: 1710 | function-bind "^1.1.1" 1711 | has-bigints "^1.0.1" 1712 | has-symbols "^1.0.2" 1713 | which-boxed-primitive "^1.0.2" 1714 | 1715 | uri-js@^4.2.2: 1716 | version "4.4.1" 1717 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 1718 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 1719 | dependencies: 1720 | punycode "^2.1.0" 1721 | 1722 | which-boxed-primitive@^1.0.2: 1723 | version "1.0.2" 1724 | resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" 1725 | integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== 1726 | dependencies: 1727 | is-bigint "^1.0.1" 1728 | is-boolean-object "^1.1.0" 1729 | is-number-object "^1.0.4" 1730 | is-string "^1.0.5" 1731 | is-symbol "^1.0.3" 1732 | 1733 | which-module@^2.0.0: 1734 | version "2.0.0" 1735 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 1736 | integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= 1737 | 1738 | which@1.3.1, which@^1.2.9: 1739 | version "1.3.1" 1740 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 1741 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 1742 | dependencies: 1743 | isexe "^2.0.0" 1744 | 1745 | wide-align@1.1.3: 1746 | version "1.1.3" 1747 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 1748 | integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== 1749 | dependencies: 1750 | string-width "^1.0.2 || 2" 1751 | 1752 | word-wrap@~1.2.3: 1753 | version "1.2.3" 1754 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 1755 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 1756 | 1757 | wrap-ansi@^5.1.0: 1758 | version "5.1.0" 1759 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" 1760 | integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== 1761 | dependencies: 1762 | ansi-styles "^3.2.0" 1763 | string-width "^3.0.0" 1764 | strip-ansi "^5.0.0" 1765 | 1766 | wrappy@1: 1767 | version "1.0.2" 1768 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1769 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1770 | 1771 | write@1.0.3: 1772 | version "1.0.3" 1773 | resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" 1774 | integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== 1775 | dependencies: 1776 | mkdirp "^0.5.1" 1777 | 1778 | y18n@^4.0.0: 1779 | version "4.0.3" 1780 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" 1781 | integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== 1782 | 1783 | yargs-parser@13.1.2, yargs-parser@^13.1.2: 1784 | version "13.1.2" 1785 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" 1786 | integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== 1787 | dependencies: 1788 | camelcase "^5.0.0" 1789 | decamelize "^1.2.0" 1790 | 1791 | yargs-unparser@1.6.0: 1792 | version "1.6.0" 1793 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" 1794 | integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== 1795 | dependencies: 1796 | flat "^4.1.0" 1797 | lodash "^4.17.15" 1798 | yargs "^13.3.0" 1799 | 1800 | yargs@13.3.2, yargs@^13.3.0: 1801 | version "13.3.2" 1802 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" 1803 | integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== 1804 | dependencies: 1805 | cliui "^5.0.0" 1806 | find-up "^3.0.0" 1807 | get-caller-file "^2.0.1" 1808 | require-directory "^2.1.1" 1809 | require-main-filename "^2.0.0" 1810 | set-blocking "^2.0.0" 1811 | string-width "^3.0.0" 1812 | which-module "^2.0.0" 1813 | y18n "^4.0.0" 1814 | yargs-parser "^13.1.2" 1815 | --------------------------------------------------------------------------------