diff --git a/.github/workflows/lsif.yml b/.github/workflows/lsif.yml new file mode 100644 index 000000000..86f09ef29 --- /dev/null +++ b/.github/workflows/lsif.yml @@ -0,0 +1,15 @@ +name: LSIF +on: + - push +jobs: + lsif-ts: + runs-on: ubuntu-latest + container: sourcegraph/lsif-node + steps: + - uses: actions/checkout@v1 + - name: Install dependencies + run: npm install + - name: Generate LSIF data + run: lsif-tsc -p . + - name: Upload LSIF data + run: src lsif upload -github-token=${{ secrets.GITHUB_TOKEN }} diff --git a/.travis.yml b/.travis.yml index 8ad81a111..e74b918da 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,9 @@ language: node_js +env: + global: + - FORCE_COLOR=1 + node_js: - '8' - '6' diff --git a/README.md b/README.md index 7ab0fff58..54f29e74b 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,22 @@ +## ⚠️ This project is no longer maintained + +This language server is an implementation of LSP using TypeScript's APIs. +This approach made it difficult to keep up with new features of TypeScript and implied that the server always uses a bundled TypeScript version, instead of the local TypeScript in `node_modules` like using the official (non-LSP) [`tsserver`](https://github.com/Microsoft/TypeScript/wiki/Standalone-Server-%28tsserver%29) allows. + +On top of that, over time we simplified our architecture for running language servers in the cloud at Sourcegraph which removed the necessity for this level of tight integration and control. +[Theia's TypeScript language server](https://github.com/theia-ide/typescript-language-server) is a thinner wrapper around `tsserver`, which avoids these problems to some extent. +[Our latest approach](https://github.com/sourcegraph/sourcegraph-typescript) of running a TypeScript language server in the cloud uses Theia's language server (and transitively `tsserver`) under the hood. + +However, since then our code intelligence evolved even further and is nowadays powered primarily by [LSIF](https://lsif.dev/), the _Language Server Index Format_. +LSIF is developed together with LSP and uses the same structures, but in a pre-computed serialization instead of an RPC protocol. +This allows us to provide [near-instant code intelligence](https://docs.sourcegraph.com/user/code_intelligence/explanations/precise_code_intelligence) for our tricky on-demand cloud code intelligence scenarios and hence we are focusing all of our efforts on LSIF indexers. +All of this work is also open source of course and if you're curious you can read more about [how we use LSIF on our blog](https://about.sourcegraph.com/blog/evolution-of-the-precise-code-intel-backend/). + +LSP is still the obvious choice for editor scenarios and everyone is welcome to fork this repository and pick up maintenance, although from what we learned we would recommend to build on Theia's approach (wrapping `tsserver`). +We would also love to see and are looking forward to [native LSP support for the official `tsserver`](https://github.com/microsoft/TypeScript/issues/39459#issuecomment-696179304), which would eliminate the need for any wrappers. + +--------------------- + # JavaScript/TypeScript language server [![npm](https://img.shields.io/npm/v/javascript-typescript-langserver.svg)](https://www.npmjs.com/package/javascript-typescript-langserver) @@ -28,6 +47,7 @@ This is a language server for JavaScript and TypeScript that adheres to the [Lan - Hovers - Goto definition + - Goto type definition - Find all references - Document symbols - Workspace symbol search diff --git a/package-lock.json b/package-lock.json index b187a7435..29084fcb3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,558 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@babel/code-frame": { + "version": "7.0.0-beta.51", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.51.tgz", + "integrity": "sha1-vXHZsZKvl435FYKdOdQJRFZDmgw=", + "dev": true, + "requires": { + "@babel/highlight": "7.0.0-beta.51" + } + }, + "@babel/generator": { + "version": "7.0.0-beta.51", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.51.tgz", + "integrity": "sha1-bHV1/952HQdIXgS67cA5LG2eMPY=", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.51", + "jsesc": "^2.5.1", + "lodash": "^4.17.5", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" + } + }, + "@babel/helper-function-name": { + "version": "7.0.0-beta.51", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.51.tgz", + "integrity": "sha1-IbSHSiJ8+Z7K/MMKkDAtpaJkBWE=", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "7.0.0-beta.51", + "@babel/template": "7.0.0-beta.51", + "@babel/types": "7.0.0-beta.51" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.0.0-beta.51", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.51.tgz", + "integrity": "sha1-MoGy0EWvlcFyzpGyCCXYXqRnZBE=", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.51" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.0.0-beta.51", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.51.tgz", + "integrity": "sha1-imw/ZsTSZTUvwHdIT59ugKUauXg=", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.51" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", + "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==", + "dev": true + }, + "@babel/highlight": { + "version": "7.0.0-beta.51", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.51.tgz", + "integrity": "sha1-6IRK4loVlcz9QriWI7Q3bKBtIl0=", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^3.0.0" + } + }, + "@babel/parser": { + "version": "7.0.0-beta.51", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.0.0-beta.51.tgz", + "integrity": "sha1-J87C30Cd9gr1gnDtj2qlVAnqhvY=", + "dev": true + }, + "@babel/template": { + "version": "7.0.0-beta.51", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.51.tgz", + "integrity": "sha1-lgKkCuvPNXrpZ34lMu9fyBD1+/8=", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0-beta.51", + "@babel/parser": "7.0.0-beta.51", + "@babel/types": "7.0.0-beta.51", + "lodash": "^4.17.5" + } + }, + "@babel/traverse": { + "version": "7.0.0-beta.51", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.51.tgz", + "integrity": "sha1-mB2vLOw0emIx06odnhgDsDqqpKg=", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0-beta.51", + "@babel/generator": "7.0.0-beta.51", + "@babel/helper-function-name": "7.0.0-beta.51", + "@babel/helper-split-export-declaration": "7.0.0-beta.51", + "@babel/parser": "7.0.0-beta.51", + "@babel/types": "7.0.0-beta.51", + "debug": "^3.1.0", + "globals": "^11.1.0", + "invariant": "^2.2.0", + "lodash": "^4.17.5" + } + }, + "@babel/types": { + "version": "7.0.0-beta.51", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.51.tgz", + "integrity": "sha1-2AK3tUO1g2x3iqaReXq/APPZfqk=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.5", + "to-fast-properties": "^2.0.0" + } + }, + "@commitlint/cli": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-8.3.5.tgz", + "integrity": "sha512-6+L0vbw55UEdht71pgWOE55SRgb+8OHcEwGDB234VlIBFGK9P2QOBU7MHiYJ5cjdjCQ0rReNrGjOHmJ99jwf0w==", + "dev": true, + "requires": { + "@commitlint/format": "^8.3.4", + "@commitlint/lint": "^8.3.5", + "@commitlint/load": "^8.3.5", + "@commitlint/read": "^8.3.4", + "babel-polyfill": "6.26.0", + "chalk": "2.4.2", + "get-stdin": "7.0.0", + "lodash": "4.17.15", + "meow": "5.0.0", + "resolve-from": "5.0.0", + "resolve-global": "1.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "meow": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz", + "integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==", + "dev": true, + "requires": { + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0", + "yargs-parser": "^10.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "@commitlint/config-conventional": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-8.3.4.tgz", + "integrity": "sha512-w0Yc5+aVAjZgjYqx29igBOnVCj8O22gy3Vo6Fyp7PwoS7+AYS1x3sN7IBq6i7Ae15Mv5P+rEx1pkxXo5zOMe4g==", + "dev": true, + "requires": { + "conventional-changelog-conventionalcommits": "4.2.1" + } + }, + "@commitlint/ensure": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-8.3.4.tgz", + "integrity": "sha512-8NW77VxviLhD16O3EUd02lApMFnrHexq10YS4F4NftNoErKbKaJ0YYedktk2boKrtNRf/gQHY/Qf65edPx4ipw==", + "dev": true, + "requires": { + "lodash": "4.17.15" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + } + } + }, + "@commitlint/execute-rule": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-8.3.4.tgz", + "integrity": "sha512-f4HigYjeIBn9f7OuNv5zh2y5vWaAhNFrfeul8CRJDy82l3Y+09lxOTGxfF3uMXKrZq4LmuK6qvvRCZ8mUrVvzQ==", + "dev": true + }, + "@commitlint/format": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-8.3.4.tgz", + "integrity": "sha512-809wlQ/ND6CLZON+w2Rb3YM2TLNDfU2xyyqpZeqzf2reJNpySMSUAeaO/fNDJSOKIsOsR3bI01rGu6hv28k+Nw==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, + "@commitlint/is-ignored": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-8.3.5.tgz", + "integrity": "sha512-Zo+8a6gJLFDTqyNRx53wQi/XTiz8mncvmWf/4oRG+6WRcBfjSSHY7KPVj5Y6UaLy2EgZ0WQ2Tt6RdTDeQiQplA==", + "dev": true, + "requires": { + "semver": "6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@commitlint/lint": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-8.3.5.tgz", + "integrity": "sha512-02AkI0a6PU6rzqUvuDkSi6rDQ2hUgkq9GpmdJqfai5bDbxx2939mK4ZO+7apbIh4H6Pae7EpYi7ffxuJgm+3hQ==", + "dev": true, + "requires": { + "@commitlint/is-ignored": "^8.3.5", + "@commitlint/parse": "^8.3.4", + "@commitlint/rules": "^8.3.4", + "babel-runtime": "^6.23.0", + "lodash": "4.17.15" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + } + } + }, + "@commitlint/load": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-8.3.5.tgz", + "integrity": "sha512-poF7R1CtQvIXRmVIe63FjSQmN9KDqjRtU5A6hxqXBga87yB2VUJzic85TV6PcQc+wStk52cjrMI+g0zFx+Zxrw==", + "dev": true, + "requires": { + "@commitlint/execute-rule": "^8.3.4", + "@commitlint/resolve-extends": "^8.3.5", + "babel-runtime": "^6.23.0", + "chalk": "2.4.2", + "cosmiconfig": "^5.2.0", + "lodash": "4.17.15", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "@commitlint/message": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-8.3.4.tgz", + "integrity": "sha512-nEj5tknoOKXqBsaQtCtgPcsAaf5VCg3+fWhss4Vmtq40633xLq0irkdDdMEsYIx8rGR0XPBTukqzln9kAWCkcA==", + "dev": true + }, + "@commitlint/parse": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-8.3.4.tgz", + "integrity": "sha512-b3uQvpUQWC20EBfKSfMRnyx5Wc4Cn778bVeVOFErF/cXQK725L1bYFvPnEjQO/GT8yGVzq2wtLaoEqjm1NJ/Bw==", + "dev": true, + "requires": { + "conventional-changelog-angular": "^1.3.3", + "conventional-commits-parser": "^3.0.0", + "lodash": "^4.17.11" + }, + "dependencies": { + "conventional-changelog-angular": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz", + "integrity": "sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg==", + "dev": true, + "requires": { + "compare-func": "^1.3.1", + "q": "^1.5.1" + } + }, + "conventional-commits-parser": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.0.8.tgz", + "integrity": "sha512-YcBSGkZbYp7d+Cr3NWUeXbPDFUN6g3SaSIzOybi8bjHL5IJ5225OSCxJJ4LgziyEJ7AaJtE9L2/EU6H7Nt/DDQ==", + "dev": true, + "requires": { + "JSONStream": "^1.0.4", + "is-text-path": "^1.0.1", + "lodash": "^4.17.15", + "meow": "^5.0.0", + "split2": "^2.0.0", + "through2": "^3.0.0", + "trim-off-newlines": "^1.0.0" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + } + } + }, + "meow": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz", + "integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==", + "dev": true, + "requires": { + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0", + "yargs-parser": "^10.0.0" + } + }, + "through2": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", + "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", + "dev": true, + "requires": { + "readable-stream": "2 || 3" + } + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "@commitlint/read": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-8.3.4.tgz", + "integrity": "sha512-FKv1kHPrvcAG5j+OSbd41IWexsbLhfIXpxVC/YwQZO+FR0EHmygxQNYs66r+GnhD1EfYJYM4WQIqd5bJRx6OIw==", + "dev": true, + "requires": { + "@commitlint/top-level": "^8.3.4", + "@marionebl/sander": "^0.6.0", + "babel-runtime": "^6.23.0", + "git-raw-commits": "^2.0.0" + } + }, + "@commitlint/resolve-extends": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-8.3.5.tgz", + "integrity": "sha512-nHhFAK29qiXNe6oH6uG5wqBnCR+BQnxlBW/q5fjtxIaQALgfoNLHwLS9exzbIRFqwJckpR6yMCfgMbmbAOtklQ==", + "dev": true, + "requires": { + "import-fresh": "^3.0.0", + "lodash": "4.17.15", + "resolve-from": "^5.0.0", + "resolve-global": "^1.0.0" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "@commitlint/rules": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-8.3.4.tgz", + "integrity": "sha512-xuC9dlqD5xgAoDFgnbs578cJySvwOSkMLQyZADb1xD5n7BNcUJfP8WjT9W1Aw8K3Wf8+Ym/ysr9FZHXInLeaRg==", + "dev": true, + "requires": { + "@commitlint/ensure": "^8.3.4", + "@commitlint/message": "^8.3.4", + "@commitlint/to-lines": "^8.3.4", + "babel-runtime": "^6.23.0" + } + }, + "@commitlint/to-lines": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-8.3.4.tgz", + "integrity": "sha512-5AvcdwRsMIVq0lrzXTwpbbG5fKRTWcHkhn/hCXJJ9pm1JidsnidS1y0RGkb3O50TEHGewhXwNoavxW9VToscUA==", + "dev": true + }, + "@commitlint/top-level": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-8.3.4.tgz", + "integrity": "sha512-nOaeLBbAqSZNpKgEtO6NAxmui1G8ZvLG+0wb4rvv6mWhPDzK1GNZkCd8FUZPahCoJ1iHDoatw7F8BbJLg4nDjg==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + } + } + }, + "@marionebl/sander": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@marionebl/sander/-/sander-0.6.1.tgz", + "integrity": "sha1-GViWWHTyS8Ub5Ih1/rUNZC/EH3s=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.3", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.2" + } + }, "@mrmlnc/readdir-enhanced": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", @@ -30,6 +582,15 @@ "url-template": "^2.0.8" } }, + "@phenomnomnominal/tsquery": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@phenomnomnominal/tsquery/-/tsquery-3.0.0.tgz", + "integrity": "sha512-SW8lKitBHWJ9fAYkJ9kJivuctwNYCh3BUxLdH0+XiR1GPBiu+7qiZzh8p8jqlj1LgVC1TbvfNFroaEsmYlL8Iw==", + "dev": true, + "requires": { + "esquery": "^1.0.1" + } + }, "@semantic-release/commit-analyzer": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-5.0.3.tgz", @@ -149,19 +710,34 @@ "lodash": "^4.17.4" } }, + "@sinonjs/commons": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.0.2.tgz", + "integrity": "sha512-WR3dlgqJP4QNrLC4iXN/5/2WaLQQ0VijOOkmflqFGVJ6wLEpbSjo7c0ZeGIdtY8Crk7xBBp87sM6+Mkerz7alw==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, "@sinonjs/formatio": { "version": "2.0.0", - "resolved": "http://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz", "integrity": "sha512-ls6CAMA6/5gG+O/IdsBcblvnd8qcO/l1TYoNeAzp3wcISOxlPXQEus0mLcdwazEkWjaBdaJ3TaxmNgCLWwvWzg==", "dev": true, "requires": { "samsam": "1.3.0" } }, + "@sinonjs/samsam": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-2.0.0.tgz", + "integrity": "sha512-D7VxhADdZbDJ0HjUTMnSQ5xIGb4H2yWpg8k9Sf1T08zfFiQYlaxM8LZydpR4FQ2E6LZJX8IlabNZ5io4vdChwg==", + "dev": true + }, "@sourcegraph/prettierrc": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@sourcegraph/prettierrc/-/prettierrc-2.1.1.tgz", - "integrity": "sha512-p02LPFLOhr0JRsBwtCqNC+9AoSAKjNsW96zdfPjkn4lA+3H/0nHBtjUkoSPTuVh8FXZ56sAB2JkhH9RIZ5YiuA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@sourcegraph/prettierrc/-/prettierrc-3.0.3.tgz", + "integrity": "sha512-FQ1/Ued4I02R0JkrHHofDN163juVxUnPALzfxPZrDZUHv+c3jHjfZhmTHEz+Wd+g3b7MFk0fkj36nZSnvPyU8A==", "dev": true }, "@sourcegraph/tsconfig": { @@ -171,20 +747,20 @@ "dev": true }, "@sourcegraph/tslint-config": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/@sourcegraph/tslint-config/-/tslint-config-11.0.1.tgz", - "integrity": "sha512-HeeLEpVXxL9e+7FzYBUzrvj5/mC1l+vTpT3vcQ599pmN187gQnvQ9UO4o6ux7a6PnoeMar2q+RORgFtjPUN69g==", + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/@sourcegraph/tslint-config/-/tslint-config-12.3.1.tgz", + "integrity": "sha512-XG/H+QPARCTIXtL4bLBP1W93MniqBYIkDEkld6gdbRT3i4sBMXw+IwZwC3NdroEjEe5OKgXNBh1Y8edxBL/hdw==", "dev": true, "requires": { - "rxjs-tslint-rules": "^3.3.0", + "rxjs-tslint-rules": "^4.12.0", "tslint-config-prettier": "^1.6.0", "tslint-react": "^3.2.0" } }, "@types/chai": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.0.6.tgz", - "integrity": "sha512-IzRWv/7IpaMm41KLLJcaaD/UKit/MrHu4rWs61oWiVjuk4aKWe2eopx3XyhAHhSnMyB5EeCMRr2AsJtuQ8COWA==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.7.tgz", + "integrity": "sha512-2Y8uPt0/jwjhQ6EiluT0XCri1Dbplr0ZxfFXUz+ye13gaqE8u5gL5ppao1JrUYr9cIip5S6MvQzBS7Kke7U9VA==", "dev": true }, "@types/chai-as-promised": { @@ -203,9 +779,9 @@ "dev": true }, "@types/glob": { - "version": "5.0.35", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz", - "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", + "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", "dev": true, "requires": { "@types/events": "*", @@ -214,9 +790,9 @@ } }, "@types/lodash": { - "version": "4.14.108", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.108.tgz", - "integrity": "sha512-WD2vUOKfBBVHxWUV9iMR9RMfpuf8HquxWeAq2yqGVL7Nc4JW2+sQama0pREMqzNI3Tutj0PyxYUJwuoxxvX+xA==", + "version": "4.14.155", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.155.tgz", + "integrity": "sha512-vEcX7S7aPhsBCivxMwAANQburHBtfN9RdyXFk84IJmu2Z4Hkg1tOFgaslRiEqqvoLtbCBi6ika1EMspE+NZ9Lg==", "dev": true }, "@types/minimatch": { @@ -226,15 +802,15 @@ "dev": true }, "@types/mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-YeDiSEzznwZwwp766SJ6QlrTyBYUGPSIwmREHVTmktUYiT/WADdWtpt9iH0KuUSf8lZLdI4lP0X6PBzPo5//JQ==", + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.6.tgz", + "integrity": "sha512-1axi39YdtBI7z957vdqXI4Ac25e7YihYQtJa+Clnxg1zTJEaIRbndt71O3sP4GAMgiAm0pY26/b9BrY4MR/PMw==", "dev": true }, "@types/mz": { - "version": "0.0.31", - "resolved": "https://registry.npmjs.org/@types/mz/-/mz-0.0.31.tgz", - "integrity": "sha1-pNgMCC/v5x5Ap8DwfR5lVbu8e1I=", + "version": "0.0.32", + "resolved": "https://registry.npmjs.org/@types/mz/-/mz-0.0.32.tgz", + "integrity": "sha512-cy3yebKhrHuOcrJGkfwNHhpTXQLgmXSv1BX+4p32j+VUQ6aP2eJ5cL7OvGcAQx75fCTFaAIIAKewvqL+iwSd4g==", "dev": true, "requires": { "@types/node": "*" @@ -311,6 +887,7 @@ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "dev": true, + "optional": true, "requires": { "kind-of": "^3.0.2", "longest": "^1.0.1", @@ -328,12 +905,6 @@ "resolved": "https://registry.npmjs.org/ansi-color/-/ansi-color-0.2.1.tgz", "integrity": "sha1-PnXAN0dSF1RO12Oo21cJ+prlv5o=" }, - "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", - "dev": true - }, "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", @@ -374,15 +945,6 @@ "integrity": "sha1-oMoMvCmltz6Dbuvhy/bF4OTrgvk=", "dev": true }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1" - } - }, "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", @@ -422,12 +984,6 @@ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", "dev": true }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -457,44 +1013,35 @@ "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=", "dev": true }, - "babel-code-frame": { + "babel-polyfill": { "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", + "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", "dev": true, "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "regenerator-runtime": "^0.10.5" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", "dev": true } } }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -588,17 +1135,6 @@ "concat-map": "0.0.1" } }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, "browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", @@ -658,21 +1194,29 @@ } } }, - "cachedir": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-1.2.0.tgz", - "integrity": "sha512-i3xIKd9U4ov0hWXYo08oJy0YVz0krZ9dbTZQim41xkg0IiScptkAK0UilZ5M1WE3gnWjXAa9+cMtrJ5dM+THbA==", - "dev": true, - "requires": { - "os-homedir": "^1.0.1" - } - }, "call-me-maybe": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", "dev": true }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, + "requires": { + "callsites": "^2.0.0" + }, + "dependencies": { + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + } + } + }, "caller-id": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/caller-id/-/caller-id-0.1.0.tgz", @@ -682,6 +1226,21 @@ "stack-trace": "~0.0.7" } }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, "camelcase": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", @@ -797,15 +1356,6 @@ "integrity": "sha1-noIVAa6XmYbEax1m0tQy2y/UrjE=", "dev": true }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true, - "requires": { - "restore-cursor": "^1.0.1" - } - }, "cli-table": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", @@ -815,12 +1365,6 @@ "colors": "1.0.3" } }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, "cliui": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", @@ -882,90 +1426,6 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==" }, - "commitizen": { - "version": "2.9.6", - "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-2.9.6.tgz", - "integrity": "sha1-wNAFNe8mTaf2Nzft/aQiiYP6IpE=", - "dev": true, - "requires": { - "cachedir": "^1.1.0", - "chalk": "1.1.3", - "cz-conventional-changelog": "1.2.0", - "dedent": "0.6.0", - "detect-indent": "4.0.0", - "find-node-modules": "1.0.4", - "find-root": "1.0.0", - "fs-extra": "^1.0.0", - "glob": "7.1.1", - "inquirer": "1.2.3", - "lodash": "4.17.2", - "minimist": "1.2.0", - "path-exists": "2.1.0", - "shelljs": "0.7.6", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "cz-conventional-changelog": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-1.2.0.tgz", - "integrity": "sha1-K8oElkyJGbI/P9aonvXmAIsxs/g=", - "dev": true, - "requires": { - "conventional-commit-types": "^2.0.0", - "lodash.map": "^4.5.1", - "longest": "^1.0.1", - "pad-right": "^0.2.2", - "right-pad": "^1.0.1", - "word-wrap": "^1.0.3" - } - }, - "glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", - "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.2", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "lodash": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.2.tgz", - "integrity": "sha1-NKMFW6vgTOQkZ7YH1wAHLH/2v0I=", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "compare-func": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz", @@ -987,18 +1447,6 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, "conventional-changelog-angular": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-3.0.7.tgz", @@ -1009,6 +1457,17 @@ "q": "^1.5.1" } }, + "conventional-changelog-conventionalcommits": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.2.1.tgz", + "integrity": "sha512-vC02KucnkNNap+foDKFm7BVUSDAXktXrUJqGszUuYnt6T0J2azsbYz/w9TDc3VsrW2v6JOtiQWVcgZnporHr4Q==", + "dev": true, + "requires": { + "compare-func": "^1.3.1", + "lodash": "^4.2.1", + "q": "^1.5.1" + } + }, "conventional-changelog-writer": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-3.0.9.tgz", @@ -1064,6 +1523,12 @@ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true }, + "core-js": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", + "dev": true + }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -1116,6 +1581,15 @@ "word-wrap": "^1.0.3" } }, + "dargs": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz", + "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, "dateformat": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", @@ -1170,12 +1644,6 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, - "dedent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.6.0.tgz", - "integrity": "sha1-Dm2o8M5Sg471zsXI+TlrDBtko8s=", - "dev": true - }, "deep-eql": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", @@ -1248,24 +1716,6 @@ } } }, - "detect-file": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-0.1.0.tgz", - "integrity": "sha1-STXe39lIhkjgBrASlWbpOGcR6mM=", - "dev": true, - "requires": { - "fs-exists-sync": "^0.1.0" - } - }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, "diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", @@ -1354,6 +1804,21 @@ "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", "dev": true }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "^4.0.0" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", @@ -1375,45 +1840,6 @@ "strip-eof": "^1.0.0" } }, - "exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", - "dev": true - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "requires": { - "fill-range": "^2.1.0" - } - }, - "expand-tilde": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", - "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=", - "dev": true, - "requires": { - "os-homedir": "^1.0.1" - } - }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "dev": true - }, "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", @@ -1435,26 +1861,6 @@ } } }, - "external-editor": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-1.1.1.tgz", - "integrity": "sha1-Etew24UPf/fnCBuvQAVwAGDEYAs=", - "dev": true, - "requires": { - "extend": "^3.0.0", - "spawn-sync": "^1.0.15", - "tmp": "^0.0.29" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, "fast-glob": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.1.tgz", @@ -1797,57 +2203,6 @@ "deep-equal": "^1.0.1" } }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - } - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true - }, - "fill-range": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", - "dev": true, - "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^1.1.3", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - } - }, - "find-node-modules": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/find-node-modules/-/find-node-modules-1.0.4.tgz", - "integrity": "sha1-tt6zzMtpnIcDdne87eLF9YYrJVA=", - "dev": true, - "requires": { - "findup-sync": "0.4.2", - "merge": "^1.2.0" - } - }, - "find-parent-dir": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz", - "integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=", - "dev": true - }, - "find-root": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.0.0.tgz", - "integrity": "sha1-li/yEaqyXGUg/u641ih/j26VgHo=", - "dev": true - }, "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", @@ -1857,57 +2212,12 @@ "locate-path": "^2.0.0" } }, - "findup": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/findup/-/findup-0.1.5.tgz", - "integrity": "sha1-itkpozk7rGJ5V6fl3kYjsGsOLOs=", - "dev": true, - "requires": { - "colors": "~0.6.0-1", - "commander": "~2.1.0" - }, - "dependencies": { - "colors": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", - "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=", - "dev": true - }, - "commander": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz", - "integrity": "sha1-0SG7roYNmZKj1Re6lvVliOR8Z4E=", - "dev": true - } - } - }, - "findup-sync": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.4.2.tgz", - "integrity": "sha1-qBF9D3MST1pFRoOVef5S1xKfteU=", - "dev": true, - "requires": { - "detect-file": "^0.1.0", - "is-glob": "^2.0.1", - "micromatch": "^2.3.7", - "resolve-dir": "^0.1.0" - } - }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -1927,23 +2237,6 @@ "readable-stream": "^2.0.0" } }, - "fs-exists-sync": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", - "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=", - "dev": true - }, - "fs-extra": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", - "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0" - } - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -1960,6 +2253,12 @@ "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" }, + "get-stdin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", + "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", + "dev": true + }, "get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", @@ -1997,21 +2296,71 @@ } } }, - "git-up": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/git-up/-/git-up-2.0.10.tgz", - "integrity": "sha512-2v4UN3qV2RGypD9QpmUjpk+4+RlYpW8GFuiZqQnKmvei08HsFPd0RfbDvEhnE4wBvnYs8ORVtYpOFuuCEmBVBw==", + "git-raw-commits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.3.tgz", + "integrity": "sha512-SoSsFL5lnixVzctGEi2uykjA7B5I0AhO9x6kdzvGRHbxsa6JSEgrgy1esRKsfOKE1cgyOJ/KDR2Trxu157sb8w==", "dev": true, "requires": { - "is-ssh": "^1.3.0", - "parse-url": "^1.3.0" - } - }, - "git-url-parse": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-9.0.0.tgz", - "integrity": "sha512-zks1jS4ocMA/9WUx3C0nGIj/wBQjjIuktQ4KqKTyStMdEtnnFbZ4ZVKCvNeHwKh1COk/8sZaVTyvYj3paHI9Fg==", - "dev": true, + "dargs": "^4.0.1", + "lodash.template": "^4.0.2", + "meow": "^5.0.0", + "split2": "^2.0.0", + "through2": "^3.0.0" + }, + "dependencies": { + "meow": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz", + "integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==", + "dev": true, + "requires": { + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0", + "yargs-parser": "^10.0.0" + } + }, + "through2": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", + "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", + "dev": true, + "requires": { + "readable-stream": "2 || 3" + } + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "git-up": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-2.0.10.tgz", + "integrity": "sha512-2v4UN3qV2RGypD9QpmUjpk+4+RlYpW8GFuiZqQnKmvei08HsFPd0RfbDvEhnE4wBvnYs8ORVtYpOFuuCEmBVBw==", + "dev": true, + "requires": { + "is-ssh": "^1.3.0", + "parse-url": "^1.3.0" + } + }, + "git-url-parse": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-9.0.0.tgz", + "integrity": "sha512-zks1jS4ocMA/9WUx3C0nGIj/wBQjjIuktQ4KqKTyStMdEtnnFbZ4ZVKCvNeHwKh1COk/8sZaVTyvYj3paHI9Fg==", + "dev": true, "requires": { "git-up": "^2.0.0", "parse-domain": "^2.0.0" @@ -2030,52 +2379,26 @@ "path-is-absolute": "^1.0.0" } }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "^2.0.0" - } - }, "glob-to-regexp": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", "dev": true }, - "global-modules": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", - "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=", + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", "dev": true, "requires": { - "global-prefix": "^0.1.4", - "is-windows": "^0.2.0" + "ini": "^1.3.4" } }, - "global-prefix": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", - "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.0", - "ini": "^1.3.4", - "is-windows": "^0.2.0", - "which": "^1.2.12" - } + "globals": { + "version": "11.8.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.8.0.tgz", + "integrity": "sha512-io6LkyPVuzCHBSQV9fmOwxZkUk6nIaGmxheLDgmuFv89j0fm2aqDbIXKAGfzCMHqz3HLF2Zf8WSG6VqMh2qFmA==", + "dev": true }, "globby": { "version": "8.0.1", @@ -2207,15 +2530,6 @@ "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", "dev": true }, - "homedir-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", - "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, "hook-std": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-0.4.0.tgz", @@ -2273,6 +2587,16 @@ "integrity": "sha512-pUh+xUQQhQzevjRHHFqqcTy0/dP/kS9I8HSrUydhihjuD09W6ldVWFtIrwhXdUJHis3i2rZNqEHpZH/cbinFbg==", "dev": true }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, "import-from": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", @@ -2316,61 +2640,6 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true }, - "inquirer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-1.2.3.tgz", - "integrity": "sha1-TexvMvN+97sLLtPx0aXD9UUHSRg=", - "dev": true, - "requires": { - "ansi-escapes": "^1.1.0", - "chalk": "^1.0.0", - "cli-cursor": "^1.0.1", - "cli-width": "^2.0.0", - "external-editor": "^1.1.0", - "figures": "^1.3.5", - "lodash": "^4.3.0", - "mute-stream": "0.0.6", - "pinkie-promise": "^2.0.0", - "run-async": "^2.2.0", - "rx": "^4.1.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", - "dev": true - }, "into-stream": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", @@ -2381,6 +2650,15 @@ "p-is-promise": "^1.1.0" } }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, "invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", @@ -2460,42 +2738,12 @@ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", "dev": true }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, - "requires": { - "is-primitive": "^2.0.0" - } - }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", @@ -2505,24 +2753,6 @@ "number-is-nan": "^1.0.0" } }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, "is-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", @@ -2569,24 +2799,6 @@ } } }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, "is-ssh": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.0.tgz", @@ -2617,12 +2829,6 @@ "text-extensions": "^1.0.0" } }, - "is-windows": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", - "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", - "dev": true - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -2635,15 +2841,6 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - }, "issue-parser": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-2.0.0.tgz", @@ -2653,10 +2850,31 @@ "lodash": "^4.17.4" } }, + "istanbul-lib-coverage": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", + "integrity": "sha512-nPvSZsVlbG9aLhZYaC3Oi1gT/tpyo3Yt5fNyf6NmcKIayz4VV/txxJFFKAK/gU4dcNn8ehsanBbVHVl0+amOLA==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-2.3.2.tgz", + "integrity": "sha512-l7TD/VnBsIB2OJvSyxaLW/ab1+92dxZNH9wLH7uHPPioy3JZ8tnx2UXUdKmdkgmP2EFPzg64CToUP6dAS3U32Q==", + "dev": true, + "requires": { + "@babel/generator": "7.0.0-beta.51", + "@babel/parser": "7.0.0-beta.51", + "@babel/template": "7.0.0-beta.51", + "@babel/traverse": "7.0.0-beta.51", + "@babel/types": "7.0.0-beta.51", + "istanbul-lib-coverage": "^2.0.1", + "semver": "^5.5.0" + } + }, "iterare": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/iterare/-/iterare-0.0.8.tgz", - "integrity": "sha1-qWmoCh+/9rePKHdllNe8K9+raq0=" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterare/-/iterare-1.1.2.tgz", + "integrity": "sha512-25rVYmj/dDvTR6zOa9jY1Ihd6USLa0J508Ub2iy7Aga+xu9JMbjDds2Uh03ReDGbva/YN3s3Ybi+Do0nOX6wAg==" }, "jaeger-client": { "version": "3.10.0", @@ -2698,6 +2916,12 @@ "esprima": "^4.0.0" } }, + "jsesc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.1.tgz", + "integrity": "sha1-5CGiqOINawgZ3yiQj3glJrlt0f4=", + "dev": true + }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -2710,15 +2934,6 @@ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "dev": true }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, "jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", @@ -2726,9 +2941,9 @@ "dev": true }, "just-extend": { - "version": "1.1.27", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-1.1.27.tgz", - "integrity": "sha512-mJVp13Ix6gFo3SBAy9U/kL+oeZqzlYYYLQBwXVBlVzIsZwBqGREnOro24oC/8s8aox+rJhtZ2DiQof++IrkA+g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-3.0.0.tgz", + "integrity": "sha512-Fu3T6pKBuxjWT/p4DkqGHFRsysc8OauWr4ZRTY9dIx07Y9O0RkoR5jcv28aeD1vuAwhm3nLkDurwLXoALp4DpQ==", "dev": true }, "kind-of": { @@ -2740,15 +2955,6 @@ "is-buffer": "^1.1.5" } }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.9" - } - }, "lazy-cache": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", @@ -2796,9 +3002,15 @@ } }, "lodash": { - "version": "4.17.10", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", - "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==" + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true }, "lodash.assign": { "version": "4.2.0", @@ -2818,6 +3030,25 @@ "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=", "dev": true }, + "lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "dev": true, + "requires": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "dev": true, + "requires": { + "lodash._reinterpolate": "^3.0.0" + } + }, "lodash.toarray": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", @@ -2825,9 +3056,9 @@ "dev": true }, "lolex": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.3.2.tgz", - "integrity": "sha512-A5pN2tkFj7H0dGIAM6MFvHKMJcPnjZsOMvR7ujCjfgW5TbV6H9vb1PgxLtHvjqNZTHsUolz+6/WEO0N1xNx2ng==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.4.tgz", + "integrity": "sha512-Gh6Vffq/piTeHwunLNFR1jFVaqlwK9GMNUxFcsO1cwHyvbRKHwX8UDkxmrDnbcPdHNmpv7z2kxtkkSx5xkNpMw==", "dev": true }, "long": { @@ -2841,6 +3072,15 @@ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", "dev": true }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, "loud-rejection": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", @@ -2954,39 +3194,12 @@ "trim-newlines": "^2.0.0" } }, - "merge": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.0.tgz", - "integrity": "sha1-dTHjnUlJwoGma4xabgJl6LBYlNo=", - "dev": true - }, "merge2": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.2.tgz", "integrity": "sha512-bgM8twH86rWni21thii6WCMQMRMmwqqdW3sGWi9IipnVAszdLXRjwDwAnyrVXo6DuP3AjRMMttZKUB48QWIFGg==", "dev": true }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } - }, "mime": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", @@ -3124,12 +3337,6 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "mute-stream": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.6.tgz", - "integrity": "sha1-SJYrGeFp/R38JAs/HnMXYnu8R9s=", - "dev": true - }, "mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", @@ -3199,13 +3406,13 @@ "dev": true }, "nise": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.3.3.tgz", - "integrity": "sha512-v1J/FLUB9PfGqZLGDBhQqODkbLotP0WtLo9R4EJY2PPu5f5Xg4o0rA8FDlmrjFSv9vBBKcfnOSpfYYuu5RTHqg==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.4.tgz", + "integrity": "sha512-pxE0c9PzgrUTyhfv5p+5eMIdfU2bLEsq8VQEuE0kxM4zP7SujSar7rk9wpI2F7RyyCEvLyj5O7Is3RER5F36Fg==", "dev": true, "requires": { "@sinonjs/formatio": "^2.0.0", - "just-extend": "^1.1.27", + "just-extend": "^3.0.0", "lolex": "^2.3.2", "path-to-regexp": "^1.7.0", "text-encoding": "^0.6.4" @@ -3243,15 +3450,6 @@ "validate-npm-package-license": "^3.0.1" } }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, "normalize-url": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", @@ -3279,44 +3477,43 @@ "dev": true }, "nyc": { - "version": "11.7.1", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.7.1.tgz", - "integrity": "sha512-EGePURSKUEpS1jWnEKAMhY+GWZzi7JC+f8iBDOATaOsLZW5hM/9eYx2dHGaEXa1ITvMm44CJugMksvP3NwMQMw==", + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-13.0.1.tgz", + "integrity": "sha512-Op/bjhEF74IMtzMmgYt+ModTeMHoPZzHe4qseUguPBwg5qC6r4rYMBt1L3yRXQIbjUpEqmn24/1xAC/umQGU7w==", "dev": true, "requires": { "archy": "^1.0.0", "arrify": "^1.0.1", - "caching-transform": "^1.0.0", + "caching-transform": "^2.0.0", "convert-source-map": "^1.5.1", "debug-log": "^1.0.1", - "default-require-extensions": "^1.0.0", - "find-cache-dir": "^0.1.1", - "find-up": "^2.1.0", - "foreground-child": "^1.5.3", - "glob": "^7.0.6", - "istanbul-lib-coverage": "^1.1.2", - "istanbul-lib-hook": "^1.1.0", - "istanbul-lib-instrument": "^1.10.0", - "istanbul-lib-report": "^1.1.3", - "istanbul-lib-source-maps": "^1.2.3", - "istanbul-reports": "^1.4.0", - "md5-hex": "^1.2.0", - "merge-source-map": "^1.0.2", - "micromatch": "^2.3.11", - "mkdirp": "^0.5.0", - "resolve-from": "^2.0.0", - "rimraf": "^2.5.4", - "signal-exit": "^3.0.1", + "find-cache-dir": "^2.0.0", + "find-up": "^3.0.0", + "foreground-child": "^1.5.6", + "glob": "^7.1.2", + "istanbul-lib-coverage": "^2.0.1", + "istanbul-lib-hook": "^2.0.1", + "istanbul-lib-instrument": "^2.3.2", + "istanbul-lib-report": "^2.0.1", + "istanbul-lib-source-maps": "^2.0.1", + "istanbul-reports": "^2.0.0", + "make-dir": "^1.3.0", + "merge-source-map": "^1.1.0", + "resolve-from": "^4.0.0", + "rimraf": "^2.6.2", + "signal-exit": "^3.0.2", "spawn-wrap": "^1.4.2", - "test-exclude": "^4.2.0", + "test-exclude": "^5.0.0", + "uuid": "^3.3.2", "yargs": "11.1.0", - "yargs-parser": "^8.0.0" + "yargs-parser": "^9.0.2" }, "dependencies": { "align-text": { "version": "0.1.4", "bundled": true, "dev": true, + "optional": true, "requires": { "kind-of": "^3.0.2", "longest": "^1.0.1", @@ -3329,21 +3526,16 @@ "dev": true }, "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", + "version": "3.0.0", "bundled": true, "dev": true }, "append-transform": { - "version": "0.4.0", + "version": "1.0.0", "bundled": true, "dev": true, "requires": { - "default-require-extensions": "^1.0.0" + "default-require-extensions": "^2.0.0" } }, "archy": { @@ -3351,262 +3543,51 @@ "bundled": true, "dev": true }, - "arr-diff": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "arr-flatten": "^1.0.1" - } - }, - "arr-flatten": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "bundled": true, - "dev": true - }, - "array-unique": { - "version": "0.2.1", - "bundled": true, - "dev": true - }, "arrify": { "version": "1.0.1", "bundled": true, "dev": true }, - "assign-symbols": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, "async": { "version": "1.5.2", "bundled": true, "dev": true }, - "atob": { - "version": "2.1.0", + "balanced-match": { + "version": "1.0.0", "bundled": true, "dev": true }, - "babel-code-frame": { - "version": "6.26.0", + "brace-expansion": { + "version": "1.1.11", "bundled": true, "dev": true, "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "babel-generator": { - "version": "6.26.1", + "builtin-modules": { + "version": "1.1.1", "bundled": true, - "dev": true, - "requires": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" - } + "dev": true }, - "babel-messages": { - "version": "6.23.0", + "caching-transform": { + "version": "2.0.0", "bundled": true, "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "make-dir": "^1.0.0", + "md5-hex": "^2.0.0", + "package-hash": "^2.0.0", + "write-file-atomic": "^2.0.0" } }, - "babel-runtime": { - "version": "6.26.0", + "camelcase": { + "version": "1.2.1", "bundled": true, "dev": true, - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "babel-template": { - "version": "6.26.0", - "bundled": true, - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "bundled": true, - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - } - }, - "babel-types": { - "version": "6.26.0", - "bundled": true, - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - } - }, - "babylon": { - "version": "6.18.0", - "bundled": true, - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "base": { - "version": "0.11.2", - "bundled": true, - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "bundled": true, - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "bundled": true, - "dev": true - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "1.8.5", - "bundled": true, - "dev": true, - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, - "builtin-modules": { - "version": "1.1.1", - "bundled": true, - "dev": true - }, - "cache-base": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "bundled": true, - "dev": true - } - } - }, - "caching-transform": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "md5-hex": "^1.2.0", - "mkdirp": "^0.5.1", - "write-file-atomic": "^1.1.4" - } - }, - "camelcase": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true + "optional": true }, "center-align": { "version": "0.1.3", @@ -3618,44 +3599,6 @@ "lazy-cache": "^1.0.3" } }, - "chalk": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "class-utils": { - "version": "0.3.6", - "bundled": true, - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "bundled": true, - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "isobject": { - "version": "3.0.1", - "bundled": true, - "dev": true - } - } - }, "cliui": { "version": "2.1.0", "bundled": true, @@ -3680,25 +3623,11 @@ "bundled": true, "dev": true }, - "collection-visit": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, "commondir": { "version": "1.0.1", "bundled": true, "dev": true }, - "component-emitter": { - "version": "1.2.1", - "bundled": true, - "dev": true - }, "concat-map": { "version": "0.0.1", "bundled": true, @@ -3709,16 +3638,6 @@ "bundled": true, "dev": true }, - "copy-descriptor": { - "version": "0.1.1", - "bundled": true, - "dev": true - }, - "core-js": { - "version": "2.5.5", - "bundled": true, - "dev": true - }, "cross-spawn": { "version": "4.0.2", "bundled": true, @@ -3729,7 +3648,7 @@ } }, "debug": { - "version": "2.6.9", + "version": "3.1.0", "bundled": true, "dev": true, "requires": { @@ -3746,89 +3665,24 @@ "bundled": true, "dev": true }, - "decode-uri-component": { - "version": "0.2.0", - "bundled": true, - "dev": true - }, "default-require-extensions": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "strip-bom": "^2.0.0" - } - }, - "define-property": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "bundled": true, - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "bundled": true, - "dev": true - } - } - }, - "detect-indent": { - "version": "4.0.0", + "version": "2.0.0", "bundled": true, "dev": true, "requires": { - "repeating": "^2.0.0" + "strip-bom": "^3.0.0" } }, "error-ex": { - "version": "1.3.1", + "version": "1.3.2", "bundled": true, "dev": true, "requires": { "is-arrayish": "^0.2.1" } }, - "escape-string-regexp": { - "version": "1.0.5", - "bundled": true, - "dev": true - }, - "esutils": { - "version": "2.0.2", + "es6-error": { + "version": "4.1.1", "bundled": true, "dev": true }, @@ -3858,121 +3712,40 @@ } } }, - "expand-brackets": { - "version": "0.1.5", + "find-cache-dir": { + "version": "2.0.0", "bundled": true, "dev": true, "requires": { - "is-posix-bracket": "^0.1.0" + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^3.0.0" } }, - "expand-range": { - "version": "1.8.2", + "find-up": { + "version": "3.0.0", "bundled": true, "dev": true, "requires": { - "fill-range": "^2.1.0" + "locate-path": "^3.0.0" } }, - "extend-shallow": { - "version": "3.0.2", + "foreground-child": { + "version": "1.5.6", "bundled": true, "dev": true, "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } + "cross-spawn": "^4", + "signal-exit": "^3.0.0" } }, - "extglob": { - "version": "0.3.2", + "fs.realpath": { + "version": "1.0.0", "bundled": true, - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } + "dev": true }, - "filename-regex": { - "version": "2.0.1", - "bundled": true, - "dev": true - }, - "fill-range": { - "version": "2.2.3", - "bundled": true, - "dev": true, - "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^1.1.3", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - } - }, - "find-cache-dir": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "requires": { - "commondir": "^1.0.1", - "mkdirp": "^0.5.1", - "pkg-dir": "^1.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "for-in": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "for-own": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - }, - "foreground-child": { - "version": "1.5.6", - "bundled": true, - "dev": true, - "requires": { - "cross-spawn": "^4", - "signal-exit": "^3.0.0" - } - }, - "fragment-cache": { - "version": "0.2.1", - "bundled": true, - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "get-caller-file": { - "version": "1.0.2", + "get-caller-file": { + "version": "1.0.3", "bundled": true, "dev": true }, @@ -3981,11 +3754,6 @@ "bundled": true, "dev": true }, - "get-value": { - "version": "2.0.6", - "bundled": true, - "dev": true - }, "glob": { "version": "7.1.2", "bundled": true, @@ -3999,28 +3767,6 @@ "path-is-absolute": "^1.0.0" } }, - "glob-base": { - "version": "0.3.0", - "bundled": true, - "dev": true, - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - } - }, - "glob-parent": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-glob": "^2.0.0" - } - }, - "globals": { - "version": "9.18.0", - "bundled": true, - "dev": true - }, "graceful-fs": { "version": "4.1.11", "bundled": true, @@ -4047,75 +3793,13 @@ } } }, - "has-ansi": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, "has-flag": { - "version": "1.0.0", + "version": "3.0.0", "bundled": true, "dev": true }, - "has-value": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "bundled": true, - "dev": true - } - } - }, - "has-values": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "bundled": true, - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "hosted-git-info": { - "version": "2.6.0", + "version": "2.7.1", "bundled": true, "dev": true }, @@ -4138,27 +3822,11 @@ "bundled": true, "dev": true }, - "invariant": { - "version": "2.2.4", - "bundled": true, - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, "invert-kv": { "version": "1.0.0", "bundled": true, "dev": true }, - "is-accessor-descriptor": { - "version": "0.1.6", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, "is-arrayish": { "version": "0.2.1", "bundled": true, @@ -4167,7 +3835,8 @@ "is-buffer": { "version": "1.1.6", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "is-builtin-module": { "version": "1.0.0", @@ -4177,1626 +3846,586 @@ "builtin-modules": "^1.0.0" } }, - "is-data-descriptor": { - "version": "0.1.4", + "is-fullwidth-code-point": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "isexe": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "istanbul-lib-coverage": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, + "istanbul-lib-hook": { + "version": "2.0.1", "bundled": true, "dev": true, "requires": { - "kind-of": "^3.0.2" + "append-transform": "^1.0.0" } }, - "is-descriptor": { - "version": "0.1.6", + "istanbul-lib-report": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "istanbul-lib-coverage": "^2.0.1", + "make-dir": "^1.3.0", + "supports-color": "^5.4.0" + } + }, + "istanbul-lib-source-maps": { + "version": "2.0.1", "bundled": true, "dev": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "debug": "^3.1.0", + "istanbul-lib-coverage": "^2.0.1", + "make-dir": "^1.3.0", + "rimraf": "^2.6.2", + "source-map": "^0.6.1" }, "dependencies": { - "kind-of": { - "version": "5.1.0", + "source-map": { + "version": "0.6.1", "bundled": true, "dev": true } } }, - "is-dotfile": { - "version": "1.0.3", + "istanbul-reports": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "handlebars": "^4.0.11" + } + }, + "json-parse-better-errors": { + "version": "1.0.2", "bundled": true, "dev": true }, - "is-equal-shallow": { - "version": "0.1.3", + "kind-of": { + "version": "3.2.2", "bundled": true, "dev": true, + "optional": true, "requires": { - "is-primitive": "^2.0.0" + "is-buffer": "^1.1.5" } }, - "is-extendable": { - "version": "0.1.1", + "lazy-cache": { + "version": "1.0.4", "bundled": true, - "dev": true + "dev": true, + "optional": true }, - "is-extglob": { + "lcid": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } }, - "is-finite": { - "version": "1.0.2", + "load-json-file": { + "version": "4.0.0", "bundled": true, "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" } }, - "is-fullwidth-code-point": { - "version": "2.0.0", + "locate-path": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash.flattendeep": { + "version": "4.4.0", "bundled": true, "dev": true }, - "is-glob": { - "version": "2.0.1", + "longest": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "lru-cache": { + "version": "4.1.3", "bundled": true, "dev": true, "requires": { - "is-extglob": "^1.0.0" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, - "is-number": { - "version": "2.1.0", + "make-dir": { + "version": "1.3.0", "bundled": true, "dev": true, "requires": { - "kind-of": "^3.0.2" + "pify": "^3.0.0" } }, - "is-odd": { + "md5-hex": { "version": "2.0.0", "bundled": true, "dev": true, "requires": { - "is-number": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "bundled": true, - "dev": true - } + "md5-o-matic": "^0.1.1" } }, - "is-plain-object": { - "version": "2.0.4", - "bundled": true, - "dev": true, - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "bundled": true, - "dev": true - } - } - }, - "is-posix-bracket": { - "version": "0.1.1", - "bundled": true, - "dev": true - }, - "is-primitive": { - "version": "2.0.0", + "md5-o-matic": { + "version": "0.1.1", "bundled": true, "dev": true }, - "is-stream": { + "mem": { "version": "1.1.0", "bundled": true, - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "bundled": true, - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "isexe": { - "version": "2.0.0", - "bundled": true, - "dev": true + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } }, - "isobject": { - "version": "2.1.0", + "merge-source-map": { + "version": "1.1.0", "bundled": true, "dev": true, "requires": { - "isarray": "1.0.0" + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "bundled": true, + "dev": true + } } }, - "istanbul-lib-coverage": { + "mimic-fn": { "version": "1.2.0", "bundled": true, "dev": true }, - "istanbul-lib-hook": { - "version": "1.1.0", + "minimatch": { + "version": "3.0.4", "bundled": true, "dev": true, "requires": { - "append-transform": "^0.4.0" + "brace-expansion": "^1.1.7" } }, - "istanbul-lib-instrument": { - "version": "1.10.1", + "minimist": { + "version": "0.0.10", "bundled": true, - "dev": true, - "requires": { - "babel-generator": "^6.18.0", - "babel-template": "^6.16.0", - "babel-traverse": "^6.18.0", - "babel-types": "^6.18.0", - "babylon": "^6.18.0", - "istanbul-lib-coverage": "^1.2.0", - "semver": "^5.3.0" - } + "dev": true }, - "istanbul-lib-report": { - "version": "1.1.3", + "mkdirp": { + "version": "0.5.1", "bundled": true, "dev": true, "requires": { - "istanbul-lib-coverage": "^1.1.2", - "mkdirp": "^0.5.1", - "path-parse": "^1.0.5", - "supports-color": "^3.1.2" + "minimist": "0.0.8" }, "dependencies": { - "supports-color": { - "version": "3.2.3", + "minimist": { + "version": "0.0.8", "bundled": true, - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } + "dev": true } } }, - "istanbul-lib-source-maps": { - "version": "1.2.3", + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "normalize-package-data": { + "version": "2.4.0", "bundled": true, "dev": true, "requires": { - "debug": "^3.1.0", - "istanbul-lib-coverage": "^1.1.2", - "mkdirp": "^0.5.1", - "rimraf": "^2.6.1", - "source-map": "^0.5.3" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "ms": "2.0.0" - } - } + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "istanbul-reports": { - "version": "1.4.0", + "npm-run-path": { + "version": "2.0.2", "bundled": true, "dev": true, "requires": { - "handlebars": "^4.0.3" + "path-key": "^2.0.0" } }, - "js-tokens": { - "version": "3.0.2", + "number-is-nan": { + "version": "1.0.1", "bundled": true, "dev": true }, - "jsesc": { - "version": "1.3.0", + "once": { + "version": "1.4.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "wrappy": "1" + } }, - "kind-of": { - "version": "3.2.2", + "optimist": { + "version": "0.6.1", "bundled": true, "dev": true, "requires": { - "is-buffer": "^1.1.5" + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" } }, - "lazy-cache": { - "version": "1.0.4", + "os-homedir": { + "version": "1.0.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, - "lcid": { - "version": "1.0.0", + "os-locale": { + "version": "2.1.0", "bundled": true, "dev": true, "requires": { - "invert-kv": "^1.0.0" + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" } }, - "load-json-file": { - "version": "1.1.0", + "p-finally": { + "version": "1.0.0", "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } + "dev": true }, - "locate-path": { + "p-limit": { "version": "2.0.0", "bundled": true, "dev": true, "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "bundled": true, - "dev": true - } + "p-try": "^2.0.0" } }, - "lodash": { - "version": "4.17.5", + "p-locate": { + "version": "3.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } }, - "longest": { - "version": "1.0.1", + "p-try": { + "version": "2.0.0", "bundled": true, "dev": true }, - "loose-envify": { - "version": "1.3.1", + "package-hash": { + "version": "2.0.0", "bundled": true, "dev": true, "requires": { - "js-tokens": "^3.0.0" + "graceful-fs": "^4.1.11", + "lodash.flattendeep": "^4.4.0", + "md5-hex": "^2.0.0", + "release-zalgo": "^1.0.0" } }, - "lru-cache": { - "version": "4.1.2", + "parse-json": { + "version": "4.0.0", "bundled": true, "dev": true, "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } }, - "map-cache": { - "version": "0.2.2", + "path-exists": { + "version": "3.0.0", "bundled": true, "dev": true }, - "map-visit": { - "version": "1.0.0", + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "path-key": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, + "path-type": { + "version": "3.0.0", "bundled": true, "dev": true, "requires": { - "object-visit": "^1.0.0" + "pify": "^3.0.0" } }, - "md5-hex": { - "version": "1.3.0", + "pify": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", "bundled": true, "dev": true, "requires": { - "md5-o-matic": "^0.1.1" + "find-up": "^3.0.0" } }, - "md5-o-matic": { - "version": "0.1.1", + "pseudomap": { + "version": "1.0.2", "bundled": true, "dev": true }, - "mem": { - "version": "1.1.0", + "read-pkg": { + "version": "3.0.0", "bundled": true, "dev": true, "requires": { - "mimic-fn": "^1.0.0" + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" } }, - "merge-source-map": { - "version": "1.1.0", + "read-pkg-up": { + "version": "4.0.0", "bundled": true, "dev": true, "requires": { - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "bundled": true, - "dev": true - } + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" } }, - "micromatch": { - "version": "2.3.11", + "release-zalgo": { + "version": "1.0.0", "bundled": true, "dev": true, "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" + "es6-error": "^4.0.1" } }, - "mimic-fn": { - "version": "1.2.0", + "repeat-string": { + "version": "1.6.1", + "bundled": true, + "dev": true, + "optional": true + }, + "require-directory": { + "version": "2.1.1", "bundled": true, "dev": true }, - "minimatch": { - "version": "3.0.4", + "require-main-filename": { + "version": "1.0.1", "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } + "dev": true }, - "minimist": { - "version": "0.0.8", + "resolve-from": { + "version": "4.0.0", "bundled": true, "dev": true }, - "mixin-deep": { - "version": "1.3.1", + "right-align": { + "version": "0.1.3", "bundled": true, "dev": true, + "optional": true, "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } + "align-text": "^0.1.1" } }, - "mkdirp": { - "version": "0.5.1", + "rimraf": { + "version": "2.6.2", "bundled": true, "dev": true, "requires": { - "minimist": "0.0.8" + "glob": "^7.0.5" } }, - "ms": { - "version": "2.0.0", + "semver": { + "version": "5.5.0", "bundled": true, "dev": true }, - "nanomatch": { - "version": "1.2.9", - "bundled": true, - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-odd": "^2.0.0", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "bundled": true, - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "bundled": true, - "dev": true - } - } - }, - "normalize-package-data": { - "version": "2.4.0", - "bundled": true, - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "2.1.1", + "set-blocking": { + "version": "2.0.0", "bundled": true, - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } + "dev": true }, - "npm-run-path": { - "version": "2.0.2", + "shebang-command": { + "version": "1.2.0", "bundled": true, "dev": true, "requires": { - "path-key": "^2.0.0" + "shebang-regex": "^1.0.0" } }, - "number-is-nan": { - "version": "1.0.1", + "shebang-regex": { + "version": "1.0.0", "bundled": true, "dev": true }, - "object-assign": { - "version": "4.1.1", + "signal-exit": { + "version": "3.0.2", "bundled": true, "dev": true }, - "object-copy": { - "version": "0.1.0", - "bundled": true, - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "bundled": true, - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "object-visit": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "bundled": true, - "dev": true - } - } - }, - "object.omit": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" - } - }, - "object.pick": { - "version": "1.3.0", + "source-map": { + "version": "0.5.7", "bundled": true, "dev": true, - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "bundled": true, - "dev": true - } - } + "optional": true }, - "once": { - "version": "1.4.0", + "spawn-wrap": { + "version": "1.4.2", "bundled": true, "dev": true, "requires": { - "wrappy": "1" + "foreground-child": "^1.5.6", + "mkdirp": "^0.5.0", + "os-homedir": "^1.0.1", + "rimraf": "^2.6.2", + "signal-exit": "^3.0.2", + "which": "^1.3.0" } }, - "optimist": { - "version": "0.6.1", + "spdx-correct": { + "version": "3.0.0", "bundled": true, "dev": true, "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "os-locale": { + "spdx-exceptions": { "version": "2.1.0", "bundled": true, - "dev": true, - "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" - } - }, - "p-finally": { - "version": "1.0.0", - "bundled": true, "dev": true }, - "p-limit": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", + "spdx-expression-parse": { + "version": "3.0.0", "bundled": true, "dev": true, "requires": { - "p-limit": "^1.1.0" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "p-try": { - "version": "1.0.0", + "spdx-license-ids": { + "version": "3.0.0", "bundled": true, "dev": true }, - "parse-glob": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - } - }, - "parse-json": { - "version": "2.2.0", + "string-width": { + "version": "2.1.1", "bundled": true, "dev": true, "requires": { - "error-ex": "^1.2.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, - "pascalcase": { - "version": "0.1.1", - "bundled": true, - "dev": true - }, - "path-exists": { - "version": "2.1.0", + "strip-ansi": { + "version": "4.0.0", "bundled": true, "dev": true, "requires": { - "pinkie-promise": "^2.0.0" + "ansi-regex": "^3.0.0" } }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "path-key": { - "version": "2.0.1", + "strip-bom": { + "version": "3.0.0", "bundled": true, "dev": true }, - "path-parse": { - "version": "1.0.5", + "strip-eof": { + "version": "1.0.0", "bundled": true, "dev": true }, - "path-type": { - "version": "1.1.0", + "supports-color": { + "version": "5.4.0", "bundled": true, "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "has-flag": "^3.0.0" } }, - "pify": { - "version": "2.3.0", - "bundled": true, - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "bundled": true, - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", + "test-exclude": { + "version": "5.0.0", "bundled": true, "dev": true, "requires": { - "pinkie": "^2.0.0" + "arrify": "^1.0.1", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^1.0.1" } }, - "pkg-dir": { - "version": "1.0.0", + "uglify-js": { + "version": "2.8.29", "bundled": true, "dev": true, + "optional": true, "requires": { - "find-up": "^1.0.0" + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" }, "dependencies": { - "find-up": { - "version": "1.1.2", + "yargs": { + "version": "3.10.0", "bundled": true, "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - } - } - }, - "posix-character-classes": { - "version": "0.1.1", - "bundled": true, - "dev": true - }, - "preserve": { - "version": "0.2.0", - "bundled": true, - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "randomatic": { - "version": "1.1.7", - "bundled": true, - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "bundled": true, - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "read-pkg": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - } - } - }, - "regenerator-runtime": { - "version": "0.11.1", - "bundled": true, - "dev": true - }, - "regex-cache": { - "version": "0.4.4", - "bundled": true, - "dev": true, - "requires": { - "is-equal-shallow": "^0.1.3" - } - }, - "regex-not": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "repeat-element": { - "version": "1.1.2", - "bundled": true, - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "bundled": true, - "dev": true - }, - "repeating": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "require-directory": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "resolve-from": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "bundled": true, - "dev": true - }, - "ret": { - "version": "0.1.15", - "bundled": true, - "dev": true - }, - "right-align": { - "version": "0.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "align-text": "^0.1.1" - } - }, - "rimraf": { - "version": "2.6.2", - "bundled": true, - "dev": true, - "requires": { - "glob": "^7.0.5" - } - }, - "safe-regex": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "semver": { - "version": "5.5.0", - "bundled": true, - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "set-value": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "shebang-command": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true - }, - "slide": { - "version": "1.1.6", - "bundled": true, - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "bundled": true, - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "bundled": true, - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "bundled": true, - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "bundled": true, - "dev": true - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^3.2.0" - } - }, - "source-map": { - "version": "0.5.7", - "bundled": true, - "dev": true - }, - "source-map-resolve": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "atob": "^2.0.0", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "bundled": true, - "dev": true - }, - "spawn-wrap": { - "version": "1.4.2", - "bundled": true, - "dev": true, - "requires": { - "foreground-child": "^1.5.6", - "mkdirp": "^0.5.0", - "os-homedir": "^1.0.1", - "rimraf": "^2.6.2", - "signal-exit": "^3.0.2", - "which": "^1.3.0" - } - }, - "spdx-correct": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.1.0", - "bundled": true, - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "split-string": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "static-extend": { - "version": "0.1.2", - "bundled": true, - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "bundled": true, - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "string-width": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "test-exclude": { - "version": "4.2.1", - "bundled": true, - "dev": true, - "requires": { - "arrify": "^1.0.1", - "micromatch": "^3.1.8", - "object-assign": "^4.1.0", - "read-pkg-up": "^1.0.1", - "require-main-filename": "^1.0.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "bundled": true, - "dev": true - }, - "braces": { - "version": "2.3.2", - "bundled": true, - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "bundled": true, - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "bundled": true, - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "bundled": true, - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "bundled": true, - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "bundled": true, - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "bundled": true, - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "bundled": true, - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-number": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "bundled": true, - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "bundled": true, - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "bundled": true, - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "bundled": true, - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - } - } - }, - "to-fast-properties": { - "version": "1.0.3", - "bundled": true, - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "to-regex": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - } - } - }, - "trim-right": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "uglify-js": { - "version": "2.8.29", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" - }, - "dependencies": { - "yargs": { - "version": "3.10.0", - "bundled": true, - "dev": true, - "optional": true, + "optional": true, "requires": { "camelcase": "^1.0.2", "cliui": "^2.1.0", "decamelize": "^1.0.0", "window-size": "0.1.0" - } - } - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "union-value": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "bundled": true, - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } - } - }, - "unset-value": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "bundled": true, - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "bundled": true, - "dev": true - }, - "isobject": { - "version": "3.0.1", - "bundled": true, - "dev": true - } - } - }, - "urix": { - "version": "0.1.0", - "bundled": true, - "dev": true - }, - "use": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "bundled": true, - "dev": true + } } } }, + "uglify-to-browserify": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "uuid": { + "version": "3.3.2", + "bundled": true, + "dev": true + }, "validate-npm-package-license": { "version": "3.0.3", "bundled": true, @@ -5807,7 +4436,7 @@ } }, "which": { - "version": "1.3.0", + "version": "1.3.1", "bundled": true, "dev": true, "requires": { @@ -5839,6 +4468,11 @@ "strip-ansi": "^3.0.1" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, @@ -5856,6 +4490,14 @@ "is-fullwidth-code-point": "^1.0.0", "strip-ansi": "^3.0.0" } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } } } }, @@ -5865,13 +4507,13 @@ "dev": true }, "write-file-atomic": { - "version": "1.3.4", + "version": "2.3.0", "bundled": true, "dev": true, "requires": { "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", - "slide": "^1.1.5" + "signal-exit": "^3.0.2" } }, "y18n": { @@ -5903,18 +4545,8 @@ "yargs-parser": "^9.0.2" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "camelcase": { - "version": "4.1.0", - "bundled": true, - "dev": true - }, "cliui": { - "version": "4.0.0", + "version": "4.1.0", "bundled": true, "dev": true, "requires": { @@ -5923,26 +4555,48 @@ "wrap-ansi": "^2.0.0" } }, - "strip-ansi": { - "version": "4.0.0", + "find-up": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", "bundled": true, "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "p-try": "^1.0.0" } }, - "yargs-parser": { - "version": "9.0.2", + "p-locate": { + "version": "2.0.0", "bundled": true, "dev": true, "requires": { - "camelcase": "^4.1.0" + "p-limit": "^1.1.0" } + }, + "p-try": { + "version": "1.0.0", + "bundled": true, + "dev": true } } }, "yargs-parser": { - "version": "8.1.0", + "version": "9.0.2", "bundled": true, "dev": true, "requires": { @@ -6007,16 +4661,6 @@ } } }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" - } - }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -6042,12 +4686,6 @@ "wrappy": "1" } }, - "onetime": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, "opentracing": { "version": "0.14.3", "resolved": "https://registry.npmjs.org/opentracing/-/opentracing-0.14.3.tgz", @@ -6071,12 +4709,6 @@ } } }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, "os-locale": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", @@ -6116,12 +4748,6 @@ } } }, - "os-shim": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz", - "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=", - "dev": true - }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -6194,13 +4820,13 @@ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, - "pad-right": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/pad-right/-/pad-right-0.2.2.tgz", - "integrity": "sha1-b7ySQEXSRPKiokRQMGDTv8YAl3Q=", + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "requires": { - "repeat-string": "^1.5.2" + "callsites": "^3.0.0" } }, "parse-domain": { @@ -6215,18 +4841,6 @@ "integrity": "sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==", "dev": true }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - } - }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -6237,12 +4851,6 @@ "json-parse-better-errors": "^1.0.1" } }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, "parse-url": { "version": "1.3.11", "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-1.3.11.tgz", @@ -6266,13 +4874,10 @@ "dev": true }, "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true }, "path-is-absolute": { "version": "1.0.1", @@ -6328,21 +4933,6 @@ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -6355,16 +4945,10 @@ "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", "dev": true }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true - }, "prettier": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.12.1.tgz", - "integrity": "sha1-wa0g6APndJ+vkFpAnSNn4Gu+cyU=", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", "dev": true }, "process-nextick-args": { @@ -6408,47 +4992,6 @@ "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=", "dev": true }, - "randomatic": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "rc": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.7.tgz", @@ -6497,15 +5040,6 @@ "util-deprecate": "~1.0.1" } }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } - }, "redent": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", @@ -6533,14 +5067,11 @@ } } }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, - "requires": { - "is-equal-shallow": "^0.1.3" - } + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true }, "regex-not": { "version": "1.0.2", @@ -6562,12 +5093,6 @@ "safe-buffer": "^5.0.1" } }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, "repeat-element": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", @@ -6580,15 +5105,6 @@ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -6610,38 +5126,27 @@ "path-parse": "^1.0.5" } }, - "resolve-dir": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", - "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=", - "dev": true, - "requires": { - "expand-tilde": "^1.2.2", - "global-modules": "^0.2.3" - } - }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, + "resolve-global": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", + "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", + "dev": true, + "requires": { + "global-dirs": "^0.1.1" + } + }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dev": true, - "requires": { - "exit-hook": "^1.0.0", - "onetime": "^1.0.0" - } - }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -6679,21 +5184,6 @@ "glob": "^7.0.5" } }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "requires": { - "is-promise": "^2.1.0" - } - }, - "rx": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", - "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", - "dev": true - }, "rxjs": { "version": "5.5.10", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.10.tgz", @@ -6703,14 +5193,16 @@ } }, "rxjs-tslint-rules": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/rxjs-tslint-rules/-/rxjs-tslint-rules-3.17.0.tgz", - "integrity": "sha512-iFau1P9Cd51jA4GkJZo1xQasFYImnP3mpA8mtSxKyyE/GPxEmr+Crjuf4TPGWwTqNPzrVB/4EqvfKnXjhtj9Kw==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/rxjs-tslint-rules/-/rxjs-tslint-rules-4.14.2.tgz", + "integrity": "sha512-Q5feF4Lx3v0bZ1eBN1tlf4EMmR9KUFi6ZAxrglMrWIhOGVpSr0HIuwg9s2eF7pomTfaMoCfkigDPnqrosXHKIA==", "dev": true, "requires": { + "@phenomnomnominal/tsquery": "^3.0.0", "decamelize": "^2.0.0", "resolve": "^1.4.0", - "tslib": "^1.8.0" + "tslib": "^1.8.0", + "tsutils": "^3.0.0" } }, "safe-buffer": { @@ -6778,12 +5270,6 @@ "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", "dev": true }, - "semver-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz", - "integrity": "sha1-kqSWkGX5xwxpR1PVUkj8aPj2Usk=", - "dev": true - }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -6828,17 +5314,6 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, - "shelljs": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.6.tgz", - "integrity": "sha1-N5zM+1a5HIYB5HkzVutTgpJN6a0=", - "dev": true, - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", @@ -6846,18 +5321,31 @@ "dev": true }, "sinon": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-5.0.4.tgz", - "integrity": "sha512-FBWjLLxSpsdoVM+5FrE0dOlANLRbEoaxwahyXvrOxIfqKN5D+dYUS8AKWNVDDjtQaiBo/tzbVoi4AKve8G2+iw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-6.2.0.tgz", + "integrity": "sha512-gLFZz5UYvOhYzQ+DBzw/OCkmWaLAHlAyQiE2wxUOmAGVdasP9Yw93E+OwZ0UuhW3ReMu1FKniuNsL6VukvC77w==", "dev": true, "requires": { + "@sinonjs/commons": "^1.0.2", "@sinonjs/formatio": "^2.0.0", - "diff": "^3.1.0", + "@sinonjs/samsam": "^2.0.0", + "diff": "^3.5.0", "lodash.get": "^4.4.2", - "lolex": "^2.2.0", - "nise": "^1.2.0", - "supports-color": "^5.1.0", - "type-detect": "^4.0.5" + "lolex": "^2.7.2", + "nise": "^1.4.4", + "supports-color": "^5.5.0", + "type-detect": "^4.0.8" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "slash": { @@ -7041,16 +5529,6 @@ "integrity": "sha1-Gv2Uc46ZmwNG17n8NzvlXgdXcCk=", "dev": true }, - "spawn-sync": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz", - "integrity": "sha1-sAeZVX63+wyDdsKdROih6mfldHY=", - "dev": true, - "requires": { - "concat-stream": "^1.4.7", - "os-shim": "^0.1.2" - } - }, "spdx-correct": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", @@ -7160,12 +5638,9 @@ "dev": true }, "string-similarity": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/string-similarity/-/string-similarity-1.2.0.tgz", - "integrity": "sha1-11FTyzg4RjGLejmo2SkrtNtOnDA=", - "requires": { - "lodash": "^4.13.1" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-similarity/-/string-similarity-2.0.0.tgz", + "integrity": "sha512-62FBZrVXV5cI23bQ9L49Y4d9u9yaH61JhAwLyUFUzQbHDjdihxdfCwIherg+vylR/s4ucCddK8iKSEO7kinffQ==" }, "string-template": { "version": "0.2.1", @@ -7310,14 +5785,11 @@ "xtend": "~4.0.1" } }, - "tmp": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz", - "integrity": "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.1" - } + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true }, "to-object-path": { "version": "0.3.0", @@ -7379,6 +5851,12 @@ "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", "dev": true }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, "tslib": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz", @@ -7386,29 +5864,104 @@ "dev": true }, "tslint": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.10.0.tgz", - "integrity": "sha1-EeJrzLiK+gLdDZlWyuPUVAtfVMM=", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.2.tgz", + "integrity": "sha512-UyNrLdK3E0fQG/xWNqAFAC5ugtFyPO4JJR1KyyfQAyzR8W0fTRrC91A8Wej4BntFzcvETdCSDa/4PnNYJQLYiA==", "dev": true, "requires": { - "babel-code-frame": "^6.22.0", + "@babel/code-frame": "^7.0.0", "builtin-modules": "^1.1.1", "chalk": "^2.3.0", "commander": "^2.12.1", - "diff": "^3.2.0", + "diff": "^4.0.1", "glob": "^7.1.1", - "js-yaml": "^3.7.0", + "js-yaml": "^3.13.1", "minimatch": "^3.0.4", + "mkdirp": "^0.5.3", "resolve": "^1.3.2", "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.12.1" + "tslib": "^1.10.0", + "tsutils": "^2.29.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/highlight": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", + "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.9.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", + "dev": true + }, + "tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + } } }, "tslint-config-prettier": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/tslint-config-prettier/-/tslint-config-prettier-1.12.0.tgz", - "integrity": "sha512-7zugK8NWpoDPYT6UNGLDGpQOhk0CSodjkyrTNiHOCjwIAleYKlyQunxpsSXBIoGEs/kFVppd6YzZeQZtrJnyRg==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/tslint-config-prettier/-/tslint-config-prettier-1.17.0.tgz", + "integrity": "sha512-NKWNkThwqE4Snn4Cm6SZB7lV5RMDDFsBwz6fWUkTxOKGjMx8ycOHnjIbhn7dZd5XmssW3CwqUjlANR6EhP9YQw==", "dev": true }, "tslint-language-service": { @@ -7421,18 +5974,29 @@ } }, "tslint-react": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/tslint-react/-/tslint-react-3.5.1.tgz", - "integrity": "sha512-ndS/iOOGrasATcf5YU3JxoIwPGVykjrKhzmlVsRdT1xzl/RbNg9n627rtAGbCjkQepyiaQYgxWQT5G/qUpQCaA==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/tslint-react/-/tslint-react-3.6.0.tgz", + "integrity": "sha512-AIv1QcsSnj7e9pFir6cJ6vIncTqxfqeFF3Lzh8SuuBljueYzEAtByuB6zMaD27BL0xhMEqsZ9s5eHuCONydjBw==", "dev": true, "requires": { "tsutils": "^2.13.1" + }, + "dependencies": { + "tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + } } }, "tsutils": { - "version": "2.26.2", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.26.2.tgz", - "integrity": "sha512-uzwnhmrSbyinPCiwfzGsOY3IulBTwoky7r83HmZdz9QNCjhSCzavkh47KLWuU0zF2F2WbpmmzoJUIEiYyd+jEQ==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.5.2.tgz", + "integrity": "sha512-qIlklNuI/1Dzfm+G+kJV5gg3gimZIX5haYtIVQe7qGyKd7eu8T1t1DY6pz4Sc2CGXAj9s1izycctm9Zfl9sRuQ==", "dev": true, "requires": { "tslib": "^1.8.1" @@ -7443,16 +6007,10 @@ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, "typescript": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.8.3.tgz", - "integrity": "sha512-K7g15Bb6Ra4lKf7Iq2l/I5/En+hLIHmxWZGq3D4DIRNFxMNV6j2SHSvDOqs2tGd4UvD/fJvrwopzQXjLrT7Itw==" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.0.3.tgz", + "integrity": "sha512-kk80vLW9iGtjMnIv11qyxLqZm20UklzuR2tL0QAnDIygIUIemcZMxlMWudl9OOt76H3ntVzcTiddQ1/pAAJMYg==" }, "uglify-js": { "version": "2.8.29", @@ -7630,18 +6188,6 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, - "validate-commit-msg": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/validate-commit-msg/-/validate-commit-msg-2.14.0.tgz", - "integrity": "sha1-5Tg2kQEsuycNzAvCpO/+vhSJDqw=", - "dev": true, - "requires": { - "conventional-commit-types": "^2.0.0", - "find-parent-dir": "^0.3.0", - "findup": "0.1.5", - "semver-regex": "1.0.0" - } - }, "validate-npm-package-license": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", @@ -7653,37 +6199,37 @@ } }, "vscode-jsonrpc": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-3.6.1.tgz", - "integrity": "sha512-+Eb+Dxf2kC2h079msx61hkblxAKE0S2j78+8QpnigLAO2aIIjkCwTIH34etBrU8E8VItRinec7YEwULx9at5bQ==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-4.0.0.tgz", + "integrity": "sha512-perEnXQdQOJMTDFNv+UF3h1Y0z4iSiaN9jIlb0OqIYgosPCZGYh/MCUlkFtV2668PL69lRDO32hmvL2yiidUYg==" }, "vscode-languageserver": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-3.5.1.tgz", - "integrity": "sha512-RYUKn0DgHTFcS8kS4VaNCjNMaQXYqiXdN9bKrFjXzu5RPKfjIYcoh47oVWwZj4L3R/DPB0Se7HPaDatvYY2XgQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-5.0.3.tgz", + "integrity": "sha512-itOImvZfDueQXMhy4pm2SwPKa3AShZvILXFcK/5X3ruiYdZozmx3OeD5Y92dVBt0OzTdbVD9MZcEelH4E7Eu3g==", "requires": { - "vscode-languageserver-protocol": "3.5.1", - "vscode-uri": "^1.0.1" + "vscode-languageserver-protocol": "^3.10.3", + "vscode-uri": "^1.0.5" } }, "vscode-languageserver-protocol": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.5.1.tgz", - "integrity": "sha512-1fPDIwsAv1difCV+8daOrJEGunClNJWqnUHq/ncWrjhitKWXgGmRCjlwZ3gDUTt54yRcvXz1PXJDaRNvNH6pYA==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.12.0.tgz", + "integrity": "sha512-evY6hmyzLnwQrqlQWPrNBq1z8wrSNjLesmgPzeS6Zv11mVS5UJRel26hbM/DH5tHdn45huNzRW0eFHRmIm8LpA==", "requires": { - "vscode-jsonrpc": "3.5.0", - "vscode-languageserver-types": "3.5.0" + "vscode-jsonrpc": "^3.6.2", + "vscode-languageserver-types": "^3.12.0" }, "dependencies": { "vscode-jsonrpc": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-3.5.0.tgz", - "integrity": "sha1-hyOdnhZrLXNSJFuKgTWXgEwdY6o=" + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-3.6.2.tgz", + "integrity": "sha512-T24Jb5V48e4VgYliUXMnZ379ItbrXgOimweKaJshD84z+8q7ZOZjJan0MeDe+Ugb+uqERDVV8SBmemaGMSMugA==" }, "vscode-languageserver-types": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.5.0.tgz", - "integrity": "sha1-5I15li8LjgLelV4/UkkI4rGcA3Q=" + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.12.0.tgz", + "integrity": "sha512-UxqnpzBToPO7Mi2tr/s5JeyPOSKSJtLB8lIdxCg9ZNdvP2cU8wS7iTDtwQKz91Ne4CUmTdf85ddR5SIZKXmMjQ==" } } }, @@ -7693,9 +6239,9 @@ "integrity": "sha512-ftGfU79AnnI3OHCG7kzCCN47jNI7BjECPAH2yhddtYTiQk0bnFbuFeQKvpXQcyNI3GsKEx5b6kSiBYshTiep6w==" }, "vscode-uri": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.3.tgz", - "integrity": "sha1-Yxvb9xbcyrDmUpGo3CXCMjIIWlI=" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.6.tgz", + "integrity": "sha512-sLI2L0uGov3wKVb9EB+vIQBl9tVP90nqRvxSoJ35vI3NjxE8jfsE5DSOhWgSunHSZmKS4OCi2jrtfxK7uyp2ww==" }, "which": { "version": "1.3.0", diff --git a/package.json b/package.json index c92d2f998..3e5f6596e 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,12 @@ "build": "tsc", "watch": "tsc -w", "semantic-release": "semantic-release", - "commitmsg": "validate-commit-msg" + "commitmsg": "commitlint -e $GIT_PARAMS" + }, + "commitlint": { + "extends": [ + "@commitlint/config-conventional" + ] }, "dependencies": { "chai": "^4.0.1", @@ -42,7 +47,7 @@ "commander": "^2.9.0", "fast-json-patch": "^2.0.2", "glob": "^7.1.1", - "iterare": "^0.0.8", + "iterare": "^1.1.2", "jaeger-client": "^3.5.3", "lodash": "^4.17.4", "mz": "^2.6.0", @@ -50,41 +55,41 @@ "opentracing": "^0.14.0", "rxjs": "^5.5.0", "semaphore-async-await": "^1.5.1", - "string-similarity": "^1.1.0", - "typescript": "2.8.3", - "vscode-jsonrpc": "^3.3.1", - "vscode-languageserver": "^3.1.0", + "string-similarity": "^2.0.0", + "typescript": "~3.0.3", + "vscode-jsonrpc": "^4.0.0", + "vscode-languageserver": "^5.0.0", "vscode-languageserver-types": "^3.0.3" }, "devDependencies": { - "@sourcegraph/prettierrc": "^2.0.0", + "@commitlint/cli": "^8.3.5", + "@commitlint/config-conventional": "^8.3.4", + "@sourcegraph/prettierrc": "^3.0.3", "@sourcegraph/tsconfig": "^3.0.0", - "@sourcegraph/tslint-config": "^11.0.1", - "@types/chai": "4.0.6", - "@types/chai-as-promised": "^7.1.0", - "@types/glob": "^5.0.30", - "@types/lodash": "^4.14.76", - "@types/mocha": "^5.0.0", - "@types/mz": "^0.0.31", - "@types/node": "^7.0.32", - "@types/object-hash": "^1.1.0", - "@types/rimraf": "^2.0.2", - "@types/sinon": "^4.0.0", - "@types/temp": "^0.8.29", - "commitizen": "^2.9.6", + "@sourcegraph/tslint-config": "^12.3.1", + "@types/chai": "4.1.7", + "@types/chai-as-promised": "7.1.0", + "@types/glob": "7.1.1", + "@types/lodash": "4.14.155", + "@types/mocha": "5.2.6", + "@types/mz": "0.0.32", + "@types/node": "7.0.63", + "@types/object-hash": "1.2.0", + "@types/rimraf": "2.0.2", + "@types/sinon": "4.3.1", + "@types/temp": "0.8.32", "cz-conventional-changelog": "^2.0.0", "husky": "^0.14.0", "mocha": "^5.0.0", - "nyc": "^11.0.2", - "prettier": "1.12.1", + "nyc": "^13.0.0", + "prettier": "1.19.1", "rimraf": "^2.6.1", "semantic-release": "^15.1.8", - "sinon": "^5.0.0", + "sinon": "^6.0.0", "source-map-support": "^0.5.0", "temp": "^0.8.3", - "tslint": "^5.8.0", - "tslint-language-service": "^0.9.6", - "validate-commit-msg": "^2.12.2" + "tslint": "^6.1.2", + "tslint-language-service": "^0.9.9" }, "bin": { "javascript-typescript-langserver": "./lib/language-server.js", @@ -98,11 +103,6 @@ "lib/test/**/*.js" ] }, - "config": { - "commitizen": { - "path": "./node_modules/cz-conventional-changelog" - } - }, "greenkeeper": { "ignore": [ "@types/node" diff --git a/renovate.json b/renovate.json new file mode 100644 index 000000000..ba277b3b0 --- /dev/null +++ b/renovate.json @@ -0,0 +1,10 @@ +{ + "extends": ["github>sourcegraph/renovate-config"], + "semanticCommits": true, + "travis": { + "enabled": true + }, + "node": { + "supportPolicy": ["lts"] + } +} diff --git a/src/fs.ts b/src/fs.ts index 924900488..ad00f2e4c 100644 --- a/src/fs.ts +++ b/src/fs.ts @@ -78,7 +78,7 @@ export class LocalFileSystem implements FileSystem { follow: true, }) globber.on('match', (file: string) => { - subscriber.next(normalizeUri(base + file)) + subscriber.next(file) }) globber.on('error', (err: any) => { subscriber.error(err) @@ -89,6 +89,12 @@ export class LocalFileSystem implements FileSystem { return () => { globber.abort() } + }).map(file => { + const encodedPath = file + .split('/') + .map(encodeURIComponent) + .join('/') + return normalizeUri(base + encodedPath) }) } diff --git a/src/lang-handler.ts b/src/lang-handler.ts index c4a00c244..0f1d7922f 100644 --- a/src/lang-handler.ts +++ b/src/lang-handler.ts @@ -107,13 +107,15 @@ export class RemoteLanguageClient { .filter(msg => isResponseMessage(msg) && msg.id === id) .take(1) // Emit result or error - .map((msg: ResponseMessage): any => { - receivedResponse = true - if (msg.error) { - throw Object.assign(new Error(msg.error.message), msg.error) + .map( + (msg: ResponseMessage): any => { + receivedResponse = true + if (msg.error) { + throw Object.assign(new Error(msg.error.message), msg.error) + } + return msg.result } - return msg.result - }) + ) // Forward events to subscriber .subscribe(subscriber) // Handler for unsubscribe() diff --git a/src/test/memfs.test.ts b/src/test/memfs.test.ts index c5ed629bb..4e64881a0 100644 --- a/src/test/memfs.test.ts +++ b/src/test/memfs.test.ts @@ -18,6 +18,14 @@ describe('memfs.ts', () => { sinon.assert.calledOnce(listener) sinon.assert.calledWithExactly(listener, 'file:///foo/bar.txt', undefined) }) + it('should add just a URI and emit an event when URI has encoded char', () => { + const listener = sinon.spy() + const fs = new InMemoryFileSystem('/') + fs.on('add', listener) + fs.add('file:///foo/%25bar.txt') + sinon.assert.calledOnce(listener) + sinon.assert.calledWithExactly(listener, 'file:///foo/%25bar.txt', undefined) + }) it('should add content for a URI and emit an event', () => { const listener = sinon.spy() const fs = new InMemoryFileSystem('/') diff --git a/src/test/typescript-service-helpers.ts b/src/test/typescript-service-helpers.ts index 3b0a7dc62..4f553c4ad 100644 --- a/src/test/typescript-service-helpers.ts +++ b/src/test/typescript-service-helpers.ts @@ -1,7 +1,7 @@ import * as chai from 'chai' import chaiAsPromised = require('chai-as-promised') import { applyReducer, Operation } from 'fast-json-patch' -import { IBeforeAndAfterContext, ISuiteCallbackContext, ITestCallbackContext } from 'mocha' +import { Context } from 'mocha' import { Observable } from 'rxjs' import * as sinon from 'sinon' import * as ts from 'typescript' @@ -63,26 +63,27 @@ export const initializeTypeScriptService = ( files: Map, clientCapabilities: ClientCapabilities = DEFAULT_CAPABILITIES ) => - async function(this: TestContext & IBeforeAndAfterContext): Promise { + async function(this: TestContext & Context): Promise { // Stub client this.client = sinon.createStubInstance(RemoteLanguageClient) - this.client.textDocumentXcontent.callsFake((params: TextDocumentContentParams): Observable< - TextDocumentItem - > => { - if (!files.has(params.textDocument.uri)) { - return Observable.throw(new Error(`Text document ${params.textDocument.uri} does not exist`)) + this.client.textDocumentXcontent.callsFake( + (params: TextDocumentContentParams): Observable => { + if (!files.has(params.textDocument.uri)) { + return Observable.throw(new Error(`Text document ${params.textDocument.uri} does not exist`)) + } + return Observable.of({ + uri: params.textDocument.uri, + text: files.get(params.textDocument.uri)!, + version: 1, + languageId: '', + }) } - return Observable.of({ - uri: params.textDocument.uri, - text: files.get(params.textDocument.uri)!, - version: 1, - languageId: '', - }) - }) - this.client.workspaceXfiles.callsFake((params: WorkspaceFilesParams): Observable => - observableFromIterable(files.keys()) - .map(uri => ({ uri })) - .toArray() + ) + this.client.workspaceXfiles.callsFake( + (params: WorkspaceFilesParams): Observable => + observableFromIterable(files.keys()) + .map(uri => ({ uri })) + .toArray() ) this.client.xcacheGet.callsFake(() => Observable.of(null)) this.client.workspaceApplyEdit.callsFake(() => Observable.of({ applied: true })) @@ -93,6 +94,12 @@ export const initializeTypeScriptService = ( processId: process.pid, rootUri, capabilities: clientCapabilities || DEFAULT_CAPABILITIES, + workspaceFolders: [ + { + uri: rootUri, + name: 'test', + }, + ], }) .toPromise() } @@ -100,7 +107,7 @@ export const initializeTypeScriptService = ( /** * Shuts the TypeScriptService down (to be used in `afterEach()`) */ -export async function shutdownTypeScriptService(this: TestContext & IBeforeAndAfterContext): Promise { +export async function shutdownTypeScriptService(this: Context): Promise { await this.service.shutdown().toPromise() } @@ -114,7 +121,7 @@ export function describeTypeScriptService( shutdownService = shutdownTypeScriptService, rootUri: string ): void { - describe('Workspace without project files', function(this: TestContext & ISuiteCallbackContext): void { + describe('Workspace without project files', () => { beforeEach( initializeTypeScriptService( createService, @@ -137,14 +144,16 @@ export function describeTypeScriptService( 'let target = i.target;', ].join('\n'), ], + [rootUri + 'foo/f.ts', ['import {Foo} from "./b";', '', 'let foo: Foo = Object({});'].join('\n')], + [rootUri + 'foo/g.ts', ['class Foo = {}', '', 'let foo: Foo = Object({});'].join('\n')], ]) ) ) afterEach(shutdownService) - describe('textDocumentDefinition()', function(this: TestContext & ISuiteCallbackContext): void { - specify('in same file', async function(this: TestContext & ITestCallbackContext): Promise { + describe('textDocumentDefinition()', () => { + specify('in same file', async function(this: TestContext & Context): Promise { const result: Location[] = await this.service .textDocumentDefinition({ textDocument: { @@ -173,7 +182,7 @@ export function describeTypeScriptService( }, ]) }) - specify('on keyword (non-null)', async function(this: TestContext & ITestCallbackContext): Promise { + specify('on keyword (non-null)', async function(this: TestContext & Context): Promise { const result: Location[] = await this.service .textDocumentDefinition({ textDocument: { @@ -188,7 +197,7 @@ export function describeTypeScriptService( .toPromise() assert.deepEqual(result, []) }) - specify('in other file', async function(this: TestContext & ITestCallbackContext): Promise { + specify('in other file', async function(this: TestContext & Context): Promise { const result: Location[] = await this.service .textDocumentDefinition({ textDocument: { @@ -218,10 +227,70 @@ export function describeTypeScriptService( ]) }) }) - describe('textDocumentXdefinition()', function(this: TestContext & ISuiteCallbackContext): void { - specify('on interface field reference', async function( - this: TestContext & ITestCallbackContext - ): Promise { + + describe('textDocumentTypeDefinition()', () => { + specify('in other file', async function(this: TestContext & Context): Promise { + const result: Location[] = await this.service + .textDocumentTypeDefinition({ + textDocument: { + uri: rootUri + 'foo/f.ts', + }, + position: { + line: 2, + character: 5, + }, + }) + .reduce(applyReducer, null as any) + .toPromise() + assert.deepEqual(result, [ + { + uri: rootUri + 'foo/b.ts', + range: { + start: { + line: 1, + character: 13, + }, + end: { + line: 1, + character: 16, + }, + }, + }, + ]) + }) + specify('in same file', async function(this: TestContext & Context): Promise { + const result: Location[] = await this.service + .textDocumentTypeDefinition({ + textDocument: { + uri: rootUri + 'foo/g.ts', + }, + position: { + line: 2, + character: 5, + }, + }) + .reduce(applyReducer, null as any) + .toPromise() + assert.deepEqual(result, [ + { + uri: rootUri + 'foo/g.ts', + range: { + start: { + line: 0, + character: 6, + }, + end: { + line: 0, + character: 9, + }, + }, + }, + ]) + }) + }) + + describe('textDocumentXdefinition()', () => { + specify('on interface field reference', async function(this: TestContext & Context): Promise { const result: SymbolLocationInformation[] = await this.service .textDocumentXdefinition({ textDocument: { @@ -259,7 +328,7 @@ export function describeTypeScriptService( }, ]) }) - specify('in same file', async function(this: TestContext & ITestCallbackContext): Promise { + specify('in same file', async function(this: TestContext & Context): Promise { const result: SymbolLocationInformation[] = await this.service .textDocumentXdefinition({ textDocument: { @@ -298,8 +367,8 @@ export function describeTypeScriptService( ]) }) }) - describe('textDocumentHover()', function(this: TestContext & ISuiteCallbackContext): void { - specify('in same file', async function(this: TestContext & ITestCallbackContext): Promise { + describe('textDocumentHover()', () => { + specify('in same file', async function(this: TestContext & Context): Promise { const result: Hover = await this.service .textDocumentHover({ textDocument: { @@ -327,7 +396,7 @@ export function describeTypeScriptService( }) }) specify('local function with callback argument', async function( - this: TestContext & ITestCallbackContext + this: TestContext & Context ): Promise { const result: Hover = await this.service .textDocumentHover({ @@ -358,7 +427,7 @@ export function describeTypeScriptService( ], }) }) - specify('in other file', async function(this: TestContext & ITestCallbackContext): Promise { + specify('in other file', async function(this: TestContext & Context): Promise { const result: Hover = await this.service .textDocumentHover({ textDocument: { @@ -385,7 +454,7 @@ export function describeTypeScriptService( contents: [{ language: 'typescript', value: 'class Foo\nimport Foo' }, '**alias**'], }) }) - specify('over keyword (non-null)', async function(this: TestContext & ITestCallbackContext): Promise { + specify('over keyword (non-null)', async function(this: TestContext & Context): Promise { const result: Hover = await this.service .textDocumentHover({ textDocument: { @@ -400,7 +469,7 @@ export function describeTypeScriptService( .toPromise() assert.deepEqual(result, { contents: [] }) }) - specify('over non-existent file', async function(this: TestContext & ITestCallbackContext): Promise { + specify('over non-existent file', async function(this: TestContext & Context): Promise { await Promise.resolve( assert.isRejected( this.service @@ -420,7 +489,7 @@ export function describeTypeScriptService( }) }) - describe('Workspace with typings directory', function(this: TestContext & ISuiteCallbackContext): void { + describe('Workspace with typings directory', () => { beforeEach( initializeTypeScriptService( createService, @@ -451,8 +520,8 @@ export function describeTypeScriptService( afterEach(shutdownService) - describe('textDocumentDefinition()', function(this: TestContext & ISuiteCallbackContext): void { - specify('with tsd.d.ts', async function(this: TestContext & ITestCallbackContext): Promise { + describe('textDocumentDefinition()', () => { + specify('with tsd.d.ts', async function(this: TestContext & Context): Promise { const result: Location[] = await this.service .textDocumentDefinition({ textDocument: { @@ -481,8 +550,8 @@ export function describeTypeScriptService( }, ]) }) - describe('on file in project root', function(this: TestContext & ISuiteCallbackContext): void { - specify('on import alias', async function(this: TestContext & ITestCallbackContext): Promise { + describe('on file in project root', () => { + specify('on import alias', async function(this: TestContext & Context): Promise { const result: Location[] = await this.service .textDocumentDefinition({ textDocument: { @@ -511,7 +580,7 @@ export function describeTypeScriptService( }, ]) }) - specify('on module name', async function(this: TestContext & ITestCallbackContext): Promise { + specify('on module name', async function(this: TestContext & Context): Promise { const result: Location[] = await this.service .textDocumentDefinition({ textDocument: { @@ -544,7 +613,7 @@ export function describeTypeScriptService( }) }) - describe('DefinitelyTyped', function(this: TestContext & ISuiteCallbackContext): void { + describe('DefinitelyTyped', () => { beforeEach( initializeTypeScriptService( createService, @@ -647,9 +716,9 @@ export function describeTypeScriptService( afterEach(shutdownService) - describe('workspaceSymbol()', function(this: TestContext & ISuiteCallbackContext): void { + describe('workspaceSymbol()', () => { it('should find a symbol by SymbolDescriptor query with name and package name', async function(this: TestContext & - ITestCallbackContext): Promise { + Context): Promise { const result: SymbolInformation[] = await this.service .workspaceSymbol({ symbol: { name: 'resolveCallback', package: { name: '@types/resolve' } }, @@ -677,7 +746,7 @@ export function describeTypeScriptService( ]) }) it('should find a symbol by SymbolDescriptor query with name, containerKind and package name', async function(this: TestContext & - ITestCallbackContext): Promise { + Context): Promise { const result: SymbolInformation[] = await this.service .workspaceSymbol({ symbol: { @@ -711,7 +780,7 @@ export function describeTypeScriptService( }) }) - describe('Workspace with root package.json', function(this: TestContext & ISuiteCallbackContext): void { + describe('Workspace with root package.json', () => { beforeEach( initializeTypeScriptService( createService, @@ -732,10 +801,10 @@ export function describeTypeScriptService( afterEach(shutdownService) - describe('workspaceSymbol()', function(this: TestContext & ISuiteCallbackContext): void { - describe('with SymbolDescriptor query', function(this: TestContext & ISuiteCallbackContext): void { + describe('workspaceSymbol()', () => { + describe('with SymbolDescriptor query', () => { it('should find a symbol by name, kind and package name', async function(this: TestContext & - ITestCallbackContext): Promise { + Context): Promise { const result: SymbolInformation[] = await this.service .workspaceSymbol({ symbol: { @@ -767,7 +836,7 @@ export function describeTypeScriptService( }) }) it('should find a symbol by name, kind, package name and ignore package version', async function(this: TestContext & - ITestCallbackContext): Promise { + Context): Promise { const result: SymbolInformation[] = await this.service .workspaceSymbol({ symbol: { name: 'a', kind: 'class', package: { name: 'mypkg', version: '203940234' } }, @@ -792,9 +861,7 @@ export function describeTypeScriptService( name: 'a', }) }) - it('should find a symbol by name', async function(this: TestContext & ITestCallbackContext): Promise< - void - > { + it('should find a symbol by name', async function(this: TestContext & Context): Promise { const result: SymbolInformation[] = await this.service .workspaceSymbol({ symbol: { @@ -824,7 +891,7 @@ export function describeTypeScriptService( ]) }) it('should return no result if the PackageDescriptor does not match', async function(this: TestContext & - ITestCallbackContext): Promise { + Context): Promise { const result: SymbolInformation[] = await this.service .workspaceSymbol({ symbol: { @@ -840,8 +907,8 @@ export function describeTypeScriptService( assert.deepEqual(result, []) }) }) - describe('with text query', function(this: TestContext & ISuiteCallbackContext): void { - it('should find a symbol', async function(this: TestContext & ITestCallbackContext): Promise { + describe('with text query', () => { + it('should find a symbol', async function(this: TestContext & Context): Promise { const result: SymbolInformation[] = await this.service .workspaceSymbol({ query: 'a' }) .reduce(applyReducer, null as any) @@ -867,7 +934,7 @@ export function describeTypeScriptService( ]) }) it('should return all symbols for an empty query excluding dependencies', async function(this: TestContext & - ITestCallbackContext): Promise { + Context): Promise { const result: SymbolInformation[] = await this.service .workspaceSymbol({ query: '' }) .reduce(applyReducer, null as any) @@ -1036,9 +1103,8 @@ export function describeTypeScriptService( }) }) - describe('workspaceXreferences()', function(this: TestContext & ISuiteCallbackContext): void { - it('should return all references to a method', async function(this: TestContext & - ITestCallbackContext): Promise { + describe('workspaceXreferences()', () => { + it('should return all references to a method', async function(this: TestContext & Context): Promise { const result: ReferenceInformation[] = await this.service .workspaceXreferences({ query: { name: 'foo', kind: 'method', containerName: 'a' } }) .reduce(applyReducer, null as any) @@ -1069,7 +1135,7 @@ export function describeTypeScriptService( ]) }) it('should return all references to a method with hinted dependee package name', async function(this: TestContext & - ITestCallbackContext): Promise { + Context): Promise { const result: ReferenceInformation[] = await this.service .workspaceXreferences({ query: { @@ -1109,7 +1175,7 @@ export function describeTypeScriptService( ]) }) it('should return no references to a method if hinted dependee package name was not found', async function(this: TestContext & - ITestCallbackContext): Promise { + Context): Promise { const result = await this.service .workspaceXreferences({ query: { @@ -1126,7 +1192,7 @@ export function describeTypeScriptService( assert.deepEqual(result, []) }) it('should return all references to a symbol from a dependency', async function(this: TestContext & - ITestCallbackContext): Promise { + Context): Promise { const result: ReferenceInformation[] = await this.service .workspaceXreferences({ query: { name: 'x' } }) .reduce(applyReducer, null as any) @@ -1157,7 +1223,7 @@ export function describeTypeScriptService( ]) }) it('should return all references to a symbol from a dependency with PackageDescriptor query', async function(this: TestContext & - ITestCallbackContext): Promise { + Context): Promise { const result: ReferenceInformation[] = await this.service .workspaceXreferences({ query: { name: 'x', package: { name: 'dep' } } }) .reduce(applyReducer, null as any) @@ -1193,7 +1259,7 @@ export function describeTypeScriptService( ]) }) it('should return all references to all symbols if empty SymbolDescriptor query is passed', async function(this: TestContext & - ITestCallbackContext): Promise { + Context): Promise { const result: ReferenceInformation[] = await this.service .workspaceXreferences({ query: {} }) .reduce(applyReducer, null as any) @@ -1402,7 +1468,7 @@ export function describeTypeScriptService( }) }) - describe('Dependency detection', function(this: TestContext & ISuiteCallbackContext): void { + describe('Dependency detection', () => { beforeEach( initializeTypeScriptService( createService, @@ -1457,10 +1523,8 @@ export function describeTypeScriptService( afterEach(shutdownService) - describe('workspaceXdependencies()', function(this: TestContext & ISuiteCallbackContext): void { - it('should account for all dependencies', async function(this: TestContext & ITestCallbackContext): Promise< - void - > { + describe('workspaceXdependencies()', () => { + it('should account for all dependencies', async function(this: TestContext & Context): Promise { const result: DependencyReference[] = await this.service .workspaceXdependencies() .reduce(applyReducer, null as any) @@ -1559,10 +1623,8 @@ export function describeTypeScriptService( ]) }) }) - describe('workspaceXpackages()', function(this: TestContext & ISuiteCallbackContext): void { - it('should accournt for all packages', async function(this: TestContext & ITestCallbackContext): Promise< - void - > { + describe('workspaceXpackages()', () => { + it('should accournt for all packages', async function(this: TestContext & Context): Promise { const result: PackageInformation[] = await this.service .workspaceXpackages() .reduce(applyReducer, null as any) @@ -1676,16 +1738,14 @@ export function describeTypeScriptService( }) }) - describe('TypeScript library', function(this: TestContext & ISuiteCallbackContext): void { + describe('TypeScript library', () => { beforeEach( initializeTypeScriptService(createService, rootUri, new Map([[rootUri + 'a.ts', 'let parameters = [];']])) ) afterEach(shutdownService) - specify('type of parameters should be any[]', async function( - this: TestContext & ITestCallbackContext - ): Promise { + specify('type of parameters should be any[]', async function(this: TestContext & Context): Promise { const result: Hover = await this.service .textDocumentHover({ textDocument: { @@ -1714,7 +1774,7 @@ export function describeTypeScriptService( }) }) - describe('Live updates', function(this: TestContext & ISuiteCallbackContext): void { + describe('Live updates', () => { beforeEach( initializeTypeScriptService(createService, rootUri, new Map([[rootUri + 'a.ts', 'let parameters = [];']])) ) @@ -1722,7 +1782,7 @@ export function describeTypeScriptService( afterEach(shutdownService) it('should handle didChange when configuration is not yet initialized', async function(this: TestContext & - ITestCallbackContext): Promise { + Context): Promise { const hoverParams = { textDocument: { uri: rootUri + 'a.ts', @@ -1767,7 +1827,7 @@ export function describeTypeScriptService( }) it('should handle didClose when configuration is not yet initialized', async function(this: TestContext & - ITestCallbackContext): Promise { + Context): Promise { const hoverParams = { textDocument: { uri: rootUri + 'a.ts', @@ -1805,7 +1865,7 @@ export function describeTypeScriptService( }) }) - it('should reflect updated content', async function(this: TestContext & ITestCallbackContext): Promise { + it('should reflect updated content', async function(this: TestContext & Context): Promise { const hoverParams = { textDocument: { uri: rootUri + 'a.ts', @@ -1900,7 +1960,7 @@ export function describeTypeScriptService( }) }) - describe('Diagnostics', function(this: TestContext & ISuiteCallbackContext): void { + describe('Diagnostics', () => { beforeEach( initializeTypeScriptService( createService, @@ -1911,9 +1971,7 @@ export function describeTypeScriptService( afterEach(shutdownService) - it('should publish diagnostics on didOpen', async function(this: TestContext & ITestCallbackContext): Promise< - void - > { + it('should publish diagnostics on didOpen', async function(this: TestContext & Context): Promise { await this.service.textDocumentDidOpen({ textDocument: { uri: rootUri + 'src/errors.ts', @@ -1938,9 +1996,7 @@ export function describeTypeScriptService( }) }) - it('should publish diagnostics on didChange', async function(this: TestContext & ITestCallbackContext): Promise< - void - > { + it('should publish diagnostics on didChange', async function(this: TestContext & Context): Promise { await this.service.textDocumentDidOpen({ textDocument: { uri: rootUri + 'src/errors.ts', @@ -1976,7 +2032,7 @@ export function describeTypeScriptService( }) it('should publish empty diagnostics on didChange if error was fixed', async function(this: TestContext & - ITestCallbackContext): Promise { + Context): Promise { await this.service.textDocumentDidOpen({ textDocument: { uri: rootUri + 'src/errors.ts', @@ -2003,9 +2059,7 @@ export function describeTypeScriptService( }) }) - it('should clear diagnostics on didClose', async function(this: TestContext & ITestCallbackContext): Promise< - void - > { + it('should clear diagnostics on didClose', async function(this: TestContext & Context): Promise { await this.service.textDocumentDidClose({ textDocument: { uri: rootUri + 'src/errors.ts', @@ -2020,7 +2074,7 @@ export function describeTypeScriptService( }) }) - describe('References and imports', function(this: TestContext & ISuiteCallbackContext): void { + describe('References and imports', () => { beforeEach( initializeTypeScriptService( createService, @@ -2058,9 +2112,9 @@ export function describeTypeScriptService( afterEach(shutdownService) - describe('textDocumentDefinition()', function(this: TestContext & ISuiteCallbackContext): void { + describe('textDocumentDefinition()', () => { it('should resolve symbol imported with tripe-slash reference', async function(this: TestContext & - ITestCallbackContext): Promise { + Context): Promise { const result: Location[] = await this.service .textDocumentDefinition({ textDocument: { @@ -2098,7 +2152,7 @@ export function describeTypeScriptService( ]) }) it('should resolve symbol imported with import statement', async function(this: TestContext & - ITestCallbackContext): Promise { + Context): Promise { const result: Location[] = await this.service .textDocumentDefinition({ textDocument: { @@ -2127,8 +2181,9 @@ export function describeTypeScriptService( }, ]) }) - it('should resolve definition with missing reference', async function(this: TestContext & - ITestCallbackContext): Promise { + it('should resolve definition with missing reference', async function(this: TestContext & Context): Promise< + void + > { const result: Location[] = await this.service .textDocumentDefinition({ textDocument: { @@ -2157,9 +2212,7 @@ export function describeTypeScriptService( }, ]) }) - it('should resolve deep definitions', async function(this: TestContext & ITestCallbackContext): Promise< - void - > { + it('should resolve deep definitions', async function(this: TestContext & Context): Promise { // This test passes only because we expect no response from LSP server // for definition located in file references with depth 3 or more (a -> b -> c -> d (...)) // This test will fail once we'll increase (or remove) depth limit @@ -2194,7 +2247,7 @@ export function describeTypeScriptService( }) }) - describe('TypeScript libraries', function(this: TestContext & ISuiteCallbackContext): void { + describe('TypeScript libraries', () => { beforeEach( initializeTypeScriptService( createService, @@ -2215,10 +2268,8 @@ export function describeTypeScriptService( afterEach(shutdownService) - describe('textDocumentHover()', function(this: TestContext & ISuiteCallbackContext): void { - it('should load local library file', async function(this: TestContext & ITestCallbackContext): Promise< - void - > { + describe('textDocumentHover()', () => { + it('should load local library file', async function(this: TestContext & Context): Promise { const result: Hover = await this.service .textDocumentHover({ textDocument: { @@ -2255,18 +2306,7 @@ export function describeTypeScriptService( ' readonly COMMENT_NODE: number;', ' readonly DOCUMENT_FRAGMENT_NODE: number;', ' readonly DOCUMENT_NODE: number;', - ' readonly DOCUMENT_POSITION_CONTAINED_BY: number;', - ' readonly DOCUMENT_POSITION_CONTAINS: number;', - ' readonly DOCUMENT_POSITION_DISCONNECTED: number;', - ' readonly DOCUMENT_POSITION_FOLLOWING: number;', - ' readonly DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: number;', - ' readonly DOCUMENT_POSITION_PRECEDING: number;', - ' readonly DOCUMENT_TYPE_NODE: number;', - ' readonly ELEMENT_NODE: number;', - ' readonly ENTITY_NODE: number;', - ' readonly ENTITY_REFERENCE_NODE: number;', - ' readonly NOTATION_NODE: number;', - ' readonly PROCESSING_INSTRUCTION_NODE: number;', + ' ... 12 more ...;', ' readonly TEXT_NODE: number;', '}', ].join('\n'), @@ -2276,9 +2316,8 @@ export function describeTypeScriptService( }) }) }) - describe('textDocumentDefinition()', function(this: TestContext & ISuiteCallbackContext): void { - it('should resolve TS libraries to github URL', async function(this: TestContext & - ITestCallbackContext): Promise { + describe('textDocumentDefinition()', () => { + it('should resolve TS libraries to github URL', async function(this: TestContext & Context): Promise { assert.deepEqual( await this.service .textDocumentDefinition({ @@ -2297,11 +2336,11 @@ export function describeTypeScriptService( uri: 'git://github.com/Microsoft/TypeScript?v' + ts.version + '#lib/lib.dom.d.ts', range: { start: { - line: 9378, + line: 10275, character: 10, }, end: { - line: 9378, + line: 10275, character: 14, }, }, @@ -2310,11 +2349,11 @@ export function describeTypeScriptService( uri: 'git://github.com/Microsoft/TypeScript?v' + ts.version + '#lib/lib.dom.d.ts', range: { start: { - line: 9429, + line: 10326, character: 12, }, end: { - line: 9429, + line: 10326, character: 16, }, }, @@ -2355,7 +2394,7 @@ export function describeTypeScriptService( }) }) - describe('textDocumentReferences()', function(this: TestContext & ISuiteCallbackContext): void { + describe('textDocumentReferences()', () => { beforeEach( initializeTypeScriptService( createService, @@ -2392,7 +2431,7 @@ export function describeTypeScriptService( afterEach(shutdownService) it('should provide an empty response when no reference is found', async function(this: TestContext & - ITestCallbackContext): Promise { + Context): Promise { const result = await this.service .textDocumentReferences({ textDocument: { @@ -2409,8 +2448,7 @@ export function describeTypeScriptService( assert.deepEqual(result, []) }) - it('should include the declaration if requested', async function(this: TestContext & - ITestCallbackContext): Promise { + it('should include the declaration if requested', async function(this: TestContext & Context): Promise { const result = await this.service .textDocumentReferences({ textDocument: { @@ -2441,8 +2479,9 @@ export function describeTypeScriptService( ]) }) - it('should provide a reference within the same file', async function(this: TestContext & - ITestCallbackContext): Promise { + it('should provide a reference within the same file', async function(this: TestContext & Context): Promise< + void + > { const result = await this.service .textDocumentReferences({ textDocument: { @@ -2472,8 +2511,7 @@ export function describeTypeScriptService( }, ]) }) - it('should provide two references from imports', async function(this: TestContext & - ITestCallbackContext): Promise { + it('should provide two references from imports', async function(this: TestContext & Context): Promise { const result = await this.service .textDocumentReferences({ textDocument: { @@ -2518,7 +2556,7 @@ export function describeTypeScriptService( }) }) - describe('textDocumentSignatureHelp()', function(this: TestContext & ISuiteCallbackContext): void { + describe('textDocumentSignatureHelp()', () => { beforeEach( initializeTypeScriptService( createService, @@ -2563,7 +2601,7 @@ export function describeTypeScriptService( afterEach(shutdownService) it('should provide a valid empty response when no signature is found', async function(this: TestContext & - ITestCallbackContext): Promise { + Context): Promise { const result: SignatureHelp = await this.service .textDocumentSignatureHelp({ textDocument: { @@ -2584,7 +2622,7 @@ export function describeTypeScriptService( }) it('should provide signature help with parameters in the same file', async function(this: TestContext & - ITestCallbackContext): Promise { + Context): Promise { const result: SignatureHelp = await this.service .textDocumentSignatureHelp({ textDocument: { @@ -2619,8 +2657,9 @@ export function describeTypeScriptService( }) }) - it('should provide signature help from imported symbols', async function(this: TestContext & - ITestCallbackContext): Promise { + it('should provide signature help from imported symbols', async function(this: TestContext & Context): Promise< + void + > { const result: SignatureHelp = await this.service .textDocumentSignatureHelp({ textDocument: { @@ -2647,7 +2686,7 @@ export function describeTypeScriptService( }) }) - describe('textDocumentCompletion() with snippets', function(this: TestContext & ISuiteCallbackContext): void { + describe('textDocumentCompletion() with snippets', () => { beforeEach( initializeTypeScriptService( createService, @@ -2686,7 +2725,7 @@ export function describeTypeScriptService( afterEach(shutdownService) - it('should produce completions', async function(this: TestContext & ITestCallbackContext): Promise { + it('should produce completions', async function(this: TestContext & Context): Promise { const result: CompletionList = await this.service .textDocumentCompletion({ textDocument: { @@ -2744,8 +2783,7 @@ export function describeTypeScriptService( ]) }) - it('should resolve completions with snippets', async function(this: TestContext & - ITestCallbackContext): Promise { + it('should resolve completions with snippets', async function(this: TestContext & Context): Promise { const result: CompletionList = await this.service .textDocumentCompletion({ textDocument: { @@ -2820,7 +2858,7 @@ export function describeTypeScriptService( }) }) - describe('textDocumentCompletion()', function(this: TestContext & ISuiteCallbackContext): void { + describe('textDocumentCompletion()', () => { beforeEach( initializeTypeScriptService( createService, @@ -2860,9 +2898,7 @@ export function describeTypeScriptService( afterEach(shutdownService) - it('produces completions in the same file', async function(this: TestContext & ITestCallbackContext): Promise< - void - > { + it('produces completions in the same file', async function(this: TestContext & Context): Promise { const result: CompletionList = await this.service .textDocumentCompletion({ textDocument: { @@ -2920,9 +2956,7 @@ export function describeTypeScriptService( ]) }) - it('resolves completions in the same file', async function(this: TestContext & ITestCallbackContext): Promise< - void - > { + it('resolves completions in the same file', async function(this: TestContext & Context): Promise { const result: CompletionList = await this.service .textDocumentCompletion({ textDocument: { @@ -2989,8 +3023,7 @@ export function describeTypeScriptService( ]) }) - it('produces completions for imported symbols', async function(this: TestContext & - ITestCallbackContext): Promise { + it('produces completions for imported symbols', async function(this: TestContext & Context): Promise { const result: CompletionList = await this.service .textDocumentCompletion({ textDocument: { @@ -3019,8 +3052,7 @@ export function describeTypeScriptService( ], }) }) - it('produces completions for referenced symbols', async function(this: TestContext & - ITestCallbackContext): Promise { + it('produces completions for referenced symbols', async function(this: TestContext & Context): Promise { const result: CompletionList = await this.service .textDocumentCompletion({ textDocument: { @@ -3049,9 +3081,7 @@ export function describeTypeScriptService( ], }) }) - it('produces completions for empty files', async function(this: TestContext & ITestCallbackContext): Promise< - void - > { + it('produces completions for empty files', async function(this: TestContext & Context): Promise { this.timeout(10000) const result: CompletionList = await this.service .textDocumentCompletion({ @@ -3069,7 +3099,7 @@ export function describeTypeScriptService( }) }) - describe('textDocumentRename()', function(this: TestContext & ISuiteCallbackContext): void { + describe('textDocumentRename()', () => { beforeEach( initializeTypeScriptService( createService, @@ -3101,9 +3131,7 @@ export function describeTypeScriptService( afterEach(shutdownService) - it('should error on an invalid symbol', async function(this: TestContext & ITestCallbackContext): Promise< - void - > { + it('should error on an invalid symbol', async function(this: TestContext & Context): Promise { await Promise.resolve( assert.isRejected( this.service @@ -3124,7 +3152,7 @@ export function describeTypeScriptService( ) }) it('should return a correct WorkspaceEdit to rename a class', async function(this: TestContext & - ITestCallbackContext): Promise { + Context): Promise { const result: WorkspaceEdit = await this.service .textDocumentRename({ textDocument: { @@ -3172,7 +3200,7 @@ export function describeTypeScriptService( }) }) it('should return a correct WorkspaceEdit to rename an imported function', async function(this: TestContext & - ITestCallbackContext): Promise { + Context): Promise { const result: WorkspaceEdit = await this.service .textDocumentRename({ textDocument: { @@ -3236,7 +3264,7 @@ export function describeTypeScriptService( }) }) - describe('textDocumentCodeAction()', function(this: TestContext & ISuiteCallbackContext): void { + describe('textDocumentCodeAction()', () => { beforeEach( initializeTypeScriptService( createService, @@ -3260,7 +3288,7 @@ export function describeTypeScriptService( afterEach(shutdownService) - it('suggests a missing this', async function(this: TestContext & ITestCallbackContext): Promise { + it('suggests a missing this', async function(this: TestContext & Context): Promise { await this.service.textDocumentDidOpen({ textDocument: { uri: rootUri + 'a.ts', @@ -3320,7 +3348,7 @@ export function describeTypeScriptService( }) }) - describe('workspaceExecuteCommand()', function(this: TestContext & ISuiteCallbackContext): void { + describe('workspaceExecuteCommand()', () => { beforeEach( initializeTypeScriptService( createService, @@ -3346,7 +3374,7 @@ export function describeTypeScriptService( describe('codeFix', () => { it('should apply a WorkspaceEdit for the passed FileTextChanges', async function(this: TestContext & - ITestCallbackContext): Promise { + Context): Promise { await this.service .workspaceExecuteCommand({ command: 'codeFix', @@ -3392,7 +3420,7 @@ export function describeTypeScriptService( }) }) - describe('Special file names', function(this: TestContext & ISuiteCallbackContext): void { + describe('Special file names', () => { beforeEach( initializeTypeScriptService( createService, @@ -3409,8 +3437,9 @@ export function describeTypeScriptService( afterEach(shutdownService) - it('should accept files with TypeScript keywords in path', async function(this: TestContext & - ITestCallbackContext): Promise { + it('should accept files with TypeScript keywords in path', async function(this: TestContext & Context): Promise< + void + > { const result: Hover = await this.service .textDocumentHover({ textDocument: { @@ -3437,8 +3466,9 @@ export function describeTypeScriptService( contents: [{ language: 'typescript', value: 'function a(): void' }, '**function** _(exported)_'], }) }) - it('should accept files with special characters in path', async function(this: TestContext & - ITestCallbackContext): Promise { + it('should accept files with special characters in path', async function(this: TestContext & Context): Promise< + void + > { const result: Hover = await this.service .textDocumentHover({ textDocument: { @@ -3466,7 +3496,7 @@ export function describeTypeScriptService( }) }) it('should handle Windows-style paths in triple slash references', async function(this: TestContext & - ITestCallbackContext): Promise { + Context): Promise { const result = await this.service .textDocumentDefinition({ textDocument: { diff --git a/src/typescript-service.ts b/src/typescript-service.ts index a09b00315..0101da7ff 100644 --- a/src/typescript-service.ts +++ b/src/typescript-service.ts @@ -297,6 +297,7 @@ export class TypeScriptService { triggerCharacters: ['(', ','], }, definitionProvider: true, + typeDefinitionProvider: true, referencesProvider: true, documentSymbolProvider: true, workspaceSymbolProvider: true, @@ -362,7 +363,19 @@ export class TypeScriptService { */ public textDocumentDefinition(params: TextDocumentPositionParams, span = new Span()): Observable { - return this._getDefinitionLocations(params, span) + return this._getDefinitionLocations(params, span, false) + .map((location: Location): Operation => ({ op: 'add', path: '/-', value: location })) + .startWith({ op: 'add', path: '', value: [] }) + } + + /** + * The goto type definition request is sent from the client to the server to resolve the type + * location of a symbol at a given text document position. + * + * @return Observable of JSON Patches that build a `Location[]` result + */ + public textDocumentTypeDefinition(params: TextDocumentPositionParams, span = new Span()): Observable { + return this._getDefinitionLocations(params, span, true) .map((location: Location): Operation => ({ op: 'add', path: '/-', value: location })) .startWith({ op: 'add', path: '', value: [] }) } @@ -370,7 +383,11 @@ export class TypeScriptService { /** * Returns an Observable of all definition locations found for a symbol. */ - protected _getDefinitionLocations(params: TextDocumentPositionParams, span = new Span()): Observable { + protected _getDefinitionLocations( + params: TextDocumentPositionParams, + span = new Span(), + goToType = false + ): Observable { const uri = normalizeUri(params.textDocument.uri) // Fetch files needed to resolve definition @@ -392,28 +409,32 @@ export class TypeScriptService { params.position.line, params.position.character ) - const definitions: ts.DefinitionInfo[] | undefined = configuration - .getService() - .getDefinitionAtPosition(fileName, offset) + const definitions: ts.DefinitionInfo[] | undefined = goToType + ? configuration.getService().getTypeDefinitionAtPosition(fileName, offset) + : configuration.getService().getDefinitionAtPosition(fileName, offset) - return Observable.from(definitions || []).map((definition): Location => { - const sourceFile = this._getSourceFile(configuration, definition.fileName, span) - if (!sourceFile) { - throw new Error('expected source file "' + definition.fileName + '" to exist in configuration') - } - const start = ts.getLineAndCharacterOfPosition(sourceFile, definition.textSpan.start) - const end = ts.getLineAndCharacterOfPosition( - sourceFile, - definition.textSpan.start + definition.textSpan.length - ) - return { - uri: locationUri(definition.fileName), - range: { - start, - end, - }, + return Observable.from(definitions || []).map( + (definition): Location => { + const sourceFile = this._getSourceFile(configuration, definition.fileName, span) + if (!sourceFile) { + throw new Error( + 'expected source file "' + definition.fileName + '" to exist in configuration' + ) + } + const start = ts.getLineAndCharacterOfPosition(sourceFile, definition.textSpan.start) + const end = ts.getLineAndCharacterOfPosition( + sourceFile, + definition.textSpan.start + definition.textSpan.length + ) + return { + uri: locationUri(definition.fileName), + range: { + start, + end, + }, + } } - }) + ) }) } @@ -467,35 +488,44 @@ export class TypeScriptService { // Query TypeScript for references return Observable.from( configuration.getService().getDefinitionAtPosition(fileName, offset) || [] - ).mergeMap((definition: ts.DefinitionInfo): Observable => { - const definitionUri = locationUri(definition.fileName) - // Get the PackageDescriptor - return this._getPackageDescriptor(definitionUri) - .defaultIfEmpty(undefined) - .map((packageDescriptor: PackageDescriptor | undefined): SymbolLocationInformation => { - const sourceFile = this._getSourceFile(configuration, definition.fileName, span) - if (!sourceFile) { - throw new Error(`Expected source file ${definition.fileName} to exist in configuration`) - } - const symbol = definitionInfoToSymbolDescriptor(definition, this.root) - if (packageDescriptor) { - symbol.package = packageDescriptor - } - return { - symbol, - location: { - uri: definitionUri, - range: { - start: ts.getLineAndCharacterOfPosition(sourceFile, definition.textSpan.start), - end: ts.getLineAndCharacterOfPosition( - sourceFile, - definition.textSpan.start + definition.textSpan.length - ), - }, - }, - } - }) - }) + ).mergeMap( + (definition: ts.DefinitionInfo): Observable => { + const definitionUri = locationUri(definition.fileName) + // Get the PackageDescriptor + return this._getPackageDescriptor(definitionUri) + .defaultIfEmpty(undefined) + .map( + (packageDescriptor: PackageDescriptor | undefined): SymbolLocationInformation => { + const sourceFile = this._getSourceFile(configuration, definition.fileName, span) + if (!sourceFile) { + throw new Error( + `Expected source file ${definition.fileName} to exist in configuration` + ) + } + const symbol = definitionInfoToSymbolDescriptor(definition, this.root) + if (packageDescriptor) { + symbol.package = packageDescriptor + } + return { + symbol, + location: { + uri: definitionUri, + range: { + start: ts.getLineAndCharacterOfPosition( + sourceFile, + definition.textSpan.start + ), + end: ts.getLineAndCharacterOfPosition( + sourceFile, + definition.textSpan.start + definition.textSpan.length + ), + }, + }, + } + } + ) + } + ) }) } @@ -525,24 +555,28 @@ export class TypeScriptService { }) // Fetch the package.json of the dependency return this.updater.ensure(packageJsonUri, span).concat( - Observable.defer((): Observable => { - const packageJson: PackageJson = JSON.parse(this.inMemoryFileSystem.getContent(packageJsonUri)) - const { name, version } = packageJson - if (!name) { - return Observable.empty() - } - // Used by the LSP proxy to shortcut database lookup of repo URL for PackageDescriptor - let repoURL: string | undefined - if (name.startsWith('@types/')) { - // if the dependency package is an @types/ package, point the repo to DefinitelyTyped - repoURL = 'https://github.com/DefinitelyTyped/DefinitelyTyped' - } else { - // else use repository field from package.json - repoURL = - typeof packageJson.repository === 'object' ? packageJson.repository.url : undefined + Observable.defer( + (): Observable => { + const packageJson: PackageJson = JSON.parse( + this.inMemoryFileSystem.getContent(packageJsonUri) + ) + const { name, version } = packageJson + if (!name) { + return Observable.empty() + } + // Used by the LSP proxy to shortcut database lookup of repo URL for PackageDescriptor + let repoURL: string | undefined + if (name.startsWith('@types/')) { + // if the dependency package is an @types/ package, point the repo to DefinitelyTyped + repoURL = 'https://github.com/DefinitelyTyped/DefinitelyTyped' + } else { + // else use repository field from package.json + repoURL = + typeof packageJson.repository === 'object' ? packageJson.repository.url : undefined + } + return Observable.of({ name, version, repoURL }) } - return Observable.of({ name, version, repoURL }) - }) + ) ) } else { // The symbol is defined in the root package of the workspace, not in a dependency @@ -589,72 +623,74 @@ export class TypeScriptService { return this.projectManager .ensureReferencedFiles(uri, undefined, undefined, span) .toArray() - .map((): Hover => { - const fileName: string = uri2path(uri) - const configuration = this.projectManager.getConfiguration(fileName) - configuration.ensureBasicFiles(span) + .map( + (): Hover => { + const fileName: string = uri2path(uri) + const configuration = this.projectManager.getConfiguration(fileName) + configuration.ensureBasicFiles(span) - const sourceFile = this._getSourceFile(configuration, fileName, span) - if (!sourceFile) { - throw new Error(`Unknown text document ${uri}`) - } - const offset: number = ts.getPositionOfLineAndCharacter( - sourceFile, - params.position.line, - params.position.character - ) - const info = configuration.getService().getQuickInfoAtPosition(fileName, offset) - if (!info) { - return { contents: [] } - } - const contents: (MarkedString | string)[] = [] - // Add declaration without the kind - const declaration = ts.displayPartsToString(info.displayParts).replace(/^\(.+?\)\s+/, '') - contents.push({ language: 'typescript', value: declaration }) - // Add kind with modifiers, e.g. "method (private, ststic)", "class (exported)" - if (info.kind) { - let kind = '**' + info.kind + '**' - const modifiers = info.kindModifiers - .split(',') - // Filter out some quirks like "constructor (exported)" - .filter( - mod => - mod && - (mod !== ts.ScriptElementKindModifier.exportedModifier || - info.kind !== ts.ScriptElementKind.constructorImplementationElement) - ) - // Make proper adjectives - .map(mod => { - switch (mod) { - case ts.ScriptElementKindModifier.ambientModifier: - return 'ambient' - case ts.ScriptElementKindModifier.exportedModifier: - return 'exported' - default: - return mod - } - }) - if (modifiers.length > 0) { - kind += ' _(' + modifiers.join(', ') + ')_' + const sourceFile = this._getSourceFile(configuration, fileName, span) + if (!sourceFile) { + throw new Error(`Unknown text document ${uri}`) + } + const offset: number = ts.getPositionOfLineAndCharacter( + sourceFile, + params.position.line, + params.position.character + ) + const info = configuration.getService().getQuickInfoAtPosition(fileName, offset) + if (!info) { + return { contents: [] } + } + const contents: (MarkedString | string)[] = [] + // Add declaration without the kind + const declaration = ts.displayPartsToString(info.displayParts).replace(/^\(.+?\)\s+/, '') + contents.push({ language: 'typescript', value: declaration }) + // Add kind with modifiers, e.g. "method (private, ststic)", "class (exported)" + if (info.kind) { + let kind = '**' + info.kind + '**' + const modifiers = info.kindModifiers + .split(',') + // Filter out some quirks like "constructor (exported)" + .filter( + mod => + mod && + (mod !== ts.ScriptElementKindModifier.exportedModifier || + info.kind !== ts.ScriptElementKind.constructorImplementationElement) + ) + // Make proper adjectives + .map(mod => { + switch (mod) { + case ts.ScriptElementKindModifier.ambientModifier: + return 'ambient' + case ts.ScriptElementKindModifier.exportedModifier: + return 'exported' + default: + return mod + } + }) + if (modifiers.length > 0) { + kind += ' _(' + modifiers.join(', ') + ')_' + } + contents.push(kind) + } + // Add documentation + const documentation = ts.displayPartsToString(info.documentation) + if (documentation) { + contents.push(documentation) + } + const start = ts.getLineAndCharacterOfPosition(sourceFile, info.textSpan.start) + const end = ts.getLineAndCharacterOfPosition(sourceFile, info.textSpan.start + info.textSpan.length) + + return { + contents, + range: { + start, + end, + }, } - contents.push(kind) - } - // Add documentation - const documentation = ts.displayPartsToString(info.documentation) - if (documentation) { - contents.push(documentation) - } - const start = ts.getLineAndCharacterOfPosition(sourceFile, info.textSpan.start) - const end = ts.getLineAndCharacterOfPosition(sourceFile, info.textSpan.start + info.textSpan.length) - - return { - contents, - range: { - start, - end, - }, } - }) + ) } /** @@ -708,25 +744,27 @@ export class TypeScriptService { // Filter references in node_modules !reference.fileName.includes('/node_modules/') ) - .map((reference): Location => { - const sourceFile = program.getSourceFile(reference.fileName) - if (!sourceFile) { - throw new Error(`Source file ${reference.fileName} does not exist`) - } - // Convert offset to line/character position - const start = ts.getLineAndCharacterOfPosition(sourceFile, reference.textSpan.start) - const end = ts.getLineAndCharacterOfPosition( - sourceFile, - reference.textSpan.start + reference.textSpan.length - ) - return { - uri: path2uri(reference.fileName), - range: { - start, - end, - }, + .map( + (reference): Location => { + const sourceFile = program.getSourceFile(reference.fileName) + if (!sourceFile) { + throw new Error(`Source file ${reference.fileName} does not exist`) + } + // Convert offset to line/character position + const start = ts.getLineAndCharacterOfPosition(sourceFile, reference.textSpan.start) + const end = ts.getLineAndCharacterOfPosition( + sourceFile, + reference.textSpan.start + reference.textSpan.length + ) + return { + uri: path2uri(reference.fileName), + range: { + start, + end, + }, + } } - }) + ) }) ) .map((location: Location): Operation => ({ op: 'add', path: '/-', value: location })) @@ -752,87 +790,91 @@ export class TypeScriptService { const scores: number[] = [] let observable = this.isDefinitelyTyped - .mergeMap((isDefinitelyTyped: boolean): Observable<[number, SymbolInformation]> => { - // Use special logic for DefinitelyTyped - // Search only in the correct subdirectory for the given PackageDescriptor - if (isDefinitelyTyped) { - // Error if not passed a SymbolDescriptor query with an `@types` PackageDescriptor - if ( - !params.symbol || - !params.symbol.package || - !params.symbol.package.name || - !params.symbol.package.name.startsWith('@types/') - ) { - return Observable.throw( - new Error( - 'workspace/symbol on DefinitelyTyped is only supported with a SymbolDescriptor query with an @types PackageDescriptor' + .mergeMap( + (isDefinitelyTyped: boolean): Observable<[number, SymbolInformation]> => { + // Use special logic for DefinitelyTyped + // Search only in the correct subdirectory for the given PackageDescriptor + if (isDefinitelyTyped) { + // Error if not passed a SymbolDescriptor query with an `@types` PackageDescriptor + if ( + !params.symbol || + !params.symbol.package || + !params.symbol.package.name || + !params.symbol.package.name.startsWith('@types/') + ) { + return Observable.throw( + new Error( + 'workspace/symbol on DefinitelyTyped is only supported with a SymbolDescriptor query with an @types PackageDescriptor' + ) ) - ) - } + } - // Fetch all files in the package subdirectory - // All packages are in the types/ subdirectory - const normRootUri = this.rootUri.endsWith('/') ? this.rootUri : this.rootUri + '/' - const packageRootUri = normRootUri + params.symbol.package.name.substr(1) + '/' - - return this.updater - .ensureStructure(span) - .concat(Observable.defer(() => observableFromIterable(this.inMemoryFileSystem.uris()))) - .filter(uri => uri.startsWith(packageRootUri)) - .mergeMap(uri => this.updater.ensure(uri, span)) - .concat( - Observable.defer(() => { - span.log({ event: 'fetched package files' }) - const config = this.projectManager.getParentConfiguration(packageRootUri, 'ts') - if (!config) { - throw new Error(`Could not find tsconfig for ${packageRootUri}`) - } - // Don't match PackageDescriptor on symbols - return this._getSymbolsInConfig(config, omit(params.symbol!, 'package'), span) - }) - ) - } - // Regular workspace symbol search - // Search all symbols in own code, but not in dependencies - return ( - this.projectManager - .ensureOwnFiles(span) - .concat( - Observable.defer(() => { - if (params.symbol && params.symbol.package && params.symbol.package.name) { - // If SymbolDescriptor query with PackageDescriptor, search for package.jsons with matching package name - return ( - observableFromIterable(this.packageManager.packageJsonUris()) - .filter( - packageJsonUri => - (JSON.parse( - this.inMemoryFileSystem.getContent(packageJsonUri) - ) as PackageJson).name === params.symbol!.package!.name - ) - // Find their parent and child tsconfigs - .mergeMap(packageJsonUri => - Observable.merge( - castArray( - this.projectManager.getParentConfiguration(packageJsonUri) || [] - ), - // Search child directories starting at the directory of the package.json - observableFromIterable( - this.projectManager.getChildConfigurations( - url.resolve(packageJsonUri, '.') + // Fetch all files in the package subdirectory + // All packages are in the types/ subdirectory + const normRootUri = this.rootUri.endsWith('/') ? this.rootUri : this.rootUri + '/' + const packageRootUri = normRootUri + params.symbol.package.name.substr(1) + '/' + + return this.updater + .ensureStructure(span) + .concat(Observable.defer(() => observableFromIterable(this.inMemoryFileSystem.uris()))) + .filter(uri => uri.startsWith(packageRootUri)) + .mergeMap(uri => this.updater.ensure(uri, span)) + .concat( + Observable.defer(() => { + span.log({ event: 'fetched package files' }) + const config = this.projectManager.getParentConfiguration(packageRootUri, 'ts') + if (!config) { + throw new Error(`Could not find tsconfig for ${packageRootUri}`) + } + // Don't match PackageDescriptor on symbols + return this._getSymbolsInConfig(config, omit(params.symbol!, 'package'), span) + }) + ) + } + // Regular workspace symbol search + // Search all symbols in own code, but not in dependencies + return ( + this.projectManager + .ensureOwnFiles(span) + .concat( + Observable.defer(() => { + if (params.symbol && params.symbol.package && params.symbol.package.name) { + // If SymbolDescriptor query with PackageDescriptor, search for package.jsons with matching package name + return ( + observableFromIterable(this.packageManager.packageJsonUris()) + .filter( + packageJsonUri => + (JSON.parse( + this.inMemoryFileSystem.getContent(packageJsonUri) + ) as PackageJson).name === params.symbol!.package!.name + ) + // Find their parent and child tsconfigs + .mergeMap(packageJsonUri => + Observable.merge( + castArray( + this.projectManager.getParentConfiguration( + packageJsonUri + ) || [] + ), + // Search child directories starting at the directory of the package.json + observableFromIterable( + this.projectManager.getChildConfigurations( + url.resolve(packageJsonUri, '.') + ) ) ) ) - ) - ) - } - // Else search all tsconfigs in the workspace - return observableFromIterable(this.projectManager.configurations()) - }) - ) - // If PackageDescriptor is given, only search project with the matching package name - .mergeMap(config => this._getSymbolsInConfig(config, params.query || params.symbol, span)) - ) - }) + ) + } + // Else search all tsconfigs in the workspace + return observableFromIterable(this.projectManager.configurations()) + }) + ) + // If PackageDescriptor is given, only search project with the matching package name + .mergeMap(config => this._getSymbolsInConfig(config, params.query || params.symbol, span)) + ) + } + ) // Filter duplicate symbols // There may be few configurations that contain the same file(s) // or files from different configurations may refer to the same file(s) @@ -966,7 +1008,7 @@ export class TypeScriptService { } span.log({ event: 'match', score }) // If no PackageDescriptor query, return match - if (!params.query.package || !params.query.package) { + if (!params.query.package) { return [symbol] } // If SymbolDescriptor matched and the query contains a PackageDescriptor, get package.json and match PackageDescriptor name @@ -986,16 +1028,18 @@ export class TypeScriptService { return symbol }) }) - .map((symbol: SymbolDescriptor): ReferenceInformation => ({ - symbol, - reference: { - uri: locationUri(source.fileName), - range: { - start: ts.getLineAndCharacterOfPosition(source, node.pos), - end: ts.getLineAndCharacterOfPosition(source, node.end), + .map( + (symbol: SymbolDescriptor): ReferenceInformation => ({ + symbol, + reference: { + uri: locationUri(source.fileName), + range: { + start: ts.getLineAndCharacterOfPosition(source, node.pos), + end: ts.getLineAndCharacterOfPosition(source, node.end), + }, }, - }, - })) + }) + ) } catch (err) { // Continue with next node on error // Workaround for https://github.com/Microsoft/TypeScript/issues/15219 @@ -1036,72 +1080,82 @@ export class TypeScriptService { */ public workspaceXpackages(params = {}, span = new Span()): Observable { return this.isDefinitelyTyped - .mergeMap((isDefinitelyTyped: boolean): Observable => { - // In DefinitelyTyped, report all @types/ packages - if (isDefinitelyTyped) { - const typesUri = url.resolve(this.rootUri, 'types/') + .mergeMap( + (isDefinitelyTyped: boolean): Observable => { + // In DefinitelyTyped, report all @types/ packages + if (isDefinitelyTyped) { + const typesUri = url.resolve(this.rootUri, 'types/') + return ( + observableFromIterable(this.inMemoryFileSystem.uris()) + // Find all types/ subdirectories + .filter(uri => uri.startsWith(typesUri)) + // Get the directory names + .map( + (uri): PackageInformation => ({ + package: { + name: + '@types/' + + decodeURIComponent(uri.substr(typesUri.length).split('/')[0]), + // TODO report a version by looking at subfolders like v6 + }, + // TODO parse /// comments in .d.ts files for collecting dependencies between @types packages + dependencies: [], + }) + ) + ) + } + // For other workspaces, search all package.json files return ( - observableFromIterable(this.inMemoryFileSystem.uris()) - // Find all types/ subdirectories - .filter(uri => uri.startsWith(typesUri)) - // Get the directory names - .map((uri): PackageInformation => ({ - package: { - name: '@types/' + decodeURIComponent(uri.substr(typesUri.length).split('/')[0]), - // TODO report a version by looking at subfolders like v6 - }, - // TODO parse /// comments in .d.ts files for collecting dependencies between @types packages - dependencies: [], - })) + this.projectManager + .ensureModuleStructure(span) + // Iterate all files + .concat(Observable.defer(() => observableFromIterable(this.inMemoryFileSystem.uris()))) + // Filter own package.jsons + .filter(uri => uri.includes('/package.json') && !uri.includes('/node_modules/')) + // Map to contents of package.jsons + .mergeMap(uri => this.packageManager.getPackageJson(uri)) + // Map each package.json to a PackageInformation + .mergeMap(packageJson => { + if (!packageJson.name) { + return [] + } + const packageDescriptor: PackageDescriptor = { + name: packageJson.name, + version: packageJson.version, + repoURL: + (typeof packageJson.repository === 'object' && packageJson.repository.url) || + undefined, + } + // Collect all dependencies for this package.json + return ( + Observable.from(DEPENDENCY_KEYS) + .filter(key => !!packageJson[key]) + // Get [name, version] pairs + .mergeMap(key => toPairs(packageJson[key])) + // Map to DependencyReferences + .map( + ([name, version]): DependencyReference => ({ + attributes: { + name, + version, + }, + hints: { + dependeePackageName: packageJson.name, + }, + }) + ) + .toArray() + .map( + (dependencies): PackageInformation => ({ + package: packageDescriptor, + dependencies, + }) + ) + ) + }) ) } - // For other workspaces, search all package.json files - return ( - this.projectManager - .ensureModuleStructure(span) - // Iterate all files - .concat(Observable.defer(() => observableFromIterable(this.inMemoryFileSystem.uris()))) - // Filter own package.jsons - .filter(uri => uri.includes('/package.json') && !uri.includes('/node_modules/')) - // Map to contents of package.jsons - .mergeMap(uri => this.packageManager.getPackageJson(uri)) - // Map each package.json to a PackageInformation - .mergeMap(packageJson => { - if (!packageJson.name) { - return [] - } - const packageDescriptor: PackageDescriptor = { - name: packageJson.name, - version: packageJson.version, - repoURL: - (typeof packageJson.repository === 'object' && packageJson.repository.url) || - undefined, - } - // Collect all dependencies for this package.json - return ( - Observable.from(DEPENDENCY_KEYS) - .filter(key => !!packageJson[key]) - // Get [name, version] pairs - .mergeMap(key => toPairs(packageJson[key])) - // Map to DependencyReferences - .map(([name, version]): DependencyReference => ({ - attributes: { - name, - version, - }, - hints: { - dependeePackageName: packageJson.name, - }, - })) - .toArray() - .map((dependencies): PackageInformation => ({ - package: packageDescriptor, - dependencies, - })) - ) - }) - ) - }) + ) .map((packageInfo): Operation => ({ op: 'add', path: '/-', value: packageInfo })) .startWith({ op: 'add', path: '', value: [] }) } @@ -1129,15 +1183,17 @@ export class TypeScriptService { .filter(key => !!packageJson[key]) // Get [name, version] pairs .mergeMap(key => toPairs(packageJson[key])) - .map(([name, version]): DependencyReference => ({ - attributes: { - name, - version, - }, - hints: { - dependeePackageName: packageJson.name, - }, - })) + .map( + ([name, version]): DependencyReference => ({ + attributes: { + name, + version, + }, + hints: { + dependeePackageName: packageJson.name, + }, + }) + ) ) .map((dependency): Operation => ({ op: 'add', path: '/-', value: dependency })) .startWith({ op: 'add', path: '', value: [] }) @@ -1235,7 +1291,7 @@ export class TypeScriptService { const details = configuration .getService() - .getCompletionEntryDetails(fileName, offset, entryName, undefined, undefined) + .getCompletionEntryDetails(fileName, offset, entryName, undefined, undefined, undefined) if (details) { item.documentation = ts.displayPartsToString(details.documentation) @@ -1275,49 +1331,55 @@ export class TypeScriptService { return this.projectManager .ensureReferencedFiles(uri, undefined, undefined, span) .toArray() - .map((): SignatureHelp => { - const filePath = uri2path(uri) - const configuration = this.projectManager.getConfiguration(filePath) - configuration.ensureBasicFiles(span) + .map( + (): SignatureHelp => { + const filePath = uri2path(uri) + const configuration = this.projectManager.getConfiguration(filePath) + configuration.ensureBasicFiles(span) - const sourceFile = this._getSourceFile(configuration, filePath, span) - if (!sourceFile) { - throw new Error(`expected source file ${filePath} to exist in configuration`) - } - const offset: number = ts.getPositionOfLineAndCharacter( - sourceFile, - params.position.line, - params.position.character - ) + const sourceFile = this._getSourceFile(configuration, filePath, span) + if (!sourceFile) { + throw new Error(`expected source file ${filePath} to exist in configuration`) + } + const offset: number = ts.getPositionOfLineAndCharacter( + sourceFile, + params.position.line, + params.position.character + ) - const signatures: ts.SignatureHelpItems = configuration - .getService() - .getSignatureHelpItems(filePath, offset) - if (!signatures) { - return { signatures: [], activeParameter: 0, activeSignature: 0 } - } + const signatures: + | ts.SignatureHelpItems + | undefined = configuration.getService().getSignatureHelpItems(filePath, offset, undefined) + if (!signatures) { + return { signatures: [], activeParameter: 0, activeSignature: 0 } + } + + const signatureInformations = signatures.items.map( + (item): SignatureInformation => { + const prefix = ts.displayPartsToString(item.prefixDisplayParts) + const params = item.parameters.map(p => ts.displayPartsToString(p.displayParts)).join(', ') + const suffix = ts.displayPartsToString(item.suffixDisplayParts) + const parameters = item.parameters.map( + (p): ParameterInformation => ({ + label: ts.displayPartsToString(p.displayParts), + documentation: ts.displayPartsToString(p.documentation), + }) + ) + return { + label: prefix + params + suffix, + documentation: ts.displayPartsToString(item.documentation), + parameters, + } + } + ) - const signatureInformations = signatures.items.map((item): SignatureInformation => { - const prefix = ts.displayPartsToString(item.prefixDisplayParts) - const params = item.parameters.map(p => ts.displayPartsToString(p.displayParts)).join(', ') - const suffix = ts.displayPartsToString(item.suffixDisplayParts) - const parameters = item.parameters.map((p): ParameterInformation => ({ - label: ts.displayPartsToString(p.displayParts), - documentation: ts.displayPartsToString(p.documentation), - })) return { - label: prefix + params + suffix, - documentation: ts.displayPartsToString(item.documentation), - parameters, + signatures: signatureInformations, + activeSignature: signatures.selectedItemIndex, + activeParameter: signatures.argumentIndex, } - }) - - return { - signatures: signatureInformations, - activeSignature: signatures.selectedItemIndex, - activeParameter: signatures.argumentIndex, } - }) + ) .map(signatureHelp => ({ op: 'add', path: '', value: signatureHelp } as Operation)) } @@ -1365,18 +1427,20 @@ export class TypeScriptService { return ( configuration .getService() - .getCodeFixesAtPosition(filePath, start, end, errorCodes, this.settings.format || {}) || [] + .getCodeFixesAtPosition(filePath, start, end, errorCodes, this.settings.format || {}, {}) || [] ) }) - .map((action: ts.CodeAction): Operation => ({ - op: 'add', - path: '/-', - value: { - title: action.description, - command: 'codeFix', - arguments: action.changes, - } as Command, - })) + .map( + (action: ts.CodeAction): Operation => ({ + op: 'add', + path: '/-', + value: { + title: action.description, + command: 'codeFix', + arguments: action.changes, + } as Command, + }) + ) .startWith({ op: 'add', path: '', value: [] } as Operation) } @@ -1428,13 +1492,15 @@ export class TypeScriptService { throw new Error(`Expected source file ${change.fileName} to exist in configuration`) } const uri = path2uri(change.fileName) - changes[uri] = change.textChanges.map(({ span, newText }): TextEdit => ({ - range: { - start: ts.getLineAndCharacterOfPosition(sourceFile, span.start), - end: ts.getLineAndCharacterOfPosition(sourceFile, span.start + span.length), - }, - newText, - })) + changes[uri] = change.textChanges.map( + ({ span, newText }): TextEdit => ({ + range: { + start: ts.getLineAndCharacterOfPosition(sourceFile, span.start), + end: ts.getLineAndCharacterOfPosition(sourceFile, span.start + span.length), + }, + newText, + }) + ) } return this.client.workspaceApplyEdit({ edit: { changes } }, span) @@ -1479,32 +1545,36 @@ export class TypeScriptService { } return Observable.from( - configuration.getService().findRenameLocations(filePath, position, false, true) - ).map((location: ts.RenameLocation): [string, TextEdit] => { - const sourceFile = this._getSourceFile(configuration, location.fileName, span) - if (!sourceFile) { - throw new Error(`expected source file ${location.fileName} to exist in configuration`) + configuration.getService().findRenameLocations(filePath, position, false, true) || [] + ).map( + (location: ts.RenameLocation): [string, TextEdit] => { + const sourceFile = this._getSourceFile(configuration, location.fileName, span) + if (!sourceFile) { + throw new Error(`expected source file ${location.fileName} to exist in configuration`) + } + const editUri = path2uri(location.fileName) + const start = ts.getLineAndCharacterOfPosition(sourceFile, location.textSpan.start) + const end = ts.getLineAndCharacterOfPosition( + sourceFile, + location.textSpan.start + location.textSpan.length + ) + const edit: TextEdit = { range: { start, end }, newText: params.newName } + return [editUri, edit] } - const editUri = path2uri(location.fileName) - const start = ts.getLineAndCharacterOfPosition(sourceFile, location.textSpan.start) - const end = ts.getLineAndCharacterOfPosition( - sourceFile, - location.textSpan.start + location.textSpan.length - ) - const edit: TextEdit = { range: { start, end }, newText: params.newName } - return [editUri, edit] - }) + ) }) ) - .map(([uri, edit]): Operation => { - // if file has no edit yet, initialize array - if (!editUris.has(uri)) { - editUris.add(uri) - return { op: 'add', path: JSONPTR`/changes/${uri}`, value: [edit] } + .map( + ([uri, edit]): Operation => { + // if file has no edit yet, initialize array + if (!editUris.has(uri)) { + editUris.add(uri) + return { op: 'add', path: JSONPTR`/changes/${uri}`, value: [edit] } + } + // else append to array + return { op: 'add', path: JSONPTR`/changes/${uri}/-`, value: edit } } - // else append to array - return { op: 'add', path: JSONPTR`/changes/${uri}/-`, value: edit } - }) + ) .startWith({ op: 'add', path: '', value: { changes: {} } as WorkspaceEdit } as Operation) } @@ -1568,12 +1638,13 @@ export class TypeScriptService { const tsDiagnostics = config .getService() .getSyntacticDiagnostics(fileName) - .concat(config.getService().getSemanticDiagnostics(fileName)) + .concat( + config + .getService() + .getSemanticDiagnostics(fileName) + .filter((e): e is ts.DiagnosticWithLocation => !!e.file) + ) const diagnostics = iterate(tsDiagnostics) - // TS can report diagnostics without a file and range in some cases - // These cannot be represented as LSP Diagnostics since the range and URI is required - // https://github.com/Microsoft/TypeScript/issues/15666 - .filter(diagnostic => !!diagnostic.file) .map(convertTsDiagnostic) .toArray() this.client.textDocumentPublishDiagnostics({ uri, diagnostics }) @@ -1659,9 +1730,8 @@ export class TypeScriptService { if (typeof query === 'string') { // Query by text query - // Limit the amount of symbols searched for text queries return ( - Observable.from(config.getService().getNavigateToItems(query, 100, undefined, false)) + Observable.from(config.getService().getNavigateToItems(query)) // Exclude dependencies and standard library .filter( item => !isTypeScriptLibrary(item.fileName) && !item.fileName.includes('/node_modules/')