From eb0f6661f922571d5319c0e7e27c419344c31c62 Mon Sep 17 00:00:00 2001 From: Nikola Hristov Date: Sun, 29 Oct 2023 05:00:13 +0200 Subject: [PATCH 1/9] Cleanup --- .../do-not-file-issues-here-.md | 29 ------------------- .github/assignment.yml | 4 --- .github/locker.yml | 5 ---- .github/needs_more_info.yml | 6 ---- 4 files changed, 44 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/do-not-file-issues-here-.md delete mode 100644 .github/assignment.yml delete mode 100644 .github/locker.yml delete mode 100644 .github/needs_more_info.yml diff --git a/.github/ISSUE_TEMPLATE/do-not-file-issues-here-.md b/.github/ISSUE_TEMPLATE/do-not-file-issues-here-.md deleted file mode 100644 index 480151ad..00000000 --- a/.github/ISSUE_TEMPLATE/do-not-file-issues-here-.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -name: Do not file issues here! -about: 'VS Code has a new debugger which can be found in the vscode-js-debug repo ' -title: '' -labels: '' -assignees: '' - ---- - ---- -name: Do not file issues here! -about: VS Code has a new debugger which can be found in the vscode-js-debug repo -title: '' -labels: '' -assignees: '' - ---- - - diff --git a/.github/assignment.yml b/.github/assignment.yml deleted file mode 100644 index 8ba5d285..00000000 --- a/.github/assignment.yml +++ /dev/null @@ -1,4 +0,0 @@ -{ - perform: true, - assignees: [ roblourens ] -} \ No newline at end of file diff --git a/.github/locker.yml b/.github/locker.yml deleted file mode 100644 index 2186b074..00000000 --- a/.github/locker.yml +++ /dev/null @@ -1,5 +0,0 @@ -{ - daysAfterClose: 30, - daysSinceLastUpdate: 3, - perform: true -} \ No newline at end of file diff --git a/.github/needs_more_info.yml b/.github/needs_more_info.yml deleted file mode 100644 index 934e9889..00000000 --- a/.github/needs_more_info.yml +++ /dev/null @@ -1,6 +0,0 @@ -{ - daysUntilClose: 7, - needsMoreInfoLabel: 'needs more info', - perform: true, - closeComment: 'This issue has been closed automatically because it needs more information and has not had recent activity. Please refer to our [guidelines](https://github.com/Microsoft/vscode/blob/master/CONTRIBUTING.md) for filing issues. Thank you for your contributions.' -} From 44a392fd490c92c074669ce6a415eb4c07a4b0db Mon Sep 17 00:00:00 2001 From: Nikola Hristov Date: Sun, 29 Oct 2023 07:49:12 +0200 Subject: [PATCH 2/9] squash! --- CODE_OF_CONDUCT.md | 1 - CONTRIBUTING.md | 9 - ThirdPartyNotices.txt | 13 - package-lock.json | 6384 ----------------- package.json | 52 +- .../calls-between-merged-files/package.json | 14 +- .../sourcemaps-local-paths/package-lock.json | 13 - testdata/webpack/package.json | 8 +- 8 files changed, 37 insertions(+), 6457 deletions(-) delete mode 100644 CODE_OF_CONDUCT.md delete mode 100644 CONTRIBUTING.md delete mode 100644 ThirdPartyNotices.txt delete mode 100644 package-lock.json delete mode 100644 testdata/sourcemaps-local-paths/package-lock.json diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md deleted file mode 100644 index 65c8a42b..00000000 --- a/CODE_OF_CONDUCT.md +++ /dev/null @@ -1 +0,0 @@ -This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 8e6ac073..00000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,9 +0,0 @@ -# Dev setup -Clone this repo, run `npm install` and `gulp build`, and in VS Code run the `launch as server` launch config. This will start the adapter as a server listening on port 4712. - -Then in the debuggee, you can add `"debugServer": "4712"` to connect to your instance of the debug adapter, instead of the installed one. See [this page](https://code.visualstudio.com/docs/extensions/example-debuggers) for more details on debugging a debug adapter. - -Since most of the code for this extension is in the [vscode-chrome-debug-core](https://github.com/Microsoft/vscode-chrome-debug-core) library, if you need to make changes, then you will probably want to clone both repos. You can run `npm link` from the `vscode-chrome-debug-core` directory, and `npm link vscode-chrome-debug-core` from this directory to make this repo use your cloned version of that library. - -## Testing -See the project under testapp/ for a bunch of test scenarios crammed onto one page. diff --git a/ThirdPartyNotices.txt b/ThirdPartyNotices.txt deleted file mode 100644 index 995a3cff..00000000 --- a/ThirdPartyNotices.txt +++ /dev/null @@ -1,13 +0,0 @@ -This project may use or incorporate third party material from the projects listed below. The original copyright notice and the license under which Microsoft received such third party material are set forth below. Microsoft reserves all other rights not expressly granted, whether by implication, estoppel or otherwise. - -websockets-ws - -(The MIT License) - -Copyright (c) 2011 Einar Otto Stangvik - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 55bdf933..00000000 --- a/package-lock.json +++ /dev/null @@ -1,6384 +0,0 @@ -{ - "name": "node-debug2", - "version": "1.43.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@gulp-sourcemaps/identity-map": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-1.0.2.tgz", - "integrity": "sha512-ciiioYMLdo16ShmfHBXJBOFm3xPC4AuwO4xeRpFeHz7WK9PYsWCmigagG2XyzZpubK4a3qNKoUBDhbzHfa50LQ==", - "dev": true, - "requires": { - "acorn": "^5.0.3", - "css": "^2.2.1", - "normalize-path": "^2.1.1", - "source-map": "^0.6.0", - "through2": "^2.0.3" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@gulp-sourcemaps/map-sources": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz", - "integrity": "sha1-iQrnxdjId/bThIYCFazp1+yUW9o=", - "dev": true, - "requires": { - "normalize-path": "^2.0.1", - "through2": "^2.0.3" - } - }, - "@types/fancy-log": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/fancy-log/-/fancy-log-1.3.0.tgz", - "integrity": "sha512-mQjDxyOM1Cpocd+vm1kZBP7smwKZ4TNokFeds9LV7OZibmPJFEzY3+xZMrKfUdNT71lv8GoCPD6upKwHxubClw==", - "dev": true - }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", - "dev": true - }, - "@types/mocha": { - "version": "2.2.47", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.47.tgz", - "integrity": "sha512-v/lko8AvmTt1K8p+ebdhdiHJE7zpPBYsDKjJSNCl8GwPGkKe5xND7s6M36LKye/USbWSPA7gYCDL0+DZ5h0L6Q==", - "dev": true - }, - "@types/node": { - "version": "12.12.41", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.41.tgz", - "integrity": "sha512-Q+eSkdYQJ2XK1AJnr4Ji8Gvk3sRDybEwfTvtL9CA25FFUSD2EgZQewN6VCyWYZCXg5MWZdwogdTNBhlWRcWS1w==", - "dev": true - }, - "@types/source-map": { - "version": "0.1.29", - "resolved": "https://registry.npmjs.org/@types/source-map/-/source-map-0.1.29.tgz", - "integrity": "sha1-1wSKYBgLCfiqbVO9oxHGtRy9cBg=" - }, - "@types/vscode": { - "version": "1.45.1", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.45.1.tgz", - "integrity": "sha512-0NO9qrrEJBO8FsqHCrFMgR2suKnwCsKBWvRSb2OzH5gs4i3QO5AhEMQYrSzDbU/wLPt7N617/rN9lPY213gmwg==", - "dev": true - }, - "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", - "dev": true - }, - "ansi-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", - "dev": true, - "requires": { - "ansi-wrap": "^0.1.0" - } - }, - "ansi-gray": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", - "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", - "dev": true, - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", - "dev": true - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "append-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", - "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", - "dev": true, - "requires": { - "buffer-equal": "^1.0.0" - } - }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-filter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", - "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=", - "dev": true, - "requires": { - "make-iterator": "^1.0.0" - } - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", - "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=", - "dev": true, - "requires": { - "make-iterator": "^1.0.0" - } - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-differ": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", - "dev": true - }, - "array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", - "dev": true - }, - "array-initial": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", - "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=", - "dev": true, - "requires": { - "array-slice": "^1.0.0", - "is-number": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } - } - }, - "array-last": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", - "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", - "dev": true, - "requires": { - "is-number": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } - } - }, - "array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", - "dev": true - }, - "array-sort": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", - "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", - "dev": true, - "requires": { - "default-compare": "^1.0.0", - "get-value": "^2.0.6", - "kind-of": "^5.0.2" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "async-done": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.1.tgz", - "integrity": "sha512-R1BaUeJ4PMoLNJuk+0tLJgjmEqVsdN118+Z8O+alhnQDQgy0kmD5Mqi0DNEmMx2LM0Ed5yekKu+ZXYvIHceicg==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.2", - "process-nextick-args": "^1.0.7", - "stream-exhaust": "^1.0.1" - } - }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, - "async-settle": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", - "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=", - "dev": true, - "requires": { - "async-done": "^1.2.2" - } - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "azure-devops-node-api": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-11.0.1.tgz", - "integrity": "sha512-YMdjAw9l5p/6leiyIloxj3k7VIvYThKjvqgiQn88r3nhT93ENwsoDS3A83CyJ4uTWzCZ5f5jCi6c27rTU5Pz+A==", - "dev": true, - "requires": { - "tunnel": "0.0.6", - "typed-rest-client": "^1.8.4" - } - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, - "bach": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", - "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=", - "dev": true, - "requires": { - "arr-filter": "^1.1.1", - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "array-each": "^1.0.0", - "array-initial": "^1.0.0", - "array-last": "^1.1.1", - "async-done": "^1.2.2", - "async-settle": "^1.0.0", - "now-and-later": "^2.0.0" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "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", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "beeper": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", - "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", - "dev": true - }, - "binary-extensions": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz", - "integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==", - "dev": true - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "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" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true - }, - "buffer-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", - "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", - "dev": true - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "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" - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "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" - } - }, - "cheerio": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", - "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", - "dev": true, - "requires": { - "cheerio-select": "^1.5.0", - "dom-serializer": "^1.3.2", - "domhandler": "^4.2.0", - "htmlparser2": "^6.1.0", - "parse5": "^6.0.1", - "parse5-htmlparser2-tree-adapter": "^6.0.1", - "tslib": "^2.2.0" - }, - "dependencies": { - "tslib": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", - "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", - "dev": true - } - } - }, - "cheerio-select": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", - "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", - "dev": true, - "requires": { - "css-select": "^4.1.3", - "css-what": "^5.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0", - "domutils": "^2.7.0" - } - }, - "chokidar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.2.tgz", - "integrity": "sha512-IwXUx0FXc5ibYmPC2XeEj5mpXoV66sR+t3jqu2NS2GYwCktt3KF1/Qqjws/NkegajBA4RbZ5+DDwlOiJsxDHEg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.0" - }, - "dependencies": { - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - } - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "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", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - } - } - }, - "clone": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", - "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", - "dev": true - }, - "clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", - "dev": true - }, - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", - "dev": true - }, - "cloneable-readable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.0.0.tgz", - "integrity": "sha1-pikNQT8hemEjL5XkWP84QYz7ARc=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "process-nextick-args": "^1.0.6", - "through2": "^2.0.1" - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "collection-map": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", - "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=", - "dev": true, - "requires": { - "arr-map": "^2.0.2", - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - } - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "requires": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - }, - "dependencies": { - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - } - } - }, - "color-convert": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", - "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", - "dev": true, - "requires": { - "color-name": "^1.1.1" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "color-string": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz", - "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==", - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true - }, - "commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true, - "requires": { - "graceful-readlink": ">= 1.0.0" - } - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "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" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "convert-source-map": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", - "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", - "dev": true - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "copy-props": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.4.tgz", - "integrity": "sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A==", - "dev": true, - "requires": { - "each-props": "^1.3.0", - "is-plain-object": "^2.0.1" - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "css-select": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", - "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" - } - }, - "css-what": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", - "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", - "dev": true - }, - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, - "requires": { - "es5-ext": "^0.10.9" - } - }, - "dateformat": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", - "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "debug-fabulous": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-1.1.0.tgz", - "integrity": "sha512-GZqvGIgKNlUnHUPQhepnUZFIMoi3dgZKQBzKDeL2g7oJF9SNAji/AAu36dusFUas0O+pae74lNeoIPHqXWDkLg==", - "dev": true, - "requires": { - "debug": "3.X", - "memoizee": "0.4.X", - "object-assign": "4.X" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "default-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", - "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", - "dev": true, - "requires": { - "kind-of": "^5.0.2" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "default-resolution": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", - "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "dev": true, - "requires": { - "globby": "^5.0.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "rimraf": "^2.2.8" - } - }, - "denodeify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", - "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=", - "dev": true - }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "dev": true - }, - "detect-newline": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", - "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", - "dev": true - }, - "devtools-protocol": { - "version": "0.0.588169", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.588169.tgz", - "integrity": "sha512-DDGCT3YFiamX4jRPqg4galOrQS8DsU0j+xM5iaR0YB5TM1fjCZejQ7MSe9ByIMIq4IsnULY/4Qp3TBWAUjMgXw==" - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true - }, - "domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", - "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", - "dev": true, - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", - "dev": true - }, - "duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", - "dev": true, - "requires": { - "readable-stream": "~1.1.9" - } - }, - "each-props": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", - "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.1", - "object.defaults": "^1.1.0" - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - } - } - }, - "es-abstract": { - "version": "1.17.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", - "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" - }, - "dependencies": { - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.46", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.46.tgz", - "integrity": "sha512-24XxRvJXNFwEMpJb3nOkiRJKRoupmjYmOPVlI65Qy2SrtxwOTB+g6ODjBKOtwEHbYrhWRty9xxOWLNdClT2djw==", - "dev": true, - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.1", - "next-tick": "1" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.14", - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", - "dev": true, - "requires": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "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", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "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", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "fancy-log": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz", - "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=", - "dev": true, - "requires": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "time-stamp": "^1.0.0" - } - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "dev": true, - "requires": { - "pend": "~1.2.0" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - } - }, - "find-free-port": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-free-port/-/find-free-port-1.1.0.tgz", - "integrity": "sha512-J8k4Gh5507+oG/NKiiCck3oKa5YizSWAuzKnEtUw6m9vHTcRwCcZi1MoUVXRIPWQdW5xxsmi+DFVQ989ojqBlQ==", - "dev": true - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^3.1.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - } - }, - "fined": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.1.tgz", - "integrity": "sha512-jQp949ZmEbiYHk3gkbdtpJ0G1+kgtLQBNdP5edFP7Fh+WAYceLQz6yO1SBj72Xkg8GVyTB3bBzAYrHJVh5Xd5g==", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", - "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" - } - }, - "flagged-respawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", - "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", - "dev": true - }, - "flat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", - "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", - "dev": true, - "requires": { - "is-buffer": "~2.0.3" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", - "dev": true - } - } - }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.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": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "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", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", - "dev": true - }, - "fs-mkdirp-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", - "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "through2": "^2.0.3" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", - "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", - "dev": true, - "optional": true, - "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.2.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.10.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "dependencies": { - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - } - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", - "dev": true, - "requires": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", - "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "to-absolute-glob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", - "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", - "dev": true, - "requires": { - "is-absolute": "^1.0.0", - "is-negated-glob": "^1.0.0" - } - } - } - }, - "glob-watcher": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.3.tgz", - "integrity": "sha512-8tWsULNEPHKQ2MR4zXuzSmqbdyV5PtwwCaWSGQ1WwHsJ07ilNeN1JB8ntxhckbnpSHaf9dXFUHzIWvm1I13dsg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-done": "^1.2.0", - "chokidar": "^2.0.0", - "is-negated-glob": "^1.0.0", - "just-debounce": "^1.0.0", - "object.defaults": "^1.1.0" - } - }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - } - }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "glogg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", - "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=", - "dev": true, - "requires": { - "sparkles": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "gulp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.0.tgz", - "integrity": "sha1-lXZsYB2t5Kd+0+eyttwDiBtZY2Y=", - "dev": true, - "requires": { - "glob-watcher": "^5.0.0", - "gulp-cli": "^2.0.0", - "undertaker": "^1.0.0", - "vinyl-fs": "^3.0.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "gulp-cli": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.0.1.tgz", - "integrity": "sha512-RxujJJdN8/O6IW2nPugl7YazhmrIEjmiVfPKrWt68r71UCaLKS71Hp0gpKT+F6qOUFtr7KqtifDKaAJPRVvMYQ==", - "dev": true, - "requires": { - "ansi-colors": "^1.0.1", - "archy": "^1.0.0", - "array-sort": "^1.0.0", - "color-support": "^1.1.3", - "concat-stream": "^1.6.0", - "copy-props": "^2.0.1", - "fancy-log": "^1.3.2", - "gulplog": "^1.0.0", - "interpret": "^1.1.0", - "isobject": "^3.0.1", - "liftoff": "^2.5.0", - "matchdep": "^2.0.0", - "mute-stdout": "^1.0.0", - "pretty-hrtime": "^1.0.0", - "replace-homedir": "^1.0.0", - "semver-greatest-satisfied-range": "^1.1.0", - "v8flags": "^3.0.1", - "yargs": "^7.1.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", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true - }, - "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.0" - } - }, - "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "dev": true, - "requires": { - "camelcase": "^3.0.0" - } - } - } - }, - "gulp-sourcemaps": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-2.6.4.tgz", - "integrity": "sha1-y7IAhFCxvM5s0jv5gze+dRv24wo=", - "dev": true, - "requires": { - "@gulp-sourcemaps/identity-map": "1.X", - "@gulp-sourcemaps/map-sources": "1.X", - "acorn": "5.X", - "convert-source-map": "1.X", - "css": "2.X", - "debug-fabulous": "1.X", - "detect-newline": "2.X", - "graceful-fs": "4.X", - "source-map": "~0.6.0", - "strip-bom-string": "1.X", - "through2": "2.X" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "gulp-tslint": { - "version": "8.1.4", - "resolved": "https://registry.npmjs.org/gulp-tslint/-/gulp-tslint-8.1.4.tgz", - "integrity": "sha512-wBoZIEMJRz9urHwolsvQpngA9l931p6g/Liwz1b/KrsVP6jEBFZv/o0NS1TFCQZi/l8mXxz8+v3twhf4HOXxPQ==", - "dev": true, - "requires": { - "@types/fancy-log": "1.3.0", - "ansi-colors": "^1.0.1", - "fancy-log": "1.3.3", - "map-stream": "~0.0.7", - "plugin-error": "1.0.1", - "through": "~2.3.8" - }, - "dependencies": { - "fancy-log": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", - "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", - "dev": true, - "requires": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "parse-node-version": "^1.0.0", - "time-stamp": "^1.0.0" - } - }, - "map-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", - "integrity": "sha1-ih8HiW2CsQkmvTdEokIACfiJdKg=", - "dev": true - } - } - }, - "gulp-typescript": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/gulp-typescript/-/gulp-typescript-5.0.0.tgz", - "integrity": "sha512-lMj2U+Ni6HyFaY2nr1sSQ6D014eHil5L1i52XWBaAQUR9UAUUp9btnm4yRBT2Jb8xhrwqmhMssZf/g2B7cinCA==", - "dev": true, - "requires": { - "ansi-colors": "^3.0.5", - "plugin-error": "^1.0.1", - "source-map": "^0.7.3", - "through2": "^3.0.0", - "vinyl": "^2.1.0", - "vinyl-fs": "^3.0.3" - }, - "dependencies": { - "ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", - "dev": true - }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "plugin-error": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", - "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", - "dev": true, - "requires": { - "ansi-colors": "^1.0.1", - "arr-diff": "^4.0.0", - "arr-union": "^3.1.0", - "extend-shallow": "^3.0.2" - }, - "dependencies": { - "ansi-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", - "dev": true, - "requires": { - "ansi-wrap": "^0.1.0" - } - } - } - }, - "readable-stream": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz", - "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - }, - "string_decoder": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", - "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "through2": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.0.tgz", - "integrity": "sha512-8B+sevlqP4OiCjonI1Zw03Sf8PuV1eRsYQgLad5eonILOdyeRsY27A/2Ze8IlvlMvq31OH+3fz/styI7Ya62yQ==", - "dev": true, - "requires": { - "readable-stream": "2 || 3", - "xtend": "~4.0.1" - } - }, - "vinyl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", - "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - } - } - }, - "gulp-util": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", - "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", - "dev": true, - "requires": { - "array-differ": "^1.0.0", - "array-uniq": "^1.0.2", - "beeper": "^1.0.0", - "chalk": "^1.0.0", - "dateformat": "^2.0.0", - "fancy-log": "^1.1.0", - "gulplog": "^1.0.0", - "has-gulplog": "^0.1.0", - "lodash._reescape": "^3.0.0", - "lodash._reevaluate": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.template": "^3.0.0", - "minimist": "^1.1.0", - "multipipe": "^0.1.2", - "object-assign": "^3.0.0", - "replace-ext": "0.0.1", - "through2": "^2.0.0", - "vinyl": "^0.5.0" - }, - "dependencies": { - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", - "dev": true - } - } - }, - "gulplog": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", - "dev": true, - "requires": { - "glogg": "^1.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-gulplog": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", - "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", - "dev": true, - "requires": { - "sparkles": "^1.0.0" - } - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "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" - } - } - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", - "dev": true - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, - "is": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/is/-/is-3.3.0.tgz", - "integrity": "sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==", - "dev": true - }, - "is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dev": true, - "requires": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "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" - } - } - } - }, - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", - "dev": true - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "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" - } - } - } - }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "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": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - }, - "is-negated-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", - "dev": true - }, - "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" - } - } - } - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", - "dev": true, - "requires": { - "is-path-inside": "^1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "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-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, - "requires": { - "is-unc-path": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - }, - "dependencies": { - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - } - } - }, - "is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dev": true, - "requires": { - "unc-path-regex": "^0.1.2" - } - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "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" - } - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "just-debounce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.0.0.tgz", - "integrity": "sha1-h/zPrv/AtozRnVX2cilD+SnqNeo=", - "dev": true - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "last-run": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", - "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=", - "dev": true, - "requires": { - "default-resolution": "^2.0.0", - "es6-weak-map": "^2.0.1" - } - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "requires": { - "readable-stream": "^2.0.5" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.0.3", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, - "lead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", - "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", - "dev": true, - "requires": { - "flush-write-stream": "^1.0.2" - } - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "liftoff": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz", - "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=", - "dev": true, - "requires": { - "extend": "^3.0.0", - "findup-sync": "^2.0.0", - "fined": "^1.0.1", - "flagged-respawn": "^1.0.0", - "is-plain-object": "^2.0.4", - "object.map": "^1.0.0", - "rechoir": "^0.6.2", - "resolve": "^1.1.7" - } - }, - "linkify-it": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", - "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", - "dev": true, - "requires": { - "uc.micro": "^1.0.1" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "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" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", - "dev": true - }, - "lodash._basetostring": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", - "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", - "dev": true - }, - "lodash._basevalues": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", - "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", - "dev": true - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", - "dev": true - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", - "dev": true - }, - "lodash._reescape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", - "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", - "dev": true - }, - "lodash._reevaluate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", - "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", - "dev": true - }, - "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._root": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", - "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", - "dev": true - }, - "lodash.escape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", - "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", - "dev": true, - "requires": { - "lodash._root": "^3.0.0" - } - }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", - "dev": true - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", - "dev": true - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, - "requires": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" - } - }, - "lodash.restparam": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", - "dev": true - }, - "lodash.template": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", - "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", - "dev": true, - "requires": { - "lodash._basecopy": "^3.0.0", - "lodash._basetostring": "^3.0.0", - "lodash._basevalues": "^3.0.0", - "lodash._isiterateecall": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0", - "lodash.keys": "^3.0.0", - "lodash.restparam": "^3.0.0", - "lodash.templatesettings": "^3.0.0" - } - }, - "lodash.templatesettings": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", - "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", - "dev": true, - "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0" - } - }, - "log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", - "dev": true, - "requires": { - "chalk": "^2.4.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "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" - } - }, - "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" - } - } - } - }, - "lru-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", - "dev": true, - "requires": { - "es5-ext": "~0.10.2" - } - }, - "make-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "markdown-it": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", - "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "entities": "~2.0.0", - "linkify-it": "^2.0.0", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "dependencies": { - "entities": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", - "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", - "dev": true - } - } - }, - "matchdep": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", - "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", - "dev": true, - "requires": { - "findup-sync": "^2.0.0", - "micromatch": "^3.0.4", - "resolve": "^1.4.0", - "stack-trace": "0.0.10" - } - }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", - "dev": true - }, - "memoizee": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.14.tgz", - "integrity": "sha512-/SWFvWegAIYAO4NQMpcX+gcra0yEZu4OntmUdrBaWrJncxOqAziGFlHxc7yjKVK2uu3lpPW27P27wkR82wA8mg==", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.45", - "es6-weak-map": "^2.0.2", - "event-emitter": "^0.3.5", - "is-promise": "^2.1", - "lru-queue": "0.1", - "next-tick": "1", - "timers-ext": "^0.1.5" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "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" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } - }, - "mocha": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.1.2.tgz", - "integrity": "sha512-o96kdRKMKI3E8U0bjnfqW4QMk12MwZ4mhdBTf+B5a1q9+aq2HRnj+3ZdJu0B/ZhJeK78MgYuv6L8d/rA5AeBJA==", - "dev": true, - "requires": { - "ansi-colors": "3.2.3", - "browser-stdout": "1.3.1", - "chokidar": "3.3.0", - "debug": "3.2.6", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "3.0.0", - "minimatch": "3.0.4", - "mkdirp": "0.5.5", - "ms": "2.1.1", - "node-environment-flags": "1.0.6", - "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", - "wide-align": "1.1.3", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.0" - }, - "dependencies": { - "ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", - "dev": true - }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "binary-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", - "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", - "dev": true - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "chokidar": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", - "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.1", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.2.0" - } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "readdirp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", - "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", - "dev": true, - "requires": { - "picomatch": "^2.0.4" - } - }, - "supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "multipipe": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", - "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", - "dev": true, - "requires": { - "duplexer2": "0.0.2" - } - }, - "mute-stdout": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", - "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", - "dev": true - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "nan": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", - "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "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-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": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, - "node-environment-flags": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", - "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", - "dev": true, - "requires": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "noice-json-rpc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/noice-json-rpc/-/noice-json-rpc-1.2.0.tgz", - "integrity": "sha512-Wm+otW+drKzdqlSPoSwj34tUEq/Xj1gX6Cr2avrykvTW4IY7d3ngLmP+PErALzS0s9nYRokXvYDM54sbFvLlDA==" - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - } - } - }, - "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" - } - }, - "now-and-later": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.0.tgz", - "integrity": "sha1-vGHLtFbXnLMiB85HygUTb/Ln1u4=", - "dev": true, - "requires": { - "once": "^1.3.2" - } - }, - "nth-check": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", - "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", - "dev": true, - "requires": { - "boolbase": "^1.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "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", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "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" - } - } - } - }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", - "dev": true - }, - "object-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", - "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", - "dev": true, - "requires": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", - "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, - "object.map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", - "dev": true, - "requires": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "object.reduce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", - "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=", - "dev": true, - "requires": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "ordered-read-streams": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", - "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "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-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.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 - }, - "parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", - "dev": true, - "requires": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true - }, - "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-semver": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", - "integrity": "sha1-mkr9bfBj3Egm+T+6SpnPIj9mbLg=", - "dev": true, - "requires": { - "semver": "^5.1.0" - } - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dev": true, - "requires": { - "parse5": "^6.0.1" - } - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", - "dev": true - }, - "path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", - "dev": true, - "requires": { - "path-root-regex": "^0.1.0" - } - }, - "path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", - "dev": true - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", - "dev": true, - "requires": { - "through": "~2.3" - } - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "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" - } - }, - "plugin-error": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", - "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", - "dev": true, - "requires": { - "ansi-colors": "^1.0.1", - "arr-diff": "^4.0.0", - "arr-union": "^3.1.0", - "extend-shallow": "^3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", - "dev": true - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - }, - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "qs": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", - "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", - "dev": true, - "requires": { - "mute-stream": "~0.0.4" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "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", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "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" - } - } - } - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "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" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "remove-bom-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", - "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5", - "is-utf8": "^0.2.1" - } - }, - "remove-bom-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", - "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", - "dev": true, - "requires": { - "remove-bom-buffer": "^3.0.0", - "safe-buffer": "^5.1.0", - "through2": "^2.0.3" - } - }, - "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", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", - "dev": true - }, - "replace-homedir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", - "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1", - "is-absolute": "^1.0.0", - "remove-trailing-separator": "^1.1.0" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "resolve": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", - "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", - "dev": true, - "requires": { - "path-parse": "^1.0.5" - } - }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - } - }, - "resolve-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", - "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", - "dev": true, - "requires": { - "value-or-function": "^3.0.0" - } - }, - "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 - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "^7.0.5" - } - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - }, - "semver-greatest-satisfied-range": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", - "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=", - "dev": true, - "requires": { - "sver-compat": "^1.5.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - } - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "dependencies": { - "object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", - "dev": true - } - } - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "requires": { - "is-arrayish": "^0.3.1" - } - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "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", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "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" - } - } - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "sparkles": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", - "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=", - "dev": true - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", - "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", - "dev": true - }, - "split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", - "dev": true, - "requires": { - "through": "2" - } - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", - "dev": true, - "requires": { - "duplexer": "~0.1.1" - } - }, - "stream-exhaust": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", - "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", - "dev": true - }, - "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string.prototype.trimleft": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", - "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", - "string.prototype.trimstart": "^1.0.0" - } - }, - "string.prototype.trimright": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", - "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", - "string.prototype.trimend": "^1.0.0" - } - }, - "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "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 - }, - "sver-compat": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", - "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=", - "dev": true, - "requires": { - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "^2.1.5", - "xtend": "~4.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.0.3", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", - "dev": true - }, - "timers-ext": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", - "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", - "dev": true, - "requires": { - "es5-ext": "~0.10.46", - "next-tick": "1" - } - }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - }, - "dependencies": { - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "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" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "to-through": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", - "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", - "dev": true, - "requires": { - "through2": "^2.0.3" - } - }, - "tslib": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.8.1.tgz", - "integrity": "sha1-aUavLR1lGnsYY7Ux1uWvpBqkTqw=", - "dev": true - }, - "tslint": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.8.0.tgz", - "integrity": "sha1-H0mtWy53x2w69N3K5VKuTjYS6xM=", - "dev": true, - "requires": { - "babel-code-frame": "^6.22.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.1.0", - "commander": "^2.9.0", - "diff": "^3.2.0", - "glob": "^7.1.1", - "minimatch": "^3.0.4", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.7.1", - "tsutils": "^2.12.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.1.0", - "escape-string-regexp": "^1.0.5", - "supports-color": "^4.0.0" - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "dev": true - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "^2.0.0" - } - } - } - }, - "tsutils": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.13.1.tgz", - "integrity": "sha512-XMOEvc2TiYesVSOJMI7OYPnBMSgcvERuGW5Li/J+2A0TuH607BPQnOLQ82oSPZCssB8c9+QGi6qhTBa/f1xQRA==", - "dev": true, - "requires": { - "tslib": "^1.8.0" - } - }, - "tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "dev": true - }, - "typed-rest-client": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.4.tgz", - "integrity": "sha512-MyfKKYzk3I6/QQp6e1T50py4qg+c+9BzOEl2rBmQIpStwNUoqQ73An+Tkfy9YuV7O+o2mpVVJpe+fH//POZkbg==", - "dev": true, - "requires": { - "qs": "^6.9.1", - "tunnel": "0.0.6", - "underscore": "^1.12.1" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "typescript": { - "version": "3.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.3.tgz", - "integrity": "sha512-D/wqnB2xzNFIcoBG9FG8cXRDjiqSTbG2wd8DMZeQyJlP1vfTkIxH4GKveWaEBYySKIg+USu+E+EDIR47SqnaMQ==", - "dev": true - }, - "uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", - "dev": true - }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", - "dev": true - }, - "underscore": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz", - "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==", - "dev": true - }, - "undertaker": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.2.0.tgz", - "integrity": "sha1-M52kZGJS0ILcN45wgGcpl1DhG0k=", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "bach": "^1.0.0", - "collection-map": "^1.0.0", - "es6-weak-map": "^2.0.1", - "last-run": "^1.1.0", - "object.defaults": "^1.0.0", - "object.reduce": "^1.0.0", - "undertaker-registry": "^1.0.0" - } - }, - "undertaker-registry": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", - "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=", - "dev": true - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "unique-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", - "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", - "dev": true, - "requires": { - "json-stable-stringify-without-jsonify": "^1.0.1", - "through2-filter": "^3.0.0" - }, - "dependencies": { - "through2-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", - "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", - "dev": true, - "requires": { - "through2": "~2.0.0", - "xtend": "~4.0.0" - } - } - } - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "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" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - } - } - }, - "upath": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", - "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", - "dev": true - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url-join": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-1.1.0.tgz", - "integrity": "sha1-dBxsL0WWxIMNZxhGCSDQySIC3Hg=", - "dev": true - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "v8flags": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.2.tgz", - "integrity": "sha512-MtivA7GF24yMPte9Rp/BWGCYQNaUj86zeYxV/x2RRJMKagImbbv3u8iJC57lNhWLPcGLJmHcHmFWkNsplbbLWw==", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "value-or-function": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", - "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", - "dev": true - }, - "vinyl": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", - "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", - "dev": true, - "requires": { - "clone": "^1.0.0", - "clone-stats": "^0.0.1", - "replace-ext": "0.0.1" - } - }, - "vinyl-fs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", - "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", - "dev": true, - "requires": { - "fs-mkdirp-stream": "^1.0.0", - "glob-stream": "^6.1.0", - "graceful-fs": "^4.0.0", - "is-valid-glob": "^1.0.0", - "lazystream": "^1.0.0", - "lead": "^1.0.0", - "object.assign": "^4.0.4", - "pumpify": "^1.3.5", - "readable-stream": "^2.3.3", - "remove-bom-buffer": "^3.0.0", - "remove-bom-stream": "^1.2.0", - "resolve-options": "^1.1.0", - "through2": "^2.0.0", - "to-through": "^2.0.0", - "value-or-function": "^3.0.0", - "vinyl": "^2.0.0", - "vinyl-sourcemap": "^1.1.0" - }, - "dependencies": { - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "is-valid-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "vinyl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", - "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - } - } - }, - "vinyl-sourcemap": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", - "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", - "dev": true, - "requires": { - "append-buffer": "^1.0.2", - "convert-source-map": "^1.5.0", - "graceful-fs": "^4.1.6", - "normalize-path": "^2.1.1", - "now-and-later": "^2.0.0", - "remove-bom-buffer": "^3.0.0", - "vinyl": "^2.0.0" - }, - "dependencies": { - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, - "vinyl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", - "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - } - } - }, - "vsce": { - "version": "1.95.1", - "resolved": "https://registry.npmjs.org/vsce/-/vsce-1.95.1.tgz", - "integrity": "sha512-2v8g3ZtZkaOTscRjjCAtM3Au6YYWJtg9UNt1iyyWko7ZHejbt5raClcNzQ7/WYVLYhYHc+otHQifV0gCBREgNg==", - "dev": true, - "requires": { - "azure-devops-node-api": "^11.0.1", - "chalk": "^2.4.2", - "cheerio": "^1.0.0-rc.9", - "commander": "^6.1.0", - "denodeify": "^1.2.1", - "glob": "^7.0.6", - "leven": "^3.1.0", - "lodash": "^4.17.15", - "markdown-it": "^10.0.0", - "mime": "^1.3.4", - "minimatch": "^3.0.3", - "osenv": "^0.1.3", - "parse-semver": "^1.1.1", - "read": "^1.0.7", - "semver": "^5.1.0", - "tmp": "^0.2.1", - "typed-rest-client": "^1.8.4", - "url-join": "^1.1.0", - "yauzl": "^2.3.1", - "yazl": "^2.2.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "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" - } - }, - "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true - }, - "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" - } - } - } - }, - "vscode-chrome-debug-core": { - "version": "6.8.11", - "resolved": "https://registry.npmjs.org/vscode-chrome-debug-core/-/vscode-chrome-debug-core-6.8.11.tgz", - "integrity": "sha512-SZZHhKeatXCDqlD+6E/EtEJqcteDJD6y3IVV+6VXX1d1wxPxlJyYcoLhtnX/X5Vvo/5CEm5s8DNGkFoiHgxOUw==", - "requires": { - "@types/source-map": "^0.1.27", - "color": "^3.1.3", - "devtools-protocol": "0.0.588169", - "glob": "^7.1.3", - "noice-json-rpc": "^1.2.0", - "source-map": "^0.6.1", - "vscode-debugadapter": "^1.47.0", - "vscode-debugprotocol": "^1.37.0", - "vscode-nls": "^4.0.0", - "vscode-uri": "^2.0.2", - "ws": "^6.0.0" - }, - "dependencies": { - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "vscode-debugadapter": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/vscode-debugadapter/-/vscode-debugadapter-1.47.0.tgz", - "integrity": "sha512-ppO1M9/mwsxE1B1lNNhZ9z1IfNNaRfDmR+yrdRQBW6Tz4VmNhRJ5hyUREJGk+OyW26RU4shO6tXpZa9CzUYiQw==", - "requires": { - "mkdirp": "^0.5.5", - "vscode-debugprotocol": "1.47.0" - }, - "dependencies": { - "vscode-debugprotocol": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/vscode-debugprotocol/-/vscode-debugprotocol-1.47.0.tgz", - "integrity": "sha512-ii7oCz3Wfr/SGtFr5AYop5dJm0dUmpg0hq2lTzTBdaht8nSheYMMjPntxULBR+2TUxXLcCKFZkF2UEJQduYsIQ==" - } - } - } - } - }, - "vscode-chrome-debug-core-testsupport": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/vscode-chrome-debug-core-testsupport/-/vscode-chrome-debug-core-testsupport-4.0.0.tgz", - "integrity": "sha512-ZoAoKBLFOSJGlgoCiYD1XtJbstZLJqjzDptau0WJo7ohn9xGY2hZhr80ple4IuB1TIusyKR3/N20aMeEviokBw==", - "dev": true, - "requires": { - "vscode-debugadapter-testsupport": "^1.24.0" - } - }, - "vscode-debugadapter": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/vscode-debugadapter/-/vscode-debugadapter-1.40.0.tgz", - "integrity": "sha512-cudm9ROtFRxiBgcM+B8cQXA1DfsRKaOfEYDMh9upxbYxN3v0c40SHCPmNivIYp7LDzcG60UGaIYD1vsUfC1Qcg==", - "requires": { - "mkdirp": "^0.5.1", - "vscode-debugprotocol": "1.40.0" - }, - "dependencies": { - "vscode-debugprotocol": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/vscode-debugprotocol/-/vscode-debugprotocol-1.40.0.tgz", - "integrity": "sha512-Fwze+9qbLDPuQUhtITJSu/Vk6zIuakNM1iR2ZiZRgRaMEgBpMs2JSKaT0chrhJHCOy6/UbpsUbUBIseF6msV+g==" - } - } - }, - "vscode-debugadapter-testsupport": { - "version": "1.25.0", - "resolved": "https://registry.npmjs.org/vscode-debugadapter-testsupport/-/vscode-debugadapter-testsupport-1.25.0.tgz", - "integrity": "sha512-6E2N7CoH7B0KEDvI9mFVFt4H+dRFDhtj3PmLVjNojfZ1VZZS2yfhE0XO0E5Axdhef3zTpUU6WZoeOOMVFGZGIg==", - "dev": true, - "requires": { - "vscode-debugprotocol": "1.25.0" - }, - "dependencies": { - "vscode-debugprotocol": { - "version": "1.25.0", - "resolved": "https://registry.npmjs.org/vscode-debugprotocol/-/vscode-debugprotocol-1.25.0.tgz", - "integrity": "sha512-e1EUy/5npqa0NlAwRCUu8A9LnVRf6tkwiPQcCLyUFCC9o2GxcAqH5Va4mqXDoxQ58ar3zODivKQeRb3z1KH7WA==", - "dev": true - } - } - }, - "vscode-debugprotocol": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/vscode-debugprotocol/-/vscode-debugprotocol-1.37.0.tgz", - "integrity": "sha512-ppZLEBbFRVNsK0YpfgFi/x2CDyihx0F+UpdKmgeJcvi05UgSXYdO0n9sDVYwoGvvYQPvlpDQeWuY0nloOC4mPA==" - }, - "vscode-nls": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-4.0.0.tgz", - "integrity": "sha512-qCfdzcH+0LgQnBpZA53bA32kzp9rpq/f66Som577ObeuDlFIrtbEJ+A/+CCxjIh4G8dpJYNCKIsxpRAHIfsbNw==" - }, - "vscode-nls-dev": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/vscode-nls-dev/-/vscode-nls-dev-3.3.1.tgz", - "integrity": "sha512-fug18D7CXb8pv8JoQ0D0JmZaIYDQoKLiyZxkAy5P8Cln/FwlNsdzwQILDph62EdGY5pvsJ2Jd1T5qgHAExe/tg==", - "dev": true, - "requires": { - "ansi-colors": "^3.2.3", - "clone": "^2.1.1", - "event-stream": "^3.3.4", - "fancy-log": "^1.3.3", - "glob": "^7.1.2", - "iconv-lite": "^0.4.19", - "is": "^3.2.1", - "source-map": "^0.6.1", - "typescript": "^2.6.2", - "vinyl": "^2.1.0", - "xml2js": "^0.4.19", - "yargs": "^13.2.4" - }, - "dependencies": { - "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "dev": true - }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "fancy-log": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", - "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", - "dev": true, - "requires": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "parse-node-version": "^1.0.0", - "time-stamp": "^1.0.0" - } - }, - "replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "typescript": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", - "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", - "dev": true - }, - "vinyl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", - "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - } - } - }, - "vscode-uri": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz", - "integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==" - }, - "vso-node-api": { - "version": "6.1.2-preview", - "resolved": "https://registry.npmjs.org/vso-node-api/-/vso-node-api-6.1.2-preview.tgz", - "integrity": "sha1-qrNUbfJFHs2JTgcbuZtd8Zxfp48=", - "dev": true, - "requires": { - "q": "^1.0.1", - "tunnel": "0.0.4", - "typed-rest-client": "^0.9.0", - "underscore": "^1.8.3" - } - }, - "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "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", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "dev": true, - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - } - }, - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "dev": true - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - }, - "dependencies": { - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - } - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "yargs-unparser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", - "dev": true, - "requires": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" - } - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", - "dev": true, - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "yazl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", - "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", - "dev": true, - "requires": { - "buffer-crc32": "~0.2.3" - } - } - } -} diff --git a/package.json b/package.json index 831b2db7..bec27a14 100644 --- a/package.json +++ b/package.json @@ -21,33 +21,33 @@ "license": "MIT", "private": true, "dependencies": { - "minimatch": "^3.0.4", - "vscode-chrome-debug-core": "^6.8.11", - "vscode-debugadapter": "^1.40.0", - "vscode-nls": "^4.0.0" + "minimatch": "3.0.4", + "vscode-chrome-debug-core": "6.8.11", + "vscode-debugadapter": "1.40.0", + "vscode-nls": "4.0.0" }, "devDependencies": { - "@types/minimatch": "^3.0.3", - "@types/mocha": "^2.2.47", - "@types/node": "^12.0.0", - "@types/vscode": "^1.45.1", - "del": "^2.2.2", - "event-stream": "^3.3.4", - "find-free-port": "^1.0.2", - "gulp": "^4.0.0", - "gulp-sourcemaps": "^2.6.4", - "gulp-tslint": "^8.1.4", - "gulp-typescript": "^5.0.0", - "gulp-util": "^3.0.5", - "minimist": "^1.2.5", - "mocha": "^7.1.2", - "tslint": "^5.7.0", - "typescript": "^3.9.3", - "vsce": "^1.95.1", - "vscode-chrome-debug-core-testsupport": "^4.0.0", - "vscode-debugadapter-testsupport": "^1.25.0", - "vscode-debugprotocol": "^1.37.0", - "vscode-nls-dev": "^3.3.1" + "@types/minimatch": "3.0.3", + "@types/mocha": "2.2.47", + "@types/node": "12.0.0", + "@types/vscode": "1.45.1", + "del": "2.2.2", + "event-stream": "3.3.4", + "find-free-port": "1.0.2", + "gulp": "4.0.0", + "gulp-sourcemaps": "2.6.4", + "gulp-tslint": "8.1.4", + "gulp-typescript": "5.0.0", + "gulp-util": "3.0.5", + "minimist": "1.2.5", + "mocha": "7.1.2", + "tslint": "5.7.0", + "typescript": "3.9.3", + "vsce": "1.95.1", + "vscode-chrome-debug-core-testsupport": "4.0.0", + "vscode-debugadapter-testsupport": "1.25.0", + "vscode-debugprotocol": "1.37.0", + "vscode-nls-dev": "3.3.1" }, "main": "./out/src/extension", "activationEvents": [ @@ -67,7 +67,7 @@ "package": "gulp package" }, "engines": { - "vscode": "^1.60.0-insider", + "vscode": "1.60.0-insider", "node": ">=10" }, "repository": { diff --git a/testdata/calls-between-merged-files/package.json b/testdata/calls-between-merged-files/package.json index 2261ac3d..39895f8b 100644 --- a/testdata/calls-between-merged-files/package.json +++ b/testdata/calls-between-merged-files/package.json @@ -9,12 +9,12 @@ }, "dependencies": {}, "devDependencies": { - "@types/node": "^6.0.41", - "gulp": "^3.9.1", - "gulp-concat": "^2.6.1", - "gulp-filter": "^4.0.0", - "gulp-sourcemaps": "^1.9.1", - "gulp-typescript": "^3.1.4", - "typescript": "^2.1.4" + "@types/node": "6.0.41", + "gulp": "3.9.1", + "gulp-concat": "2.6.1", + "gulp-filter": "4.0.0", + "gulp-sourcemaps": "1.9.1", + "gulp-typescript": "3.1.4", + "typescript": "2.1.4" } } diff --git a/testdata/sourcemaps-local-paths/package-lock.json b/testdata/sourcemaps-local-paths/package-lock.json deleted file mode 100644 index 42eb8b81..00000000 --- a/testdata/sourcemaps-local-paths/package-lock.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "sourcemaps-local-paths", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "typescript": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", - "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==" - } - } -} diff --git a/testdata/webpack/package.json b/testdata/webpack/package.json index 17cab24b..48547b6b 100644 --- a/testdata/webpack/package.json +++ b/testdata/webpack/package.json @@ -9,9 +9,9 @@ }, "dependencies": {}, "devDependencies": { - "@types/node": "^6.0.41", - "ts-loader": "^1.3.3", - "typescript": "^2.1.4", - "webpack": "^2.2.0-rc.2" + "@types/node": "6.0.41", + "ts-loader": "1.3.3", + "typescript": "2.1.4", + "webpack": "2.2.0-rc.2" } } From c5eaa2e70d3201dc516fd4e976928865abbcbd05 Mon Sep 17 00:00:00 2001 From: Nikola Hristov Date: Sun, 29 Oct 2023 08:15:35 +0200 Subject: [PATCH 3/9] squash! --- package.json | 36 +++++++++---------- .../calls-between-merged-files/package.json | 12 +++---- testdata/sourcemaps-local-paths/package.json | 2 +- testdata/webpack/package.json | 8 ++--- 4 files changed, 29 insertions(+), 29 deletions(-) diff --git a/package.json b/package.json index bec27a14..89188693 100644 --- a/package.json +++ b/package.json @@ -21,33 +21,33 @@ "license": "MIT", "private": true, "dependencies": { - "minimatch": "3.0.4", + "minimatch": "9.0.3", "vscode-chrome-debug-core": "6.8.11", "vscode-debugadapter": "1.40.0", - "vscode-nls": "4.0.0" + "vscode-nls": "5.2.0" }, "devDependencies": { - "@types/minimatch": "3.0.3", - "@types/mocha": "2.2.47", - "@types/node": "12.0.0", - "@types/vscode": "1.45.1", - "del": "2.2.2", - "event-stream": "3.3.4", - "find-free-port": "1.0.2", - "gulp": "4.0.0", - "gulp-sourcemaps": "2.6.4", + "@types/minimatch": "5.1.2", + "@types/mocha": "10.0.3", + "@types/node": "20.8.9", + "@types/vscode": "1.83.1", + "del": "7.1.0", + "event-stream": "4.0.1", + "find-free-port": "2.0.0", + "gulp": "4.0.2", + "gulp-sourcemaps": "3.0.0", "gulp-tslint": "8.1.4", - "gulp-typescript": "5.0.0", + "gulp-typescript": "5.0.1", "gulp-util": "3.0.5", - "minimist": "1.2.5", - "mocha": "7.1.2", - "tslint": "5.7.0", - "typescript": "3.9.3", + "minimist": "1.2.8", + "mocha": "10.2.0", + "tslint": "5.20.1", + "typescript": "5.2.2", "vsce": "1.95.1", - "vscode-chrome-debug-core-testsupport": "4.0.0", + "vscode-chrome-debug-core-testsupport": "4.1.1", "vscode-debugadapter-testsupport": "1.25.0", "vscode-debugprotocol": "1.37.0", - "vscode-nls-dev": "3.3.1" + "vscode-nls-dev": "4.0.4" }, "main": "./out/src/extension", "activationEvents": [ diff --git a/testdata/calls-between-merged-files/package.json b/testdata/calls-between-merged-files/package.json index 39895f8b..e7da7e1f 100644 --- a/testdata/calls-between-merged-files/package.json +++ b/testdata/calls-between-merged-files/package.json @@ -9,12 +9,12 @@ }, "dependencies": {}, "devDependencies": { - "@types/node": "6.0.41", - "gulp": "3.9.1", + "@types/node": "20.8.9", + "gulp": "4.0.2", "gulp-concat": "2.6.1", - "gulp-filter": "4.0.0", - "gulp-sourcemaps": "1.9.1", - "gulp-typescript": "3.1.4", - "typescript": "2.1.4" + "gulp-filter": "8.0.0", + "gulp-sourcemaps": "3.0.0", + "gulp-typescript": "5.0.1", + "typescript": "5.2.2" } } diff --git a/testdata/sourcemaps-local-paths/package.json b/testdata/sourcemaps-local-paths/package.json index aa89414b..fa80a9aa 100644 --- a/testdata/sourcemaps-local-paths/package.json +++ b/testdata/sourcemaps-local-paths/package.json @@ -8,6 +8,6 @@ "postinstall": "tsc" }, "dependencies": { - "typescript": "2.9.2" + "typescript": "5.2.2" } } diff --git a/testdata/webpack/package.json b/testdata/webpack/package.json index 48547b6b..7f444198 100644 --- a/testdata/webpack/package.json +++ b/testdata/webpack/package.json @@ -9,9 +9,9 @@ }, "dependencies": {}, "devDependencies": { - "@types/node": "6.0.41", - "ts-loader": "1.3.3", - "typescript": "2.1.4", - "webpack": "2.2.0-rc.2" + "@types/node": "20.8.9", + "ts-loader": "9.5.0", + "typescript": "5.2.2", + "webpack": "5.89.0" } } From a3489de0727c65a52be536dd8706702bea488f19 Mon Sep 17 00:00:00 2001 From: Nikola Hristov Date: Sun, 29 Oct 2023 09:56:29 +0200 Subject: [PATCH 4/9] squash! --- package.json | 23 ++++++++++----- .../calls-between-merged-files/package.json | 29 +++++++++++++++---- testdata/sourcemaps-local-paths/package.json | 27 +++++++++++++++-- testdata/webpack/package.json | 29 +++++++++++++++---- 4 files changed, 88 insertions(+), 20 deletions(-) diff --git a/package.json b/package.json index 89188693..0fbddf7a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "node-debug2", "displayName": "[Deprecated] Node Debug", - "version": "1.43.0", + "version": "0.0.1", "publisher": "ms-vscode", "description": "%extension.description%", "icon": "images/node-debug-icon.png", @@ -9,7 +9,9 @@ "Debuggers" ], "author": { - "name": "Microsoft Corporation" + "name": "Nikola Hristov", + "email": "nikola@nikolahristov.tech", + "url": "https://nikolahristov.tech" }, "capabilities": { "virtualWorkspaces": false, @@ -19,7 +21,7 @@ } }, "license": "MIT", - "private": true, + "private": "false", "dependencies": { "minimatch": "9.0.3", "vscode-chrome-debug-core": "6.8.11", @@ -47,7 +49,8 @@ "vscode-chrome-debug-core-testsupport": "4.1.1", "vscode-debugadapter-testsupport": "1.25.0", "vscode-debugprotocol": "1.37.0", - "vscode-nls-dev": "4.0.4" + "vscode-nls-dev": "4.0.4", + "typescript-esbuild": "0.3.1" }, "main": "./out/src/extension", "activationEvents": [ @@ -64,7 +67,8 @@ "publish": "gulp publish", "patch": "npm version patch -m '%s'", "minor": "npm version minor -m '%s'", - "package": "gulp package" + "package": "gulp package", + "prepublishOnly": "TypeScriptESBuild Source/**/*.ts" }, "engines": { "vscode": "1.60.0-insider", @@ -72,10 +76,10 @@ }, "repository": { "type": "git", - "url": "https://github.com/Microsoft/vscode-node-debug2.git" + "url": "git+https://github.com/CodeEditorLand/CodeEditorLand.git" }, "bugs": { - "url": "https://github.com/Microsoft/vscode-node-debug2/issues" + "url": "https://github.com/CodeEditorLand/CodeEditorLand/issues" }, "contributes": { "breakpoints": [ @@ -501,5 +505,10 @@ "title": "%toggle.skipping.this.file%" } ] + }, + "homepage": "https://github.com/CodeEditorLand/CodeEditorLand#readme", + "type": "module", + "publishConfig": { + "access": "public" } } diff --git a/testdata/calls-between-merged-files/package.json b/testdata/calls-between-merged-files/package.json index e7da7e1f..ebd441f4 100644 --- a/testdata/calls-between-merged-files/package.json +++ b/testdata/calls-between-merged-files/package.json @@ -1,13 +1,18 @@ { "name": "testdata-calls-between-merged-files", - "version": "1.0.0", + "version": "0.0.1", "description": "Test project for vscode-node-debug2 using gulp", - "author": "", + "author": { + "name": "Nikola Hristov", + "email": "nikola@nikolahristov.tech", + "url": "https://nikolahristov.tech" + }, "license": "MIT", "scripts": { - "build": "gulp build" + "build": "gulp build", + "prepublishOnly": "TypeScriptESBuild Source/**/*.ts" }, - "dependencies": {}, + "devDependencies": { "@types/node": "20.8.9", "gulp": "4.0.2", @@ -15,6 +20,20 @@ "gulp-filter": "8.0.0", "gulp-sourcemaps": "3.0.0", "gulp-typescript": "5.0.1", - "typescript": "5.2.2" + "typescript": "5.2.2", + "typescript-esbuild": "0.3.1" + }, + "homepage": "https://github.com/CodeEditorLand/CodeEditorLand#readme", + "bugs": { + "url": "https://github.com/CodeEditorLand/CodeEditorLand/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/CodeEditorLand/CodeEditorLand.git" + }, + "type": "module", + "private": "false", + "publishConfig": { + "access": "public" } } diff --git a/testdata/sourcemaps-local-paths/package.json b/testdata/sourcemaps-local-paths/package.json index fa80a9aa..e764710c 100644 --- a/testdata/sourcemaps-local-paths/package.json +++ b/testdata/sourcemaps-local-paths/package.json @@ -1,13 +1,34 @@ { "name": "sourcemaps-local-paths", - "version": "1.0.0", + "version": "0.0.1", "description": "", - "author": "roblourens", + "author": { + "name": "Nikola Hristov", + "email": "nikola@nikolahristov.tech", + "url": "https://nikolahristov.tech" + }, "license": "MIT", "scripts": { - "postinstall": "tsc" + "postinstall": "tsc", + "prepublishOnly": "TypeScriptESBuild Source/**/*.ts" }, "dependencies": { "typescript": "5.2.2" + }, + "homepage": "https://github.com/CodeEditorLand/CodeEditorLand#readme", + "bugs": { + "url": "https://github.com/CodeEditorLand/CodeEditorLand/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/CodeEditorLand/CodeEditorLand.git" + }, + "type": "module", + "private": "false", + "publishConfig": { + "access": "public" + }, + "devDependencies": { + "typescript-esbuild": "0.3.1" } } diff --git a/testdata/webpack/package.json b/testdata/webpack/package.json index 7f444198..84ac8408 100644 --- a/testdata/webpack/package.json +++ b/testdata/webpack/package.json @@ -1,17 +1,36 @@ { "name": "testdata-webpack", - "version": "1.0.0", + "version": "0.0.1", "description": "Test project for vscode-node-debug2 using webpack", - "author": "", + "author": { + "name": "Nikola Hristov", + "email": "nikola@nikolahristov.tech", + "url": "https://nikolahristov.tech" + }, "license": "MIT", "scripts": { - "build": "webpack" + "build": "webpack", + "prepublishOnly": "TypeScriptESBuild Source/**/*.ts" }, - "dependencies": {}, + "devDependencies": { "@types/node": "20.8.9", "ts-loader": "9.5.0", "typescript": "5.2.2", - "webpack": "5.89.0" + "webpack": "5.89.0", + "typescript-esbuild": "0.3.1" + }, + "homepage": "https://github.com/CodeEditorLand/CodeEditorLand#readme", + "bugs": { + "url": "https://github.com/CodeEditorLand/CodeEditorLand/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/CodeEditorLand/CodeEditorLand.git" + }, + "type": "module", + "private": "false", + "publishConfig": { + "access": "public" } } From 9de11643014d0ddc3d9cb989916b313e66b63453 Mon Sep 17 00:00:00 2001 From: Nikola Hristov Date: Sun, 29 Oct 2023 11:46:41 +0200 Subject: [PATCH 5/9] squash! --- package.json | 146 +++++++++--------- .../calls-between-merged-files/package.json | 24 +-- testdata/sourcemaps-local-paths/package.json | 27 ++-- testdata/webpack/package.json | 28 ++-- 4 files changed, 113 insertions(+), 112 deletions(-) diff --git a/package.json b/package.json index 0fbddf7a..def16d57 100644 --- a/package.json +++ b/package.json @@ -2,84 +2,39 @@ "name": "node-debug2", "displayName": "[Deprecated] Node Debug", "version": "0.0.1", - "publisher": "ms-vscode", + "private": "false", "description": "%extension.description%", - "icon": "images/node-debug-icon.png", "categories": [ "Debuggers" ], + "homepage": "https://github.com/CodeEditorLand/CodeEditorLand#readme", + "bugs": { + "url": "https://github.com/CodeEditorLand/CodeEditorLand/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/CodeEditorLand/CodeEditorLand.git" + }, + "license": "MIT", "author": { "name": "Nikola Hristov", "email": "nikola@nikolahristov.tech", "url": "https://nikolahristov.tech" }, - "capabilities": { - "virtualWorkspaces": false, - "untrustedWorkspaces": { - "supported": "limited", - "description": "%workspaceTrust%" - } - }, - "license": "MIT", - "private": "false", - "dependencies": { - "minimatch": "9.0.3", - "vscode-chrome-debug-core": "6.8.11", - "vscode-debugadapter": "1.40.0", - "vscode-nls": "5.2.0" - }, - "devDependencies": { - "@types/minimatch": "5.1.2", - "@types/mocha": "10.0.3", - "@types/node": "20.8.9", - "@types/vscode": "1.83.1", - "del": "7.1.0", - "event-stream": "4.0.1", - "find-free-port": "2.0.0", - "gulp": "4.0.2", - "gulp-sourcemaps": "3.0.0", - "gulp-tslint": "8.1.4", - "gulp-typescript": "5.0.1", - "gulp-util": "3.0.5", - "minimist": "1.2.8", - "mocha": "10.2.0", - "tslint": "5.20.1", - "typescript": "5.2.2", - "vsce": "1.95.1", - "vscode-chrome-debug-core-testsupport": "4.1.1", - "vscode-debugadapter-testsupport": "1.25.0", - "vscode-debugprotocol": "1.37.0", - "vscode-nls-dev": "4.0.4", - "typescript-esbuild": "0.3.1" - }, + "publisher": "playform", + "type": "module", "main": "./out/src/extension", - "activationEvents": [ - "onDebug:legacy-extensionHost", - "onDebugResolve:legacy-extensionHost", - "onCommand:extension.node-debug2.toggleSkippingFile" - ], "scripts": { "build": "gulp build", - "watch": "gulp watch", - "test": "mocha --timeout 20000 -s 2000 -u tdd --colors --reporter node_modules/vscode-chrome-debug-core-testsupport/out/loggingReporter.js ./out/test/", - "vscode:prepublish": "gulp verify-no-linked-modules && gulp build", - "tslint": "gulp tslint", - "publish": "gulp publish", - "patch": "npm version patch -m '%s'", "minor": "npm version minor -m '%s'", "package": "gulp package", - "prepublishOnly": "TypeScriptESBuild Source/**/*.ts" - }, - "engines": { - "vscode": "1.60.0-insider", - "node": ">=10" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/CodeEditorLand/CodeEditorLand.git" - }, - "bugs": { - "url": "https://github.com/CodeEditorLand/CodeEditorLand/issues" + "patch": "npm version patch -m '%s'", + "prepublishOnly": "TypeScriptESBuild Source/**/*.ts", + "publish": "gulp publish", + "test": "mocha --timeout 20000 -s 2000 -u tdd --colors --reporter node_modules/vscode-chrome-debug-core-testsupport/out/loggingReporter.js ./out/test/", + "tslint": "gulp tslint", + "vscode:prepublish": "gulp verify-no-linked-modules && gulp build", + "watch": "gulp watch" }, "contributes": { "breakpoints": [ @@ -90,6 +45,12 @@ "language": "javascriptreact" } ], + "commands": [ + { + "command": "extension.node-debug2.toggleSkippingFile", + "title": "%toggle.skipping.this.file%" + } + ], "debuggers": [ { "type": "legacy-extensionHost", @@ -498,17 +459,56 @@ "when": "inDebugMode && debugType == 'node2' && callStackItemType == 'stackFrame'" } ] - }, - "commands": [ - { - "command": "extension.node-debug2.toggleSkippingFile", - "title": "%toggle.skipping.this.file%" - } - ] + } + }, + "activationEvents": [ + "onDebug:legacy-extensionHost", + "onDebugResolve:legacy-extensionHost", + "onCommand:extension.node-debug2.toggleSkippingFile" + ], + "dependencies": { + "minimatch": "9.0.3", + "vscode-chrome-debug-core": "6.8.11", + "vscode-debugadapter": "1.40.0", + "vscode-nls": "5.2.0" + }, + "devDependencies": { + "@types/minimatch": "5.1.2", + "@types/mocha": "10.0.3", + "@types/node": "20.8.9", + "@types/vscode": "1.83.1", + "del": "7.1.0", + "event-stream": "4.0.1", + "find-free-port": "2.0.0", + "gulp": "4.0.2", + "gulp-sourcemaps": "3.0.0", + "gulp-tslint": "8.1.4", + "gulp-typescript": "5.0.1", + "gulp-util": "3.0.5", + "minimist": "1.2.8", + "mocha": "10.2.0", + "tslint": "5.20.1", + "typescript": "5.2.2", + "typescript-esbuild": "0.3.1", + "vsce": "1.95.1", + "vscode-chrome-debug-core-testsupport": "4.1.1", + "vscode-debugadapter-testsupport": "1.25.0", + "vscode-debugprotocol": "1.37.0", + "vscode-nls-dev": "4.0.4" + }, + "engines": { + "node": ">=10", + "vscode": "1.60.0-insider" }, - "homepage": "https://github.com/CodeEditorLand/CodeEditorLand#readme", - "type": "module", "publishConfig": { "access": "public" + }, + "icon": "images/node-debug-icon.png", + "capabilities": { + "virtualWorkspaces": false, + "untrustedWorkspaces": { + "supported": "limited", + "description": "%workspaceTrust%" + } } } diff --git a/testdata/calls-between-merged-files/package.json b/testdata/calls-between-merged-files/package.json index ebd441f4..0b3ceb53 100644 --- a/testdata/calls-between-merged-files/package.json +++ b/testdata/calls-between-merged-files/package.json @@ -1,18 +1,28 @@ { "name": "testdata-calls-between-merged-files", "version": "0.0.1", + "private": "false", "description": "Test project for vscode-node-debug2 using gulp", + "homepage": "https://github.com/CodeEditorLand/CodeEditorLand#readme", + "bugs": { + "url": "https://github.com/CodeEditorLand/CodeEditorLand/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/CodeEditorLand/CodeEditorLand.git" + }, + "license": "MIT", "author": { "name": "Nikola Hristov", "email": "nikola@nikolahristov.tech", "url": "https://nikolahristov.tech" }, - "license": "MIT", + "publisher": "playform", + "type": "module", "scripts": { "build": "gulp build", "prepublishOnly": "TypeScriptESBuild Source/**/*.ts" }, - "devDependencies": { "@types/node": "20.8.9", "gulp": "4.0.2", @@ -23,16 +33,6 @@ "typescript": "5.2.2", "typescript-esbuild": "0.3.1" }, - "homepage": "https://github.com/CodeEditorLand/CodeEditorLand#readme", - "bugs": { - "url": "https://github.com/CodeEditorLand/CodeEditorLand/issues" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/CodeEditorLand/CodeEditorLand.git" - }, - "type": "module", - "private": "false", "publishConfig": { "access": "public" } diff --git a/testdata/sourcemaps-local-paths/package.json b/testdata/sourcemaps-local-paths/package.json index e764710c..4a90cc4c 100644 --- a/testdata/sourcemaps-local-paths/package.json +++ b/testdata/sourcemaps-local-paths/package.json @@ -1,13 +1,24 @@ { "name": "sourcemaps-local-paths", "version": "0.0.1", + "private": "false", "description": "", + "homepage": "https://github.com/CodeEditorLand/CodeEditorLand#readme", + "bugs": { + "url": "https://github.com/CodeEditorLand/CodeEditorLand/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/CodeEditorLand/CodeEditorLand.git" + }, + "license": "MIT", "author": { "name": "Nikola Hristov", "email": "nikola@nikolahristov.tech", "url": "https://nikolahristov.tech" }, - "license": "MIT", + "publisher": "playform", + "type": "module", "scripts": { "postinstall": "tsc", "prepublishOnly": "TypeScriptESBuild Source/**/*.ts" @@ -15,20 +26,10 @@ "dependencies": { "typescript": "5.2.2" }, - "homepage": "https://github.com/CodeEditorLand/CodeEditorLand#readme", - "bugs": { - "url": "https://github.com/CodeEditorLand/CodeEditorLand/issues" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/CodeEditorLand/CodeEditorLand.git" + "devDependencies": { + "typescript-esbuild": "0.3.1" }, - "type": "module", - "private": "false", "publishConfig": { "access": "public" - }, - "devDependencies": { - "typescript-esbuild": "0.3.1" } } diff --git a/testdata/webpack/package.json b/testdata/webpack/package.json index 84ac8408..5e03b4f3 100644 --- a/testdata/webpack/package.json +++ b/testdata/webpack/package.json @@ -1,35 +1,35 @@ { "name": "testdata-webpack", "version": "0.0.1", + "private": "false", "description": "Test project for vscode-node-debug2 using webpack", + "homepage": "https://github.com/CodeEditorLand/CodeEditorLand#readme", + "bugs": { + "url": "https://github.com/CodeEditorLand/CodeEditorLand/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/CodeEditorLand/CodeEditorLand.git" + }, + "license": "MIT", "author": { "name": "Nikola Hristov", "email": "nikola@nikolahristov.tech", "url": "https://nikolahristov.tech" }, - "license": "MIT", + "publisher": "playform", + "type": "module", "scripts": { "build": "webpack", "prepublishOnly": "TypeScriptESBuild Source/**/*.ts" }, - "devDependencies": { "@types/node": "20.8.9", "ts-loader": "9.5.0", "typescript": "5.2.2", - "webpack": "5.89.0", - "typescript-esbuild": "0.3.1" - }, - "homepage": "https://github.com/CodeEditorLand/CodeEditorLand#readme", - "bugs": { - "url": "https://github.com/CodeEditorLand/CodeEditorLand/issues" + "typescript-esbuild": "0.3.1", + "webpack": "5.89.0" }, - "repository": { - "type": "git", - "url": "git+https://github.com/CodeEditorLand/CodeEditorLand.git" - }, - "type": "module", - "private": "false", "publishConfig": { "access": "public" } From d54545ffba5307fadd4cd2f3b539b85a67a32870 Mon Sep 17 00:00:00 2001 From: Nikola Hristov Date: Sun, 29 Oct 2023 21:47:56 +0200 Subject: [PATCH 6/9] squash! --- {src => Source}/errors.ts | 0 {src => Source}/extension.ts | 0 {src => Source}/nodeBreakpoints.ts | 0 {src => Source}/nodeDebug.ts | 0 {src => Source}/nodeDebugAdapter.ts | 0 {src => Source}/nodeDebugInterfaces.d.ts | 0 {src => Source}/nodeScripts.ts | 0 {src => Source}/pathUtils.ts | 0 {src => Source}/terminateProcess.sh | 0 {src => Source}/utils.ts | 0 {src => Source}/wslSupport.ts | 0 i18n/chs/out/src/errors.i18n.json | 16 ---------------- i18n/chs/out/src/nodeDebugAdapter.i18n.json | 16 ---------------- i18n/cht/out/src/errors.i18n.json | 16 ---------------- i18n/cht/out/src/nodeDebugAdapter.i18n.json | 16 ---------------- i18n/csy/out/src/errors.i18n.json | 16 ---------------- i18n/csy/out/src/nodeDebugAdapter.i18n.json | 16 ---------------- i18n/deu/out/src/errors.i18n.json | 16 ---------------- i18n/deu/out/src/nodeDebugAdapter.i18n.json | 16 ---------------- i18n/esn/out/src/errors.i18n.json | 16 ---------------- i18n/esn/out/src/nodeDebugAdapter.i18n.json | 16 ---------------- i18n/fra/out/src/errors.i18n.json | 16 ---------------- i18n/fra/out/src/nodeDebugAdapter.i18n.json | 16 ---------------- i18n/hun/out/src/errors.i18n.json | 14 -------------- i18n/hun/out/src/nodeDebugAdapter.i18n.json | 15 --------------- i18n/ita/out/src/errors.i18n.json | 16 ---------------- i18n/ita/out/src/nodeDebugAdapter.i18n.json | 16 ---------------- i18n/jpn/out/src/errors.i18n.json | 16 ---------------- i18n/jpn/out/src/nodeDebugAdapter.i18n.json | 16 ---------------- i18n/kor/out/src/errors.i18n.json | 16 ---------------- i18n/kor/out/src/nodeDebugAdapter.i18n.json | 16 ---------------- i18n/plk/out/src/errors.i18n.json | 16 ---------------- i18n/plk/out/src/nodeDebugAdapter.i18n.json | 16 ---------------- i18n/ptb/out/src/errors.i18n.json | 16 ---------------- i18n/ptb/out/src/nodeDebugAdapter.i18n.json | 16 ---------------- i18n/rus/out/src/errors.i18n.json | 16 ---------------- i18n/rus/out/src/nodeDebugAdapter.i18n.json | 16 ---------------- i18n/trk/out/src/errors.i18n.json | 16 ---------------- i18n/trk/out/src/nodeDebugAdapter.i18n.json | 16 ---------------- .../{src => Source}/sourceA.ts | 0 .../{src => Source}/sourceB.ts | 0 .../{src => Source}/sourceA.ts | 0 .../{src => Source}/sourceB.ts | 0 .../{src => Source}/classes.ts | 0 .../sourcemaps-2574/{src => Source}/classes.ts | 0 .../sourcemaps-inline/{src => Source}/classes.ts | 0 .../{src => Source}/classes.ts | 0 .../{src => Source}/classes.ts | 0 .../{src => Source}/file2.ts | 0 .../{src => Source}/program.ts | 0 .../{src => Source}/mapped.ts | 0 testdata/symlinked-file/{src => Source}/file.js | 0 52 files changed, 445 deletions(-) rename {src => Source}/errors.ts (100%) rename {src => Source}/extension.ts (100%) rename {src => Source}/nodeBreakpoints.ts (100%) rename {src => Source}/nodeDebug.ts (100%) rename {src => Source}/nodeDebugAdapter.ts (100%) rename {src => Source}/nodeDebugInterfaces.d.ts (100%) rename {src => Source}/nodeScripts.ts (100%) rename {src => Source}/pathUtils.ts (100%) rename {src => Source}/terminateProcess.sh (100%) mode change 100755 => 100644 rename {src => Source}/utils.ts (100%) rename {src => Source}/wslSupport.ts (100%) delete mode 100644 i18n/chs/out/src/errors.i18n.json delete mode 100644 i18n/chs/out/src/nodeDebugAdapter.i18n.json delete mode 100644 i18n/cht/out/src/errors.i18n.json delete mode 100644 i18n/cht/out/src/nodeDebugAdapter.i18n.json delete mode 100644 i18n/csy/out/src/errors.i18n.json delete mode 100644 i18n/csy/out/src/nodeDebugAdapter.i18n.json delete mode 100644 i18n/deu/out/src/errors.i18n.json delete mode 100644 i18n/deu/out/src/nodeDebugAdapter.i18n.json delete mode 100644 i18n/esn/out/src/errors.i18n.json delete mode 100644 i18n/esn/out/src/nodeDebugAdapter.i18n.json delete mode 100644 i18n/fra/out/src/errors.i18n.json delete mode 100644 i18n/fra/out/src/nodeDebugAdapter.i18n.json delete mode 100644 i18n/hun/out/src/errors.i18n.json delete mode 100644 i18n/hun/out/src/nodeDebugAdapter.i18n.json delete mode 100644 i18n/ita/out/src/errors.i18n.json delete mode 100644 i18n/ita/out/src/nodeDebugAdapter.i18n.json delete mode 100644 i18n/jpn/out/src/errors.i18n.json delete mode 100644 i18n/jpn/out/src/nodeDebugAdapter.i18n.json delete mode 100644 i18n/kor/out/src/errors.i18n.json delete mode 100644 i18n/kor/out/src/nodeDebugAdapter.i18n.json delete mode 100644 i18n/plk/out/src/errors.i18n.json delete mode 100644 i18n/plk/out/src/nodeDebugAdapter.i18n.json delete mode 100644 i18n/ptb/out/src/errors.i18n.json delete mode 100644 i18n/ptb/out/src/nodeDebugAdapter.i18n.json delete mode 100644 i18n/rus/out/src/errors.i18n.json delete mode 100644 i18n/rus/out/src/nodeDebugAdapter.i18n.json delete mode 100644 i18n/trk/out/src/errors.i18n.json delete mode 100644 i18n/trk/out/src/nodeDebugAdapter.i18n.json rename testdata/calls-between-files-with-exception/{src => Source}/sourceA.ts (100%) rename testdata/calls-between-files-with-exception/{src => Source}/sourceB.ts (100%) rename testdata/calls-between-sourcemapped-files/{src => Source}/sourceA.ts (100%) rename testdata/calls-between-sourcemapped-files/{src => Source}/sourceB.ts (100%) rename testdata/sourcemap-no-sourceMappingURL/{src => Source}/classes.ts (100%) rename testdata/sourcemaps-2574/{src => Source}/classes.ts (100%) rename testdata/sourcemaps-inline/{src => Source}/classes.ts (100%) rename testdata/sourcemaps-js-entrypoint/{src => Source}/classes.ts (100%) rename testdata/sourcemaps-local-paths/{src => Source}/classes.ts (100%) rename testdata/sourcemaps-setinterval/{src => Source}/file2.ts (100%) rename testdata/sourcemaps-setinterval/{src => Source}/program.ts (100%) rename testdata/sourcemaps-with-and-without/{src => Source}/mapped.ts (100%) rename testdata/symlinked-file/{src => Source}/file.js (100%) diff --git a/src/errors.ts b/Source/errors.ts similarity index 100% rename from src/errors.ts rename to Source/errors.ts diff --git a/src/extension.ts b/Source/extension.ts similarity index 100% rename from src/extension.ts rename to Source/extension.ts diff --git a/src/nodeBreakpoints.ts b/Source/nodeBreakpoints.ts similarity index 100% rename from src/nodeBreakpoints.ts rename to Source/nodeBreakpoints.ts diff --git a/src/nodeDebug.ts b/Source/nodeDebug.ts similarity index 100% rename from src/nodeDebug.ts rename to Source/nodeDebug.ts diff --git a/src/nodeDebugAdapter.ts b/Source/nodeDebugAdapter.ts similarity index 100% rename from src/nodeDebugAdapter.ts rename to Source/nodeDebugAdapter.ts diff --git a/src/nodeDebugInterfaces.d.ts b/Source/nodeDebugInterfaces.d.ts similarity index 100% rename from src/nodeDebugInterfaces.d.ts rename to Source/nodeDebugInterfaces.d.ts diff --git a/src/nodeScripts.ts b/Source/nodeScripts.ts similarity index 100% rename from src/nodeScripts.ts rename to Source/nodeScripts.ts diff --git a/src/pathUtils.ts b/Source/pathUtils.ts similarity index 100% rename from src/pathUtils.ts rename to Source/pathUtils.ts diff --git a/src/terminateProcess.sh b/Source/terminateProcess.sh old mode 100755 new mode 100644 similarity index 100% rename from src/terminateProcess.sh rename to Source/terminateProcess.sh diff --git a/src/utils.ts b/Source/utils.ts similarity index 100% rename from src/utils.ts rename to Source/utils.ts diff --git a/src/wslSupport.ts b/Source/wslSupport.ts similarity index 100% rename from src/wslSupport.ts rename to Source/wslSupport.ts diff --git a/i18n/chs/out/src/errors.i18n.json b/i18n/chs/out/src/errors.i18n.json deleted file mode 100644 index 4d264dfa..00000000 --- a/i18n/chs/out/src/errors.i18n.json +++ /dev/null @@ -1,16 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// Do not edit this file. It is machine generated. -{ - "VSND2001": "路径上找不到运行时 {0}。是否安装了 {0}?", - "VSND2011": "无法在终端启动调试目标({0})。", - "VSND2017": "无法启动调试目标({0})。", - "VSND2035": "无法调试扩展({0})。", - "VSND2028": "未知的控制台类型 {0}。", - "VSND2002": "无法启动程序 {0};配置源映射可能有用。", - "VSND2003": "无法启动程序 {0};设置 {1} 属性可能有用。", - "VSND2009": "无法启动程序 {0},因为找不到相应的 JavaScript。", - "VSND2029": "无法从文件加载环境变量({0})。" -} \ No newline at end of file diff --git a/i18n/chs/out/src/nodeDebugAdapter.i18n.json b/i18n/chs/out/src/nodeDebugAdapter.i18n.json deleted file mode 100644 index b5ed999f..00000000 --- a/i18n/chs/out/src/nodeDebugAdapter.i18n.json +++ /dev/null @@ -1,16 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// Do not edit this file. It is machine generated. -{ - "attribute.wsl.not.exist": "找不到用于安装 Linux 的 Windows 子系统。", - "program.path.case.mismatch.warning": "程序路径使用不同大写字符作为磁盘上的文件;这可能导致命不中断点。", - "node.console.title": "节点调试控制台", - "attribute.path.not.exist": "属性 {0} 不存在({1})。", - "attribute.path.not.absolute": "属性 {0} 不是绝对路径({1});请考虑添加“{2}”作为前缀以使其成为绝对路径。", - "VSND2001": "路径上找不到运行时 {0}。请确保已安装 {0}。", - "more.information": "详细信息", - "origin.from.node": "Node.js 中的只读内容", - "origin.core.module": "只读核心模块" -} \ No newline at end of file diff --git a/i18n/cht/out/src/errors.i18n.json b/i18n/cht/out/src/errors.i18n.json deleted file mode 100644 index 6cf4d55e..00000000 --- a/i18n/cht/out/src/errors.i18n.json +++ /dev/null @@ -1,16 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// Do not edit this file. It is machine generated. -{ - "VSND2001": "在 PATH 上找不到執行階段 '{0}'。已安裝了 '{0}' 嗎?", - "VSND2011": "在終端機 ({0}) 中無法啟動偵錯目標。", - "VSND2017": "無法啟動偵錯目標 ({0})。", - "VSND2035": "無法偵錯延伸模組 ({0})。", - "VSND2028": "未知的主控台類型 '{0}'。", - "VSND2002": "無法啟動程式 '{0}'; 設定來源對應可能有所助益。", - "VSND2003": "無法啟動程式 '{0}'; 設定 '{1}' 屬性可能有所助益。", - "VSND2009": "因為找不到相對應的 JavaScript,所以無法啟動程式 '{0}'。", - "VSND2029": "無法從檔案 ({0}) 載入環境變數。" -} \ No newline at end of file diff --git a/i18n/cht/out/src/nodeDebugAdapter.i18n.json b/i18n/cht/out/src/nodeDebugAdapter.i18n.json deleted file mode 100644 index 6b4e6b7d..00000000 --- a/i18n/cht/out/src/nodeDebugAdapter.i18n.json +++ /dev/null @@ -1,16 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// Do not edit this file. It is machine generated. -{ - "attribute.wsl.not.exist": "找不到 Windows 子系統可進行 Linux 安裝。", - "program.path.case.mismatch.warning": "程式路徑使用的大小寫字元不同於磁碟上的檔案。這可能導致無法命中中斷點。", - "node.console.title": "節點偵錯主控台", - "attribute.path.not.exist": "屬性 '{0}' 不存在 ('{1}')。", - "attribute.path.not.absolute": "屬性 '{0}' 不是絕對的 ('{1}'); 請考慮新增前置詞 '{2}',使其變成絕對的。", - "VSND2001": "在 PATH 上找不到執行階段 '{0}'。請務必安裝 '{0}'。", - "more.information": "其他資訊", - "origin.from.node": "Node.js 中的唯讀內容", - "origin.core.module": "唯讀核心模組" -} \ No newline at end of file diff --git a/i18n/csy/out/src/errors.i18n.json b/i18n/csy/out/src/errors.i18n.json deleted file mode 100644 index a7f95306..00000000 --- a/i18n/csy/out/src/errors.i18n.json +++ /dev/null @@ -1,16 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// Do not edit this file. It is machine generated. -{ - "VSND2001": "Modul runtime {0} nelze na cestě najít. Je {0} nainstalovaný?", - "VSND2011": "Nelze spustit cíl ladění v terminálu ({0}).", - "VSND2017": "Nelze spustit cíl ladění ({0}).", - "VSND2035": "Nelze ladit rozšíření ({0}).", - "VSND2028": "Neznámý typ konzoly {0}", - "VSND2002": "Program {0} nelze spustit. Pomoct by mohla konfigurace mapování zdrojů.", - "VSND2003": "Program {0} nelze spustit. Pomoct by mohlo nastavení atributu {1}.", - "VSND2009": "Program {0} nelze spustit, protože nelze najít odpovídající JavaScript.", - "VSND2029": "Nelze načíst proměnné prostředí ze souboru ({0})." -} \ No newline at end of file diff --git a/i18n/csy/out/src/nodeDebugAdapter.i18n.json b/i18n/csy/out/src/nodeDebugAdapter.i18n.json deleted file mode 100644 index 0b4e5968..00000000 --- a/i18n/csy/out/src/nodeDebugAdapter.i18n.json +++ /dev/null @@ -1,16 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// Do not edit this file. It is machine generated. -{ - "attribute.wsl.not.exist": "Instalaci subsystému Windows pro Linux nelze najít.", - "program.path.case.mismatch.warning": "Cesta k programu používá jinou velikost písma ve znaku než soubor na disku. Může to způsobit, že nedojde k dosažení zarážek.", - "node.console.title": "Konzola ladění uzlů", - "attribute.path.not.exist": "Atribut {0} neexistuje ({1}).", - "attribute.path.not.absolute": "Atribut {0} není absolutní ({1}). Zvažte přidání předpony {2}, aby byl tento atribut absolutní.", - "VSND2001": "Modul runtime {0} nelze na cestě najít. Ujistěte se, jestli je {0} nainstalovaný.", - "more.information": "Další informace", - "origin.from.node": "obsah jen pro čtení z Node.js", - "origin.core.module": "modul Core jen pro čtení" -} \ No newline at end of file diff --git a/i18n/deu/out/src/errors.i18n.json b/i18n/deu/out/src/errors.i18n.json deleted file mode 100644 index baef8d98..00000000 --- a/i18n/deu/out/src/errors.i18n.json +++ /dev/null @@ -1,16 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// Do not edit this file. It is machine generated. -{ - "VSND2001": "Die Runtime \"{0}\" wurde nicht in PATH gefunden. Ist \"{0}\" installiert?", - "VSND2011": "Das Debugziel im Terminal kann nicht gestartet werden ({0}).", - "VSND2017": "Das Debugziel kann nicht gestartet werden ({0}).", - "VSND2035": "Debuggen der Erweiterung nicht möglich ({0}).", - "VSND2028": "Unbekannter Konsolentyp \"{0}\".", - "VSND2002": "Das Programm \"{0}\" kann nicht gestartet werden. Möglicherweise kann das Problem durch Konfigurieren von Quellzuordnungen behoben werden.", - "VSND2003": "Das Programm \"{0}\" kann nicht gestartet werden. Möglicherweise kann das Problem durch Festlegen des Attributs \"{1}\" behoben werden.", - "VSND2009": "Das Programm \"{0}\" kann nicht gestartet werden, weil das zugehörige JavaScript nicht gefunden wurde.", - "VSND2029": "Umgebungsvariablen können nicht aus Datei geladen werden ({0})." -} \ No newline at end of file diff --git a/i18n/deu/out/src/nodeDebugAdapter.i18n.json b/i18n/deu/out/src/nodeDebugAdapter.i18n.json deleted file mode 100644 index 6c0078f0..00000000 --- a/i18n/deu/out/src/nodeDebugAdapter.i18n.json +++ /dev/null @@ -1,16 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// Do not edit this file. It is machine generated. -{ - "attribute.wsl.not.exist": "Das Windows-Subsystem für die Linux-Installation wurde nicht gefunden.", - "program.path.case.mismatch.warning": "Der Programmpfad verwendet eine andere Groß-/Kleinschreibung als die Datei auf dem Datenträger. Dies kann dazu führen, dass Haltepunkte nicht wirksam sind.", - "node.console.title": "Node-Debugkonsole", - "attribute.path.not.exist": "Das Attribut \"{0}\" ist nicht vorhanden ({1}).", - "attribute.path.not.absolute": "Das Attribut \"{0}\" ist nicht absolut ({1}). Erwägen Sie das Hinzufügen von \"{2}\" als Präfix, um ein absolutes Attribut zu erhalten.", - "VSND2001": "Die Runtime \"{0}\" wurde nicht in PATH gefunden. Stellen Sie sicher, dass \"{0}\" installiert ist.", - "more.information": "Weitere Informationen", - "origin.from.node": "Schreibgeschützter Inhalt aus Node.js", - "origin.core.module": "Schreibgeschütztes Kernmodul" -} \ No newline at end of file diff --git a/i18n/esn/out/src/errors.i18n.json b/i18n/esn/out/src/errors.i18n.json deleted file mode 100644 index e907ceea..00000000 --- a/i18n/esn/out/src/errors.i18n.json +++ /dev/null @@ -1,16 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// Do not edit this file. It is machine generated. -{ - "VSND2001": "No se encuentra el entorno de ejecución \"{0}\" en PATH. ¿Se ha instalado \"{0}\"?", - "VSND2011": "No se puede iniciar el destino de depuración en el terminal ({0}).", - "VSND2017": "No se puede iniciar el destino de depuración ({0}).", - "VSND2035": "No se puede depurar la extensión ({0}).", - "VSND2028": "Tipo de consola \"{0}\" desconocido.", - "VSND2002": "No se puede iniciar el programa \"{0}\". Configurar mapas de origen puede ser útil.", - "VSND2003": "No se puede iniciar el programa \"{0}\". Establecer el atributo \"{1}\" puede ser útil.", - "VSND2009": "No se puede iniciar el programa \"{0}\" porque no se encuentra el elemento JavaScript correspondiente.", - "VSND2029": "No se pueden cargar las variables de entorno del archivo ({0})." -} \ No newline at end of file diff --git a/i18n/esn/out/src/nodeDebugAdapter.i18n.json b/i18n/esn/out/src/nodeDebugAdapter.i18n.json deleted file mode 100644 index feb84bca..00000000 --- a/i18n/esn/out/src/nodeDebugAdapter.i18n.json +++ /dev/null @@ -1,16 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// Do not edit this file. It is machine generated. -{ - "attribute.wsl.not.exist": "No se encuentra el subsistema de Windows para la instalación de Linux.", - "program.path.case.mismatch.warning": "El uso de mayúsculas y minúsculas en la ruta de acceso del programa no es igual al del archivo en disco. Esto puede hacer que no se llegue a los puntos de interrupción.", - "node.console.title": "Consola de depuración de Node", - "attribute.path.not.exist": "El atributo \"{0}\" no existe (\"{1}\").", - "attribute.path.not.absolute": "El atributo \"{0}\" no es absoluto (\"{1}\"). Pruebe a agregar \"{2}\" como prefijo para hacerlo absoluto.", - "VSND2001": "No se encuentra el entorno de ejecución \"{0}\" en PATH. Asegúrese de haber instalado \"{0}\".", - "more.information": "Más información", - "origin.from.node": "contenido de solo lectura de Node.js", - "origin.core.module": "módulo principal de solo lectura" -} \ No newline at end of file diff --git a/i18n/fra/out/src/errors.i18n.json b/i18n/fra/out/src/errors.i18n.json deleted file mode 100644 index 03cea5e7..00000000 --- a/i18n/fra/out/src/errors.i18n.json +++ /dev/null @@ -1,16 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// Do not edit this file. It is machine generated. -{ - "VSND2001": "Le runtime '{0}' est introuvable dans PATH. Est-ce que '{0}' est installé ?", - "VSND2011": "Impossible de lancer la cible de débogage dans le terminal ({0}).", - "VSND2017": "Impossible de lancer la cible de débogage ({0}).", - "VSND2035": "Impossible de déboguer l'extension ({0}).", - "VSND2028": "Type de console inconnu '{0}'.", - "VSND2002": "Impossible de lancer le programme '{0}'. Essayez éventuellement de configurer les mappages de sources.", - "VSND2003": "Impossible de lancer le programme '{0}'. La définition de l'attribut '{1}' peut éventuellement permettre de résoudre le problème.", - "VSND2009": "Impossible de lancer le programme '{0}', car le code JavaScript correspondant est introuvable.", - "VSND2029": "Impossible de charger les variables d'environnement à partir du fichier ({0})." -} \ No newline at end of file diff --git a/i18n/fra/out/src/nodeDebugAdapter.i18n.json b/i18n/fra/out/src/nodeDebugAdapter.i18n.json deleted file mode 100644 index e165076d..00000000 --- a/i18n/fra/out/src/nodeDebugAdapter.i18n.json +++ /dev/null @@ -1,16 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// Do not edit this file. It is machine generated. -{ - "attribute.wsl.not.exist": "L'installation du sous-système Windows pour Linux est introuvable.", - "program.path.case.mismatch.warning": "Le chemin du programme utilise un nom de fichier contenant des caractères avec des casses différentes, ce qui peut empêcher d'atteindre les points d'arrêt.", - "node.console.title": "Console de débogage Node", - "attribute.path.not.exist": "L'attribut '{0}' n'existe pas ('{1}').", - "attribute.path.not.absolute": "L'attribut '{0}' n'est pas absolu ('{1}'). Ajoutez le préfixe '{2}' pour le rendre absolu.", - "VSND2001": "Le runtime '{0}' est introuvable dans PATH. Vérifiez que '{0}' est installé.", - "more.information": "Plus d'informations", - "origin.from.node": "contenu en lecture seule en provenance de Node.js", - "origin.core.module": "module de base en lecture seule" -} \ No newline at end of file diff --git a/i18n/hun/out/src/errors.i18n.json b/i18n/hun/out/src/errors.i18n.json deleted file mode 100644 index 76d1e1e0..00000000 --- a/i18n/hun/out/src/errors.i18n.json +++ /dev/null @@ -1,14 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// Do not edit this file. It is machine generated. -{ - "VSND2001": "A(z) '{0}' futtatókörnyezet nem található a PATH-ban.", - "VSND2011": "Nem sikerült elindítani a hibakeresési célpontot a terminálban ({0}).", - "VSND2017": "Nem sikerült elindítani a hibakeresési célpontot ({0}).", - "VSND2028": "Ismeretlen konzoltípus: '{0}'.", - "VSND2002": "Nem sikerült elindítani a(z) '{0}' programot; a forráskódtérképek bekonfigurálása segíthet.", - "VSND2003": "Nem sikerült elindítani a(z) '{0}' programot; a(z) '{1}' attribútum beállítása segíthet.", - "VSND2029": "Nem sikerült betölteni fájlból a környezeti változókat ({0})." -} \ No newline at end of file diff --git a/i18n/hun/out/src/nodeDebugAdapter.i18n.json b/i18n/hun/out/src/nodeDebugAdapter.i18n.json deleted file mode 100644 index 8db9283e..00000000 --- a/i18n/hun/out/src/nodeDebugAdapter.i18n.json +++ /dev/null @@ -1,15 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// Do not edit this file. It is machine generated. -{ - "program.path.case.mismatch.warning": "A program elérési útja különbözik kis- és nagybetűk tekintetében a lemezen lévő fájltól; ez azt eredményezheti, hogy a töréspontok nem lesznek érintve.", - "node.console.title": "Node hibakeresési konzol", - "attribute.path.not.exist": "A(z) '{0}' attribútum nem létezik ('{1}').", - "attribute.path.not.absolute": "A(z) '{0}' attribútum nem abszolút ('{1}'); adja hozzá a(z) '{2}' előtagot, hogy abszolút legyen.", - "VSND2001": "A(z) '{0}' futtatókörnyezet nem található a PATH-ban.", - "more.information": "További információ", - "origin.from.node": "írásvédett tartalom a Node.js-től", - "origin.core.module": "írásvédett központi modul" -} \ No newline at end of file diff --git a/i18n/ita/out/src/errors.i18n.json b/i18n/ita/out/src/errors.i18n.json deleted file mode 100644 index 5a4ae343..00000000 --- a/i18n/ita/out/src/errors.i18n.json +++ /dev/null @@ -1,16 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// Do not edit this file. It is machine generated. -{ - "VSND2001": "Non è possibile trovare il runtime '{0}' in PATH. '{0}' è installato?", - "VSND2011": "Non è possibile avviare la destinazione di debug nel terminale ({0}).", - "VSND2017": "Non è possibile avviare la destinazione di debug ({0}).", - "VSND2035": "Non è possibile eseguire il debug dell'estensione ({0}).", - "VSND2028": "Il tipo di console '{0}' è sconosciuto.", - "VSND2002": "Non è possibile avviare il programma '{0}'. Per risolvere il problema, provare a configurare i mapping di origine.", - "VSND2003": "Non è possibile avviare il programma '{0}'. Per risolvere il problema, provare a impostare l'attributo '{1}'.", - "VSND2009": "Non è possibile avviare il programma '{0}' perché non è stata trovata la versione corrispondente di JavaScript.", - "VSND2029": "Non è possibile caricare le variabili di ambiente dal file ({0})." -} \ No newline at end of file diff --git a/i18n/ita/out/src/nodeDebugAdapter.i18n.json b/i18n/ita/out/src/nodeDebugAdapter.i18n.json deleted file mode 100644 index acf272cb..00000000 --- a/i18n/ita/out/src/nodeDebugAdapter.i18n.json +++ /dev/null @@ -1,16 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// Do not edit this file. It is machine generated. -{ - "attribute.wsl.not.exist": "Non è possibile trovare l'installazione del sottosistema Windows per Linux.", - "program.path.case.mismatch.warning": "La combinazione di minuscole/maiuscole usata nel percorso del programma è diversa rispetto al file su disco. È possibile che i punti di interruzione non vengano rilevati.", - "node.console.title": "Console di debug di Node", - "attribute.path.not.exist": "L'attributo '{0}' non esiste ('{1}').", - "attribute.path.not.absolute": "L'attributo '{0}' non è assoluto ('{1}'). Per renderlo assoluto, provare ad aggiungere il prefisso '{2}'.", - "VSND2001": "Non è possibile trovare il runtime '{0}' in PATH. Assicurarsi che '{0}' sia installato.", - "more.information": "Altre informazioni", - "origin.from.node": "contenuto di sola lettura di Node.js", - "origin.core.module": "modulo principale di sola lettura" -} \ No newline at end of file diff --git a/i18n/jpn/out/src/errors.i18n.json b/i18n/jpn/out/src/errors.i18n.json deleted file mode 100644 index 01b9a5ef..00000000 --- a/i18n/jpn/out/src/errors.i18n.json +++ /dev/null @@ -1,16 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// Do not edit this file. It is machine generated. -{ - "VSND2001": "PATH にランタイム '{0}' が見つかりません。'{0}' はインストールされていますか?", - "VSND2011": "端末 ({0}) でデバッグ ターゲットを起動できません。", - "VSND2017": "デバッグ ターゲット ({0}) を起動できません。", - "VSND2035": "拡張機能 ({0}) をデバッグできません。", - "VSND2028": "コンソールの種類 '{0}' が不明です。", - "VSND2002": "プログラム '{0}' を起動できません。ソース マップを構成することによって解決される可能性があります。", - "VSND2003": "プログラム '{0}' を起動できません。'{1}' 属性を設定することによって解決される可能性があります。", - "VSND2009": "対応する JavaScript が見つからないため、プログラム '{0}' を起動できません。", - "VSND2029": "ファイル ({0}) から環境変数を読み込めません。" -} \ No newline at end of file diff --git a/i18n/jpn/out/src/nodeDebugAdapter.i18n.json b/i18n/jpn/out/src/nodeDebugAdapter.i18n.json deleted file mode 100644 index 0bfbd4a0..00000000 --- a/i18n/jpn/out/src/nodeDebugAdapter.i18n.json +++ /dev/null @@ -1,16 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// Do not edit this file. It is machine generated. -{ - "attribute.wsl.not.exist": "Windows Subsystem for Linux インストールが見つかりません。", - "program.path.case.mismatch.warning": "プログラム パスで使用されている文字と、ディスク上のファイルの文字の間で大文字と小文字が異なっています。ブレークポイントがヒットしない可能性があります。", - "node.console.title": "Node デバッグ コンソール", - "attribute.path.not.exist": "属性 '{0}' がありません ('{1}')。", - "attribute.path.not.absolute": "属性 '{0}' が絶対パスになっていません ('{1}')。'{2}' を接頭辞として追加して絶対パスにすることをご検討ください。", - "VSND2001": "PATH にランタイム '{0}' が見つかりません。'{0}' がインストールされていることをご確認ください。", - "more.information": "詳細情報", - "origin.from.node": "Node.js からの読み取り専用コンテンツ", - "origin.core.module": "読み取り専用のコア モジュール" -} \ No newline at end of file diff --git a/i18n/kor/out/src/errors.i18n.json b/i18n/kor/out/src/errors.i18n.json deleted file mode 100644 index fb6efef1..00000000 --- a/i18n/kor/out/src/errors.i18n.json +++ /dev/null @@ -1,16 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// Do not edit this file. It is machine generated. -{ - "VSND2001": "PATH에서 '{0}' 런타임을 찾을 수 없습니다. '{0}'이(가) 설치되어 있나요?", - "VSND2011": "터미널({0})에서 디버그 대상을 시작할 수 없습니다.", - "VSND2017": "디버그 대상({0})을 시작할 수 없습니다.", - "VSND2035": "확장({0})을 디버그할 수 없습니다.", - "VSND2028": "알 수 없는 콘솔 유형 '{0}'입니다.", - "VSND2002": "'{0}' 프로그램을 시작할 수 없습니다. 소스 맵을 구성하면 도움이 될 수 있습니다.", - "VSND2003": "'{0}' 프로그램을 시작할 수 없습니다. '{1}' 특성을 설정하면 도움이 될 수 있습니다.", - "VSND2009": "해당 JavaScript를 찾을 수 없으므로 '{0}' 프로그램을 시작할 수 없습니다.", - "VSND2029": "파일({0})에서 환경 변수를 로드할 수 없습니다." -} \ No newline at end of file diff --git a/i18n/kor/out/src/nodeDebugAdapter.i18n.json b/i18n/kor/out/src/nodeDebugAdapter.i18n.json deleted file mode 100644 index 5f3ec766..00000000 --- a/i18n/kor/out/src/nodeDebugAdapter.i18n.json +++ /dev/null @@ -1,16 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// Do not edit this file. It is machine generated. -{ - "attribute.wsl.not.exist": "Linux 설치에 대한 Windows 하위 시스템을 찾을 수 없습니다.", - "program.path.case.mismatch.warning": "프로그램 경로에 디스크의 파일과 다른 대/소문자가 사용됩니다. 이로 인해 중단점이 적중되지 않을 수 있습니다.", - "node.console.title": "노드 디버그 콘솔", - "attribute.path.not.exist": "'{0}' 특성이 없습니다('{1}').", - "attribute.path.not.absolute": "'{0}' 특성이 절대('{1}')가 아닙니다. 절대로 설정하려면 접두사로 '{2}'을(를) 추가하는 것이 좋습니다.", - "VSND2001": "PATH에서 '{0}' 런타임을 찾을 수 없습니다. '{0}'이(가) 설치되어 있는지 확인하세요.", - "more.information": "추가 정보", - "origin.from.node": "Node.js의 읽기 전용 콘텐츠", - "origin.core.module": "읽기 전용 핵심 모듈" -} \ No newline at end of file diff --git a/i18n/plk/out/src/errors.i18n.json b/i18n/plk/out/src/errors.i18n.json deleted file mode 100644 index 9a4b29b3..00000000 --- a/i18n/plk/out/src/errors.i18n.json +++ /dev/null @@ -1,16 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// Do not edit this file. It is machine generated. -{ - "VSND2001": "Nie można znaleźć środowiska uruchomieniowego „{0}” w ścieżce. Czy środowisko „{0}” jest zainstalowane?", - "VSND2011": "Nie można uruchomić elementu docelowego debugowania w terminalu ({0}).", - "VSND2017": "Nie można uruchomić elementu docelowego debugowania ({0}).", - "VSND2035": "Nie można debugować rozszerzenia ({0}).", - "VSND2028": "Nieznany typ konsoli: „{0}”.", - "VSND2002": "Nie można uruchomić programu „{0}”; skonfigurowanie map źródła może pomóc.", - "VSND2003": "Nie można uruchomić programu „{0}”; ustawienie atrybutu „{1}” może pomóc.", - "VSND2009": "Nie można uruchomić programu „{0}”, ponieważ nie można odnaleźć odpowiedniego kodu JavaScript.", - "VSND2029": "Nie można załadować zmiennych środowiskowych z pliku ({0})." -} \ No newline at end of file diff --git a/i18n/plk/out/src/nodeDebugAdapter.i18n.json b/i18n/plk/out/src/nodeDebugAdapter.i18n.json deleted file mode 100644 index cee10893..00000000 --- a/i18n/plk/out/src/nodeDebugAdapter.i18n.json +++ /dev/null @@ -1,16 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// Do not edit this file. It is machine generated. -{ - "attribute.wsl.not.exist": "Nie można odnaleźć instalacji podsystemu Windows dla systemu Linux.", - "program.path.case.mismatch.warning": "Ścieżka programu używa innej wielkości liter niż plik na dysku. Może to skutkować nietrafieniem punktów przerwania.", - "node.console.title": "Konsola debugowania węzła", - "attribute.path.not.exist": "Atrybut „{0}” nie istnieje („{1}”).", - "attribute.path.not.absolute": "Atrybut „{0}” nie jest bezwzględny („{1}”). Rozważ dodanie „{2}” jako prefiksu, aby stał się bezwzględny.", - "VSND2001": "Nie można znaleźć środowiska uruchomieniowego „{0}” w ścieżce. Upewnij się, że środowisko „{0}” zostało zainstalowane.", - "more.information": "Więcej informacji", - "origin.from.node": "zawartość tylko do odczytu z Node.js", - "origin.core.module": "moduł podstawowy tylko do odczytu" -} \ No newline at end of file diff --git a/i18n/ptb/out/src/errors.i18n.json b/i18n/ptb/out/src/errors.i18n.json deleted file mode 100644 index 3520729f..00000000 --- a/i18n/ptb/out/src/errors.i18n.json +++ /dev/null @@ -1,16 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// Do not edit this file. It is machine generated. -{ - "VSND2001": "Não é possível encontrar o tempo de execução '{0}' no CAMINHO. '{0}' está instalado?", - "VSND2011": "Não é possível iniciar o destino de depuração no terminal ({0}).", - "VSND2017": "Não é possível iniciar o destino de depuração ({0}).", - "VSND2035": "Não é possível depurar a extensão ({0}).", - "VSND2028": "Tipo de console desconhecido '{0}'.", - "VSND2002": "Não é possível iniciar o programa '{0}'. A configuração de mapas de origem pode ajudar.", - "VSND2003": "Não é possível iniciar o programa '{0}'. A configuração do atributo '{1}' pode ajudar.", - "VSND2009": "Não é possível iniciar o programa '{0}' porque o JavaScript correspondente não pode ser encontrado.", - "VSND2029": "Não é possível carregar as variáveis de ambiente do arquivo ({0})." -} \ No newline at end of file diff --git a/i18n/ptb/out/src/nodeDebugAdapter.i18n.json b/i18n/ptb/out/src/nodeDebugAdapter.i18n.json deleted file mode 100644 index 261c8edc..00000000 --- a/i18n/ptb/out/src/nodeDebugAdapter.i18n.json +++ /dev/null @@ -1,16 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// Do not edit this file. It is machine generated. -{ - "attribute.wsl.not.exist": "Não é possível encontrar o Subsistema Windows para a instalação do Linux.", - "program.path.case.mismatch.warning": "O caminho do programa usa um caractere com uma diferença entre maiúsculas e minúsculas como arquivo no disco. Isso pode fazer com que os pontos de interrupção não sejam atingidos.", - "node.console.title": "Console de Depuração do Node", - "attribute.path.not.exist": "O atributo '{0}' não existe ('{1}').", - "attribute.path.not.absolute": "O atributo '{0}' não é absoluto ('{1}'). Considere a adição de '{2}' como um prefixo para torná-lo absoluto.", - "VSND2001": "Não é possível encontrar o tempo de execução '{0}' no CAMINHO. Verifique se '{0}' está instalado.", - "more.information": "Mais Informações", - "origin.from.node": "conteúdo somente leitura do Node.js", - "origin.core.module": "módulo principal somente leitura" -} \ No newline at end of file diff --git a/i18n/rus/out/src/errors.i18n.json b/i18n/rus/out/src/errors.i18n.json deleted file mode 100644 index e04c8cdf..00000000 --- a/i18n/rus/out/src/errors.i18n.json +++ /dev/null @@ -1,16 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// Do not edit this file. It is machine generated. -{ - "VSND2001": "Не удается найти \"{0}\" среды выполнения по пути в переменной PATH. \"{0}\" установлен?", - "VSND2011": "Не удается запустить целевой объект отладки в терминале ({0}).", - "VSND2017": "Не удается запустить целевой объект отладки ({0}).", - "VSND2035": "Не удается выполнить отладку расширения ({0}).", - "VSND2028": "Неизвестный тип консоли \"{0}\".", - "VSND2002": "Не удается запустить программу \"{0}\"; возможно, поможет настройка карт исходного кода.", - "VSND2003": "Не удается запустить программу \"{0}\"; возможно, поможет настройка атрибута \"{1}\".", - "VSND2009": "Не удается запустить программу \"{0}\", так как не найден соответствующий JavaScript.", - "VSND2029": "Не удается загрузить переменные среды из файла ({0})." -} \ No newline at end of file diff --git a/i18n/rus/out/src/nodeDebugAdapter.i18n.json b/i18n/rus/out/src/nodeDebugAdapter.i18n.json deleted file mode 100644 index 5cb840c0..00000000 --- a/i18n/rus/out/src/nodeDebugAdapter.i18n.json +++ /dev/null @@ -1,16 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// Do not edit this file. It is machine generated. -{ - "attribute.wsl.not.exist": "Не удается найти установку подсистемы Windows для Linux.", - "program.path.case.mismatch.warning": "В пути к программе используются символы с разным регистром, как для файла на диске. Это может привести к тому, что точки останова не сработают.", - "node.console.title": "Консоль отладки узла", - "attribute.path.not.exist": "Атрибут \"{0}\" не существует (\"{1}\").", - "attribute.path.not.absolute": "Атрибут \"{0}\" не является абсолютным (\"{1}\"); рекомендуется добавить \"{2}\" в качестве префикса, чтобы сделать его абсолютным.", - "VSND2001": "Не удается найти \"{0}\" среды выполнения по пути в переменной PATH. Убедитесь, что \"{0}\" установлен.", - "more.information": "Дополнительные сведения", - "origin.from.node": "содержимое только для чтения из Node.js", - "origin.core.module": "основной модуль только для чтения" -} \ No newline at end of file diff --git a/i18n/trk/out/src/errors.i18n.json b/i18n/trk/out/src/errors.i18n.json deleted file mode 100644 index a84ec4ab..00000000 --- a/i18n/trk/out/src/errors.i18n.json +++ /dev/null @@ -1,16 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// Do not edit this file. It is machine generated. -{ - "VSND2001": "PATH üzerinde '{0}' çalışma zamanı bulunamıyor. '{0}' yüklü mü?", - "VSND2011": "Terminalde hata ayıklama hedefi başlatılamıyor ({0}).", - "VSND2017": "Hata ayıklama hedefi başlatılamıyor ({0}).", - "VSND2035": "Uzantıda hata ayıklama yapılamıyor ({0}).", - "VSND2028": "Bilinmeyen konsol türü '{0}'.", - "VSND2002": "'{0}' programı başlatılamıyor. Kaynak eşlemelerini yapılandırmak yardımcı olabilir.", - "VSND2003": "'{0}' programı başlatılamıyor. '{1}' özniteliğini ayarlamak yardımcı olabilir.", - "VSND2009": "İlgili JavaScript bulunamadığından '{0}' programı başlatılamıyor.", - "VSND2029": "Dosyadaki ortam değişkenleri yüklenemiyor ({0})." -} \ No newline at end of file diff --git a/i18n/trk/out/src/nodeDebugAdapter.i18n.json b/i18n/trk/out/src/nodeDebugAdapter.i18n.json deleted file mode 100644 index 4e627d96..00000000 --- a/i18n/trk/out/src/nodeDebugAdapter.i18n.json +++ /dev/null @@ -1,16 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// Do not edit this file. It is machine generated. -{ - "attribute.wsl.not.exist": "Linux için Windows Alt Sistemi yüklemesi bulunamıyor.", - "program.path.case.mismatch.warning": "Program yolu, diskte dosya olarak büyük/küçük harf durumu farklı olan karakter kullanıyor. Bu durum kesme noktalarına isabet edilmemesine neden olabilir.", - "node.console.title": "Node Hata Ayıklama Konsolu", - "attribute.path.not.exist": "'{0}' özniteliği yok ('{1}').", - "attribute.path.not.absolute": "'{0}' özniteliği mutlak değil ('{1}'); mutlak hale getirmek için ön ek olarak '{2}' eklemeyi deneyin.", - "VSND2001": "PATH üzerinde '{0}' çalışma zamanı bulunamıyor. '{0}' çalışma zamanının yüklü olduğundan emin olun.", - "more.information": "Daha Fazla Bilgi", - "origin.from.node": "Node.js'deki salt okunur içerik", - "origin.core.module": "salt okunur çekirdek modülü" -} \ No newline at end of file diff --git a/testdata/calls-between-files-with-exception/src/sourceA.ts b/testdata/calls-between-files-with-exception/Source/sourceA.ts similarity index 100% rename from testdata/calls-between-files-with-exception/src/sourceA.ts rename to testdata/calls-between-files-with-exception/Source/sourceA.ts diff --git a/testdata/calls-between-files-with-exception/src/sourceB.ts b/testdata/calls-between-files-with-exception/Source/sourceB.ts similarity index 100% rename from testdata/calls-between-files-with-exception/src/sourceB.ts rename to testdata/calls-between-files-with-exception/Source/sourceB.ts diff --git a/testdata/calls-between-sourcemapped-files/src/sourceA.ts b/testdata/calls-between-sourcemapped-files/Source/sourceA.ts similarity index 100% rename from testdata/calls-between-sourcemapped-files/src/sourceA.ts rename to testdata/calls-between-sourcemapped-files/Source/sourceA.ts diff --git a/testdata/calls-between-sourcemapped-files/src/sourceB.ts b/testdata/calls-between-sourcemapped-files/Source/sourceB.ts similarity index 100% rename from testdata/calls-between-sourcemapped-files/src/sourceB.ts rename to testdata/calls-between-sourcemapped-files/Source/sourceB.ts diff --git a/testdata/sourcemap-no-sourceMappingURL/src/classes.ts b/testdata/sourcemap-no-sourceMappingURL/Source/classes.ts similarity index 100% rename from testdata/sourcemap-no-sourceMappingURL/src/classes.ts rename to testdata/sourcemap-no-sourceMappingURL/Source/classes.ts diff --git a/testdata/sourcemaps-2574/src/classes.ts b/testdata/sourcemaps-2574/Source/classes.ts similarity index 100% rename from testdata/sourcemaps-2574/src/classes.ts rename to testdata/sourcemaps-2574/Source/classes.ts diff --git a/testdata/sourcemaps-inline/src/classes.ts b/testdata/sourcemaps-inline/Source/classes.ts similarity index 100% rename from testdata/sourcemaps-inline/src/classes.ts rename to testdata/sourcemaps-inline/Source/classes.ts diff --git a/testdata/sourcemaps-js-entrypoint/src/classes.ts b/testdata/sourcemaps-js-entrypoint/Source/classes.ts similarity index 100% rename from testdata/sourcemaps-js-entrypoint/src/classes.ts rename to testdata/sourcemaps-js-entrypoint/Source/classes.ts diff --git a/testdata/sourcemaps-local-paths/src/classes.ts b/testdata/sourcemaps-local-paths/Source/classes.ts similarity index 100% rename from testdata/sourcemaps-local-paths/src/classes.ts rename to testdata/sourcemaps-local-paths/Source/classes.ts diff --git a/testdata/sourcemaps-setinterval/src/file2.ts b/testdata/sourcemaps-setinterval/Source/file2.ts similarity index 100% rename from testdata/sourcemaps-setinterval/src/file2.ts rename to testdata/sourcemaps-setinterval/Source/file2.ts diff --git a/testdata/sourcemaps-setinterval/src/program.ts b/testdata/sourcemaps-setinterval/Source/program.ts similarity index 100% rename from testdata/sourcemaps-setinterval/src/program.ts rename to testdata/sourcemaps-setinterval/Source/program.ts diff --git a/testdata/sourcemaps-with-and-without/src/mapped.ts b/testdata/sourcemaps-with-and-without/Source/mapped.ts similarity index 100% rename from testdata/sourcemaps-with-and-without/src/mapped.ts rename to testdata/sourcemaps-with-and-without/Source/mapped.ts diff --git a/testdata/symlinked-file/src/file.js b/testdata/symlinked-file/Source/file.js similarity index 100% rename from testdata/symlinked-file/src/file.js rename to testdata/symlinked-file/Source/file.js From 3c49ef3c1f5f76121a0df67a9558048b0047f56f Mon Sep 17 00:00:00 2001 From: Nikola Hristov Date: Mon, 30 Oct 2023 12:19:49 +0200 Subject: [PATCH 7/9] squash! --- README.md | 19 +- Source/errors.ts | 155 +- Source/extension.ts | 55 +- Source/nodeBreakpoints.ts | 140 +- Source/nodeDebug.ts | 41 +- Source/nodeDebugAdapter.ts | 2252 ++++++++++------- Source/nodeDebugInterfaces.d.ts | 119 +- Source/nodeScripts.ts | 44 +- Source/pathUtils.ts | 411 +-- Source/terminateProcess.sh | 2 +- Source/utils.ts | 153 +- Source/wslSupport.ts | 175 +- gulpfile.js | 354 +-- i18n/chs/package.i18n.json | 2 +- i18n/cht/package.i18n.json | 2 +- i18n/csy/package.i18n.json | 2 +- i18n/deu/package.i18n.json | 2 +- i18n/esn/package.i18n.json | 2 +- i18n/fra/package.i18n.json | 2 +- i18n/hun/package.i18n.json | 2 +- i18n/ita/package.i18n.json | 2 +- i18n/jpn/package.i18n.json | 2 +- i18n/kor/package.i18n.json | 2 +- i18n/package.i18n.json | 2 +- i18n/plk/package.i18n.json | 2 +- i18n/ptb/package.i18n.json | 2 +- i18n/rus/package.i18n.json | 2 +- i18n/trk/package.i18n.json | 2 +- package.json | 1024 ++++---- package.nls.json | 6 +- test/adapter.test.ts | 1138 +++++---- test/breakpoints.test.ts | 1382 ++++++---- test/stepping.test.ts | 679 +++-- test/testSetup.ts | 71 +- test/variables.test.ts | 91 +- .../Source/sourceA.ts | 6 +- .../Source/sourceB.ts | 10 +- .../out/sourceA.js | 8 +- .../out/sourceA.js.map | 11 +- .../out/sourceB.js | 12 +- .../out/sourceB.js.map | 11 +- .../tsconfig.json | 10 +- .../calls-between-merged-files/gulpfile.js | 35 +- testdata/calls-between-merged-files/out/b.js | 6 +- .../calls-between-merged-files/out/b.js.map | 11 +- .../calls-between-merged-files/out/sourceA.js | 4 +- .../out/sourceA.js.map | 10 +- .../out/sourceB1.js | 6 +- .../out/sourceB1.js.map | 11 +- .../calls-between-merged-files/package.json | 74 +- .../calls-between-merged-files/sourceA.ts | 8 +- .../calls-between-merged-files/sourceB1.ts | 2 +- .../calls-between-merged-files/sourceB2.ts | 2 +- .../calls-between-merged-files/tsconfig.json | 12 +- .../out/sourceA.js | 8 +- .../out/sourceA.js.map | 11 +- .../out/sourceB1.js | 6 +- .../out/sourceB1.js.map | 11 +- .../out/sourceB2.js | 4 +- .../out/sourceB2.js.map | 11 +- .../calls-between-multiple-files/sourceA.ts | 8 +- .../calls-between-multiple-files/sourceB1.ts | 4 +- .../calls-between-multiple-files/sourceB2.ts | 2 +- .../tsconfig.json | 12 +- .../Source/sourceA.ts | 8 +- .../Source/sourceB.ts | 2 +- .../out/sourceA.js | 8 +- .../out/sourceA.js.map | 11 +- .../out/sourceB.js | 4 +- .../out/sourceB.js.map | 11 +- .../tsconfig.json | 10 +- testdata/es-modules/file1.mjs | 4 +- testdata/es-modules/file2.mjs | 2 +- .../folder with spaces/file with spaces.js | 4 +- testdata/large-buffer/largeBuffer.js | 2 +- testdata/native-async-await/main.js | 34 +- testdata/nodeInternalsCaughtException.js | 6 +- testdata/program.js | 4 +- testdata/programSingleLine.js | 8 +- testdata/programWithConsoleLogging.js | 4 +- testdata/programWithException.js | 2 +- testdata/programWithFunction.js | 17 +- testdata/programWithUncaughtException.js | 4 +- testdata/programWithVariables.js | 14 +- testdata/promise-chain/main.js | 42 +- testdata/simple-eval/index.js | 4 +- .../Source/classes.ts | 24 +- .../out/classes.js | 50 +- .../out/classes.js.map | 2 +- .../the distribution/classes.js | 49 +- .../the maps/classes.js.map | 18 +- .../the source/classes.ts | 24 +- testdata/sourcemaps-2574/Source/classes.ts | 24 +- testdata/sourcemaps-2574/out/classes.js | 49 +- testdata/sourcemaps-2574/out/classes.js.map | 2 +- .../sourcemaps-inline-sources/_program.ts | 6 +- testdata/sourcemaps-inline-sources/program.js | 8 +- .../sourcemaps-inline-sources/tsconfig.json | 10 +- testdata/sourcemaps-inline/Source/classes.ts | 24 +- testdata/sourcemaps-inline/dist/classes.js | 55 +- testdata/sourcemaps-inline/tsconfig.json | 14 +- .../Source/classes.ts | 24 +- .../sourcemaps-js-entrypoint/out/classes.js | 49 +- .../out/classes.js.map | 2 +- .../sourcemaps-js-entrypoint/out/entry.js | 3 +- .../sourcemaps-local-paths/Source/classes.ts | 24 +- testdata/sourcemaps-local-paths/package.json | 66 +- testdata/sourcemaps-local-paths/tsconfig.json | 14 +- .../sourcemaps-setinterval/Source/file2.ts | 17 +- .../sourcemaps-setinterval/Source/program.ts | 6 +- testdata/sourcemaps-setinterval/dist/file2.js | 18 +- .../sourcemaps-setinterval/dist/file2.js.map | 11 +- .../sourcemaps-setinterval/dist/program.js | 12 +- .../dist/program.js.map | 11 +- testdata/sourcemaps-setinterval/tsconfig.json | 10 +- .../classes.js | 50 +- .../classes.js.map | 2 +- .../classes.ts | 24 +- testdata/sourcemaps-simple/classes.js | 49 +- testdata/sourcemaps-simple/classes.js.map | 2 +- testdata/sourcemaps-simple/classes.ts | 24 +- .../Source/mapped.ts | 6 +- .../sourcemaps-with-and-without/out/mapped.js | 6 +- .../out/mapped.js.map | 11 +- .../out/unmapped.js | 2 +- .../sourcemaps-with-and-without/tsconfig.json | 10 +- testdata/symlinked-file/Source/file.js | 2 +- testdata/symlinked-file/main.js | 4 +- testdata/webpack/app.ts | 4 +- testdata/webpack/out/bundle.js | 179 +- testdata/webpack/out/bundle.js.map | 16 +- testdata/webpack/package.json | 68 +- testdata/webpack/webpack.config.js | 52 +- tsconfig.json | 32 +- tslint.json | 163 +- 135 files changed, 5789 insertions(+), 4415 deletions(-) diff --git a/README.md b/README.md index f9e05da6..030ee12b 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,27 @@ -**Important note:** By default, this extension now delegates to [the new js-debug extension](http://github.com/microsoft/vscode-js-debug) which is built-in to VS Code. Please file issues on that repo. To revert to the old behavior, you can set `"debug.javascript.usePreview": false` in your settings. +**Important note:** By default, this extension now delegates to +[the new js-debug extension](http://github.com/microsoft/vscode-js-debug) which +is built-in to VS Code. Please file issues on that repo. To revert to the old +behavior, you can set `"debug.javascript.usePreview": false` in your settings. --- # Node Debug + [![Build Status](https://vscode.visualstudio.com/_apis/public/build/definitions/d3aa0b57-eb08-43b8-9aec-0c0a0d5d5ad0/8/badge)](https://vscode.visualstudio.com/vscode-node-debug2/_build/index?definitionId=8) -This extension is bundled with Visual Studio Code and together with **Node Debug (legacy)** forms the [Node.js](https://nodejs.org) debugging experience. +This extension is bundled with Visual Studio Code and together with **Node Debug +(legacy)** forms the [Node.js](https://nodejs.org) debugging experience. **Node Debug** is the debugger for Node.js versions >= 8.0. -See a general overview of debugging in VS Code [here](https://code.visualstudio.com/docs/editor/debugging). - -Documentation for Node.js specific debugging can be found [here](https://code.visualstudio.com/docs/nodejs/nodejs-debugging). +See a general overview of debugging in VS Code +[here](https://code.visualstudio.com/docs/editor/debugging). -Please submit bugs and feature requests to the [VS Code repository](https://github.com/microsoft/vscode/issues). +Documentation for Node.js specific debugging can be found +[here](https://code.visualstudio.com/docs/nodejs/nodejs-debugging). +Please submit bugs and feature requests to the +[VS Code repository](https://github.com/microsoft/vscode/issues). ## License diff --git a/Source/errors.ts b/Source/errors.ts index 51cf1dfa..9d98e10b 100644 --- a/Source/errors.ts +++ b/Source/errors.ts @@ -2,83 +2,128 @@ * Copyright (C) Microsoft Corporation. All rights reserved. *--------------------------------------------------------*/ -import { DebugProtocol } from 'vscode-debugprotocol'; +import { DebugProtocol } from "vscode-debugprotocol"; -import * as nls from 'vscode-nls'; -import { ErrorWithMessage } from 'vscode-chrome-debug-core'; +import * as nls from "vscode-nls"; +import { ErrorWithMessage } from "vscode-chrome-debug-core"; const localize = nls.loadMessageBundle(); export function runtimeNotFound(_runtime: string): DebugProtocol.Message { - return new ErrorWithMessage({ - id: 2001, - format: localize('VSND2001', "Cannot find runtime '{0}' on PATH. Is '{0}' installed?", '{_runtime}'), - variables: { _runtime } - }); + return new ErrorWithMessage({ + id: 2001, + format: localize( + "VSND2001", + "Cannot find runtime '{0}' on PATH. Is '{0}' installed?", + "{_runtime}" + ), + variables: { _runtime }, + }); } export function cannotLaunchInTerminal(_error: string): DebugProtocol.Message { - return new ErrorWithMessage({ - id: 2011, - format: localize('VSND2011', 'Cannot launch debug target in terminal ({0}).', '{_error}'), - variables: { _error } - }); + return new ErrorWithMessage({ + id: 2011, + format: localize( + "VSND2011", + "Cannot launch debug target in terminal ({0}).", + "{_error}" + ), + variables: { _error }, + }); } export function cannotLaunchDebugTarget(_error: string): DebugProtocol.Message { - return new ErrorWithMessage({ - id: 2017, - format: localize('VSND2017', 'Cannot launch debug target ({0}).', '{_error}'), - variables: { _error }, - showUser: true, - sendTelemetry: true - }); + return new ErrorWithMessage({ + id: 2017, + format: localize( + "VSND2017", + "Cannot launch debug target ({0}).", + "{_error}" + ), + variables: { _error }, + showUser: true, + sendTelemetry: true, + }); } export function cannotDebugExtension(_error: string): DebugProtocol.Message { - return new ErrorWithMessage({ - id: 2035, - format: localize('VSND2035', 'Cannot debug extension ({0}).', '{_error}'), - variables: { _error }, - showUser: true, - sendTelemetry: true - }); + return new ErrorWithMessage({ + id: 2035, + format: localize( + "VSND2035", + "Cannot debug extension ({0}).", + "{_error}" + ), + variables: { _error }, + showUser: true, + sendTelemetry: true, + }); } export function unknownConsoleType(consoleType: string): DebugProtocol.Message { - return new ErrorWithMessage({ - id: 2028, - format: localize('VSND2028', "Unknown console type '{0}'.", consoleType) - }); + return new ErrorWithMessage({ + id: 2028, + format: localize( + "VSND2028", + "Unknown console type '{0}'.", + consoleType + ), + }); } -export function cannotLaunchBecauseSourceMaps(programPath: string): DebugProtocol.Message { - return new ErrorWithMessage({ - id: 2002, - format: localize('VSND2002', "Cannot launch program '{0}'; configuring source maps might help.", '{path}'), - variables: { path: programPath } - }); +export function cannotLaunchBecauseSourceMaps( + programPath: string +): DebugProtocol.Message { + return new ErrorWithMessage({ + id: 2002, + format: localize( + "VSND2002", + "Cannot launch program '{0}'; configuring source maps might help.", + "{path}" + ), + variables: { path: programPath }, + }); } -export function cannotLaunchBecauseOutFiles(programPath: string): DebugProtocol.Message { - return new ErrorWithMessage({ - id: 2003, - format: localize('VSND2003', "Cannot launch program '{0}'; setting the '{1}' attribute might help.", '{path}', 'outFiles'), - variables: { path: programPath } - }); +export function cannotLaunchBecauseOutFiles( + programPath: string +): DebugProtocol.Message { + return new ErrorWithMessage({ + id: 2003, + format: localize( + "VSND2003", + "Cannot launch program '{0}'; setting the '{1}' attribute might help.", + "{path}", + "outFiles" + ), + variables: { path: programPath }, + }); } -export function cannotLaunchBecauseJsNotFound(programPath: string): DebugProtocol.Message { - return new ErrorWithMessage({ - id: 2009, - format: localize('VSND2009', "Cannot launch program '{0}' because corresponding JavaScript cannot be found.", '{path}'), - variables: { path: programPath } - }); +export function cannotLaunchBecauseJsNotFound( + programPath: string +): DebugProtocol.Message { + return new ErrorWithMessage({ + id: 2009, + format: localize( + "VSND2009", + "Cannot launch program '{0}' because corresponding JavaScript cannot be found.", + "{path}" + ), + variables: { path: programPath }, + }); } -export function cannotLoadEnvVarsFromFile(error: string): DebugProtocol.Message { - return new ErrorWithMessage({ - id: 2029, - format: localize('VSND2029', "Can't load environment variables from file ({0}).", '{_error}'), - variables: { _error: error } - }); +export function cannotLoadEnvVarsFromFile( + error: string +): DebugProtocol.Message { + return new ErrorWithMessage({ + id: 2029, + format: localize( + "VSND2029", + "Can't load environment variables from file ({0}).", + "{_error}" + ), + variables: { _error: error }, + }); } diff --git a/Source/extension.ts b/Source/extension.ts index d5844a72..7f35d332 100644 --- a/Source/extension.ts +++ b/Source/extension.ts @@ -2,32 +2,49 @@ * Copyright (C) Microsoft Corporation. All rights reserved. *--------------------------------------------------------*/ -import * as vscode from 'vscode'; -import * as Core from 'vscode-chrome-debug-core'; +import * as vscode from "vscode"; +import * as Core from "vscode-chrome-debug-core"; export function activate(context: vscode.ExtensionContext) { - context.subscriptions.push(vscode.commands.registerCommand('extension.node-debug2.toggleSkippingFile', toggleSkippingFile)); - context.subscriptions.push(vscode.debug.registerDebugConfigurationProvider('legacy-extensionHost', new ExtensionHostDebugConfigurationProvider())); + context.subscriptions.push( + vscode.commands.registerCommand( + "extension.node-debug2.toggleSkippingFile", + toggleSkippingFile + ) + ); + context.subscriptions.push( + vscode.debug.registerDebugConfigurationProvider( + "legacy-extensionHost", + new ExtensionHostDebugConfigurationProvider() + ) + ); } -export function deactivate() { -} +export function deactivate() {} function toggleSkippingFile(path: string | number): void { - if (!path) { - const activeEditor = vscode.window.activeTextEditor; - path = activeEditor && activeEditor.document.fileName; - } + if (!path) { + const activeEditor = vscode.window.activeTextEditor; + path = activeEditor && activeEditor.document.fileName; + } - if (path && vscode.debug.activeDebugSession) { - const args: Core.IToggleSkipFileStatusArgs = typeof path === 'string' ? { path } : { sourceReference: path }; - vscode.debug.activeDebugSession.customRequest('toggleSkipFileStatus', args); - } + if (path && vscode.debug.activeDebugSession) { + const args: Core.IToggleSkipFileStatusArgs = + typeof path === "string" ? { path } : { sourceReference: path }; + vscode.debug.activeDebugSession.customRequest( + "toggleSkipFileStatus", + args + ); + } } - -class ExtensionHostDebugConfigurationProvider implements vscode.DebugConfigurationProvider { - resolveDebugConfiguration(folder: vscode.WorkspaceFolder | undefined, debugConfiguration: vscode.DebugConfiguration): vscode.ProviderResult { - return debugConfiguration; - } +class ExtensionHostDebugConfigurationProvider + implements vscode.DebugConfigurationProvider +{ + resolveDebugConfiguration( + folder: vscode.WorkspaceFolder | undefined, + debugConfiguration: vscode.DebugConfiguration + ): vscode.ProviderResult { + return debugConfiguration; + } } diff --git a/Source/nodeBreakpoints.ts b/Source/nodeBreakpoints.ts index 8e172229..1b64557e 100644 --- a/Source/nodeBreakpoints.ts +++ b/Source/nodeBreakpoints.ts @@ -1,58 +1,102 @@ /*--------------------------------------------------------- -* Copyright (C) Microsoft Corporation. All rights reserved. -*--------------------------------------------------------*/ + * Copyright (C) Microsoft Corporation. All rights reserved. + *--------------------------------------------------------*/ -import { Breakpoints, chromeConnection, InternalSourceBreakpoint, ISetBreakpointResult, ISetBreakpointsArgs, logger, ScriptContainer } from 'vscode-chrome-debug-core'; -import { NodeDebugAdapter } from './nodeDebugAdapter'; +import { + Breakpoints, + chromeConnection, + InternalSourceBreakpoint, + ISetBreakpointResult, + ISetBreakpointsArgs, + logger, + ScriptContainer, +} from "vscode-chrome-debug-core"; +import { NodeDebugAdapter } from "./nodeDebugAdapter"; export class NodeBreakpoints extends Breakpoints { - constructor(private nodeDebugAdapter: NodeDebugAdapter, chromeConnection: chromeConnection.ChromeConnection) { - super(nodeDebugAdapter, chromeConnection); - } + constructor( + private nodeDebugAdapter: NodeDebugAdapter, + chromeConnection: chromeConnection.ChromeConnection + ) { + super(nodeDebugAdapter, chromeConnection); + } - /** - * Override addBreakpoints, which is called by setBreakpoints to make the actual call to Chrome. - */ - protected async addBreakpoints(url: string, breakpoints: InternalSourceBreakpoint[], scripts: ScriptContainer): Promise { - const responses = await super.addBreakpoints(url, breakpoints, scripts); - if (this.nodeDebugAdapter.entryPauseEvent && !this.nodeDebugAdapter.finishedConfig) { - const entryLocation = this.nodeDebugAdapter.entryPauseEvent.callFrames[0].location; - const bpAtEntryLocationIdx = responses.findIndex(response => { - // Don't compare column location, because you can have a bp at col 0, then break at some other column - return response && response.actualLocation && response.actualLocation.lineNumber === entryLocation.lineNumber && - response.actualLocation.scriptId === entryLocation.scriptId; - }); - const bpAtEntryLocation = bpAtEntryLocationIdx >= 0 && breakpoints[bpAtEntryLocationIdx]; + /** + * Override addBreakpoints, which is called by setBreakpoints to make the actual call to Chrome. + */ + protected async addBreakpoints( + url: string, + breakpoints: InternalSourceBreakpoint[], + scripts: ScriptContainer + ): Promise { + const responses = await super.addBreakpoints(url, breakpoints, scripts); + if ( + this.nodeDebugAdapter.entryPauseEvent && + !this.nodeDebugAdapter.finishedConfig + ) { + const entryLocation = + this.nodeDebugAdapter.entryPauseEvent.callFrames[0].location; + const bpAtEntryLocationIdx = responses.findIndex((response) => { + // Don't compare column location, because you can have a bp at col 0, then break at some other column + return ( + response && + response.actualLocation && + response.actualLocation.lineNumber === + entryLocation.lineNumber && + response.actualLocation.scriptId === entryLocation.scriptId + ); + }); + const bpAtEntryLocation = + bpAtEntryLocationIdx >= 0 && breakpoints[bpAtEntryLocationIdx]; - if (bpAtEntryLocation) { - let conditionPassed = true; - if (bpAtEntryLocation.condition) { - const evalConditionResponse = await this.nodeDebugAdapter.evaluateOnCallFrame(bpAtEntryLocation.condition, this.nodeDebugAdapter.entryPauseEvent.callFrames[0]); - conditionPassed = !evalConditionResponse.exceptionDetails && (!!evalConditionResponse.result.objectId || !!evalConditionResponse.result.value); - } + if (bpAtEntryLocation) { + let conditionPassed = true; + if (bpAtEntryLocation.condition) { + const evalConditionResponse = + await this.nodeDebugAdapter.evaluateOnCallFrame( + bpAtEntryLocation.condition, + this.nodeDebugAdapter.entryPauseEvent.callFrames[0] + ); + conditionPassed = + !evalConditionResponse.exceptionDetails && + (!!evalConditionResponse.result.objectId || + !!evalConditionResponse.result.value); + } - if (conditionPassed) { - // There is some initial breakpoint being set to the location where we stopped on entry, so need to pause even if - // the stopOnEntry flag is not set - logger.log('Got a breakpoint set in the entry location, so will stop even though stopOnEntry is not set'); - this.nodeDebugAdapter.continueAfterConfigDone = false; - this.nodeDebugAdapter.expectingStopReason = 'breakpoint'; - } else { - logger.log('Breakpoint condition at entry location did not evaluate to truthy value'); - } - } - } + if (conditionPassed) { + // There is some initial breakpoint being set to the location where we stopped on entry, so need to pause even if + // the stopOnEntry flag is not set + logger.log( + "Got a breakpoint set in the entry location, so will stop even though stopOnEntry is not set" + ); + this.nodeDebugAdapter.continueAfterConfigDone = false; + this.nodeDebugAdapter.expectingStopReason = "breakpoint"; + } else { + logger.log( + "Breakpoint condition at entry location did not evaluate to truthy value" + ); + } + } + } - return responses; - } + return responses; + } - protected validateBreakpointsPath(args: ISetBreakpointsArgs): Promise { - return super.validateBreakpointsPath(args).catch(e => { - if (!this.nodeDebugAdapter.launchAttachArgs.disableOptimisticBPs && args.source.path && this.nodeDebugAdapter.jsDeterminant.isJavaScript(args.source.path)) { - return undefined; - } else { - return Promise.reject(e); - } - }); - } + protected validateBreakpointsPath( + args: ISetBreakpointsArgs + ): Promise { + return super.validateBreakpointsPath(args).catch((e) => { + if ( + !this.nodeDebugAdapter.launchAttachArgs.disableOptimisticBPs && + args.source.path && + this.nodeDebugAdapter.jsDeterminant.isJavaScript( + args.source.path + ) + ) { + return undefined; + } else { + return Promise.reject(e); + } + }); + } } diff --git a/Source/nodeDebug.ts b/Source/nodeDebug.ts index 2070428d..713c2c97 100644 --- a/Source/nodeDebug.ts +++ b/Source/nodeDebug.ts @@ -2,30 +2,37 @@ * Copyright (C) Microsoft Corporation. All rights reserved. *--------------------------------------------------------*/ -import { ChromeDebugSession, logger, telemetry } from 'vscode-chrome-debug-core'; -import * as path from 'path'; -import * as os from 'os'; +import { + ChromeDebugSession, + logger, + telemetry, +} from "vscode-chrome-debug-core"; +import * as path from "path"; +import * as os from "os"; -import { NodeDebugAdapter } from './nodeDebugAdapter'; -import { NodeBreakpoints } from './nodeBreakpoints'; -import { NodeScriptContainer } from './nodeScripts'; +import { NodeDebugAdapter } from "./nodeDebugAdapter"; +import { NodeBreakpoints } from "./nodeBreakpoints"; +import { NodeScriptContainer } from "./nodeScripts"; -ChromeDebugSession.run(ChromeDebugSession.getSession( - { - logFilePath: path.join(os.tmpdir(), 'vscode-node-debug2.txt'), // non-.txt file types can't be uploaded to github - adapter: NodeDebugAdapter, - extensionName: 'node-debug2', - breakpoints: NodeBreakpoints, - scriptContainer: NodeScriptContainer - })); +ChromeDebugSession.run( + ChromeDebugSession.getSession({ + logFilePath: path.join(os.tmpdir(), "vscode-node-debug2.txt"), // non-.txt file types can't be uploaded to github + adapter: NodeDebugAdapter, + extensionName: "node-debug2", + breakpoints: NodeBreakpoints, + scriptContainer: NodeScriptContainer, + }) +); /* tslint:disable:no-var-requires */ -const debugAdapterVersion = require('../../package.json').version; -logger.log('node-debug2: ' + debugAdapterVersion); +const debugAdapterVersion = require("../../package.json").version; +logger.log("node-debug2: " + debugAdapterVersion); /* __GDPR__FRAGMENT__ "DebugCommonProperties" : { "Versions.DebugAdapter" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" } } */ -telemetry.telemetry.addCustomGlobalProperty({'Versions.DebugAdapter': debugAdapterVersion}); +telemetry.telemetry.addCustomGlobalProperty({ + "Versions.DebugAdapter": debugAdapterVersion, +}); diff --git a/Source/nodeDebugAdapter.ts b/Source/nodeDebugAdapter.ts index c28b3fbf..a3e73137 100644 --- a/Source/nodeDebugAdapter.ts +++ b/Source/nodeDebugAdapter.ts @@ -2,1001 +2,1345 @@ * Copyright (C) Microsoft Corporation. All rights reserved. *--------------------------------------------------------*/ -import { ChromeDebugAdapter, chromeUtils, ISourceMapPathOverrides, utils as CoreUtils, logger, telemetry as CoreTelemetry, Crdp, ChromeDebugSession, IOnPausedResult } from 'vscode-chrome-debug-core'; +import { + ChromeDebugAdapter, + chromeUtils, + ISourceMapPathOverrides, + utils as CoreUtils, + logger, + telemetry as CoreTelemetry, + Crdp, + ChromeDebugSession, + IOnPausedResult, +} from "vscode-chrome-debug-core"; const telemetry = CoreTelemetry.telemetry; -import { DebugProtocol } from 'vscode-debugprotocol'; -import { OutputEvent, CapabilitiesEvent, Event } from 'vscode-debugadapter'; -import { ErrorWithMessage } from 'vscode-chrome-debug-core/out/src/errors'; - -import * as path from 'path'; -import * as fs from 'fs'; -import * as cp from 'child_process'; - -import { ILaunchRequestArguments, IAttachRequestArguments, ICommonRequestArgs, ILaunchVSCodeArguments, ILaunchVSCodeArgument } from './nodeDebugInterfaces'; -import * as pathUtils from './pathUtils'; -import * as utils from './utils'; -import * as errors from './errors'; -import * as wsl from './wslSupport'; - -import * as nls from 'vscode-nls'; -import { FinishedStartingUpEventArguments } from 'vscode-chrome-debug-core/lib/src/executionTimingsReporter'; -import { ReasonType } from 'vscode-chrome-debug-core/lib/src/chrome/stoppedEvent'; +import { DebugProtocol } from "vscode-debugprotocol"; +import { OutputEvent, CapabilitiesEvent, Event } from "vscode-debugadapter"; +import { ErrorWithMessage } from "vscode-chrome-debug-core/out/src/errors"; + +import * as path from "path"; +import * as fs from "fs"; +import * as cp from "child_process"; + +import { + ILaunchRequestArguments, + IAttachRequestArguments, + ICommonRequestArgs, + ILaunchVSCodeArguments, + ILaunchVSCodeArgument, +} from "./nodeDebugInterfaces"; +import * as pathUtils from "./pathUtils"; +import * as utils from "./utils"; +import * as errors from "./errors"; +import * as wsl from "./wslSupport"; + +import * as nls from "vscode-nls"; +import { FinishedStartingUpEventArguments } from "vscode-chrome-debug-core/lib/src/executionTimingsReporter"; +import { ReasonType } from "vscode-chrome-debug-core/lib/src/chrome/stoppedEvent"; let localize = nls.loadMessageBundle(); const DefaultSourceMapPathOverrides: ISourceMapPathOverrides = { - 'webpack:///./~/*': '${cwd}/node_modules/*', - 'webpack:///./*': '${cwd}/*', - 'webpack:///*': '*', - 'meteor://💻app/*': '${cwd}/*', + "webpack:///./~/*": "${cwd}/node_modules/*", + "webpack:///./*": "${cwd}/*", + "webpack:///*": "*", + "meteor://💻app/*": "${cwd}/*", }; export class ProcessEvent extends Event implements DebugProtocol.ProcessEvent { - body: { - name: string; - systemProcessId?: number; - isLocalProcess?: boolean; - startMethod?: 'launch' | 'attach' | 'attachForSuspendedLaunch'; - pointerSize?: number; - }; - - public constructor(name: string, systemProcessId?: number) { - super('process'); - this.body = { - name, - systemProcessId - }; - } + body: { + name: string; + systemProcessId?: number; + isLocalProcess?: boolean; + startMethod?: "launch" | "attach" | "attachForSuspendedLaunch"; + pointerSize?: number; + }; + + public constructor(name: string, systemProcessId?: number) { + super("process"); + this.body = { + name, + systemProcessId, + }; + } } export class NodeDebugAdapter extends ChromeDebugAdapter { - private static NODE = 'node'; - private static RUNINTERMINAL_TIMEOUT = 5000; - private static NODE_TERMINATION_POLL_INTERVAL = 3000; - private static DEBUG_BRK_DEP_MSG = /\(node:\d+\) \[DEP0062\] DeprecationWarning: `node --inspect --debug-brk` is deprecated\. Please use `node --inspect-brk` instead\.\s*/; - - public static NODE_INTERNALS = ''; - - protected _launchAttachArgs: ICommonRequestArgs; - - private _jsDeterminant = new utils.JavaScriptDeterminant(); - private _loggedTargetVersion: boolean; - private _nodeProcessId: number; - private _pollForNodeProcess: boolean; - - // Flags relevant during init - private _continueAfterConfigDone = true; - private _entryPauseEvent: Crdp.Debugger.PausedEvent; - private _waitingForEntryPauseEvent = true; - private _finishedConfig = false; - private _handlingEarlyNodeMsgs = true; - private _captureFromStd: boolean = false; - - private _supportsRunInTerminalRequest: boolean; - private _restartMode: boolean; - private _isTerminated: boolean; - private _adapterID: string; - - get entryPauseEvent(): Crdp.Debugger.PausedEvent | undefined { - return this._entryPauseEvent; - } - - get jsDeterminant(): utils.JavaScriptDeterminant { - return this._jsDeterminant; - } - - get finishedConfig(): boolean { - return this._finishedConfig; - } - - get continueAfterConfigDone(): boolean { - return this._continueAfterConfigDone; - } - - set continueAfterConfigDone(v: boolean) { - this._continueAfterConfigDone = v; - } - - get expectingStopReason(): ReasonType { - return this._expectingStopReason; - } - - set expectingStopReason(v: ReasonType) { - this._expectingStopReason = v; - } - - private get nodeProcessId(): number { - return this._nodeProcessId; - } - - private set nodeProcessId(id: number) { - this._nodeProcessId = id; - - if (id !== 0) { - this.session.sendEvent(new ProcessEvent('', id)); - } - } - - get launchAttachArgs(): ICommonRequestArgs { - return this._launchAttachArgs; - } - - /** - * Returns whether this is a non-EH attach scenario - */ - private get normalAttachMode(): boolean { - return this._attachMode && !this.isExtensionHost(); - } - - private get supportsTerminateRequest(): boolean { - return process.platform !== 'win32' && !this.isExtensionHost(); - } - - public initialize(args: DebugProtocol.InitializeRequestArguments): DebugProtocol.Capabilities { - this._adapterID = args.adapterID; - this._promiseRejectExceptionFilterEnabled = this.isExtensionHost(); - this._supportsRunInTerminalRequest = args.supportsRunInTerminalRequest; - - if (args.locale) { - localize = nls.config({ locale: args.locale })(); - } - - const capabilities = super.initialize(args); - capabilities.supportsLogPoints = true; - capabilities.supportsTerminateRequest = this.supportsTerminateRequest; - - return capabilities; - } - - public async launch(args: ILaunchRequestArguments): Promise { - if (typeof args.enableSourceMapCaching !== 'boolean') { - args.enableSourceMapCaching = this.isExtensionHost(); - } - - if (args.console && args.console !== 'internalConsole' && typeof args._suppressConsoleOutput === 'undefined') { - args._suppressConsoleOutput = true; - } - - await super.launch(args); - if (args.__restart && typeof args.__restart.port === 'number') { - return this.doAttach(args.__restart.port, undefined, args.address, args.timeout); - } - - const port = args.port || utils.random(3000, 50000); - - if (args.useWSL && !wsl.subsystemForLinuxPresent()) { - return Promise.reject(new ErrorWithMessage({ - id: 2007, - format: localize('attribute.wsl.not.exist', 'Cannot find Windows Subsystem for Linux installation.') - })); - } - - this._continueAfterConfigDone = !args.stopOnEntry; - - if (this.isExtensionHost()) { - return this.extensionHostLaunch(args, port); - } - - let runtimeExecutable = args.runtimeExecutable; - if (args.useWSL) { - runtimeExecutable = runtimeExecutable || NodeDebugAdapter.NODE; - } else if (runtimeExecutable) { - if (path.isAbsolute(runtimeExecutable)) { - const re = pathUtils.findExecutable(runtimeExecutable, args.env); - if (!re) { - return this.getNotExistErrorResponse('runtimeExecutable', runtimeExecutable); - } - - runtimeExecutable = re; - } else { - const re = pathUtils.findOnPath(runtimeExecutable, args.env); - if (!re) { - return this.getRuntimeNotOnPathErrorResponse(runtimeExecutable); - } - - runtimeExecutable = re; - } - } else { - const re = pathUtils.findOnPath(NodeDebugAdapter.NODE, args.env); - if (!re) { - return Promise.reject(errors.runtimeNotFound(NodeDebugAdapter.NODE)); - } - - // use node from PATH - runtimeExecutable = re; - } - - let programPath = args.program; - if (programPath) { - if (!path.isAbsolute(programPath)) { - return this.getRelativePathErrorResponse('program', programPath); - } - - if (!fs.existsSync(programPath)) { - if (fs.existsSync(programPath + '.js')) { - programPath += '.js'; - } else { - return this.getNotExistErrorResponse('program', programPath); - } - } - - programPath = path.normalize(programPath); - if (pathUtils.normalizeDriveLetter(programPath) !== pathUtils.realCasePath(programPath)) { - logger.warn(localize('program.path.case.mismatch.warning', 'Program path uses differently cased character as file on disk; this might result in breakpoints not being hit.')); - } - } - - this._captureFromStd = args.outputCapture === 'std'; - - if (args.__debuggablePatterns) { - this._jsDeterminant.updatePatterns(args.__debuggablePatterns); - } - - const resolvedProgramPath = await this.resolveProgramPath(programPath, args.sourceMaps); - let program: string; - let cwd = args.cwd; - if (cwd) { - if (!path.isAbsolute(cwd)) { - return this.getRelativePathErrorResponse('cwd', cwd); - } - - if (!fs.existsSync(cwd)) { - return this.getNotExistErrorResponse('cwd', cwd); - } - - // if working dir is given and if the executable is within that folder, we make the executable path relative to the working dir - if (resolvedProgramPath) { - program = await pathUtils.isSymlinkedPath(cwd) ? - resolvedProgramPath : - path.relative(cwd, resolvedProgramPath); - } - } else if (resolvedProgramPath) { - // if no working dir given, we use the direct folder of the executable - cwd = path.dirname(resolvedProgramPath); - program = await pathUtils.isSymlinkedPath(cwd) ? - resolvedProgramPath : - path.basename(resolvedProgramPath); - } - - const runtimeArgs = args.runtimeArgs || []; - const programArgs = args.args || []; - - const debugArgs = detectSupportedDebugArgsForLaunch(args, runtimeExecutable, args.env); - let launchArgs = []; - if (!args.noDebug && !args.port) { - // Always stop on entry to set breakpoints - if (debugArgs === DebugArgs.Inspect_DebugBrk) { - launchArgs.push(`--inspect=${port}`); - launchArgs.push('--debug-brk'); - } else { - launchArgs.push(`--inspect-brk=${port}`); - } - } - - launchArgs = runtimeArgs.concat(launchArgs, program ? [program] : [], programArgs); - - const wslLaunchArgs = wsl.createLaunchArg(args.useWSL, args.console === 'externalTerminal', cwd, runtimeExecutable, launchArgs, program); - // if using subsystem for linux, we will trick the debugger to map source files - if (args.useWSL && !args.localRoot && !args.remoteRoot) { - this.pathTransformer.attach({ - remoteRoot: wslLaunchArgs.remoteRoot, - localRoot: wslLaunchArgs.localRoot - }); - } - - const envArgs = this.collectEnvFileArgs(args) || args.env; - if ((args.console === 'integratedTerminal' || args.console === 'externalTerminal') && this._supportsRunInTerminalRequest) { - const termArgs: DebugProtocol.RunInTerminalRequestArguments = { - kind: args.console === 'integratedTerminal' ? 'integrated' : 'external', - title: localize('node.console.title', 'Node Debug Console'), - cwd, - args: wslLaunchArgs.combined, - env: envArgs - }; - await this.launchInTerminal(termArgs); - if (args.noDebug) { - this.terminateSession('cannot track process'); - } - } else if (!args.console || args.console === 'internalConsole') { - await this.launchInInternalConsole(wslLaunchArgs.executable, wslLaunchArgs.args, envArgs, cwd); - } else { - throw errors.unknownConsoleType(args.console); - } - - if (!args.noDebug) { - await this.doAttach(port, undefined, args.address, args.timeout, undefined, args.extraCRDPChannelPort); - } - } - - private extensionHostLaunch(launchArgs: ILaunchRequestArguments, debugPort: number): Promise { - - // Separate all "paths" from an arguments into separate attributes. - const args = launchArgs.args.map(arg => { - if (arg.startsWith('-')) { - // arg is an option - const pair = arg.split('=', 2); - if (pair.length === 2 && (fs.existsSync(pair[1]) || fs.existsSync(pair[1] + '.js'))) { - return { prefix: pair[0] + '=', path: pair[1] }; - } - return { prefix: arg }; - } else { - // arg is a path - try { - const stat = fs.lstatSync(arg); - if (stat.isDirectory()) { - return { prefix: '--folder-uri=', path: arg }; - } else if (stat.isFile()) { - return { prefix: '--file-uri=', path: arg }; - } - } catch (err) { - // file not found - } - return { path: arg }; // just return the path blindly and hope for the best... - } - }); - - if (!launchArgs.noDebug) { - args.unshift({ prefix: `--inspect-brk-extensions=${debugPort}` }); - } - - args.unshift({ prefix: `--debugId=${launchArgs.__sessionId}` }); // pass the debug session ID so that broadcast events know where they come from - - const launchVSCodeArgs: ILaunchVSCodeArguments = { - args: args, - env: this.collectEnvFileArgs(launchArgs) || launchArgs.env - }; - - return new Promise((resolve, reject) => { - this._session.sendRequest('launchVSCode', launchVSCodeArgs, NodeDebugAdapter.RUNINTERMINAL_TIMEOUT, response => { - if (response.success) { - if (response.body && typeof response.body.processId === 'number') { - this.nodeProcessId = response.body.processId; - } - resolve(); - } else { - reject(errors.cannotDebugExtension(response.message)); - this.terminateSession('launchVSCode error: ' + response.message); - } - }); - }); - } - - public async attach(args: IAttachRequestArguments): Promise { - try { - if (typeof args.enableSourceMapCaching !== 'boolean') { - args.enableSourceMapCaching = true; - } - - return super.attach(args); - } catch (err) { - if (err.format && err.format.indexOf('Cannot connect to runtime process') >= 0) { - // hack -core error msg - err.format = 'Ensure Node was launched with --inspect. ' + err.format; - } - - throw err; - } - } - - protected commonArgs(args: ICommonRequestArgs): void { - args.sourceMapPathOverrides = getSourceMapPathOverrides(args.cwd, args.sourceMapPathOverrides); - fixNodeInternalsSkipFiles(args); - - args.smartStep = typeof args.smartStep === 'undefined' ? !this._isVSClient : args.smartStep; - - this._restartMode = args.restart; - super.commonArgs(args); - } - - protected hookConnectionEvents(): void { - super.hookConnectionEvents(); - - this.chrome.Runtime.on('executionContextDestroyed', params => { - if (params.executionContextId === 1) { - this.terminateSession('Program ended'); - } - }); - } - - protected async doAttach(port: number, targetUrl?: string, address?: string, timeout?: number, websocketUrl?: string, extraCRDPChannelPort?: number): Promise { - await super.doAttach(port, targetUrl, address, timeout, websocketUrl, extraCRDPChannelPort); - this.beginWaitingForDebuggerPaused(); - this.getNodeProcessDetailsIfNeeded(); - - this._session.sendEvent(new CapabilitiesEvent({ supportsStepBack: this.supportsStepBack() })); - } - - private supportsStepBack(): boolean { - return this._domains.has('TimeTravel'); - } - - private launchInTerminal(termArgs: DebugProtocol.RunInTerminalRequestArguments): Promise { - return new Promise((resolve, reject) => { - this._session.sendRequest('runInTerminal', termArgs, NodeDebugAdapter.RUNINTERMINAL_TIMEOUT, response => { - if (response.success) { - // since node starts in a terminal, we cannot track it with an 'exit' handler - // plan for polling after we have gotten the process pid. - this._pollForNodeProcess = true; - resolve(); - } else { - reject(errors.cannotLaunchInTerminal(response.message)); - this.terminateSession('terminal error: ' + response.message); - } - }); - }); - } - - private launchInInternalConsole(runtimeExecutable: string, launchArgs: string[], envArgs?: any, cwd?: string): Promise { - // merge environment variables into a copy of the process.env - const env = Object.assign({}, process.env, envArgs); - Object.keys(env).filter(k => env[k] === null).forEach(key => delete env[key]); - - const spawnOpts: cp.SpawnOptions = { cwd, env }; - - // Workaround for bug Microsoft/vscode#45832 - if (process.platform === 'win32' && runtimeExecutable.indexOf(' ') > 0) { - let foundArgWithSpace = false; - - // check whether there is one arg with a space - const args: string[] = []; - for (const a of launchArgs) { - if (a.indexOf(' ') > 0) { - args.push(`"${a}"`); - foundArgWithSpace = true; - } else { - args.push(a); - } - } - - if (foundArgWithSpace) { - launchArgs = args; - runtimeExecutable = `"${runtimeExecutable}"`; - spawnOpts.shell = true; - } - } - - this.logLaunchCommand(runtimeExecutable, launchArgs); - spawnOpts.detached = this.supportsTerminateRequest; // https://github.com/Microsoft/vscode/issues/57018 - const nodeProcess = cp.spawn(runtimeExecutable, launchArgs, spawnOpts); - return new Promise((resolve, reject) => { - this.nodeProcessId = nodeProcess.pid; - nodeProcess.on('error', (error) => { - reject(errors.cannotLaunchDebugTarget(errors.toString())); - const msg = `Node process error: ${error}`; - logger.error(msg); - this.terminateSession(msg); - }); - nodeProcess.on('exit', () => { - const msg = 'Target exited'; - logger.log(msg); - if (!this.isExtensionHost()) { - this.terminateSession(msg); - } - }); - nodeProcess.on('close', (code) => { - const msg = 'Target closed'; - logger.log(msg); - if (!this.isExtensionHost()) { - this.terminateSession(msg); - } - }); - - const noDebugMode = (this._launchAttachArgs).noDebug; - - this.captureStderr(nodeProcess, noDebugMode); - - // Must attach a listener to stdout or process will hang on Windows - nodeProcess.stdout.on('data', (data: string) => { - if ((noDebugMode || this._captureFromStd) && !this._launchAttachArgs._suppressConsoleOutput) { - let msg = data.toString(); - this._session.sendEvent(new OutputEvent(msg, 'stdout')); - } - }); - - resolve(); - }); - } - - private captureStderr(nodeProcess: cp.ChildProcess, noDebugMode: boolean): void { - nodeProcess.stderr.on('data', (data: string) => { - let msg = data.toString(); - let isLastEarlyNodeMsg = false; - - // We want to send initial stderr output back to the console because they can contain useful errors. - // But there are some messages printed to stderr at the start of debugging that can be misleading. - // Node is "handlingEarlyNodeMsgs" from launch to when one of these messages is printed: - // "To start debugging, open the following URL in Chrome: ..." - Node <8 - // --debug-brk deprecation message - Node 8+ - // In this mode, we strip those messages from stderr output. After one of them is printed, we don't - // watch stderr anymore and pass it along (unless in noDebugMode). - if (this._handlingEarlyNodeMsgs && !noDebugMode) { - const chromeMsgIndex = msg.indexOf('To start debugging, open the following URL in Chrome:'); - if (chromeMsgIndex >= 0) { - msg = msg.substr(0, chromeMsgIndex); - isLastEarlyNodeMsg = true; - } - - const msgMatch = msg.match(NodeDebugAdapter.DEBUG_BRK_DEP_MSG); - if (msgMatch) { - isLastEarlyNodeMsg = true; - msg = msg.replace(NodeDebugAdapter.DEBUG_BRK_DEP_MSG, ''); - } - - const helpMsg = /For help see https:\/\/nodejs.org\/en\/docs\/inspector\s*/; - msg = msg.replace(helpMsg, ''); - } - - if ((this._handlingEarlyNodeMsgs || noDebugMode || this._captureFromStd) && !this._launchAttachArgs._suppressConsoleOutput) { - this._session.sendEvent(new OutputEvent(msg, 'stderr')); - } - - if (isLastEarlyNodeMsg) { - this._handlingEarlyNodeMsgs = false; - } - }); - } - - protected onConsoleAPICalled(params: Crdp.Runtime.ConsoleAPICalledEvent): void { - // Once any console API message is received, we are done listening to initial stderr output - this._handlingEarlyNodeMsgs = false; - - if (this._captureFromStd) { - return; - } - - // Strip the --debug-brk deprecation message which is printed at startup - if (!params.args || params.args.length !== 1 || typeof params.args[0].value !== 'string' || !params.args[0].value.match(NodeDebugAdapter.DEBUG_BRK_DEP_MSG)) { - super.onConsoleAPICalled(params); - } - } - - private collectEnvFileArgs(args: ILaunchRequestArguments): any { - // read env from disk and merge into envVars - if (args.envFile) { - try { - const env = {}; - const buffer = utils.stripBOM(fs.readFileSync(args.envFile, 'utf8')); - buffer.split('\n').forEach(line => { - const r = line.match(/^\s*([\w\.\-]+)\s*=\s*(.*)?\s*$/); - if (r !== null) { - const key = r[1]; - if (!process.env[key]) { // .env variables never overwrite existing variables (see #21169) - let value = r[2] || ''; - if (value.length > 0 && value.charAt(0) === '"' && value.charAt(value.length - 1) === '"') { - value = value.replace(/\\n/gm, '\n'); - } - env[key] = value.replace(/(^['"]|['"]$)/g, ''); - } - } - }); - - return utils.extendObject(env, args.env); // launch config env vars overwrite .env vars - } catch (e) { - throw errors.cannotLoadEnvVarsFromFile(e.message); - } - } - } - - /** - * Override so that -core's call on attach will be ignored, and we can wait until the first break when ready to set BPs. - */ - protected async sendInitializedEvent(): Promise { - if (!this._waitingForEntryPauseEvent) { - return super.sendInitializedEvent(); - } - } - - public async configurationDone(): Promise { - if (!this.chrome) { - // It's possible to get this request after we've detached, see #21973 - return super.configurationDone(); - } - - await this._breakpoints.breakpointsQueueDrained; - - // This message means that all breakpoints have been set by the client. We should be paused at this point. - // So tell the target to continue, or tell the client that we paused, as needed - this._finishedConfig = true; - if (this._continueAfterConfigDone) { - this._expectingStopReason = undefined; - await this.continue(/*internal=*/true); - } else if (this._entryPauseEvent) { - await this.onPaused(this._entryPauseEvent); - } - - this.events.emit(ChromeDebugSession.FinishedStartingUpEventName, { requestedContentWasDetected: true } as FinishedStartingUpEventArguments); - await super.configurationDone(); - } - - private killNodeProcess(): void { - if (this.nodeProcessId && !this.normalAttachMode) { - if (this.nodeProcessId === 1) { - logger.log('Not killing launched process. It has PID=1'); - } else { - logger.log('Killing process with id: ' + this.nodeProcessId); - utils.killTree(this.nodeProcessId); - } - - this.nodeProcessId = 0; - } - } - - public async terminate(args: DebugProtocol.TerminateArguments): Promise { - this._clientRequestedSessionEnd = true; - if (!this._attachMode && !(this._launchAttachArgs).useWSL && this.nodeProcessId > 0) { - // -pid to kill the process group - // https://github.com/Microsoft/vscode/issues/57018 - const groupPID = -this.nodeProcessId; - - try { - logger.log(`Sending SIGINT to ${groupPID}`); - process.kill(groupPID, 'SIGINT'); - } catch (e) { - if (e.message === 'kill ESRCH') { - logger.log(`Got 'kill ESRCH'. Sending SIGINT to ${this.nodeProcessId}`); - process.kill(this.nodeProcessId, 'SIGINT'); - } - } - } - } - - public async terminateSession(reason: string, args?: DebugProtocol.DisconnectArguments): Promise { - if (this.isExtensionHost() && args && typeof args.restart === 'boolean' && args.restart) { - this.nodeProcessId = 0; - } else if (this._restartMode && !args) { - // If restart: true, only kill the process when the client has disconnected. 'args' present implies that a Disconnect request was received - this.nodeProcessId = 0; - } - - this.killNodeProcess(); - const restartArgs = this._restartMode && !this._clientRequestedSessionEnd ? { port: this._port } : undefined; - return super.terminateSession(reason, undefined, restartArgs); - } - - protected async onPaused(notification: Crdp.Debugger.PausedEvent, expectingStopReason = this._expectingStopReason): Promise { - // If we don't have the entry location, this must be the entry pause - if (this._waitingForEntryPauseEvent) { - logger.log(Date.now() / 1000 + ': Paused on entry'); - this._expectingStopReason = 'entry'; - this._entryPauseEvent = notification; - this._waitingForEntryPauseEvent = false; - - if ((this.normalAttachMode && this._launchAttachArgs.stopOnEntry !== false) || - (this.isExtensionHost() && this._launchAttachArgs.stopOnEntry)) { - // In attach mode, and we did pause right away, so assume --debug-brk was set and we should show paused. - // In normal attach mode, assume stopOnEntry unless explicitly disabled. - // In extensionhost mode, only when stopOnEntry is explicitly enabled - this._continueAfterConfigDone = false; - } - - await this.getNodeProcessDetailsIfNeeded(); - await this.sendInitializedEvent(); - return { didPause: true }; - } else { - return super.onPaused(notification, expectingStopReason); - } - } - - private async resolveProgramPath(programPath: string, sourceMaps: boolean): Promise { - logger.verbose(`Launch: Resolving programPath: ${programPath}`); - if (!programPath) { - return programPath; - } - - if (this.jsDeterminant.isJavaScript(programPath)) { - if (!sourceMaps) { - return programPath; - } - - // if programPath is a JavaScript file and sourceMaps are enabled, we don't know whether - // programPath is the generated file or whether it is the source (and we need source mapping). - // Typically this happens if a tool like 'babel' or 'uglify' is used (because they both transpile js to js). - // We use the source maps to find a 'source' file for the given js file. - const generatedPath = await this.sourceMapTransformer.getGeneratedPathFromAuthoredPath(programPath); - if (generatedPath && generatedPath !== programPath) { - // programPath must be source because there seems to be a generated file for it - logger.log(`Launch: program '${programPath}' seems to be the source; launch the generated file '${generatedPath}' instead`); - programPath = generatedPath; - } else { - logger.log(`Launch: program '${programPath}' seems to be the generated file`); - } - - return programPath; - } else { - // node cannot execute the program directly - if (!sourceMaps) { - return Promise.reject(errors.cannotLaunchBecauseSourceMaps(programPath)); - } - - const generatedPath = await this.sourceMapTransformer.getGeneratedPathFromAuthoredPath(programPath); - if (!generatedPath) { // cannot find generated file - if (this._launchAttachArgs.outFiles || this._launchAttachArgs.outDir) { - return Promise.reject(errors.cannotLaunchBecauseJsNotFound(programPath)); - } else { - return Promise.reject(errors.cannotLaunchBecauseOutFiles(programPath)); - } - } - - logger.log(`Launch: program '${programPath}' seems to be the source; launch the generated file '${generatedPath}' instead`); - return generatedPath; - } - } - - /** - * Wait 500-5000ms for the entry pause event, and if it doesn't come, move on with life. - * During attach, we don't know whether it's paused when attaching. - */ - private beginWaitingForDebuggerPaused(): void { - const checkPausedInterval = 50; - const timeout = this._launchAttachArgs.timeout; - - // Wait longer in launch mode - it definitely should be paused. - let count = this.normalAttachMode ? 10 : - (typeof timeout === 'number' ? - Math.floor(timeout / checkPausedInterval) : - 100); - logger.log(Date.now() / 1000 + ': Waiting for initial debugger pause'); - const id = setInterval(() => { - if (this._entryPauseEvent || this._isTerminated) { - // Got the entry pause, stop waiting - clearInterval(id); - } else if (--count <= 0) { - // No entry event, so fake it and continue - logger.log(Date.now() / 1000 + ': Did not get a pause event after starting, so continuing'); - clearInterval(id); - this._continueAfterConfigDone = false; - this._waitingForEntryPauseEvent = false; - - this.getNodeProcessDetailsIfNeeded() - .then(() => this.sendInitializedEvent()); - } - }, checkPausedInterval); - } - - protected threadName(): string { - return `Node (${this.nodeProcessId})`; - } - - private async getNodeProcessDetailsIfNeeded(): Promise { - if (this._loggedTargetVersion || !this.chrome) { - return Promise.resolve(); - } - - const response = await this.chrome.Runtime.evaluate({ expression: '[process.pid, process.version, process.arch]', returnByValue: true, contextId: 1 }) - .catch(error => logger.error('Error evaluating `process.pid`: ' + error.message)); - - if (!response) { - return; - } - - if (this._loggedTargetVersion) { - // Possible to get two of these requests going simultaneously - return; - } - - if (response.exceptionDetails) { - const description = chromeUtils.errorMessageFromExceptionDetails(response.exceptionDetails); - if (description.startsWith('ReferenceError: process is not defined')) { - logger.verbose('Got expected exception: `process is not defined`. Will try again later.'); - } else { - logger.log('Exception evaluating `process.pid`: ' + description + '. Will try again later.'); - } - } else { - const [pid, version, arch] = response.result.value; - if (typeof pid !== 'number') { - logger.log(`Node returned a pid of ${pid}. Will try again later.`); - return; - } - - if (!this.nodeProcessId) { - this.nodeProcessId = pid; - } - - if (this._pollForNodeProcess) { - this.startPollingForNodeTermination(); - } - - this._loggedTargetVersion = true; - logger.log(`Target node version: ${version} ${arch}`); - /* __GDPR__ + private static NODE = "node"; + private static RUNINTERMINAL_TIMEOUT = 5000; + private static NODE_TERMINATION_POLL_INTERVAL = 3000; + private static DEBUG_BRK_DEP_MSG = + /\(node:\d+\) \[DEP0062\] DeprecationWarning: `node --inspect --debug-brk` is deprecated\. Please use `node --inspect-brk` instead\.\s*/; + + public static NODE_INTERNALS = ""; + + protected _launchAttachArgs: ICommonRequestArgs; + + private _jsDeterminant = new utils.JavaScriptDeterminant(); + private _loggedTargetVersion: boolean; + private _nodeProcessId: number; + private _pollForNodeProcess: boolean; + + // Flags relevant during init + private _continueAfterConfigDone = true; + private _entryPauseEvent: Crdp.Debugger.PausedEvent; + private _waitingForEntryPauseEvent = true; + private _finishedConfig = false; + private _handlingEarlyNodeMsgs = true; + private _captureFromStd: boolean = false; + + private _supportsRunInTerminalRequest: boolean; + private _restartMode: boolean; + private _isTerminated: boolean; + private _adapterID: string; + + get entryPauseEvent(): Crdp.Debugger.PausedEvent | undefined { + return this._entryPauseEvent; + } + + get jsDeterminant(): utils.JavaScriptDeterminant { + return this._jsDeterminant; + } + + get finishedConfig(): boolean { + return this._finishedConfig; + } + + get continueAfterConfigDone(): boolean { + return this._continueAfterConfigDone; + } + + set continueAfterConfigDone(v: boolean) { + this._continueAfterConfigDone = v; + } + + get expectingStopReason(): ReasonType { + return this._expectingStopReason; + } + + set expectingStopReason(v: ReasonType) { + this._expectingStopReason = v; + } + + private get nodeProcessId(): number { + return this._nodeProcessId; + } + + private set nodeProcessId(id: number) { + this._nodeProcessId = id; + + if (id !== 0) { + this.session.sendEvent(new ProcessEvent("", id)); + } + } + + get launchAttachArgs(): ICommonRequestArgs { + return this._launchAttachArgs; + } + + /** + * Returns whether this is a non-EH attach scenario + */ + private get normalAttachMode(): boolean { + return this._attachMode && !this.isExtensionHost(); + } + + private get supportsTerminateRequest(): boolean { + return process.platform !== "win32" && !this.isExtensionHost(); + } + + public initialize( + args: DebugProtocol.InitializeRequestArguments + ): DebugProtocol.Capabilities { + this._adapterID = args.adapterID; + this._promiseRejectExceptionFilterEnabled = this.isExtensionHost(); + this._supportsRunInTerminalRequest = args.supportsRunInTerminalRequest; + + if (args.locale) { + localize = nls.config({ locale: args.locale })(); + } + + const capabilities = super.initialize(args); + capabilities.supportsLogPoints = true; + capabilities.supportsTerminateRequest = this.supportsTerminateRequest; + + return capabilities; + } + + public async launch(args: ILaunchRequestArguments): Promise { + if (typeof args.enableSourceMapCaching !== "boolean") { + args.enableSourceMapCaching = this.isExtensionHost(); + } + + if ( + args.console && + args.console !== "internalConsole" && + typeof args._suppressConsoleOutput === "undefined" + ) { + args._suppressConsoleOutput = true; + } + + await super.launch(args); + if (args.__restart && typeof args.__restart.port === "number") { + return this.doAttach( + args.__restart.port, + undefined, + args.address, + args.timeout + ); + } + + const port = args.port || utils.random(3000, 50000); + + if (args.useWSL && !wsl.subsystemForLinuxPresent()) { + return Promise.reject( + new ErrorWithMessage({ + id: 2007, + format: localize( + "attribute.wsl.not.exist", + "Cannot find Windows Subsystem for Linux installation." + ), + }) + ); + } + + this._continueAfterConfigDone = !args.stopOnEntry; + + if (this.isExtensionHost()) { + return this.extensionHostLaunch(args, port); + } + + let runtimeExecutable = args.runtimeExecutable; + if (args.useWSL) { + runtimeExecutable = runtimeExecutable || NodeDebugAdapter.NODE; + } else if (runtimeExecutable) { + if (path.isAbsolute(runtimeExecutable)) { + const re = pathUtils.findExecutable( + runtimeExecutable, + args.env + ); + if (!re) { + return this.getNotExistErrorResponse( + "runtimeExecutable", + runtimeExecutable + ); + } + + runtimeExecutable = re; + } else { + const re = pathUtils.findOnPath(runtimeExecutable, args.env); + if (!re) { + return this.getRuntimeNotOnPathErrorResponse( + runtimeExecutable + ); + } + + runtimeExecutable = re; + } + } else { + const re = pathUtils.findOnPath(NodeDebugAdapter.NODE, args.env); + if (!re) { + return Promise.reject( + errors.runtimeNotFound(NodeDebugAdapter.NODE) + ); + } + + // use node from PATH + runtimeExecutable = re; + } + + let programPath = args.program; + if (programPath) { + if (!path.isAbsolute(programPath)) { + return this.getRelativePathErrorResponse( + "program", + programPath + ); + } + + if (!fs.existsSync(programPath)) { + if (fs.existsSync(programPath + ".js")) { + programPath += ".js"; + } else { + return this.getNotExistErrorResponse( + "program", + programPath + ); + } + } + + programPath = path.normalize(programPath); + if ( + pathUtils.normalizeDriveLetter(programPath) !== + pathUtils.realCasePath(programPath) + ) { + logger.warn( + localize( + "program.path.case.mismatch.warning", + "Program path uses differently cased character as file on disk; this might result in breakpoints not being hit." + ) + ); + } + } + + this._captureFromStd = args.outputCapture === "std"; + + if (args.__debuggablePatterns) { + this._jsDeterminant.updatePatterns(args.__debuggablePatterns); + } + + const resolvedProgramPath = await this.resolveProgramPath( + programPath, + args.sourceMaps + ); + let program: string; + let cwd = args.cwd; + if (cwd) { + if (!path.isAbsolute(cwd)) { + return this.getRelativePathErrorResponse("cwd", cwd); + } + + if (!fs.existsSync(cwd)) { + return this.getNotExistErrorResponse("cwd", cwd); + } + + // if working dir is given and if the executable is within that folder, we make the executable path relative to the working dir + if (resolvedProgramPath) { + program = (await pathUtils.isSymlinkedPath(cwd)) + ? resolvedProgramPath + : path.relative(cwd, resolvedProgramPath); + } + } else if (resolvedProgramPath) { + // if no working dir given, we use the direct folder of the executable + cwd = path.dirname(resolvedProgramPath); + program = (await pathUtils.isSymlinkedPath(cwd)) + ? resolvedProgramPath + : path.basename(resolvedProgramPath); + } + + const runtimeArgs = args.runtimeArgs || []; + const programArgs = args.args || []; + + const debugArgs = detectSupportedDebugArgsForLaunch( + args, + runtimeExecutable, + args.env + ); + let launchArgs = []; + if (!args.noDebug && !args.port) { + // Always stop on entry to set breakpoints + if (debugArgs === DebugArgs.Inspect_DebugBrk) { + launchArgs.push(`--inspect=${port}`); + launchArgs.push("--debug-brk"); + } else { + launchArgs.push(`--inspect-brk=${port}`); + } + } + + launchArgs = runtimeArgs.concat( + launchArgs, + program ? [program] : [], + programArgs + ); + + const wslLaunchArgs = wsl.createLaunchArg( + args.useWSL, + args.console === "externalTerminal", + cwd, + runtimeExecutable, + launchArgs, + program + ); + // if using subsystem for linux, we will trick the debugger to map source files + if (args.useWSL && !args.localRoot && !args.remoteRoot) { + this.pathTransformer.attach({ + remoteRoot: wslLaunchArgs.remoteRoot, + localRoot: wslLaunchArgs.localRoot, + }); + } + + const envArgs = this.collectEnvFileArgs(args) || args.env; + if ( + (args.console === "integratedTerminal" || + args.console === "externalTerminal") && + this._supportsRunInTerminalRequest + ) { + const termArgs: DebugProtocol.RunInTerminalRequestArguments = { + kind: + args.console === "integratedTerminal" + ? "integrated" + : "external", + title: localize("node.console.title", "Node Debug Console"), + cwd, + args: wslLaunchArgs.combined, + env: envArgs, + }; + await this.launchInTerminal(termArgs); + if (args.noDebug) { + this.terminateSession("cannot track process"); + } + } else if (!args.console || args.console === "internalConsole") { + await this.launchInInternalConsole( + wslLaunchArgs.executable, + wslLaunchArgs.args, + envArgs, + cwd + ); + } else { + throw errors.unknownConsoleType(args.console); + } + + if (!args.noDebug) { + await this.doAttach( + port, + undefined, + args.address, + args.timeout, + undefined, + args.extraCRDPChannelPort + ); + } + } + + private extensionHostLaunch( + launchArgs: ILaunchRequestArguments, + debugPort: number + ): Promise { + // Separate all "paths" from an arguments into separate attributes. + const args = launchArgs.args.map((arg) => { + if (arg.startsWith("-")) { + // arg is an option + const pair = arg.split("=", 2); + if ( + pair.length === 2 && + (fs.existsSync(pair[1]) || fs.existsSync(pair[1] + ".js")) + ) { + return { prefix: pair[0] + "=", path: pair[1] }; + } + return { prefix: arg }; + } else { + // arg is a path + try { + const stat = fs.lstatSync(arg); + if (stat.isDirectory()) { + return { prefix: "--folder-uri=", path: arg }; + } else if (stat.isFile()) { + return { prefix: "--file-uri=", path: arg }; + } + } catch (err) { + // file not found + } + return { path: arg }; // just return the path blindly and hope for the best... + } + }); + + if (!launchArgs.noDebug) { + args.unshift({ prefix: `--inspect-brk-extensions=${debugPort}` }); + } + + args.unshift({ prefix: `--debugId=${launchArgs.__sessionId}` }); // pass the debug session ID so that broadcast events know where they come from + + const launchVSCodeArgs: ILaunchVSCodeArguments = { + args: args, + env: this.collectEnvFileArgs(launchArgs) || launchArgs.env, + }; + + return new Promise((resolve, reject) => { + this._session.sendRequest( + "launchVSCode", + launchVSCodeArgs, + NodeDebugAdapter.RUNINTERMINAL_TIMEOUT, + (response) => { + if (response.success) { + if ( + response.body && + typeof response.body.processId === "number" + ) { + this.nodeProcessId = response.body.processId; + } + resolve(); + } else { + reject(errors.cannotDebugExtension(response.message)); + this.terminateSession( + "launchVSCode error: " + response.message + ); + } + } + ); + }); + } + + public async attach(args: IAttachRequestArguments): Promise { + try { + if (typeof args.enableSourceMapCaching !== "boolean") { + args.enableSourceMapCaching = true; + } + + return super.attach(args); + } catch (err) { + if ( + err.format && + err.format.indexOf("Cannot connect to runtime process") >= 0 + ) { + // hack -core error msg + err.format = + "Ensure Node was launched with --inspect. " + err.format; + } + + throw err; + } + } + + protected commonArgs(args: ICommonRequestArgs): void { + args.sourceMapPathOverrides = getSourceMapPathOverrides( + args.cwd, + args.sourceMapPathOverrides + ); + fixNodeInternalsSkipFiles(args); + + args.smartStep = + typeof args.smartStep === "undefined" + ? !this._isVSClient + : args.smartStep; + + this._restartMode = args.restart; + super.commonArgs(args); + } + + protected hookConnectionEvents(): void { + super.hookConnectionEvents(); + + this.chrome.Runtime.on("executionContextDestroyed", (params) => { + if (params.executionContextId === 1) { + this.terminateSession("Program ended"); + } + }); + } + + protected async doAttach( + port: number, + targetUrl?: string, + address?: string, + timeout?: number, + websocketUrl?: string, + extraCRDPChannelPort?: number + ): Promise { + await super.doAttach( + port, + targetUrl, + address, + timeout, + websocketUrl, + extraCRDPChannelPort + ); + this.beginWaitingForDebuggerPaused(); + this.getNodeProcessDetailsIfNeeded(); + + this._session.sendEvent( + new CapabilitiesEvent({ supportsStepBack: this.supportsStepBack() }) + ); + } + + private supportsStepBack(): boolean { + return this._domains.has("TimeTravel"); + } + + private launchInTerminal( + termArgs: DebugProtocol.RunInTerminalRequestArguments + ): Promise { + return new Promise((resolve, reject) => { + this._session.sendRequest( + "runInTerminal", + termArgs, + NodeDebugAdapter.RUNINTERMINAL_TIMEOUT, + (response) => { + if (response.success) { + // since node starts in a terminal, we cannot track it with an 'exit' handler + // plan for polling after we have gotten the process pid. + this._pollForNodeProcess = true; + resolve(); + } else { + reject(errors.cannotLaunchInTerminal(response.message)); + this.terminateSession( + "terminal error: " + response.message + ); + } + } + ); + }); + } + + private launchInInternalConsole( + runtimeExecutable: string, + launchArgs: string[], + envArgs?: any, + cwd?: string + ): Promise { + // merge environment variables into a copy of the process.env + const env = Object.assign({}, process.env, envArgs); + Object.keys(env) + .filter((k) => env[k] === null) + .forEach((key) => delete env[key]); + + const spawnOpts: cp.SpawnOptions = { cwd, env }; + + // Workaround for bug Microsoft/vscode#45832 + if ( + process.platform === "win32" && + runtimeExecutable.indexOf(" ") > 0 + ) { + let foundArgWithSpace = false; + + // check whether there is one arg with a space + const args: string[] = []; + for (const a of launchArgs) { + if (a.indexOf(" ") > 0) { + args.push(`"${a}"`); + foundArgWithSpace = true; + } else { + args.push(a); + } + } + + if (foundArgWithSpace) { + launchArgs = args; + runtimeExecutable = `"${runtimeExecutable}"`; + spawnOpts.shell = true; + } + } + + this.logLaunchCommand(runtimeExecutable, launchArgs); + spawnOpts.detached = this.supportsTerminateRequest; // https://github.com/Microsoft/vscode/issues/57018 + const nodeProcess = cp.spawn(runtimeExecutable, launchArgs, spawnOpts); + return new Promise((resolve, reject) => { + this.nodeProcessId = nodeProcess.pid; + nodeProcess.on("error", (error) => { + reject(errors.cannotLaunchDebugTarget(errors.toString())); + const msg = `Node process error: ${error}`; + logger.error(msg); + this.terminateSession(msg); + }); + nodeProcess.on("exit", () => { + const msg = "Target exited"; + logger.log(msg); + if (!this.isExtensionHost()) { + this.terminateSession(msg); + } + }); + nodeProcess.on("close", (code) => { + const msg = "Target closed"; + logger.log(msg); + if (!this.isExtensionHost()) { + this.terminateSession(msg); + } + }); + + const noDebugMode = (( + this._launchAttachArgs + )).noDebug; + + this.captureStderr(nodeProcess, noDebugMode); + + // Must attach a listener to stdout or process will hang on Windows + nodeProcess.stdout.on("data", (data: string) => { + if ( + (noDebugMode || this._captureFromStd) && + !this._launchAttachArgs._suppressConsoleOutput + ) { + let msg = data.toString(); + this._session.sendEvent(new OutputEvent(msg, "stdout")); + } + }); + + resolve(); + }); + } + + private captureStderr( + nodeProcess: cp.ChildProcess, + noDebugMode: boolean + ): void { + nodeProcess.stderr.on("data", (data: string) => { + let msg = data.toString(); + let isLastEarlyNodeMsg = false; + + // We want to send initial stderr output back to the console because they can contain useful errors. + // But there are some messages printed to stderr at the start of debugging that can be misleading. + // Node is "handlingEarlyNodeMsgs" from launch to when one of these messages is printed: + // "To start debugging, open the following URL in Chrome: ..." - Node <8 + // --debug-brk deprecation message - Node 8+ + // In this mode, we strip those messages from stderr output. After one of them is printed, we don't + // watch stderr anymore and pass it along (unless in noDebugMode). + if (this._handlingEarlyNodeMsgs && !noDebugMode) { + const chromeMsgIndex = msg.indexOf( + "To start debugging, open the following URL in Chrome:" + ); + if (chromeMsgIndex >= 0) { + msg = msg.substr(0, chromeMsgIndex); + isLastEarlyNodeMsg = true; + } + + const msgMatch = msg.match(NodeDebugAdapter.DEBUG_BRK_DEP_MSG); + if (msgMatch) { + isLastEarlyNodeMsg = true; + msg = msg.replace(NodeDebugAdapter.DEBUG_BRK_DEP_MSG, ""); + } + + const helpMsg = + /For help see https:\/\/nodejs.org\/en\/docs\/inspector\s*/; + msg = msg.replace(helpMsg, ""); + } + + if ( + (this._handlingEarlyNodeMsgs || + noDebugMode || + this._captureFromStd) && + !this._launchAttachArgs._suppressConsoleOutput + ) { + this._session.sendEvent(new OutputEvent(msg, "stderr")); + } + + if (isLastEarlyNodeMsg) { + this._handlingEarlyNodeMsgs = false; + } + }); + } + + protected onConsoleAPICalled( + params: Crdp.Runtime.ConsoleAPICalledEvent + ): void { + // Once any console API message is received, we are done listening to initial stderr output + this._handlingEarlyNodeMsgs = false; + + if (this._captureFromStd) { + return; + } + + // Strip the --debug-brk deprecation message which is printed at startup + if ( + !params.args || + params.args.length !== 1 || + typeof params.args[0].value !== "string" || + !params.args[0].value.match(NodeDebugAdapter.DEBUG_BRK_DEP_MSG) + ) { + super.onConsoleAPICalled(params); + } + } + + private collectEnvFileArgs(args: ILaunchRequestArguments): any { + // read env from disk and merge into envVars + if (args.envFile) { + try { + const env = {}; + const buffer = utils.stripBOM( + fs.readFileSync(args.envFile, "utf8") + ); + buffer.split("\n").forEach((line) => { + const r = line.match(/^\s*([\w\.\-]+)\s*=\s*(.*)?\s*$/); + if (r !== null) { + const key = r[1]; + if (!process.env[key]) { + // .env variables never overwrite existing variables (see #21169) + let value = r[2] || ""; + if ( + value.length > 0 && + value.charAt(0) === '"' && + value.charAt(value.length - 1) === '"' + ) { + value = value.replace(/\\n/gm, "\n"); + } + env[key] = value.replace(/(^['"]|['"]$)/g, ""); + } + } + }); + + return utils.extendObject(env, args.env); // launch config env vars overwrite .env vars + } catch (e) { + throw errors.cannotLoadEnvVarsFromFile(e.message); + } + } + } + + /** + * Override so that -core's call on attach will be ignored, and we can wait until the first break when ready to set BPs. + */ + protected async sendInitializedEvent(): Promise { + if (!this._waitingForEntryPauseEvent) { + return super.sendInitializedEvent(); + } + } + + public async configurationDone(): Promise { + if (!this.chrome) { + // It's possible to get this request after we've detached, see #21973 + return super.configurationDone(); + } + + await this._breakpoints.breakpointsQueueDrained; + + // This message means that all breakpoints have been set by the client. We should be paused at this point. + // So tell the target to continue, or tell the client that we paused, as needed + this._finishedConfig = true; + if (this._continueAfterConfigDone) { + this._expectingStopReason = undefined; + await this.continue(/*internal=*/ true); + } else if (this._entryPauseEvent) { + await this.onPaused(this._entryPauseEvent); + } + + this.events.emit(ChromeDebugSession.FinishedStartingUpEventName, { + requestedContentWasDetected: true, + } as FinishedStartingUpEventArguments); + await super.configurationDone(); + } + + private killNodeProcess(): void { + if (this.nodeProcessId && !this.normalAttachMode) { + if (this.nodeProcessId === 1) { + logger.log("Not killing launched process. It has PID=1"); + } else { + logger.log("Killing process with id: " + this.nodeProcessId); + utils.killTree(this.nodeProcessId); + } + + this.nodeProcessId = 0; + } + } + + public async terminate( + args: DebugProtocol.TerminateArguments + ): Promise { + this._clientRequestedSessionEnd = true; + if ( + !this._attachMode && + !(this._launchAttachArgs).useWSL && + this.nodeProcessId > 0 + ) { + // -pid to kill the process group + // https://github.com/Microsoft/vscode/issues/57018 + const groupPID = -this.nodeProcessId; + + try { + logger.log(`Sending SIGINT to ${groupPID}`); + process.kill(groupPID, "SIGINT"); + } catch (e) { + if (e.message === "kill ESRCH") { + logger.log( + `Got 'kill ESRCH'. Sending SIGINT to ${this.nodeProcessId}` + ); + process.kill(this.nodeProcessId, "SIGINT"); + } + } + } + } + + public async terminateSession( + reason: string, + args?: DebugProtocol.DisconnectArguments + ): Promise { + if ( + this.isExtensionHost() && + args && + typeof args.restart === "boolean" && + args.restart + ) { + this.nodeProcessId = 0; + } else if (this._restartMode && !args) { + // If restart: true, only kill the process when the client has disconnected. 'args' present implies that a Disconnect request was received + this.nodeProcessId = 0; + } + + this.killNodeProcess(); + const restartArgs = + this._restartMode && !this._clientRequestedSessionEnd + ? { port: this._port } + : undefined; + return super.terminateSession(reason, undefined, restartArgs); + } + + protected async onPaused( + notification: Crdp.Debugger.PausedEvent, + expectingStopReason = this._expectingStopReason + ): Promise { + // If we don't have the entry location, this must be the entry pause + if (this._waitingForEntryPauseEvent) { + logger.log(Date.now() / 1000 + ": Paused on entry"); + this._expectingStopReason = "entry"; + this._entryPauseEvent = notification; + this._waitingForEntryPauseEvent = false; + + if ( + (this.normalAttachMode && + this._launchAttachArgs.stopOnEntry !== false) || + (this.isExtensionHost() && this._launchAttachArgs.stopOnEntry) + ) { + // In attach mode, and we did pause right away, so assume --debug-brk was set and we should show paused. + // In normal attach mode, assume stopOnEntry unless explicitly disabled. + // In extensionhost mode, only when stopOnEntry is explicitly enabled + this._continueAfterConfigDone = false; + } + + await this.getNodeProcessDetailsIfNeeded(); + await this.sendInitializedEvent(); + return { didPause: true }; + } else { + return super.onPaused(notification, expectingStopReason); + } + } + + private async resolveProgramPath( + programPath: string, + sourceMaps: boolean + ): Promise { + logger.verbose(`Launch: Resolving programPath: ${programPath}`); + if (!programPath) { + return programPath; + } + + if (this.jsDeterminant.isJavaScript(programPath)) { + if (!sourceMaps) { + return programPath; + } + + // if programPath is a JavaScript file and sourceMaps are enabled, we don't know whether + // programPath is the generated file or whether it is the source (and we need source mapping). + // Typically this happens if a tool like 'babel' or 'uglify' is used (because they both transpile js to js). + // We use the source maps to find a 'source' file for the given js file. + const generatedPath = + await this.sourceMapTransformer.getGeneratedPathFromAuthoredPath( + programPath + ); + if (generatedPath && generatedPath !== programPath) { + // programPath must be source because there seems to be a generated file for it + logger.log( + `Launch: program '${programPath}' seems to be the source; launch the generated file '${generatedPath}' instead` + ); + programPath = generatedPath; + } else { + logger.log( + `Launch: program '${programPath}' seems to be the generated file` + ); + } + + return programPath; + } else { + // node cannot execute the program directly + if (!sourceMaps) { + return Promise.reject( + errors.cannotLaunchBecauseSourceMaps(programPath) + ); + } + + const generatedPath = + await this.sourceMapTransformer.getGeneratedPathFromAuthoredPath( + programPath + ); + if (!generatedPath) { + // cannot find generated file + if ( + this._launchAttachArgs.outFiles || + this._launchAttachArgs.outDir + ) { + return Promise.reject( + errors.cannotLaunchBecauseJsNotFound(programPath) + ); + } else { + return Promise.reject( + errors.cannotLaunchBecauseOutFiles(programPath) + ); + } + } + + logger.log( + `Launch: program '${programPath}' seems to be the source; launch the generated file '${generatedPath}' instead` + ); + return generatedPath; + } + } + + /** + * Wait 500-5000ms for the entry pause event, and if it doesn't come, move on with life. + * During attach, we don't know whether it's paused when attaching. + */ + private beginWaitingForDebuggerPaused(): void { + const checkPausedInterval = 50; + const timeout = this._launchAttachArgs.timeout; + + // Wait longer in launch mode - it definitely should be paused. + let count = this.normalAttachMode + ? 10 + : typeof timeout === "number" + ? Math.floor(timeout / checkPausedInterval) + : 100; + logger.log(Date.now() / 1000 + ": Waiting for initial debugger pause"); + const id = setInterval(() => { + if (this._entryPauseEvent || this._isTerminated) { + // Got the entry pause, stop waiting + clearInterval(id); + } else if (--count <= 0) { + // No entry event, so fake it and continue + logger.log( + Date.now() / 1000 + + ": Did not get a pause event after starting, so continuing" + ); + clearInterval(id); + this._continueAfterConfigDone = false; + this._waitingForEntryPauseEvent = false; + + this.getNodeProcessDetailsIfNeeded().then(() => + this.sendInitializedEvent() + ); + } + }, checkPausedInterval); + } + + protected threadName(): string { + return `Node (${this.nodeProcessId})`; + } + + private async getNodeProcessDetailsIfNeeded(): Promise { + if (this._loggedTargetVersion || !this.chrome) { + return Promise.resolve(); + } + + const response = await this.chrome.Runtime.evaluate({ + expression: "[process.pid, process.version, process.arch]", + returnByValue: true, + contextId: 1, + }).catch((error) => + logger.error("Error evaluating `process.pid`: " + error.message) + ); + + if (!response) { + return; + } + + if (this._loggedTargetVersion) { + // Possible to get two of these requests going simultaneously + return; + } + + if (response.exceptionDetails) { + const description = chromeUtils.errorMessageFromExceptionDetails( + response.exceptionDetails + ); + if ( + description.startsWith("ReferenceError: process is not defined") + ) { + logger.verbose( + "Got expected exception: `process is not defined`. Will try again later." + ); + } else { + logger.log( + "Exception evaluating `process.pid`: " + + description + + ". Will try again later." + ); + } + } else { + const [pid, version, arch] = response.result.value; + if (typeof pid !== "number") { + logger.log( + `Node returned a pid of ${pid}. Will try again later.` + ); + return; + } + + if (!this.nodeProcessId) { + this.nodeProcessId = pid; + } + + if (this._pollForNodeProcess) { + this.startPollingForNodeTermination(); + } + + this._loggedTargetVersion = true; + logger.log(`Target node version: ${version} ${arch}`); + /* __GDPR__ "nodeVersion" : { "version" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }, "${include}": [ "${DebugCommonProperties}" ] } */ - telemetry.reportEvent('nodeVersion', { version }); + telemetry.reportEvent("nodeVersion", { version }); - /* __GDPR__FRAGMENT__ + /* __GDPR__FRAGMENT__ "DebugCommonProperties" : { "Versions.Target.Version" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" } } */ - telemetry.addCustomGlobalProperty({ 'Versions.Target.Version': version }); - } - } - - private startPollingForNodeTermination(): void { - const intervalId = setInterval(() => { - try { - if (this.nodeProcessId) { - // kill with signal=0 just test for whether the proc is alive. It throws if not. - process.kill(this.nodeProcessId, 0); - } else { - clearInterval(intervalId); - } - } catch (e) { - clearInterval(intervalId); - logger.log('Target process died'); - this.terminateSession('Target process died'); - } - }, NodeDebugAdapter.NODE_TERMINATION_POLL_INTERVAL); - } - - private logLaunchCommand(executable: string, args: string[]) { - // print the command to launch the target to the debug console - let cli = executable + ' '; - for (let a of args) { - if (a.indexOf(' ') >= 0) { - cli += '\'' + a + '\''; - } else { - cli += a; - } - cli += ' '; - } - - logger.warn(cli); - } - - protected globalEvaluate(args: Crdp.Runtime.EvaluateRequest): Promise { - // contextId: 1 - see https://github.com/nodejs/node/issues/8426 - if (!args.contextId) args.contextId = 1; - - return super.globalEvaluate(args); - } - - /** - * 'Path does not exist' error - */ - private getNotExistErrorResponse(attribute: string, path: string): Promise { - return Promise.reject(new ErrorWithMessage({ - id: 2007, - format: localize('attribute.path.not.exist', "Attribute '{0}' does not exist ('{1}').", attribute, '{path}'), - variables: { path } - })); - } - - /** - * 'Path not absolute' error with 'More Information' link. - */ - private getRelativePathErrorResponse(attribute: string, path: string): Promise { - const format = localize('attribute.path.not.absolute', "Attribute '{0}' is not absolute ('{1}'); consider adding '{2}' as a prefix to make it absolute.", attribute, '{path}', '${workspaceFolder}/'); - return this.getErrorResponseWithInfoLink(2008, format, { path }, 20003); - } - - private getRuntimeNotOnPathErrorResponse(runtime: string): Promise { - return Promise.reject(new ErrorWithMessage({ - id: 2001, - format: localize('VSND2001', "Cannot find runtime '{0}' on PATH. Make sure to have '{0}' installed.", '{_runtime}'), - variables: { _runtime: runtime } - })); - } - - /** - * Send error response with 'More Information' link. - */ - private getErrorResponseWithInfoLink(code: number, format: string, variables: any, infoId: number): Promise { - return Promise.reject(new ErrorWithMessage({ - id: code, - format, - variables, - showUser: true, - url: 'http://go.microsoft.com/fwlink/?linkID=534832#_' + infoId.toString(), - urlLabel: localize('more.information', 'More Information') - })); - } - - protected getReadonlyOrigin(aPath: string): string { - return path.isAbsolute(aPath) || aPath.startsWith(ChromeDebugAdapter.EVAL_NAME_PREFIX) ? - localize('origin.from.node', 'read-only content from Node.js') : - localize('origin.core.module', 'read-only core module'); - } - - private isExtensionHost(): boolean { - return this._adapterID === 'extensionHost2' || this._adapterID === 'legacy-extensionHost'; - } + telemetry.addCustomGlobalProperty({ + "Versions.Target.Version": version, + }); + } + } + + private startPollingForNodeTermination(): void { + const intervalId = setInterval(() => { + try { + if (this.nodeProcessId) { + // kill with signal=0 just test for whether the proc is alive. It throws if not. + process.kill(this.nodeProcessId, 0); + } else { + clearInterval(intervalId); + } + } catch (e) { + clearInterval(intervalId); + logger.log("Target process died"); + this.terminateSession("Target process died"); + } + }, NodeDebugAdapter.NODE_TERMINATION_POLL_INTERVAL); + } + + private logLaunchCommand(executable: string, args: string[]) { + // print the command to launch the target to the debug console + let cli = executable + " "; + for (let a of args) { + if (a.indexOf(" ") >= 0) { + cli += "'" + a + "'"; + } else { + cli += a; + } + cli += " "; + } + + logger.warn(cli); + } + + protected globalEvaluate( + args: Crdp.Runtime.EvaluateRequest + ): Promise { + // contextId: 1 - see https://github.com/nodejs/node/issues/8426 + if (!args.contextId) args.contextId = 1; + + return super.globalEvaluate(args); + } + + /** + * 'Path does not exist' error + */ + private getNotExistErrorResponse( + attribute: string, + path: string + ): Promise { + return Promise.reject( + new ErrorWithMessage({ + id: 2007, + format: localize( + "attribute.path.not.exist", + "Attribute '{0}' does not exist ('{1}').", + attribute, + "{path}" + ), + variables: { path }, + }) + ); + } + + /** + * 'Path not absolute' error with 'More Information' link. + */ + private getRelativePathErrorResponse( + attribute: string, + path: string + ): Promise { + const format = localize( + "attribute.path.not.absolute", + "Attribute '{0}' is not absolute ('{1}'); consider adding '{2}' as a prefix to make it absolute.", + attribute, + "{path}", + "${workspaceFolder}/" + ); + return this.getErrorResponseWithInfoLink(2008, format, { path }, 20003); + } + + private getRuntimeNotOnPathErrorResponse(runtime: string): Promise { + return Promise.reject( + new ErrorWithMessage({ + id: 2001, + format: localize( + "VSND2001", + "Cannot find runtime '{0}' on PATH. Make sure to have '{0}' installed.", + "{_runtime}" + ), + variables: { _runtime: runtime }, + }) + ); + } + + /** + * Send error response with 'More Information' link. + */ + private getErrorResponseWithInfoLink( + code: number, + format: string, + variables: any, + infoId: number + ): Promise { + return Promise.reject( + new ErrorWithMessage({ + id: code, + format, + variables, + showUser: true, + url: + "http://go.microsoft.com/fwlink/?linkID=534832#_" + + infoId.toString(), + urlLabel: localize("more.information", "More Information"), + }) + ); + } + + protected getReadonlyOrigin(aPath: string): string { + return path.isAbsolute(aPath) || + aPath.startsWith(ChromeDebugAdapter.EVAL_NAME_PREFIX) + ? localize("origin.from.node", "read-only content from Node.js") + : localize("origin.core.module", "read-only core module"); + } + + private isExtensionHost(): boolean { + return ( + this._adapterID === "extensionHost2" || + this._adapterID === "legacy-extensionHost" + ); + } } -function getSourceMapPathOverrides(cwd: string, sourceMapPathOverrides?: ISourceMapPathOverrides): ISourceMapPathOverrides { - return sourceMapPathOverrides ? resolveCwdPattern(cwd, sourceMapPathOverrides, /*warnOnMissing=*/true) : - resolveCwdPattern(cwd, DefaultSourceMapPathOverrides, /*warnOnMissing=*/false); +function getSourceMapPathOverrides( + cwd: string, + sourceMapPathOverrides?: ISourceMapPathOverrides +): ISourceMapPathOverrides { + return sourceMapPathOverrides + ? resolveCwdPattern( + cwd, + sourceMapPathOverrides, + /*warnOnMissing=*/ true + ) + : resolveCwdPattern( + cwd, + DefaultSourceMapPathOverrides, + /*warnOnMissing=*/ false + ); } function fixNodeInternalsSkipFiles(args: ICommonRequestArgs): void { - if (args.skipFiles) { - args.skipFileRegExps = args.skipFileRegExps || []; - args.skipFiles = args.skipFiles.filter(pattern => { - const fixed = fixNodeInternalsSkipFilePattern(pattern); - if (fixed) { - args.skipFileRegExps.push(fixed); - return false; - } else { - return true; - } - }); - } + if (args.skipFiles) { + args.skipFileRegExps = args.skipFileRegExps || []; + args.skipFiles = args.skipFiles.filter((pattern) => { + const fixed = fixNodeInternalsSkipFilePattern(pattern); + if (fixed) { + args.skipFileRegExps.push(fixed); + return false; + } else { + return true; + } + }); + } } const internalsRegex = new RegExp(`^${NodeDebugAdapter.NODE_INTERNALS}/(.*)`); function fixNodeInternalsSkipFilePattern(pattern: string): string { - const internalsMatch = pattern.match(internalsRegex); - if (internalsMatch) { - return `^(?!\/)(?![a-zA-Z]:)(?!file:///)${CoreUtils.pathGlobToBlackboxedRegex(internalsMatch[1])}`; - } else { - return null; - } + const internalsMatch = pattern.match(internalsRegex); + if (internalsMatch) { + return `^(?!\/)(?![a-zA-Z]:)(?!file:///)${CoreUtils.pathGlobToBlackboxedRegex( + internalsMatch[1] + )}`; + } else { + return null; + } } /** * Returns a copy of sourceMapPathOverrides with the ${cwd} pattern resolved in all entries. */ -function resolveCwdPattern(cwd: string, sourceMapPathOverrides: ISourceMapPathOverrides, warnOnMissing: boolean): ISourceMapPathOverrides { - const resolvedOverrides: ISourceMapPathOverrides = {}; - for (let pattern in sourceMapPathOverrides) { - const replacePattern = sourceMapPathOverrides[pattern]; - resolvedOverrides[pattern] = replacePattern; - - const cwdIndex = replacePattern.indexOf('${cwd}'); - if (cwdIndex === 0) { - if (cwd) { - resolvedOverrides[pattern] = replacePattern.replace('${cwd}', cwd); - } else if (warnOnMissing) { - logger.log('Warning: sourceMapPathOverrides entry contains ${cwd}, but cwd is not set'); - } - } else if (cwdIndex > 0) { - logger.log('Warning: in a sourceMapPathOverrides entry, ${cwd} is only valid at the beginning of the path'); - } - } - - return resolvedOverrides; +function resolveCwdPattern( + cwd: string, + sourceMapPathOverrides: ISourceMapPathOverrides, + warnOnMissing: boolean +): ISourceMapPathOverrides { + const resolvedOverrides: ISourceMapPathOverrides = {}; + for (let pattern in sourceMapPathOverrides) { + const replacePattern = sourceMapPathOverrides[pattern]; + resolvedOverrides[pattern] = replacePattern; + + const cwdIndex = replacePattern.indexOf("${cwd}"); + if (cwdIndex === 0) { + if (cwd) { + resolvedOverrides[pattern] = replacePattern.replace( + "${cwd}", + cwd + ); + } else if (warnOnMissing) { + logger.log( + "Warning: sourceMapPathOverrides entry contains ${cwd}, but cwd is not set" + ); + } + } else if (cwdIndex > 0) { + logger.log( + "Warning: in a sourceMapPathOverrides entry, ${cwd} is only valid at the beginning of the path" + ); + } + } + + return resolvedOverrides; } export enum DebugArgs { - InspectBrk, - Inspect_DebugBrk + InspectBrk, + Inspect_DebugBrk, } const defaultDebugArgs = DebugArgs.InspectBrk; -function detectSupportedDebugArgsForLaunch(config: ILaunchRequestArguments, runtimeExecutable: string, env: any): DebugArgs { - if (config.__nodeVersion || (config.runtimeVersion && config.runtimeVersion !== 'default')) { - return getSupportedDebugArgsForVersion(config.__nodeVersion || config.runtimeVersion); - } else if (config.runtimeExecutable) { - logger.log('Using --inspect-brk because a runtimeExecutable is set'); - return defaultDebugArgs; - } else { - // only determine version if no runtimeExecutable is set (and 'node' on PATH is used) - logger.log('Spawning `node --version` to determine supported debug args'); - let result: cp.SpawnSyncReturns; - try { - result = cp.spawnSync(runtimeExecutable, ['--version']); - } catch (e) { - logger.error('Node version detection failed: ' + (e && e.message)); - } - - const semVerString = result.stdout ? result.stdout.toString().trim() : undefined; - if (semVerString) { - return getSupportedDebugArgsForVersion(semVerString); - } else { - logger.log('Using --inspect-brk because we couldn\'t get a version from node'); - return defaultDebugArgs; - } - } +function detectSupportedDebugArgsForLaunch( + config: ILaunchRequestArguments, + runtimeExecutable: string, + env: any +): DebugArgs { + if ( + config.__nodeVersion || + (config.runtimeVersion && config.runtimeVersion !== "default") + ) { + return getSupportedDebugArgsForVersion( + config.__nodeVersion || config.runtimeVersion + ); + } else if (config.runtimeExecutable) { + logger.log("Using --inspect-brk because a runtimeExecutable is set"); + return defaultDebugArgs; + } else { + // only determine version if no runtimeExecutable is set (and 'node' on PATH is used) + logger.log( + "Spawning `node --version` to determine supported debug args" + ); + let result: cp.SpawnSyncReturns; + try { + result = cp.spawnSync(runtimeExecutable, ["--version"]); + } catch (e) { + logger.error("Node version detection failed: " + (e && e.message)); + } + + const semVerString = result.stdout + ? result.stdout.toString().trim() + : undefined; + if (semVerString) { + return getSupportedDebugArgsForVersion(semVerString); + } else { + logger.log( + "Using --inspect-brk because we couldn't get a version from node" + ); + return defaultDebugArgs; + } + } } function getSupportedDebugArgsForVersion(semVerString): DebugArgs { - if (utils.compareSemver(semVerString, 'v7.6.0') >= 0) { - logger.log(`Using --inspect-brk, Node version ${semVerString} detected`); - return DebugArgs.InspectBrk; - } else { - logger.log(`Using --inspect --debug-brk, Node version ${semVerString} detected`); - return DebugArgs.Inspect_DebugBrk; - } + if (utils.compareSemver(semVerString, "v7.6.0") >= 0) { + logger.log( + `Using --inspect-brk, Node version ${semVerString} detected` + ); + return DebugArgs.InspectBrk; + } else { + logger.log( + `Using --inspect --debug-brk, Node version ${semVerString} detected` + ); + return DebugArgs.Inspect_DebugBrk; + } } diff --git a/Source/nodeDebugInterfaces.d.ts b/Source/nodeDebugInterfaces.d.ts index 421552be..d2baa38a 100644 --- a/Source/nodeDebugInterfaces.d.ts +++ b/Source/nodeDebugInterfaces.d.ts @@ -2,77 +2,84 @@ * Copyright (C) Microsoft Corporation. All rights reserved. *--------------------------------------------------------*/ -import { DebugProtocol } from 'vscode-debugprotocol'; -import * as Core from 'vscode-chrome-debug-core'; +import { DebugProtocol } from "vscode-debugprotocol"; +import * as Core from "vscode-chrome-debug-core"; -type ConsoleType = 'internalConsole' | 'integratedTerminal' | 'externalTerminal'; +type ConsoleType = + | "internalConsole" + | "integratedTerminal" + | "externalTerminal"; -type OutputCaptureType = 'console' | 'std'; +type OutputCaptureType = "console" | "std"; export interface ICommonRequestArgs extends Core.ICommonRequestArgs { - stopOnEntry?: boolean; - address?: string; - timeout?: number; - /** Optional cwd for sourceMapPathOverrides resolution */ - cwd?: string; - /** Request frontend to restart session on termination. */ - restart?: boolean; + stopOnEntry?: boolean; + address?: string; + timeout?: number; + /** Optional cwd for sourceMapPathOverrides resolution */ + cwd?: string; + /** Request frontend to restart session on termination. */ + restart?: boolean; - /** Don't set breakpoints in JS files that don't have sourcemaps */ - disableOptimisticBPs?: boolean; + /** Don't set breakpoints in JS files that don't have sourcemaps */ + disableOptimisticBPs?: boolean; } /** * This interface should always match the schema found in the node-debug extension manifest. */ -export interface ILaunchRequestArguments extends Core.ILaunchRequestArgs, ICommonRequestArgs { - /** An absolute path to the program to debug. */ - program: string; - /** Optional arguments passed to the debuggee. */ - args?: string[]; - /** Launch the debuggee in this working directory (specified as an absolute path). If omitted the debuggee is lauched in its own directory. */ - cwd: string; - /** Absolute path to the runtime executable to be used. Default is the runtime executable on the PATH. */ - runtimeExecutable?: string; - /** Optional arguments passed to the runtime executable. */ - runtimeArgs?: string[]; - /** Optional environment variables to pass to the debuggee. The string valued properties of the 'environmentVariables' are used as key/value pairs. */ - env?: { [key: string]: string | null; }; - envFile?: string; - /** Where to launch the debug target. */ - console?: ConsoleType; - /** Manually selected debugging port */ - port?: number; - /** Source of the debug output */ - outputCapture?: OutputCaptureType; - /** Use Windows Subsystem for Linux */ - useWSL?: boolean; - runtimeVersion?: string; +export interface ILaunchRequestArguments + extends Core.ILaunchRequestArgs, + ICommonRequestArgs { + /** An absolute path to the program to debug. */ + program: string; + /** Optional arguments passed to the debuggee. */ + args?: string[]; + /** Launch the debuggee in this working directory (specified as an absolute path). If omitted the debuggee is lauched in its own directory. */ + cwd: string; + /** Absolute path to the runtime executable to be used. Default is the runtime executable on the PATH. */ + runtimeExecutable?: string; + /** Optional arguments passed to the runtime executable. */ + runtimeArgs?: string[]; + /** Optional environment variables to pass to the debuggee. The string valued properties of the 'environmentVariables' are used as key/value pairs. */ + env?: { [key: string]: string | null }; + envFile?: string; + /** Where to launch the debug target. */ + console?: ConsoleType; + /** Manually selected debugging port */ + port?: number; + /** Source of the debug output */ + outputCapture?: OutputCaptureType; + /** Use Windows Subsystem for Linux */ + useWSL?: boolean; + runtimeVersion?: string; - /** Logging options */ - diagnosticLogging?: boolean; - verboseDiagnosticLogging?: boolean; + /** Logging options */ + diagnosticLogging?: boolean; + verboseDiagnosticLogging?: boolean; - // extensionHost option - __sessionId?: string; + // extensionHost option + __sessionId?: string; - // When node version is detected by node-debug - __nodeVersion?: string; + // When node version is detected by node-debug + __nodeVersion?: string; - // A list of glob patterns that can be debugged by the extension. - __debuggablePatterns: string[]; + // A list of glob patterns that can be debugged by the extension. + __debuggablePatterns: string[]; } /** * This interface should always match the schema found in the node-debug extension manifest. */ -export interface IAttachRequestArguments extends Core.IAttachRequestArgs, ICommonRequestArgs { - /** Node's root directory. */ - remoteRoot?: string; - /** VS Code's root directory. */ - localRoot?: string; - /** Send a USR1 signal to this process. */ - processId?: string; +export interface IAttachRequestArguments + extends Core.IAttachRequestArgs, + ICommonRequestArgs { + /** Node's root directory. */ + remoteRoot?: string; + /** VS Code's root directory. */ + localRoot?: string; + /** Send a USR1 signal to this process. */ + processId?: string; } /** @@ -81,13 +88,13 @@ export interface IAttachRequestArguments extends Core.IAttachRequestArgs, ICommo * Concatenating both results in the original command line argument. */ export interface ILaunchVSCodeArgument { - prefix?: string; - path?: string; + prefix?: string; + path?: string; } export interface ILaunchVSCodeArguments { - args: ILaunchVSCodeArgument[]; - env?: { [key: string]: string | null; }; + args: ILaunchVSCodeArgument[]; + env?: { [key: string]: string | null }; } export type NodeDebugError = DebugProtocol.Message & Error; diff --git a/Source/nodeScripts.ts b/Source/nodeScripts.ts index 14f55c39..e4c09b17 100644 --- a/Source/nodeScripts.ts +++ b/Source/nodeScripts.ts @@ -1,28 +1,30 @@ /*--------------------------------------------------------- -* Copyright (C) Microsoft Corporation. All rights reserved. -*--------------------------------------------------------*/ + * Copyright (C) Microsoft Corporation. All rights reserved. + *--------------------------------------------------------*/ -import { ScriptContainer } from 'vscode-chrome-debug-core'; -import { NodeDebugAdapter } from './nodeDebugAdapter'; -import * as path from 'path'; +import { ScriptContainer } from "vscode-chrome-debug-core"; +import { NodeDebugAdapter } from "./nodeDebugAdapter"; +import * as path from "path"; export class NodeScriptContainer extends ScriptContainer { - /** - * If realPath is an absolute path or a URL, return realPath. Otherwise, prepend the node_internals marker - */ - public realPathToDisplayPath(realPath: string): string { - if (!realPath.match(/VM\d+/) && !path.isAbsolute(realPath)) { - return `${NodeDebugAdapter.NODE_INTERNALS}/${realPath}`; - } + /** + * If realPath is an absolute path or a URL, return realPath. Otherwise, prepend the node_internals marker + */ + public realPathToDisplayPath(realPath: string): string { + if (!realPath.match(/VM\d+/) && !path.isAbsolute(realPath)) { + return `${NodeDebugAdapter.NODE_INTERNALS}/${realPath}`; + } - return super.realPathToDisplayPath(realPath); - } + return super.realPathToDisplayPath(realPath); + } - /** - * If displayPath starts with the NODE_INTERNALS indicator, strip it. - */ - public displayPathToRealPath(displayPath: string): string { - const match = displayPath.match(new RegExp(`^${NodeDebugAdapter.NODE_INTERNALS}[\\\\/](.*)`)); - return match ? match[1] : super.displayPathToRealPath(displayPath); - } + /** + * If displayPath starts with the NODE_INTERNALS indicator, strip it. + */ + public displayPathToRealPath(displayPath: string): string { + const match = displayPath.match( + new RegExp(`^${NodeDebugAdapter.NODE_INTERNALS}[\\\\/](.*)`) + ); + return match ? match[1] : super.displayPathToRealPath(displayPath); + } } diff --git a/Source/pathUtils.ts b/Source/pathUtils.ts index 1f77787f..f0d30c34 100644 --- a/Source/pathUtils.ts +++ b/Source/pathUtils.ts @@ -3,15 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as Path from 'path'; -import * as FS from 'fs'; -import * as CP from 'child_process'; +import * as Path from "path"; +import * as FS from "fs"; +import * as CP from "child_process"; /** * The input paths must use the path syntax of the underlying operating system. */ export function makePathAbsolute(absPath: string, relPath: string): string { - return Path.resolve(Path.dirname(absPath), relPath); + return Path.resolve(Path.dirname(absPath), relPath); } /** @@ -19,12 +19,12 @@ export function makePathAbsolute(absPath: string, relPath: string): string { * The input path must use the path syntax of the underlying operating system. */ export function removeFirstSegment(path: string): string { - const segments = path.split(Path.sep); - segments.shift(); - if (segments.length > 0) { - return segments.join(Path.sep); - } - return null; + const segments = path.split(Path.sep); + segments.shift(); + if (segments.length > 0) { + return segments.join(Path.sep); + } + return null; } /** @@ -32,33 +32,32 @@ export function removeFirstSegment(path: string): string { * The input paths must use the path syntax of the underlying operating system. */ export function makeRelative(target: string, path: string): string { - const t = target.split(Path.sep); - const p = path.split(Path.sep); - - let i = 0; - for (; i < Math.min(t.length, p.length) && t[i] === p[i]; i++) { - } - - let result = ''; - for (; i < p.length; i++) { - result = Path.join(result, p[i]); - } - return result; + const t = target.split(Path.sep); + const p = path.split(Path.sep); + + let i = 0; + for (; i < Math.min(t.length, p.length) && t[i] === p[i]; i++) {} + + let result = ""; + for (; i < p.length; i++) { + result = Path.join(result, p[i]); + } + return result; } /** * Returns a path with a lower case drive letter. */ export function normalizeDriveLetter(path: string): string { - const regex = /^([A-Z])(\:[\\\/].*)$/; - if (regex.test(path)) { - path = path.replace(regex, (s, s1, s2) => s1.toLowerCase() + s2); - } - return path; + const regex = /^([A-Z])(\:[\\\/].*)$/; + if (regex.test(path)) { + path = path.replace(regex, (s, s1, s2) => s1.toLowerCase() + s2); + } + return path; } export function pathCompare(path1: string, path2: string): boolean { - return normalizeDriveLetter(path1) === normalizeDriveLetter(path2); + return normalizeDriveLetter(path1) === normalizeDriveLetter(path2); } /** @@ -70,70 +69,71 @@ export function pathCompare(path1: string, path2: string): boolean { * Since a drive letter of a Windows path cannot be looked up, realPath normalizes the drive letter to lower case. */ export function realCasePath(path: string): string { - - let dir = Path.dirname(path); - if (path === dir) { // end recursion - // is this an upper case drive letter? - if (/^[A-Z]\:\\$/.test(path)) { - path = path.toLowerCase(); - } - return path; - } - let name = Path.basename(path).toLowerCase(); - try { - let entries = FS.readdirSync(dir); - let found = entries.filter(e => e.toLowerCase() === name); // use a case insensitive search - if (found.length === 1) { - // on a case sensitive filesystem we cannot determine here, whether the file exists or not, hence we need the 'file exists' precondition - let prefix = realCasePath(dir); // recurse - if (prefix) { - return Path.join(prefix, found[0]); - } - } else if (found.length > 1) { - // must be a case sensitive $filesystem - const ix = found.indexOf(name); - if (ix >= 0) { // case sensitive - let prefix = realCasePath(dir); // recurse - if (prefix) { - return Path.join(prefix, found[ix]); - } - } - } - } catch (error) { - // silently ignore error - } - return null; + let dir = Path.dirname(path); + if (path === dir) { + // end recursion + // is this an upper case drive letter? + if (/^[A-Z]\:\\$/.test(path)) { + path = path.toLowerCase(); + } + return path; + } + let name = Path.basename(path).toLowerCase(); + try { + let entries = FS.readdirSync(dir); + let found = entries.filter((e) => e.toLowerCase() === name); // use a case insensitive search + if (found.length === 1) { + // on a case sensitive filesystem we cannot determine here, whether the file exists or not, hence we need the 'file exists' precondition + let prefix = realCasePath(dir); // recurse + if (prefix) { + return Path.join(prefix, found[0]); + } + } else if (found.length > 1) { + // must be a case sensitive $filesystem + const ix = found.indexOf(name); + if (ix >= 0) { + // case sensitive + let prefix = realCasePath(dir); // recurse + if (prefix) { + return Path.join(prefix, found[ix]); + } + } + } + } catch (error) { + // silently ignore error + } + return null; } export function isSymlinkedPath(path: string): Promise { - return new Promise((resolve, reject) => { - FS.lstat(path, (err, stats) => { - if (err) { - reject(err); - } - - if (stats.isSymbolicLink()) { - resolve(true); - } else { - const parent = Path.dirname(path); - if (parent === path) { - resolve(false); - } else { - resolve(isSymlinkedPath(parent)); - } - } - }); - }); + return new Promise((resolve, reject) => { + FS.lstat(path, (err, stats) => { + if (err) { + reject(err); + } + + if (stats.isSymbolicLink()) { + resolve(true); + } else { + const parent = Path.dirname(path); + if (parent === path) { + resolve(false); + } else { + resolve(isSymlinkedPath(parent)); + } + } + }); + }); } /** * Make sure that all directories of the given path exist (like mkdir -p). */ export function mkdirs(path: string) { - if (!FS.existsSync(path)) { - mkdirs(Path.dirname(path)); - FS.mkdirSync(path); - } + if (!FS.existsSync(path)) { + mkdirs(Path.dirname(path)); + FS.mkdirSync(path); + } } // ---- the following functions work with Windows and Unix-style paths independent from the underlying OS. @@ -142,15 +142,15 @@ export function mkdirs(path: string) { * Returns true if the Windows or Unix-style path is absolute. */ export function isAbsolutePath(path: string) { - if (path) { - if (path.charAt(0) === '/') { - return true; - } - if (/^[a-zA-Z]\:[\\\/]/.test(path)) { - return true; - } - } - return false; + if (path) { + if (path.charAt(0) === "/") { + return true; + } + if (/^[a-zA-Z]\:[\\\/]/.test(path)) { + return true; + } + } + return false; } /** @@ -158,145 +158,148 @@ export function isAbsolutePath(path: string) { * If the path starts with a Windows-style drive letter, a '/' is prepended. */ export function normalize(path: string): string { - path = path.replace(/\\/g, '/'); - if (/^[a-zA-Z]\:\//.test(path)) { - path = '/' + path; - } - path = Path.normalize(path); // use node's normalize to remove '/..' etc. - path = path.replace(/\\/g, '/'); - return path; + path = path.replace(/\\/g, "/"); + if (/^[a-zA-Z]\:\//.test(path)) { + path = "/" + path; + } + path = Path.normalize(path); // use node's normalize to remove '/..' etc. + path = path.replace(/\\/g, "/"); + return path; } /** * Convert the given normalized path into a Windows-style path. */ export function toWindows(path: string): string { - if (/^\/[a-zA-Z]\:\//.test(path)) { - path = path.substr(1); - } - path = path.replace(/\//g, '\\'); - return path; + if (/^\/[a-zA-Z]\:\//.test(path)) { + path = path.substr(1); + } + path = path.replace(/\//g, "\\"); + return path; } /** * Append the given relative path to the absolute path and normalize the result. */ export function join(absPath: string, relPath: string): string { - absPath = normalize(absPath); - relPath = normalize(relPath); - if (absPath.charAt(absPath.length - 1) === '/') { - absPath = absPath + relPath; - } else { - absPath = absPath + '/' + relPath; - } - absPath = Path.normalize(absPath); - absPath = absPath.replace(/\\/g, '/'); - return absPath; + absPath = normalize(absPath); + relPath = normalize(relPath); + if (absPath.charAt(absPath.length - 1) === "/") { + absPath = absPath + relPath; + } else { + absPath = absPath + "/" + relPath; + } + absPath = Path.normalize(absPath); + absPath = absPath.replace(/\\/g, "/"); + return absPath; } /** * Return the relative path between 'from' and 'to'. */ export function makeRelative2(from: string, to: string): string { - - from = normalize(from); - to = normalize(to); - - const froms = from.substr(1).split('/'); - const tos = to.substr(1).split('/'); - - while (froms.length > 0 && tos.length > 0 && froms[0] === tos[0]) { - froms.shift(); - tos.shift(); - } - - let l = froms.length - tos.length; - if (l === 0) { - l = tos.length - 1; - } - - while (l > 0) { - tos.unshift('..'); - l--; - } - return tos.join('/'); + from = normalize(from); + to = normalize(to); + + const froms = from.substr(1).split("/"); + const tos = to.substr(1).split("/"); + + while (froms.length > 0 && tos.length > 0 && froms[0] === tos[0]) { + froms.shift(); + tos.shift(); + } + + let l = froms.length - tos.length; + if (l === 0) { + l = tos.length - 1; + } + + while (l > 0) { + tos.unshift(".."); + l--; + } + return tos.join("/"); } /* * Lookup the given program on the PATH and return its absolute path on success and undefined otherwise. */ export function findOnPath(program: string, args_env: any): string | undefined { - const env = extendObject(extendObject({}, process.env), args_env); - - let locator: string; - if (process.platform === 'win32') { - const windir = env['WINDIR'] || 'C:\\Windows'; - locator = Path.join(windir, 'System32', 'where.exe'); - } else { - locator = '/usr/bin/which'; - } - - try { - if (FS.existsSync(locator)) { - const lines = CP.execSync(`${locator} ${program}`, { env }).toString().split(/\r?\n/); - if (process.platform === 'win32') { - // return the first path that has a executable extension - const executableExtensions = env['PATHEXT'].toUpperCase(); - for (const path of lines) { - const ext = Path.extname(path).toUpperCase(); - if (ext && executableExtensions.indexOf(ext + ';') > 0) { - return path; - } - } - } else { - // return the first path - if (lines.length > 0) { - return lines[0]; - } - } - - return undefined; - } else { - // do not report failure if 'locator' app doesn't exist - } - return program; - } catch (err) { - // fall through - } - - // fail - return undefined; + const env = extendObject(extendObject({}, process.env), args_env); + + let locator: string; + if (process.platform === "win32") { + const windir = env["WINDIR"] || "C:\\Windows"; + locator = Path.join(windir, "System32", "where.exe"); + } else { + locator = "/usr/bin/which"; + } + + try { + if (FS.existsSync(locator)) { + const lines = CP.execSync(`${locator} ${program}`, { env }) + .toString() + .split(/\r?\n/); + if (process.platform === "win32") { + // return the first path that has a executable extension + const executableExtensions = env["PATHEXT"].toUpperCase(); + for (const path of lines) { + const ext = Path.extname(path).toUpperCase(); + if (ext && executableExtensions.indexOf(ext + ";") > 0) { + return path; + } + } + } else { + // return the first path + if (lines.length > 0) { + return lines[0]; + } + } + + return undefined; + } else { + // do not report failure if 'locator' app doesn't exist + } + return program; + } catch (err) { + // fall through + } + + // fail + return undefined; } -export function findExecutable(program: string, args_env: any): string | undefined { - const env = extendObject(extendObject({}, process.env), args_env); - - if (process.platform === 'win32' && !Path.extname(program)) { - const PATHEXT = env['PATHEXT']; - if (PATHEXT) { - const executableExtensions = PATHEXT.split(';'); - for (const extension of executableExtensions) { - const path = program + extension; - if (FS.existsSync(path)) { - return path; - } - } - } - } - - if (FS.existsSync(program)) { - return program; - } - - return undefined; +export function findExecutable( + program: string, + args_env: any +): string | undefined { + const env = extendObject(extendObject({}, process.env), args_env); + + if (process.platform === "win32" && !Path.extname(program)) { + const PATHEXT = env["PATHEXT"]; + if (PATHEXT) { + const executableExtensions = PATHEXT.split(";"); + for (const extension of executableExtensions) { + const path = program + extension; + if (FS.existsSync(path)) { + return path; + } + } + } + } + + if (FS.existsSync(program)) { + return program; + } + + return undefined; } export function extendObject(toObject: T, fromObject: T): T { - - for (let key in fromObject) { - if (fromObject.hasOwnProperty(key)) { - toObject[key] = fromObject[key]; - } - } - return toObject; + for (let key in fromObject) { + if (fromObject.hasOwnProperty(key)) { + toObject[key] = fromObject[key]; + } + } + return toObject; } diff --git a/Source/terminateProcess.sh b/Source/terminateProcess.sh index 908a6828..9b068843 100644 --- a/Source/terminateProcess.sh +++ b/Source/terminateProcess.sh @@ -9,4 +9,4 @@ terminateTree() { for pid in $*; do terminateTree $pid -done \ No newline at end of file +done diff --git a/Source/utils.ts b/Source/utils.ts index f32f28b9..df17074e 100644 --- a/Source/utils.ts +++ b/Source/utils.ts @@ -2,107 +2,114 @@ * Copyright (C) Microsoft Corporation. All rights reserved. *--------------------------------------------------------*/ -import * as path from 'path'; -import * as fs from 'fs'; -import * as cp from 'child_process'; -import * as match from 'minimatch'; +import * as path from "path"; +import * as fs from "fs"; +import * as cp from "child_process"; +import * as match from "minimatch"; -const NODE_SHEBANG_MATCHER = new RegExp('#! */usr/bin/env +node'); +const NODE_SHEBANG_MATCHER = new RegExp("#! */usr/bin/env +node"); /** * Checks whether a file is a loadable JavaScript file. */ export class JavaScriptDeterminant { - private static readonly defaultPatterns = ['*.js', '*.es6', '*.jsx', '*.mjs']; - private customPatterns: ReadonlyArray = []; - - public updatePatterns(patterns: ReadonlyArray) { - this.customPatterns = patterns; - } - - public isJavaScript(aPath: string) { - const basename = path.basename(aPath); - const matchesPattern = [ - ...JavaScriptDeterminant.defaultPatterns, - ...this.customPatterns, - ].some(pattern => match(basename, pattern, { nocase: true })); - - return matchesPattern || this.isShebang(aPath); - } - - private isShebang(aPath: string) { - try { - const buffer = Buffer.alloc(30); - const fd = fs.openSync(aPath, 'r'); - fs.readSync(fd, buffer, 0, buffer.length, 0); - fs.closeSync(fd); - const line = buffer.toString(); - return NODE_SHEBANG_MATCHER.test(line); - } catch (e) { - return false; - } - } + private static readonly defaultPatterns = [ + "*.js", + "*.es6", + "*.jsx", + "*.mjs", + ]; + private customPatterns: ReadonlyArray = []; + + public updatePatterns(patterns: ReadonlyArray) { + this.customPatterns = patterns; + } + + public isJavaScript(aPath: string) { + const basename = path.basename(aPath); + const matchesPattern = [ + ...JavaScriptDeterminant.defaultPatterns, + ...this.customPatterns, + ].some((pattern) => match(basename, pattern, { nocase: true })); + + return matchesPattern || this.isShebang(aPath); + } + + private isShebang(aPath: string) { + try { + const buffer = Buffer.alloc(30); + const fd = fs.openSync(aPath, "r"); + fs.readSync(fd, buffer, 0, buffer.length, 0); + fs.closeSync(fd); + const line = buffer.toString(); + return NODE_SHEBANG_MATCHER.test(line); + } catch (e) { + return false; + } + } } export function random(low: number, high: number): number { - return Math.floor(Math.random() * (high - low) + low); + return Math.floor(Math.random() * (high - low) + low); } export function killTree(processId: number): void { - if (process.platform === 'win32') { - const windir = process.env['WINDIR'] || 'C:\\Windows'; - const TASK_KILL = path.join(windir, 'System32', 'taskkill.exe'); - - // when killing a process in Windows its child processes are *not* killed but become root processes. - // Therefore we use TASKKILL.EXE - try { - cp.execSync(`${TASK_KILL} /F /T /PID ${processId}`); - } catch (err) { - } - } else { - // on linux and OS X we kill all direct and indirect child processes as well - try { - const cmd = path.join(__dirname, './terminateProcess.sh'); - cp.spawnSync(cmd, [ processId.toString() ]); - } catch (err) { - } - } + if (process.platform === "win32") { + const windir = process.env["WINDIR"] || "C:\\Windows"; + const TASK_KILL = path.join(windir, "System32", "taskkill.exe"); + + // when killing a process in Windows its child processes are *not* killed but become root processes. + // Therefore we use TASKKILL.EXE + try { + cp.execSync(`${TASK_KILL} /F /T /PID ${processId}`); + } catch (err) {} + } else { + // on linux and OS X we kill all direct and indirect child processes as well + try { + const cmd = path.join(__dirname, "./terminateProcess.sh"); + cp.spawnSync(cmd, [processId.toString()]); + } catch (err) {} + } } export function trimLastNewline(msg: string): string { - return msg.replace(/(\n|\r\n)$/, ''); + return msg.replace(/(\n|\r\n)$/, ""); } export function extendObject(toObject: T, fromObject: T): T { - for (let key in fromObject) { - if (fromObject.hasOwnProperty(key)) { - toObject[key] = fromObject[key]; - } - } + for (let key in fromObject) { + if (fromObject.hasOwnProperty(key)) { + toObject[key] = fromObject[key]; + } + } - return toObject; + return toObject; } export function stripBOM(s: string): string { - if (s && s[0] === '\uFEFF') { - s = s.substr(1); - } - return s; + if (s && s[0] === "\uFEFF") { + s = s.substr(1); + } + return s; } const semverRegex = /v?(\d+)\.(\d+)\.(\d+)/; export function compareSemver(a: string, b: string): number { - const aNum = versionStringToNumber(a); - const bNum = versionStringToNumber(b); + const aNum = versionStringToNumber(a); + const bNum = versionStringToNumber(b); - return aNum - bNum; + return aNum - bNum; } function versionStringToNumber(str: string): number { - const match = str.match(semverRegex); - if (!match) { - throw new Error('Invalid node version string: ' + str); - } - - return parseInt(match[1], 10) * 10000 + parseInt(match[2], 10) * 100 + parseInt(match[3], 10); + const match = str.match(semverRegex); + if (!match) { + throw new Error("Invalid node version string: " + str); + } + + return ( + parseInt(match[1], 10) * 10000 + + parseInt(match[2], 10) * 100 + + parseInt(match[3], 10) + ); } diff --git a/Source/wslSupport.ts b/Source/wslSupport.ts index 5e5b1aba..e499f856 100644 --- a/Source/wslSupport.ts +++ b/Source/wslSupport.ts @@ -1,77 +1,134 @@ -import * as path from 'path'; -import * as fs from 'fs'; -import * as child_process from 'child_process'; +import * as path from "path"; +import * as fs from "fs"; +import * as child_process from "child_process"; -const isWindows = process.platform === 'win32'; -const is64bit = process.arch === 'x64'; +const isWindows = process.platform === "win32"; +const is64bit = process.arch === "x64"; export function subsystemForLinuxPresent(): boolean { - if (!isWindows) { - return false; - } + if (!isWindows) { + return false; + } - const bashPath32bitApp = path.join(process.env['SystemRoot'], 'Sysnative', 'bash.exe'); - const bashPath64bitApp = path.join(process.env['SystemRoot'], 'System32', 'bash.exe'); - const bashPathHost = is64bit ? bashPath64bitApp : bashPath32bitApp; - return fs.existsSync(bashPathHost); + const bashPath32bitApp = path.join( + process.env["SystemRoot"], + "Sysnative", + "bash.exe" + ); + const bashPath64bitApp = path.join( + process.env["SystemRoot"], + "System32", + "bash.exe" + ); + const bashPathHost = is64bit ? bashPath64bitApp : bashPath32bitApp; + return fs.existsSync(bashPathHost); } function windowsPathToWSLPath(windowsPath: string): string { - if (!isWindows || !windowsPath) { - return undefined; - } else if (path.isAbsolute(windowsPath)) { - return `/mnt/${windowsPath.substr(0, 1).toLowerCase()}/${windowsPath.substr(3).replace(/\\/g, '/')}`; - } else { - return windowsPath.replace(/\\/g, '/'); - } + if (!isWindows || !windowsPath) { + return undefined; + } else if (path.isAbsolute(windowsPath)) { + return `/mnt/${windowsPath.substr(0, 1).toLowerCase()}/${windowsPath + .substr(3) + .replace(/\\/g, "/")}`; + } else { + return windowsPath.replace(/\\/g, "/"); + } } export interface ILaunchArgs { - cwd: string; - executable: string; - args: string[]; - combined: string[]; - localRoot?: string; - remoteRoot?: string; + cwd: string; + executable: string; + args: string[]; + combined: string[]; + localRoot?: string; + remoteRoot?: string; } -export function createLaunchArg(useSubsytemLinux: boolean | undefined, useExternalConsole: boolean, cwd: string | undefined, executable: string, args?: string[], program?: string): ILaunchArgs { - if (useSubsytemLinux && subsystemForLinuxPresent()) { - const bashPath32bitApp = path.join(process.env['SystemRoot'], 'Sysnative', 'bash.exe'); - const bashPath64bitApp = path.join(process.env['SystemRoot'], 'System32', 'bash.exe'); - const bashPathHost = is64bit ? bashPath64bitApp : bashPath32bitApp; - const subsystemLinuxPath = useExternalConsole ? bashPath64bitApp : bashPathHost; +export function createLaunchArg( + useSubsytemLinux: boolean | undefined, + useExternalConsole: boolean, + cwd: string | undefined, + executable: string, + args?: string[], + program?: string +): ILaunchArgs { + if (useSubsytemLinux && subsystemForLinuxPresent()) { + const bashPath32bitApp = path.join( + process.env["SystemRoot"], + "Sysnative", + "bash.exe" + ); + const bashPath64bitApp = path.join( + process.env["SystemRoot"], + "System32", + "bash.exe" + ); + const bashPathHost = is64bit ? bashPath64bitApp : bashPath32bitApp; + const subsystemLinuxPath = useExternalConsole + ? bashPath64bitApp + : bashPathHost; - const bashCommand = [executable].concat(args || []).map(element => { - if (element === program) { // workaround for issue #35249 - element = element.replace(/\\/g, '/'); - } - return element.indexOf(' ') > 0 ? `'${element}'` : element; - }).join(' '); - return { - cwd, - executable: subsystemLinuxPath, - args: ['-ic', bashCommand], - combined: [subsystemLinuxPath].concat(['-ic', bashCommand]), - localRoot: cwd, - remoteRoot: windowsPathToWSLPath(cwd) - }; - } else { - return { - cwd: cwd, - executable: executable, - args: args || [], - combined: [executable].concat(args || []) - }; - } + const bashCommand = [executable] + .concat(args || []) + .map((element) => { + if (element === program) { + // workaround for issue #35249 + element = element.replace(/\\/g, "/"); + } + return element.indexOf(" ") > 0 ? `'${element}'` : element; + }) + .join(" "); + return { + cwd, + executable: subsystemLinuxPath, + args: ["-ic", bashCommand], + combined: [subsystemLinuxPath].concat(["-ic", bashCommand]), + localRoot: cwd, + remoteRoot: windowsPathToWSLPath(cwd), + }; + } else { + return { + cwd: cwd, + executable: executable, + args: args || [], + combined: [executable].concat(args || []), + }; + } } -export function spawn(useWSL: boolean, executable: string, args?: string[], options?: child_process.SpawnOptions) { - const launchArgs = createLaunchArg(useWSL, false, undefined, executable, args); - return child_process.spawn(launchArgs.executable, launchArgs.args, options); +export function spawn( + useWSL: boolean, + executable: string, + args?: string[], + options?: child_process.SpawnOptions +) { + const launchArgs = createLaunchArg( + useWSL, + false, + undefined, + executable, + args + ); + return child_process.spawn(launchArgs.executable, launchArgs.args, options); } -export function spawnSync(useWSL: boolean, executable: string, args?: string[], options?: child_process.SpawnSyncOptions) { - const launchArgs = createLaunchArg(useWSL, false, undefined, executable, args); - return child_process.spawnSync(launchArgs.executable, launchArgs.args, options); +export function spawnSync( + useWSL: boolean, + executable: string, + args?: string[], + options?: child_process.SpawnSyncOptions +) { + const launchArgs = createLaunchArg( + useWSL, + false, + undefined, + executable, + args + ); + return child_process.spawnSync( + launchArgs.executable, + launchArgs.args, + options + ); } diff --git a/gulpfile.js b/gulpfile.js index 1d2d7e2a..8f710e1a 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -2,186 +2,242 @@ * Copyright (C) Microsoft Corporation. All rights reserved. *--------------------------------------------------------*/ -const gulp = require('gulp'); -const path = require('path'); -const ts = require('gulp-typescript'); -const log = require('gulp-util').log; -const typescript = require('typescript'); -const sourcemaps = require('gulp-sourcemaps'); -const tslint = require('gulp-tslint'); -const nls = require('vscode-nls-dev'); -const del = require('del'); -const fs = require('fs'); -const vsce = require('vsce'); -const es = require('event-stream'); -const minimist = require('minimist'); - -const translationProjectName = 'vscode-extensions'; -const translationExtensionName = 'vscode-node-debug2'; +const gulp = require("gulp"); +const path = require("path"); +const ts = require("gulp-typescript"); +const log = require("gulp-util").log; +const typescript = require("typescript"); +const sourcemaps = require("gulp-sourcemaps"); +const tslint = require("gulp-tslint"); +const nls = require("vscode-nls-dev"); +const del = require("del"); +const fs = require("fs"); +const vsce = require("vsce"); +const es = require("event-stream"); +const minimist = require("minimist"); + +const translationProjectName = "vscode-extensions"; +const translationExtensionName = "vscode-node-debug2"; const defaultLanguages = [ - { id: 'zh-tw', folderName: 'cht', transifexId: 'zh-hant' }, - { id: 'zh-cn', folderName: 'chs', transifexId: 'zh-hans' }, - { id: 'ja', folderName: 'jpn' }, - { id: 'ko', folderName: 'kor' }, - { id: 'de', folderName: 'deu' }, - { id: 'fr', folderName: 'fra' }, - { id: 'es', folderName: 'esn' }, - { id: 'ru', folderName: 'rus' }, - { id: 'it', folderName: 'ita' }, - - // These language-pack languages are included for VS but excluded from the vscode package - { id: 'cs', folderName: 'csy' }, - { id: 'tr', folderName: 'trk' }, - { id: 'pt-br', folderName: 'ptb', transifexId: 'pt-BR' }, - { id: 'pl', folderName: 'plk' } + { id: "zh-tw", folderName: "cht", transifexId: "zh-hant" }, + { id: "zh-cn", folderName: "chs", transifexId: "zh-hans" }, + { id: "ja", folderName: "jpn" }, + { id: "ko", folderName: "kor" }, + { id: "de", folderName: "deu" }, + { id: "fr", folderName: "fra" }, + { id: "es", folderName: "esn" }, + { id: "ru", folderName: "rus" }, + { id: "it", folderName: "ita" }, + + // These language-pack languages are included for VS but excluded from the vscode package + { id: "cs", folderName: "csy" }, + { id: "tr", folderName: "trk" }, + { id: "pt-br", folderName: "ptb", transifexId: "pt-BR" }, + { id: "pl", folderName: "plk" }, ]; -const watchedSources = [ - 'src/**/*', - 'test/**/*' -]; +const watchedSources = ["src/**/*", "test/**/*"]; -const scripts = [ - 'src/terminateProcess.sh' -]; +const scripts = ["src/terminateProcess.sh"]; -const lintSources = [ - 'src' -].map(tsFolder => tsFolder + '/**/*.ts'); +const lintSources = ["src"].map((tsFolder) => tsFolder + "/**/*.ts"); -const tsProject = ts.createProject('tsconfig.json', { typescript }); +const tsProject = ts.createProject("tsconfig.json", { typescript }); function doBuild(buildNls, failOnError) { - return () => { - let gotError = false; - const tsResult = tsProject.src() - .pipe(sourcemaps.init()) - .pipe(tsProject()) - .once('error', () => { - gotError = true; - }); - - return tsResult.js - .pipe(buildNls ? nls.rewriteLocalizeCalls() : es.through()) - .pipe(buildNls ? nls.createAdditionalLanguageFiles(defaultLanguages, 'i18n', 'out') : es.through()) - .pipe(buildNls ? nls.bundleMetaDataFiles('ms-vscode.node-debug2', 'out') : es.through()) - .pipe(buildNls ? nls.bundleLanguageFiles() : es.through()) - .pipe(sourcemaps.write('.', { includeContent: false, sourceRoot: '..' })) // .. to compensate for TS returning paths from 'out' - .pipe(gulp.dest('out')) - .once('error', () => { - gotError = true; - }) - .once('finish', () => { - if (failOnError && gotError) { - process.exit(1); - } - }); - }; + return () => { + let gotError = false; + const tsResult = tsProject + .src() + .pipe(sourcemaps.init()) + .pipe(tsProject()) + .once("error", () => { + gotError = true; + }); + + return tsResult.js + .pipe(buildNls ? nls.rewriteLocalizeCalls() : es.through()) + .pipe( + buildNls + ? nls.createAdditionalLanguageFiles( + defaultLanguages, + "i18n", + "out" + ) + : es.through() + ) + .pipe( + buildNls + ? nls.bundleMetaDataFiles("ms-vscode.node-debug2", "out") + : es.through() + ) + .pipe(buildNls ? nls.bundleLanguageFiles() : es.through()) + .pipe( + sourcemaps.write(".", { + includeContent: false, + sourceRoot: "..", + }) + ) // .. to compensate for TS returning paths from 'out' + .pipe(gulp.dest("out")) + .once("error", () => { + gotError = true; + }) + .once("finish", () => { + if (failOnError && gotError) { + process.exit(1); + } + }); + }; } -gulp.task('clean', () => { - return del(['out/**', 'package.nls.*.json', 'vscode-node-debug2-*.vsix']); +gulp.task("clean", () => { + return del(["out/**", "package.nls.*.json", "vscode-node-debug2-*.vsix"]); }); -gulp.task('copy-scripts', () => { - return gulp - .src(scripts, { base: '.' }) - .pipe(gulp.dest('out')); +gulp.task("copy-scripts", () => { + return gulp.src(scripts, { base: "." }).pipe(gulp.dest("out")); }); -gulp.task('_dev-build', gulp.series('copy-scripts', doBuild(false, false))); - -gulp.task('_build', gulp.series('copy-scripts', doBuild(true, true))); - -gulp.task('build', gulp.series('clean', '_build')); - -gulp.task('watch', gulp.series('clean', '_dev-build', () => { - log('Watching build sources...'); - return gulp.watch(watchedSources, gulp.series('_dev-build')); -})); - -gulp.task('tslint', () => { - return gulp.src(lintSources, { base: '.' }) - .pipe(tslint({ - formatter: 'verbose' - })) - .pipe(tslint.report()); +gulp.task("_dev-build", gulp.series("copy-scripts", doBuild(false, false))); + +gulp.task("_build", gulp.series("copy-scripts", doBuild(true, true))); + +gulp.task("build", gulp.series("clean", "_build")); + +gulp.task( + "watch", + gulp.series("clean", "_dev-build", () => { + log("Watching build sources..."); + return gulp.watch(watchedSources, gulp.series("_dev-build")); + }) +); + +gulp.task("tslint", () => { + return gulp + .src(lintSources, { base: "." }) + .pipe( + tslint({ + formatter: "verbose", + }) + ) + .pipe(tslint.report()); }); function verifyNotALinkedModule(modulePath) { - return new Promise((resolve, reject) => { - fs.lstat(modulePath, (err, stat) => { - if (stat.isSymbolicLink()) { - reject(new Error('Symbolic link found: ' + modulePath)); - } else { - resolve(); - } - }); - }); + return new Promise((resolve, reject) => { + fs.lstat(modulePath, (err, stat) => { + if (stat.isSymbolicLink()) { + reject(new Error("Symbolic link found: " + modulePath)); + } else { + resolve(); + } + }); + }); } function verifyNoLinkedModules() { - return new Promise((resolve, reject) => { - fs.readdir('./node_modules', (err, files) => { - Promise.all(files.map(file => { - const modulePath = path.join('.', 'node_modules', file); - return verifyNotALinkedModule(modulePath); - })).then(resolve, reject); - }); - }); + return new Promise((resolve, reject) => { + fs.readdir("./node_modules", (err, files) => { + Promise.all( + files.map((file) => { + const modulePath = path.join(".", "node_modules", file); + return verifyNotALinkedModule(modulePath); + }) + ).then(resolve, reject); + }); + }); } -gulp.task('verify-no-linked-modules', cb => verifyNoLinkedModules().then(() => cb, cb)); +gulp.task("verify-no-linked-modules", (cb) => + verifyNoLinkedModules().then(() => cb, cb) +); -gulp.task('vsce-publish', () => { - return vsce.publish(); +gulp.task("vsce-publish", () => { + return vsce.publish(); }); -gulp.task('vsce-package', () => { - const cliOptions = minimist(process.argv.slice(2)); - const packageOptions = { - packagePath: cliOptions.packagePath - }; +gulp.task("vsce-package", () => { + const cliOptions = minimist(process.argv.slice(2)); + const packageOptions = { + packagePath: cliOptions.packagePath, + }; - return vsce.createVSIX(packageOptions); + return vsce.createVSIX(packageOptions); }); -gulp.task('add-i18n', () => { - return gulp.src(['package.nls.json']) - .pipe(nls.createAdditionalLanguageFiles(defaultLanguages, 'i18n')) - .pipe(gulp.dest('.')); +gulp.task("add-i18n", () => { + return gulp + .src(["package.nls.json"]) + .pipe(nls.createAdditionalLanguageFiles(defaultLanguages, "i18n")) + .pipe(gulp.dest(".")); }); -gulp.task('publish', gulp.series('build', 'add-i18n', 'vsce-publish')); - -gulp.task('package', gulp.series('build', 'add-i18n', 'vsce-package')); - -gulp.task('translations-export', gulp.series('_build', () => { - return gulp.src(['package.nls.json', 'out/nls.metadata.header.json', 'out/nls.metadata.json']) - .pipe(nls.createXlfFiles(translationProjectName, translationExtensionName)) - .pipe(gulp.dest(path.join('..', 'vscode-translations-export'))); -})); - -gulp.task('translations-import', (done) => { +gulp.task("publish", gulp.series("build", "add-i18n", "vsce-publish")); + +gulp.task("package", gulp.series("build", "add-i18n", "vsce-package")); + +gulp.task( + "translations-export", + gulp.series("_build", () => { + return gulp + .src([ + "package.nls.json", + "out/nls.metadata.header.json", + "out/nls.metadata.json", + ]) + .pipe( + nls.createXlfFiles( + translationProjectName, + translationExtensionName + ) + ) + .pipe(gulp.dest(path.join("..", "vscode-translations-export"))); + }) +); + +gulp.task("translations-import", (done) => { const options = minimist(process.argv.slice(2), { - string: 'location', - default: { - location: '../vscode-translations-import' - } + string: "location", + default: { + location: "../vscode-translations-import", + }, }); - return es.merge(defaultLanguages.map(language => { - let id = language.transifexId || language.id; - console.log(path.join(options.location, id, 'vscode-extensions', `${translationExtensionName}.xlf`)); - return gulp.src(path.join(options.location, id, 'vscode-extensions', `${translationExtensionName}.xlf`)) - .pipe(nls.prepareJsonFiles()) - .pipe(gulp.dest(path.join('./i18n', language.folderName))); - - })).on('end', () => done()); + return es + .merge( + defaultLanguages.map((language) => { + let id = language.transifexId || language.id; + console.log( + path.join( + options.location, + id, + "vscode-extensions", + `${translationExtensionName}.xlf` + ) + ); + return gulp + .src( + path.join( + options.location, + id, + "vscode-extensions", + `${translationExtensionName}.xlf` + ) + ) + .pipe(nls.prepareJsonFiles()) + .pipe(gulp.dest(path.join("./i18n", language.folderName))); + }) + ) + .on("end", () => done()); }); -gulp.task('i18n-import', () => { - return es.merge(defaultLanguages.map(language => { - return gulp.src(`../${translationExtensionName}-localization/${language.folderName}/**/*.xlf`) - .pipe(nls.prepareJsonFiles()) - .pipe(gulp.dest(path.join('./i18n', language.folderName))); - })); +gulp.task("i18n-import", () => { + return es.merge( + defaultLanguages.map((language) => { + return gulp + .src( + `../${translationExtensionName}-localization/${language.folderName}/**/*.xlf` + ) + .pipe(nls.prepareJsonFiles()) + .pipe(gulp.dest(path.join("./i18n", language.folderName))); + }) + ); }); diff --git a/i18n/chs/package.i18n.json b/i18n/chs/package.i18n.json index 656b1543..5022e5ca 100644 --- a/i18n/chs/package.i18n.json +++ b/i18n/chs/package.i18n.json @@ -48,4 +48,4 @@ "extensionHost.snippet.launch.label": "VS Code 扩展开发", "extensionHost.snippet.launch.description": "在调试模式下启动 VS Code 扩展", "extensionHost.launch.config.name": "启动扩展" -} \ No newline at end of file +} diff --git a/i18n/cht/package.i18n.json b/i18n/cht/package.i18n.json index b946e607..4f1bed9c 100644 --- a/i18n/cht/package.i18n.json +++ b/i18n/cht/package.i18n.json @@ -48,4 +48,4 @@ "extensionHost.snippet.launch.label": "VS Code 延伸模組開發", "extensionHost.snippet.launch.description": "在偵錯模式下啟動 VS 程式碼延伸模組", "extensionHost.launch.config.name": "啟動延伸模組" -} \ No newline at end of file +} diff --git a/i18n/csy/package.i18n.json b/i18n/csy/package.i18n.json index fd8ca0d2..badb0d63 100644 --- a/i18n/csy/package.i18n.json +++ b/i18n/csy/package.i18n.json @@ -48,4 +48,4 @@ "extensionHost.snippet.launch.label": "Vývoj rozšíření VS Code", "extensionHost.snippet.launch.description": "Spustit rozšíření VS Code v režimu ladění", "extensionHost.launch.config.name": "Spustit rozšíření" -} \ No newline at end of file +} diff --git a/i18n/deu/package.i18n.json b/i18n/deu/package.i18n.json index 2133dba2..63b81963 100644 --- a/i18n/deu/package.i18n.json +++ b/i18n/deu/package.i18n.json @@ -48,4 +48,4 @@ "extensionHost.snippet.launch.label": "VS Code-Erweiterungsentwicklung", "extensionHost.snippet.launch.description": "VS Code-Erweiterung im Debugmodus starten", "extensionHost.launch.config.name": "Erweiterung starten" -} \ No newline at end of file +} diff --git a/i18n/esn/package.i18n.json b/i18n/esn/package.i18n.json index 63d32cb3..57443300 100644 --- a/i18n/esn/package.i18n.json +++ b/i18n/esn/package.i18n.json @@ -48,4 +48,4 @@ "extensionHost.snippet.launch.label": "Desarrollo de extensiones de VS Code", "extensionHost.snippet.launch.description": "Iniciar una extensión de VS Code en modo de depuración", "extensionHost.launch.config.name": "Extensión de inicio" -} \ No newline at end of file +} diff --git a/i18n/fra/package.i18n.json b/i18n/fra/package.i18n.json index 99aa9df5..c2e3b314 100644 --- a/i18n/fra/package.i18n.json +++ b/i18n/fra/package.i18n.json @@ -48,4 +48,4 @@ "extensionHost.snippet.launch.label": "Développement d'extension VS Code", "extensionHost.snippet.launch.description": "Lancer une extension VS Code en mode débogage", "extensionHost.launch.config.name": "Lancer l'extension" -} \ No newline at end of file +} diff --git a/i18n/hun/package.i18n.json b/i18n/hun/package.i18n.json index 2ff8de6f..34dea09b 100644 --- a/i18n/hun/package.i18n.json +++ b/i18n/hun/package.i18n.json @@ -46,4 +46,4 @@ "extensionHost.snippet.launch.label": "VS Code-kiegészítőfejlesztés ", "extensionHost.snippet.launch.description": "VS Code kiegészítő indítása hibakeresési módban", "extensionHost.launch.config.name": "Kiegészítő indítása" -} \ No newline at end of file +} diff --git a/i18n/ita/package.i18n.json b/i18n/ita/package.i18n.json index f6cc569c..a75cc1e0 100644 --- a/i18n/ita/package.i18n.json +++ b/i18n/ita/package.i18n.json @@ -48,4 +48,4 @@ "extensionHost.snippet.launch.label": "Sviluppo di estensioni per VS Code", "extensionHost.snippet.launch.description": "Avvia un'estensione VS Code in modalità di debug", "extensionHost.launch.config.name": "Avvia estensione" -} \ No newline at end of file +} diff --git a/i18n/jpn/package.i18n.json b/i18n/jpn/package.i18n.json index 352faf0f..301d9063 100644 --- a/i18n/jpn/package.i18n.json +++ b/i18n/jpn/package.i18n.json @@ -48,4 +48,4 @@ "extensionHost.snippet.launch.label": "VS Code 拡張機能の開発", "extensionHost.snippet.launch.description": "デバッグ モードで VS Code 拡張機能を起動します", "extensionHost.launch.config.name": "拡張機能の起動" -} \ No newline at end of file +} diff --git a/i18n/kor/package.i18n.json b/i18n/kor/package.i18n.json index 6b877169..ac74450d 100644 --- a/i18n/kor/package.i18n.json +++ b/i18n/kor/package.i18n.json @@ -48,4 +48,4 @@ "extensionHost.snippet.launch.label": "VS Code 확장 개발", "extensionHost.snippet.launch.description": "디버그 모드에서 VS Code 확장 시작", "extensionHost.launch.config.name": "확장 시작" -} \ No newline at end of file +} diff --git a/i18n/package.i18n.json b/i18n/package.i18n.json index 404a6822..21440c6d 100644 --- a/i18n/package.i18n.json +++ b/i18n/package.i18n.json @@ -46,4 +46,4 @@ "extensionHost.snippet.launch.label": "VS Code Eklentisi Geliştirme", "extensionHost.snippet.launch.description": "Bir VS Code eklentisini hata ayıklama modunda çalıştır", "extensionHost.launch.config.name": "Eklentiyi Başlat" -} \ No newline at end of file +} diff --git a/i18n/plk/package.i18n.json b/i18n/plk/package.i18n.json index fa0d792d..9d09c8e7 100644 --- a/i18n/plk/package.i18n.json +++ b/i18n/plk/package.i18n.json @@ -48,4 +48,4 @@ "extensionHost.snippet.launch.label": "Opracowywanie rozszerzenia programu VS Code", "extensionHost.snippet.launch.description": "Uruchom rozszerzenie programu VS Code w trybie debugowania", "extensionHost.launch.config.name": "Uruchamianie rozszerzenia" -} \ No newline at end of file +} diff --git a/i18n/ptb/package.i18n.json b/i18n/ptb/package.i18n.json index 25753399..94660003 100644 --- a/i18n/ptb/package.i18n.json +++ b/i18n/ptb/package.i18n.json @@ -48,4 +48,4 @@ "extensionHost.snippet.launch.label": "Desenvolvimento de Extensão do VS Code", "extensionHost.snippet.launch.description": "Iniciar uma extensão do VS Code no modo de depuração", "extensionHost.launch.config.name": "Iniciar a Extensão" -} \ No newline at end of file +} diff --git a/i18n/rus/package.i18n.json b/i18n/rus/package.i18n.json index 79083ecb..f3cab7d3 100644 --- a/i18n/rus/package.i18n.json +++ b/i18n/rus/package.i18n.json @@ -48,4 +48,4 @@ "extensionHost.snippet.launch.label": "Разработка расширения VS Code", "extensionHost.snippet.launch.description": "Запустить расширение VS Code в режиме отладки", "extensionHost.launch.config.name": "Запустить расширение" -} \ No newline at end of file +} diff --git a/i18n/trk/package.i18n.json b/i18n/trk/package.i18n.json index f917b648..46568eb1 100644 --- a/i18n/trk/package.i18n.json +++ b/i18n/trk/package.i18n.json @@ -48,4 +48,4 @@ "extensionHost.snippet.launch.label": "VS Code Uzantı Geliştirme", "extensionHost.snippet.launch.description": "Hata ayıklama modunda bir VS Code uzantısı başlatın", "extensionHost.launch.config.name": "Uzantıyı Başlat" -} \ No newline at end of file +} diff --git a/package.json b/package.json index def16d57..3e83df11 100644 --- a/package.json +++ b/package.json @@ -1,514 +1,514 @@ { - "name": "node-debug2", - "displayName": "[Deprecated] Node Debug", - "version": "0.0.1", - "private": "false", - "description": "%extension.description%", - "categories": [ - "Debuggers" - ], - "homepage": "https://github.com/CodeEditorLand/CodeEditorLand#readme", - "bugs": { - "url": "https://github.com/CodeEditorLand/CodeEditorLand/issues" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/CodeEditorLand/CodeEditorLand.git" - }, - "license": "MIT", - "author": { - "name": "Nikola Hristov", - "email": "nikola@nikolahristov.tech", - "url": "https://nikolahristov.tech" - }, - "publisher": "playform", - "type": "module", - "main": "./out/src/extension", - "scripts": { - "build": "gulp build", - "minor": "npm version minor -m '%s'", - "package": "gulp package", - "patch": "npm version patch -m '%s'", - "prepublishOnly": "TypeScriptESBuild Source/**/*.ts", - "publish": "gulp publish", - "test": "mocha --timeout 20000 -s 2000 -u tdd --colors --reporter node_modules/vscode-chrome-debug-core-testsupport/out/loggingReporter.js ./out/test/", - "tslint": "gulp tslint", - "vscode:prepublish": "gulp verify-no-linked-modules && gulp build", - "watch": "gulp watch" - }, - "contributes": { - "breakpoints": [ - { - "language": "javascript" - }, - { - "language": "javascriptreact" - } - ], - "commands": [ - { - "command": "extension.node-debug2.toggleSkippingFile", - "title": "%toggle.skipping.this.file%" - } - ], - "debuggers": [ - { - "type": "legacy-extensionHost", - "label": "VS Code Extension Development", - "program": "./out/src/nodeDebug.js", - "runtime": "node", - "aiKey": "AIF-d9b70cd4-b9f9-4d70-929b-a071c400b217", - "configurationAttributes": { - "launch": { - "required": [ - "args" - ], - "properties": { - "runtimeExecutable": { - "type": [ - "string", - "null" - ], - "markdownDescription": "%extensionHost.launch.runtimeExecutable.description%", - "default": "${execPath}" - }, - "args": { - "type": "array", - "description": "%node.launch.args.description%", - "items": { - "type": "string" - }, - "default": [ - "--extensionDevelopmentPath=${workspaceFolder}" - ] - }, - "env": { - "type": "object", - "additionalProperties": { - "type": [ - "string", - "null" - ] - }, - "markdownDescription": "%extensionHost.launch.env.description%", - "default": {} - }, - "stopOnEntry": { - "type": "boolean", - "description": "%extensionHost.launch.stopOnEntry.description%", - "default": true - }, - "sourceMaps": { - "type": "boolean", - "description": "%node.sourceMaps.description%", - "default": true - }, - "outDir": { - "type": [ - "string", - "null" - ], - "deprecationMessage": "%outDir.deprecationMessage%", - "default": "${workspaceFolder}/out" - }, - "outFiles": { - "type": "array", - "markdownDescription": "%node.outFiles.description%", - "items": { - "type": "string" - }, - "default": [ - "${workspaceFolder}/out/**/*.js" - ] - }, - "smartStep": { - "type": "boolean", - "description": "%node.smartStep.description%", - "default": true - }, - "skipFiles": { - "type": "array", - "description": "%node.skipFiles.description%", - "items": { - "type": "string" - }, - "default": [] - }, - "trace": { - "type": [ - "boolean", - "string" - ], - "description": "%node.trace.description%", - "default": true - }, - "enableSourceMapCaching": { - "type": "boolean", - "description": "%node.enableSourceMapCaching.description%", - "default": true - } - } - } - } - }, - { - "type": "legacy-node2", - "label": "Node.js v6.3+", - "program": "./out/src/nodeDebug.js", - "runtime": "node", - "aiKey": "AIF-d9b70cd4-b9f9-4d70-929b-a071c400b217", - "configurationAttributes": { - "launch": { - "required": [ - "cwd" - ], - "properties": { - "program": { - "type": "string", - "description": "%node.launch.program.description%" - }, - "stopOnEntry": { - "type": "boolean", - "description": "%node.stopOnEntry.description%", - "default": true - }, - "console": { - "enum": [ - "internalConsole", - "integratedTerminal", - "externalTerminal" - ], - "description": "%node.launch.console.description%", - "default": "internalConsole" - }, - "args": { - "type": "array", - "description": "%node.launch.args.description%", - "items": { - "type": "string" - }, - "default": [] - }, - "restart": { - "type": "boolean", - "description": "%node.restart.description%", - "default": true - }, - "cwd": { - "type": "string", - "description": "%node.launch.cwd.description%", - "default": "${workspaceFolder}" - }, - "runtimeExecutable": { - "type": [ - "string", - "null" - ], - "markdownDescription": "%node.launch.runtimeExecutable.description%", - "default": null - }, - "runtimeArgs": { - "type": "array", - "description": "%node.launch.runtimeArgs.description%", - "items": { - "type": "string" - }, - "default": [] - }, - "env": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "%node.launch.env.description%", - "default": {} - }, - "sourceMaps": { - "type": "boolean", - "description": "%node.sourceMaps.description%", - "default": true - }, - "outDir": { - "type": [ - "string", - "null" - ], - "deprecationMessage": "%outDir.deprecationMessage%", - "default": null - }, - "outFiles": { - "type": "array", - "description": "%node.outFiles.description%", - "items": { - "type": "string" - }, - "default": [] - }, - "port": { - "type": "number", - "description": "%node.port.description%", - "default": 9229 - }, - "address": { - "type": "string", - "description": "%node.address.description%", - "default": "localhost" - }, - "timeout": { - "type": "number", - "description": "%node.timeout.description%", - "default": 10000 - }, - "smartStep": { - "type": "boolean", - "description": "%node.smartStep.description%", - "default": true - }, - "diagnosticLogging": { - "type": "boolean", - "description": "%node.diagnosticLogging.description%", - "default": true, - "deprecationMessage": "%node.diagnosticLogging.deprecationMessage%" - }, - "verboseDiagnosticLogging": { - "type": "boolean", - "description": "%node.verboseDiagnosticLogging.description%", - "default": true, - "deprecationMessage": "%node.verboseDiagnosticLogging.deprecationMessage%" - }, - "trace": { - "type": [ - "boolean", - "string" - ], - "enum": [ - "verbose", - true - ], - "default": true, - "description": "%node.trace.description%" - }, - "sourceMapPathOverrides": { - "type": "object", - "description": "%node.sourceMapPathOverrides.description%", - "default": {} - }, - "skipFiles": { - "type": "array", - "description": "%node.skipFiles.description%", - "default": [] - }, - "envFile": { - "type": "string", - "description": "%node.launch.envFile.description%", - "default": "${workspaceFolder}/.env" - }, - "showAsyncStacks": { - "type": "boolean", - "description": "%node.showAsyncStacks.description%", - "default": true - }, - "outputCapture": { - "enum": [ - "console", - "std" - ], - "description": "%node.launch.outputCapture.description%", - "default": "console" - }, - "enableSourceMapCaching": { - "type": "boolean", - "description": "%node.enableSourceMapCaching.description%", - "default": true - }, - "disableOptimisticBPs": { - "type": "boolean", - "description": "%node.disableOptimisticBPs.description%", - "default": true - } - } - }, - "attach": { - "properties": { - "port": { - "type": "number", - "description": "%node.port.description%", - "default": 9229 - }, - "address": { - "type": "string", - "description": "%node.address.description%", - "default": "localhost" - }, - "timeout": { - "type": "number", - "description": "%node.timeout.description%", - "default": 10000 - }, - "restart": { - "type": "boolean", - "description": "%node.restart.description%", - "default": true - }, - "sourceMaps": { - "type": "boolean", - "description": "%node.sourceMaps.description%", - "default": true - }, - "outDir": { - "type": [ - "string", - "null" - ], - "deprecationMessage": "%outDir.deprecationMessage%", - "default": null - }, - "outFiles": { - "type": "array", - "description": "%node.outFiles.description%", - "items": { - "type": "string" - }, - "default": [] - }, - "stopOnEntry": { - "type": "boolean", - "description": "%node.stopOnEntry.description%", - "default": true - }, - "localRoot": { - "type": [ - "string", - "null" - ], - "description": "%node.attach.localRoot.description%", - "default": null - }, - "remoteRoot": { - "type": [ - "string", - "null" - ], - "description": "%node.attach.remoteRoot.description%", - "default": null - }, - "smartStep": { - "type": "boolean", - "description": "%node.smartStep.description%", - "default": true - }, - "diagnosticLogging": { - "type": "boolean", - "description": "%node.diagnosticLogging.description%", - "default": true, - "deprecationMessage": "%node.diagnosticLogging.deprecationMessage%" - }, - "verboseDiagnosticLogging": { - "type": "boolean", - "description": "%node.verboseDiagnosticLogging.description%", - "default": true, - "deprecationMessage": "%node.verboseDiagnosticLogging.deprecationMessage%" - }, - "trace": { - "type": [ - "boolean", - "string" - ], - "enum": [ - "verbose", - true - ], - "default": true, - "description": "%node.trace.description%" - }, - "sourceMapPathOverrides": { - "type": "object", - "description": "%node.sourceMapPathOverrides.description%", - "default": {} - }, - "skipFiles": { - "type": "array", - "description": "%node.skipFiles.description%", - "default": [] - }, - "showAsyncStacks": { - "type": "boolean", - "description": "%node.showAsyncStacks.description%", - "default": true - }, - "enableSourceMapCaching": { - "type": "boolean", - "description": "%node.enableSourceMapCaching.description%", - "default": true - }, - "disableOptimisticBPs": { - "type": "boolean", - "description": "%node.disableOptimisticBPs.description%", - "default": true - } - } - } - } - } - ], - "menus": { - "debug/callstack/context": [ - { - "command": "extension.node-debug2.toggleSkippingFile", - "group": "navigation", - "when": "inDebugMode && debugType == 'node2' && callStackItemType == 'stackFrame'" - } - ] - } - }, - "activationEvents": [ - "onDebug:legacy-extensionHost", - "onDebugResolve:legacy-extensionHost", - "onCommand:extension.node-debug2.toggleSkippingFile" - ], - "dependencies": { - "minimatch": "9.0.3", - "vscode-chrome-debug-core": "6.8.11", - "vscode-debugadapter": "1.40.0", - "vscode-nls": "5.2.0" - }, - "devDependencies": { - "@types/minimatch": "5.1.2", - "@types/mocha": "10.0.3", - "@types/node": "20.8.9", - "@types/vscode": "1.83.1", - "del": "7.1.0", - "event-stream": "4.0.1", - "find-free-port": "2.0.0", - "gulp": "4.0.2", - "gulp-sourcemaps": "3.0.0", - "gulp-tslint": "8.1.4", - "gulp-typescript": "5.0.1", - "gulp-util": "3.0.5", - "minimist": "1.2.8", - "mocha": "10.2.0", - "tslint": "5.20.1", - "typescript": "5.2.2", - "typescript-esbuild": "0.3.1", - "vsce": "1.95.1", - "vscode-chrome-debug-core-testsupport": "4.1.1", - "vscode-debugadapter-testsupport": "1.25.0", - "vscode-debugprotocol": "1.37.0", - "vscode-nls-dev": "4.0.4" - }, - "engines": { - "node": ">=10", - "vscode": "1.60.0-insider" - }, - "publishConfig": { - "access": "public" - }, - "icon": "images/node-debug-icon.png", - "capabilities": { - "virtualWorkspaces": false, - "untrustedWorkspaces": { - "supported": "limited", - "description": "%workspaceTrust%" - } - } + "name": "node-debug2", + "displayName": "[Deprecated] Node Debug", + "version": "0.0.1", + "private": "false", + "description": "%extension.description%", + "categories": [ + "Debuggers" + ], + "homepage": "https://github.com/CodeEditorLand/CodeEditorLand#readme", + "bugs": { + "url": "https://github.com/CodeEditorLand/CodeEditorLand/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/CodeEditorLand/CodeEditorLand.git" + }, + "license": "MIT", + "author": { + "name": "Nikola Hristov", + "email": "nikola@nikolahristov.tech", + "url": "https://nikolahristov.tech" + }, + "publisher": "playform", + "type": "module", + "main": "./out/src/extension", + "scripts": { + "build": "gulp build", + "minor": "npm version minor -m '%s'", + "package": "gulp package", + "patch": "npm version patch -m '%s'", + "prepublishOnly": "TypeScriptESBuild 'Source/**/*.ts'", + "publish": "gulp publish", + "test": "mocha --timeout 20000 -s 2000 -u tdd --colors --reporter node_modules/vscode-chrome-debug-core-testsupport/out/loggingReporter.js ./out/test/", + "tslint": "gulp tslint", + "vscode:prepublish": "gulp verify-no-linked-modules && gulp build", + "watch": "gulp watch" + }, + "contributes": { + "breakpoints": [ + { + "language": "javascript" + }, + { + "language": "javascriptreact" + } + ], + "commands": [ + { + "command": "extension.node-debug2.toggleSkippingFile", + "title": "%toggle.skipping.this.file%" + } + ], + "debuggers": [ + { + "type": "legacy-extensionHost", + "label": "VS Code Extension Development", + "program": "./out/src/nodeDebug.js", + "runtime": "node", + "aiKey": "AIF-d9b70cd4-b9f9-4d70-929b-a071c400b217", + "configurationAttributes": { + "launch": { + "required": [ + "args" + ], + "properties": { + "runtimeExecutable": { + "type": [ + "string", + "null" + ], + "markdownDescription": "%extensionHost.launch.runtimeExecutable.description%", + "default": "${execPath}" + }, + "args": { + "type": "array", + "description": "%node.launch.args.description%", + "items": { + "type": "string" + }, + "default": [ + "--extensionDevelopmentPath=${workspaceFolder}" + ] + }, + "env": { + "type": "object", + "additionalProperties": { + "type": [ + "string", + "null" + ] + }, + "markdownDescription": "%extensionHost.launch.env.description%", + "default": {} + }, + "stopOnEntry": { + "type": "boolean", + "description": "%extensionHost.launch.stopOnEntry.description%", + "default": true + }, + "sourceMaps": { + "type": "boolean", + "description": "%node.sourceMaps.description%", + "default": true + }, + "outDir": { + "type": [ + "string", + "null" + ], + "deprecationMessage": "%outDir.deprecationMessage%", + "default": "${workspaceFolder}/out" + }, + "outFiles": { + "type": "array", + "markdownDescription": "%node.outFiles.description%", + "items": { + "type": "string" + }, + "default": [ + "${workspaceFolder}/out/**/*.js" + ] + }, + "smartStep": { + "type": "boolean", + "description": "%node.smartStep.description%", + "default": true + }, + "skipFiles": { + "type": "array", + "description": "%node.skipFiles.description%", + "items": { + "type": "string" + }, + "default": [] + }, + "trace": { + "type": [ + "boolean", + "string" + ], + "description": "%node.trace.description%", + "default": true + }, + "enableSourceMapCaching": { + "type": "boolean", + "description": "%node.enableSourceMapCaching.description%", + "default": true + } + } + } + } + }, + { + "type": "legacy-node2", + "label": "Node.js v6.3+", + "program": "./out/src/nodeDebug.js", + "runtime": "node", + "aiKey": "AIF-d9b70cd4-b9f9-4d70-929b-a071c400b217", + "configurationAttributes": { + "launch": { + "required": [ + "cwd" + ], + "properties": { + "program": { + "type": "string", + "description": "%node.launch.program.description%" + }, + "stopOnEntry": { + "type": "boolean", + "description": "%node.stopOnEntry.description%", + "default": true + }, + "console": { + "enum": [ + "internalConsole", + "integratedTerminal", + "externalTerminal" + ], + "description": "%node.launch.console.description%", + "default": "internalConsole" + }, + "args": { + "type": "array", + "description": "%node.launch.args.description%", + "items": { + "type": "string" + }, + "default": [] + }, + "restart": { + "type": "boolean", + "description": "%node.restart.description%", + "default": true + }, + "cwd": { + "type": "string", + "description": "%node.launch.cwd.description%", + "default": "${workspaceFolder}" + }, + "runtimeExecutable": { + "type": [ + "string", + "null" + ], + "markdownDescription": "%node.launch.runtimeExecutable.description%", + "default": null + }, + "runtimeArgs": { + "type": "array", + "description": "%node.launch.runtimeArgs.description%", + "items": { + "type": "string" + }, + "default": [] + }, + "env": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "%node.launch.env.description%", + "default": {} + }, + "sourceMaps": { + "type": "boolean", + "description": "%node.sourceMaps.description%", + "default": true + }, + "outDir": { + "type": [ + "string", + "null" + ], + "deprecationMessage": "%outDir.deprecationMessage%", + "default": null + }, + "outFiles": { + "type": "array", + "description": "%node.outFiles.description%", + "items": { + "type": "string" + }, + "default": [] + }, + "port": { + "type": "number", + "description": "%node.port.description%", + "default": 9229 + }, + "address": { + "type": "string", + "description": "%node.address.description%", + "default": "localhost" + }, + "timeout": { + "type": "number", + "description": "%node.timeout.description%", + "default": 10000 + }, + "smartStep": { + "type": "boolean", + "description": "%node.smartStep.description%", + "default": true + }, + "diagnosticLogging": { + "type": "boolean", + "description": "%node.diagnosticLogging.description%", + "default": true, + "deprecationMessage": "%node.diagnosticLogging.deprecationMessage%" + }, + "verboseDiagnosticLogging": { + "type": "boolean", + "description": "%node.verboseDiagnosticLogging.description%", + "default": true, + "deprecationMessage": "%node.verboseDiagnosticLogging.deprecationMessage%" + }, + "trace": { + "type": [ + "boolean", + "string" + ], + "enum": [ + "verbose", + true + ], + "default": true, + "description": "%node.trace.description%" + }, + "sourceMapPathOverrides": { + "type": "object", + "description": "%node.sourceMapPathOverrides.description%", + "default": {} + }, + "skipFiles": { + "type": "array", + "description": "%node.skipFiles.description%", + "default": [] + }, + "envFile": { + "type": "string", + "description": "%node.launch.envFile.description%", + "default": "${workspaceFolder}/.env" + }, + "showAsyncStacks": { + "type": "boolean", + "description": "%node.showAsyncStacks.description%", + "default": true + }, + "outputCapture": { + "enum": [ + "console", + "std" + ], + "description": "%node.launch.outputCapture.description%", + "default": "console" + }, + "enableSourceMapCaching": { + "type": "boolean", + "description": "%node.enableSourceMapCaching.description%", + "default": true + }, + "disableOptimisticBPs": { + "type": "boolean", + "description": "%node.disableOptimisticBPs.description%", + "default": true + } + } + }, + "attach": { + "properties": { + "port": { + "type": "number", + "description": "%node.port.description%", + "default": 9229 + }, + "address": { + "type": "string", + "description": "%node.address.description%", + "default": "localhost" + }, + "timeout": { + "type": "number", + "description": "%node.timeout.description%", + "default": 10000 + }, + "restart": { + "type": "boolean", + "description": "%node.restart.description%", + "default": true + }, + "sourceMaps": { + "type": "boolean", + "description": "%node.sourceMaps.description%", + "default": true + }, + "outDir": { + "type": [ + "string", + "null" + ], + "deprecationMessage": "%outDir.deprecationMessage%", + "default": null + }, + "outFiles": { + "type": "array", + "description": "%node.outFiles.description%", + "items": { + "type": "string" + }, + "default": [] + }, + "stopOnEntry": { + "type": "boolean", + "description": "%node.stopOnEntry.description%", + "default": true + }, + "localRoot": { + "type": [ + "string", + "null" + ], + "description": "%node.attach.localRoot.description%", + "default": null + }, + "remoteRoot": { + "type": [ + "string", + "null" + ], + "description": "%node.attach.remoteRoot.description%", + "default": null + }, + "smartStep": { + "type": "boolean", + "description": "%node.smartStep.description%", + "default": true + }, + "diagnosticLogging": { + "type": "boolean", + "description": "%node.diagnosticLogging.description%", + "default": true, + "deprecationMessage": "%node.diagnosticLogging.deprecationMessage%" + }, + "verboseDiagnosticLogging": { + "type": "boolean", + "description": "%node.verboseDiagnosticLogging.description%", + "default": true, + "deprecationMessage": "%node.verboseDiagnosticLogging.deprecationMessage%" + }, + "trace": { + "type": [ + "boolean", + "string" + ], + "enum": [ + "verbose", + true + ], + "default": true, + "description": "%node.trace.description%" + }, + "sourceMapPathOverrides": { + "type": "object", + "description": "%node.sourceMapPathOverrides.description%", + "default": {} + }, + "skipFiles": { + "type": "array", + "description": "%node.skipFiles.description%", + "default": [] + }, + "showAsyncStacks": { + "type": "boolean", + "description": "%node.showAsyncStacks.description%", + "default": true + }, + "enableSourceMapCaching": { + "type": "boolean", + "description": "%node.enableSourceMapCaching.description%", + "default": true + }, + "disableOptimisticBPs": { + "type": "boolean", + "description": "%node.disableOptimisticBPs.description%", + "default": true + } + } + } + } + } + ], + "menus": { + "debug/callstack/context": [ + { + "command": "extension.node-debug2.toggleSkippingFile", + "group": "navigation", + "when": "inDebugMode && debugType == 'node2' && callStackItemType == 'stackFrame'" + } + ] + } + }, + "activationEvents": [ + "onDebug:legacy-extensionHost", + "onDebugResolve:legacy-extensionHost", + "onCommand:extension.node-debug2.toggleSkippingFile" + ], + "dependencies": { + "minimatch": "9.0.3", + "vscode-chrome-debug-core": "6.8.11", + "vscode-debugadapter": "1.40.0", + "vscode-nls": "5.2.0" + }, + "devDependencies": { + "@types/minimatch": "5.1.2", + "@types/mocha": "10.0.3", + "@types/node": "20.8.9", + "@types/vscode": "1.83.1", + "del": "7.1.0", + "event-stream": "4.0.1", + "find-free-port": "2.0.0", + "gulp": "4.0.2", + "gulp-sourcemaps": "3.0.0", + "gulp-tslint": "8.1.4", + "gulp-typescript": "5.0.1", + "gulp-util": "3.0.5", + "minimist": "1.2.8", + "mocha": "10.2.0", + "tslint": "5.20.1", + "typescript": "5.2.2", + "typescript-esbuild": "0.3.1", + "vsce": "1.95.1", + "vscode-chrome-debug-core-testsupport": "4.1.1", + "vscode-debugadapter-testsupport": "1.25.0", + "vscode-debugprotocol": "1.37.0", + "vscode-nls-dev": "4.0.4" + }, + "engines": { + "node": ">=10", + "vscode": "1.60.0-insider" + }, + "publishConfig": { + "access": "public" + }, + "icon": "images/node-debug-icon.png", + "capabilities": { + "virtualWorkspaces": false, + "untrustedWorkspaces": { + "supported": "limited", + "description": "%workspaceTrust%" + } + } } diff --git a/package.nls.json b/package.nls.json index 2ed062a3..98fcb02c 100644 --- a/package.nls.json +++ b/package.nls.json @@ -15,9 +15,9 @@ "node.enableSourceMapCaching.description": "When sourcemaps are downloaded from a URL, cache them to disk.", "node.diagnosticLogging.description": "When true, the adapter logs its own diagnostic info to the console", - "node.diagnosticLogging.deprecationMessage": "'diagnosticLogging' is deprecated. Use 'trace' instead.", + "node.diagnosticLogging.deprecationMessage": "'diagnosticLogging' is deprecated. Use 'trace' instead.", "node.verboseDiagnosticLogging.description": "When true, the adapter logs all traffic with the client and target (as well as the info logged by 'diagnosticLogging')", - "node.verboseDiagnosticLogging.deprecationMessage": "'verboseDiagnosticLogging' is deprecated. Use 'trace' instead.", + "node.verboseDiagnosticLogging.deprecationMessage": "'verboseDiagnosticLogging' is deprecated. Use 'trace' instead.", "node.trace.description": "When 'true', the debugger will log tracing info to a file. When 'verbose', it will also show logs in the console.", "node.sourceMapPathOverrides.description": "A set of mappings for rewriting the locations of source files from what the sourcemap says, to their locations on disk. See README for details.", @@ -33,7 +33,7 @@ "node.launch.cwd.description": "Absolute path to the working directory of the program being debugged.", "node.launch.runtimeExecutable.description": "Runtime to use. Either an absolute path or the name of a runtime available on the PATH. If ommitted `node` is assumed.", "node.launch.runtimeArgs.description": "Optional arguments passed to the runtime executable.", - "node.launch.env.description": "Environment variables passed to the program. The value `null` removes the variable from the environment.", + "node.launch.env.description": "Environment variables passed to the program. The value `null` removes the variable from the environment.", "node.launch.envFile.description": "Absolute path to a file containing environment variable definitions.", "node.launch.outputCapture.description": "From where to capture output messages: The debug API, or stdout/stderr streams.", diff --git a/test/adapter.test.ts b/test/adapter.test.ts index e077e1ae..afcfea2b 100644 --- a/test/adapter.test.ts +++ b/test/adapter.test.ts @@ -3,499 +3,657 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as assert from 'assert'; -import * as path from 'path'; +import * as assert from "assert"; +import * as path from "path"; -import * as ts from 'vscode-chrome-debug-core-testsupport'; -import { DebugProtocol } from 'vscode-debugprotocol'; +import * as ts from "vscode-chrome-debug-core-testsupport"; +import { DebugProtocol } from "vscode-debugprotocol"; -import * as utils from '../src/utils'; -import * as testSetup from './testSetup'; +import * as utils from "../src/utils"; +import * as testSetup from "./testSetup"; const DATA_ROOT = testSetup.DATA_ROOT; -suite('Node Debug Adapter etc', () => { - - let dc: ts.debugClient.ExtendedDebugClient; - setup(() => { - return testSetup.setup() - .then(_dc => dc = _dc); - }); - - teardown(() => { - return testSetup.teardown(); - }); - - suite('basic', () => { - test('unknown request should produce error', done => { - dc.send('illegal_request').then(() => { - done(new Error('does not report error on unknown request')); - }).catch(() => { - done(); - }); - }); - }); - - suite('initialize', () => { - test('should return supported features', () => { - return dc.initializeRequest().then(response => { - assert.equal(response.body.supportsConfigurationDoneRequest, true); - }); - }); - - test('should produce error for invalid \'pathFormat\'', () => { - return dc.initializeRequest({ - adapterID: 'mock', - linesStartAt1: true, - columnsStartAt1: true, - pathFormat: 'url' - }).then(response => { - throw new Error('does not report error on invalid \'pathFormat\' attribute'); - }).catch(err => { - // error expected - }); - }); - }); - - suite('launch', () => { - test('should run program to the end', () => { - if (utils.compareSemver(process.version, 'v8.0.0') < 0) { - // Skip test if the node version doesn't emit the Runtime.executionContextDestroyed event - return Promise.resolve(); - } - - const PROGRAM = path.join(DATA_ROOT, 'program.js'); - - return Promise.all([ - dc.configurationSequence(), - dc.launch({ program: PROGRAM }), - dc.waitForEvent('terminated') - ]); - }); - - test('should stop on entry', () => { - const PROGRAM = path.join(DATA_ROOT, 'program.js'); - const ENTRY_LINE = 1; - - return Promise.all([ - dc.configurationSequence(), - dc.launch({ program: PROGRAM, stopOnEntry: true }), - dc.assertStoppedLocation('entry', { path: PROGRAM, line: ENTRY_LINE } ) - ]); - }); - - test('should stop on debugger statement', () => { - const PROGRAM = path.join(DATA_ROOT, 'programWithDebugger.js'); - const DEBUGGER_LINE = 6; - - return Promise.all([ - dc.configurationSequence(), - dc.launch({ program: PROGRAM }), - dc.assertStoppedLocation('debugger_statement', { path: PROGRAM, line: DEBUGGER_LINE } ) - ]); - }); - - }); - - - suite('output events', () => { - // https://github.com/Microsoft/vscode/issues/37770 - test('get output events in correct order', async () => { - const PROGRAM = path.join(DATA_ROOT, 'programWithConsoleLogging.js'); - await Promise.all([ - dc.configurationSequence(), - dc.launch({ program: PROGRAM })]); - - let lastEventType: string; - return new Promise((resolve, reject) => { - dc.on('output', outputEvent => { - const msg: string = outputEvent.body.output.trim(); - if (msg.startsWith('log:') || msg.startsWith('error:')) { - const type: string = outputEvent.body.category; - if (type === lastEventType) { - return reject(new Error(`Got two messages in a row of type ${type}`)); - } else if (msg === 'error: 9') { - return resolve(); - } - - lastEventType = type; - } - }); - }); - }); - - // https://github.com/Microsoft/vscode-node-debug2/issues/156 - test(`don't lose error output at the end of the program`, async () => { - // It's possible for some Node versions to exit and never report the exception - if (utils.compareSemver(process.version, 'v8.5.0') < 0) { - return Promise.resolve(); - } - - const PROGRAM = path.join(DATA_ROOT, 'programWithUncaughtException.js'); - await Promise.all([ - dc.configurationSequence(), - dc.launch({ program: PROGRAM })]); - - let gotOutput = false; - return new Promise((resolve, reject) => { - dc.on('output', outputEvent => { - const msg: string = outputEvent.body.output.trim(); - if (msg.startsWith('Error: uncaught exception')) { - gotOutput = true; - resolve(); - } - }); - - dc.on('terminated', () => { - if (!gotOutput) { - reject(new Error('Terminated before exception output received')); - } - }); - }); - }); - }); - - suite('eval', () => { - const PROGRAM = path.join(DATA_ROOT, 'programWithFunction.js'); - function start(): Promise { - return Promise.all([ - dc.configurationSequence(), - dc.launch({ program: PROGRAM }), - dc.waitForEvent('initialized') - ]).then(() => { }); - } - - test('works for a simple case', () => { - return start() - .then(() => dc.evaluateRequest({ expression: '1 + 1' })) - .then(response => { - assert(response.success); - assert.equal(response.body.result, '2'); - assert.equal(response.body.variablesReference, 0); - }); - }); - - test('evaluates a global node thing', () => { - return start() - .then(() => dc.evaluateRequest({ expression: 'Object' })) - .then(response => { - assert(response.success); - assert.equal(response.body.result, 'function Object() { … }'); - assert(response.body.variablesReference > 0); - }); - }); - - test('returns "not available" for a reference error', () => { - return start() - .then(() => dc.evaluateRequest({ expression: 'notDefinedThing' })) - .catch(response => { - assert.equal(response.message, 'not available'); - }); - }); - - test('returns the error message for another error', () => { - return start() - .then(() => dc.evaluateRequest({ expression: 'throw new Error("fail")' })) - .catch(response => { - assert.equal(response.message, 'Error: fail'); - }); - }); - - test('Shows object previews', () => { - return start() - .then(() => dc.evaluateRequest({ expression: 'x = {a: 1, b: [1], c: {a: 1}}' })) - .then(response => { - assert(response.success); - assert(response.body.result === 'Object {a: 1, b: Array(1), c: Object}' || - response.body.result === 'Object {a: 1, b: Array[1], c: Object}'); - assert(response.body.variablesReference > 0); - }); - }); - - test('Shows array previews', () => { - return start() - .then(() => dc.evaluateRequest({ expression: '[1, [1], {a: 3}]' })) - .then(response => { - assert(response.success); - assert(response.body.result === 'Array[3] [1, Array[1], Object]' || - response.body.result === 'Array(3) [1, Array(1), Object]'); - assert(response.body.variablesReference > 0); - }); - }); - }); - - suite('completions', () => { - const PROGRAM = path.join(DATA_ROOT, 'programWithVariables.js'); - - function start(): Promise { - return Promise.all([ - dc.configurationSequence(), - dc.launch({ program: PROGRAM }), - dc.waitForEvent('initialized'), - dc.waitForEvent('stopped') - ]).then(() => { }); - } - - function testCompletions(text: string, column = text.length + 1, frameIdx = 0): Promise { - return start() - .then(() => dc.stackTraceRequest()) - .then(stackTraceResponse => stackTraceResponse.body.stackFrames.map(frame => frame.id)) - .then(frameIds => dc.send('completions', { text, column, frameId: frameIds[frameIdx] })) - .then((response: DebugProtocol.CompletionsResponse) => response.body.targets); - } - - function inCompletionsList(completions: DebugProtocol.CompletionItem[], ...labels: string[]): boolean { - return labels.every(label => completions.filter(target => target.label === label).length === 1); - } - - test('returns global vars', () => { - return testCompletions('') - .then(completions => assert(inCompletionsList(completions, 'global'))); - }); - - test('returns local vars', () => { - return testCompletions('') - .then(completions => assert(inCompletionsList(completions, 'num', 'str', 'arr', 'obj'))); - }); - - test('returns methods', () => { - return testCompletions('arr.') - .then(completions => assert(inCompletionsList(completions, 'push', 'indexOf'))); - }); - - test('returns object properties', () => { - return testCompletions('obj.') - .then(completions => assert(inCompletionsList(completions, 'a', 'b'))); - }); - - test('multiple dots', () => { - return testCompletions('obj.b.') - .then(completions => assert(inCompletionsList(completions, 'startsWith', 'endsWith'))); - }); - - test('returns from the correct column', () => { - return testCompletions('obj.b.', /*column=*/6) - .then(completions => assert(inCompletionsList(completions, 'a', 'b'))); - }); - - test('returns from the correct frameId', () => { - return testCompletions('obj', undefined, /*frameId=*/1) - .then(completions => assert(!inCompletionsList(completions, 'obj'))); - }); - - test('returns properties of string literals', () => { - return testCompletions('"".') - .then(completions => assert(inCompletionsList(completions, 'startsWith'))); - }); - }); - - suite('hit condition bps', () => { - const PROGRAM = path.join(DATA_ROOT, 'programWithFunction.js'); - function continueAndStop(line: number): Promise { - return dc.continueTo('breakpoint', { path: PROGRAM, line }); - } - - test('Works for =', () => { - const noCondBpLine = 15; - const condBpLine = 14; - const bps: DebugProtocol.SourceBreakpoint[] = [ - { line: condBpLine, hitCondition: '=2' }, - { line: noCondBpLine }]; - - return Promise.all([ - ts.debugClient.setBreakpointOnStart(dc, bps, PROGRAM), - - dc.launch({ program: PROGRAM }), - - // Assert that it skips - dc.assertStoppedLocation('breakpoint', { path: PROGRAM, line: noCondBpLine }) - .then(() => continueAndStop(condBpLine)) - .then(() => continueAndStop(noCondBpLine)) - .then(() => continueAndStop(noCondBpLine)) - ]); - }); - - test('Works for %', () => { - const noCondBpLine = 15; - const condBpLine = 14; - const bps: DebugProtocol.SourceBreakpoint[] = [ - { line: condBpLine, hitCondition: '%3' }, - { line: noCondBpLine }]; - - return Promise.all([ - ts.debugClient.setBreakpointOnStart(dc, bps, PROGRAM), - - dc.launch({ program: PROGRAM }), - - // Assert that it skips - dc.assertStoppedLocation('breakpoint', { path: PROGRAM, line: noCondBpLine }) - .then(() => continueAndStop(noCondBpLine)) - .then(() => continueAndStop(condBpLine)) - .then(() => continueAndStop(noCondBpLine)) - ]); - }); - - test('Does not bind when invalid', () => { - const condBpLine = 14; - const bps: DebugProtocol.SourceBreakpoint[] = [ - { line: condBpLine, hitCondition: 'lsdf' }]; - - return Promise.all([ - ts.debugClient.setBreakpointOnStart(dc, bps, PROGRAM, undefined, undefined, /*expVerified=*/false), - dc.launch({ program: PROGRAM }) - ]); - }); - }); - - suite('get loaded scripts', () => { - function assertHasSource(loadedSources: DebugProtocol.Source[], expectedPath: string): void { - assert(loadedSources.find(source => source.path === expectedPath)); - } - - test('returns all scripts', async () => { - const PROGRAM = path.join(DATA_ROOT, 'simple-eval/index.js'); - await dc.hitBreakpoint({ program: PROGRAM }, { path: PROGRAM, line: 3 }); - const { sources } = await dc.loadedSources({ }); - - assert(!!sources); - assert(sources.length > 10); - - // Has the program - assertHasSource(sources, PROGRAM); - - // Has some node_internals script - const nodeInternalsScript = '/timers.js'; - assertHasSource(sources, nodeInternalsScript); - - // Has the eval script - assert(sources.filter(source => source.path.match(/VM\d+/)).length >= 1); - }); - }); - - suite('async callstacks', () => { - function assertAsyncLabelCount(stackTrace: DebugProtocol.StackTraceResponse, expectedAsyncLabels: number): void { - assert.equal(stackTrace.body.stackFrames.filter(frame => !frame.source).length, expectedAsyncLabels); - } - - function assertStackFrame(stackTrace: DebugProtocol.StackTraceResponse, i: number, sourcePath: string, line: number): void { - const frame = stripAsyncHookFrames(stackTrace)[i]; - - assert(!!frame); - assert.equal(frame.source && frame.source.path, sourcePath); - - // Before node 8.7, a stackframe before an async call is on the first line of the calling function, not the function decl line. - // Same with 8.9.4 exactly. So just check for either one. - assert(frame.line === line || frame.line === line - 1, `Expected line ${line} or ${line - 1}`); - } - - /** - * After node 8.7, there are two async_hooks frames to count. In 8.9.4 exactly, the async_hook frames don't show up in the stack. - * Then in later versions they show up again. Easier to just remove them to use the same stack trace indexes for all versions. - */ - function stripAsyncHookFrames(stackTrace: DebugProtocol.StackTraceResponse): DebugProtocol.StackFrame[] { - return stackTrace.body.stackFrames.filter(frame => !frame.source || frame.source.path.indexOf('async_hook') < 0); - } - - test('shows async stacks for promise resolution', async () => { - const PROGRAM = path.join(DATA_ROOT, 'promise-chain/main.js'); - const breakpoints: DebugProtocol.SourceBreakpoint[] = [7, 13, 19, 25, 31].map(line => ({ line })); - - await dc.hitBreakpoint({ program: PROGRAM, showAsyncStacks: true }, { path: PROGRAM, line: 45}); - await dc.setBreakpointsRequest({ source: { path: PROGRAM }, breakpoints }); - - await dc.continueAndStop(); - assertAsyncLabelCount(await dc.stackTraceRequest(), 1); - - await dc.continueAndStop(); - assertAsyncLabelCount(await dc.stackTraceRequest(), 2); - - await dc.continueAndStop(); - assertAsyncLabelCount(await dc.stackTraceRequest(), 3); - - await dc.continueAndStop(); - assertAsyncLabelCount(await dc.stackTraceRequest(), 4); - - // Hit the limit of 4 async parents - await dc.continueAndStop(); - assertAsyncLabelCount(await dc.stackTraceRequest(), 4); - }); - - async function stepOverNativeAwait(fromLine: number, afterBp = false) { - const toLine = fromLine + 1; - - if (utils.compareSemver(process.version, 'v8.0.0') < 0 || (utils.compareSemver(process.version, 'v8.4.0') >= 0 && utils.compareSemver(process.version, 'v8.7.0') < 0)) { - // In pre-8, must always step twice over await lines - await dc.nextTo('step', { line: fromLine }); - await dc.nextTo('step', { line: fromLine }); - } else if (!afterBp && utils.compareSemver(process.version, 'v8.7.0') < 0) { - // In 8, must step an extra time if a BP on this line didn't cause the break - await dc.nextTo('step', { line: fromLine }); - } - - await dc.nextTo('step', { line: toLine }); - } - - test('shows async stacks and steps correctly for native async/await, pre v10', async () => { - if (utils.compareSemver(process.version, 'v7.6.0') < 0 || utils.compareSemver(process.version, 'v10.0.0') >= 0) { - return Promise.resolve(); - } - - const PROGRAM = path.join(DATA_ROOT, 'native-async-await/main.js'); - await dc.hitBreakpoint({ program: PROGRAM, showAsyncStacks: true, skipFiles: ['/**'] }, { path: PROGRAM, line: 8 }); - - await stepOverNativeAwait(8, /*afterBp=*/true); - let stackTrace = await dc.stepInTo('step', { line: 13 }); - assertStackFrame(stackTrace, 3, PROGRAM, 8); - assertStackFrame(stackTrace, 4, PROGRAM, 40); - assertAsyncLabelCount(stackTrace, 1); - - await stepOverNativeAwait(13); - stackTrace = await dc.stepInTo('step', { line: 18 }); - assertStackFrame(stackTrace, 3, PROGRAM, 13); - assertStackFrame(stackTrace, 4, PROGRAM, 9); - assertAsyncLabelCount(stackTrace, 2); - - await stepOverNativeAwait(18); - stackTrace = await dc.stepInTo('step', { line: 23 }); - assertStackFrame(stackTrace, 3, PROGRAM, 18); - assertStackFrame(stackTrace, 4, PROGRAM, 14); - assertAsyncLabelCount(stackTrace, 3); - - await stepOverNativeAwait(23); - stackTrace = await dc.stepInTo('step', { line: 28 }); - assertStackFrame(stackTrace, 3, PROGRAM, 23); - assertStackFrame(stackTrace, 4, PROGRAM, 19); - assertAsyncLabelCount(stackTrace, 4); - }); - - // test.only('shows async stacks and steps correctly for native async/await', async () => { - // if (utils.compareSemver(process.version, 'v10.0.0') < 0) { - // return Promise.resolve(); - // } - - // const PROGRAM = path.join(DATA_ROOT, 'native-async-await/main.js'); - // await dc.hitBreakpoint({ program: PROGRAM, showAsyncStacks: true, skipFiles: ['/**'] }, { path: PROGRAM, line: 8 }); - - // await stepOverNativeAwait(8, /*afterBp=*/true); - // let stackTrace = await dc.stepInTo('step', { line: 13 }); - // assertStackFrame(stackTrace, 3, PROGRAM, 8); - // assertStackFrame(stackTrace, 4, PROGRAM, 40); - // assertAsyncLabelCount(stackTrace, 1); - - // await stepOverNativeAwait(13); - // stackTrace = await dc.stepInTo('step', { line: 18 }); - // assertStackFrame(stackTrace, 3, PROGRAM, 8); - // assertAsyncLabelCount(stackTrace, 2); - - // await stepOverNativeAwait(18); - // stackTrace = await dc.stepInTo('step', { line: 23 }); - // assertStackFrame(stackTrace, 3, PROGRAM, 13); - // assertAsyncLabelCount(stackTrace, 3); - - // await stepOverNativeAwait(23); - // stackTrace = await dc.stepInTo('step', { line: 28 }); - // assertStackFrame(stackTrace, 3, PROGRAM, 18); - // assertAsyncLabelCount(stackTrace, 4); - // }); - }); +suite("Node Debug Adapter etc", () => { + let dc: ts.debugClient.ExtendedDebugClient; + setup(() => { + return testSetup.setup().then((_dc) => (dc = _dc)); + }); + + teardown(() => { + return testSetup.teardown(); + }); + + suite("basic", () => { + test("unknown request should produce error", (done) => { + dc.send("illegal_request") + .then(() => { + done(new Error("does not report error on unknown request")); + }) + .catch(() => { + done(); + }); + }); + }); + + suite("initialize", () => { + test("should return supported features", () => { + return dc.initializeRequest().then((response) => { + assert.equal( + response.body.supportsConfigurationDoneRequest, + true + ); + }); + }); + + test("should produce error for invalid 'pathFormat'", () => { + return dc + .initializeRequest({ + adapterID: "mock", + linesStartAt1: true, + columnsStartAt1: true, + pathFormat: "url", + }) + .then((response) => { + throw new Error( + "does not report error on invalid 'pathFormat' attribute" + ); + }) + .catch((err) => { + // error expected + }); + }); + }); + + suite("launch", () => { + test("should run program to the end", () => { + if (utils.compareSemver(process.version, "v8.0.0") < 0) { + // Skip test if the node version doesn't emit the Runtime.executionContextDestroyed event + return Promise.resolve(); + } + + const PROGRAM = path.join(DATA_ROOT, "program.js"); + + return Promise.all([ + dc.configurationSequence(), + dc.launch({ program: PROGRAM }), + dc.waitForEvent("terminated"), + ]); + }); + + test("should stop on entry", () => { + const PROGRAM = path.join(DATA_ROOT, "program.js"); + const ENTRY_LINE = 1; + + return Promise.all([ + dc.configurationSequence(), + dc.launch({ program: PROGRAM, stopOnEntry: true }), + dc.assertStoppedLocation("entry", { + path: PROGRAM, + line: ENTRY_LINE, + }), + ]); + }); + + test("should stop on debugger statement", () => { + const PROGRAM = path.join(DATA_ROOT, "programWithDebugger.js"); + const DEBUGGER_LINE = 6; + + return Promise.all([ + dc.configurationSequence(), + dc.launch({ program: PROGRAM }), + dc.assertStoppedLocation("debugger_statement", { + path: PROGRAM, + line: DEBUGGER_LINE, + }), + ]); + }); + }); + + suite("output events", () => { + // https://github.com/Microsoft/vscode/issues/37770 + test("get output events in correct order", async () => { + const PROGRAM = path.join( + DATA_ROOT, + "programWithConsoleLogging.js" + ); + await Promise.all([ + dc.configurationSequence(), + dc.launch({ program: PROGRAM }), + ]); + + let lastEventType: string; + return new Promise((resolve, reject) => { + dc.on("output", (outputEvent) => { + const msg: string = outputEvent.body.output.trim(); + if (msg.startsWith("log:") || msg.startsWith("error:")) { + const type: string = outputEvent.body.category; + if (type === lastEventType) { + return reject( + new Error( + `Got two messages in a row of type ${type}` + ) + ); + } else if (msg === "error: 9") { + return resolve(); + } + + lastEventType = type; + } + }); + }); + }); + + // https://github.com/Microsoft/vscode-node-debug2/issues/156 + test(`don't lose error output at the end of the program`, async () => { + // It's possible for some Node versions to exit and never report the exception + if (utils.compareSemver(process.version, "v8.5.0") < 0) { + return Promise.resolve(); + } + + const PROGRAM = path.join( + DATA_ROOT, + "programWithUncaughtException.js" + ); + await Promise.all([ + dc.configurationSequence(), + dc.launch({ program: PROGRAM }), + ]); + + let gotOutput = false; + return new Promise((resolve, reject) => { + dc.on("output", (outputEvent) => { + const msg: string = outputEvent.body.output.trim(); + if (msg.startsWith("Error: uncaught exception")) { + gotOutput = true; + resolve(); + } + }); + + dc.on("terminated", () => { + if (!gotOutput) { + reject( + new Error( + "Terminated before exception output received" + ) + ); + } + }); + }); + }); + }); + + suite("eval", () => { + const PROGRAM = path.join(DATA_ROOT, "programWithFunction.js"); + function start(): Promise { + return Promise.all([ + dc.configurationSequence(), + dc.launch({ program: PROGRAM }), + dc.waitForEvent("initialized"), + ]).then(() => {}); + } + + test("works for a simple case", () => { + return start() + .then(() => dc.evaluateRequest({ expression: "1 + 1" })) + .then((response) => { + assert(response.success); + assert.equal(response.body.result, "2"); + assert.equal(response.body.variablesReference, 0); + }); + }); + + test("evaluates a global node thing", () => { + return start() + .then(() => dc.evaluateRequest({ expression: "Object" })) + .then((response) => { + assert(response.success); + assert.equal( + response.body.result, + "function Object() { … }" + ); + assert(response.body.variablesReference > 0); + }); + }); + + test('returns "not available" for a reference error', () => { + return start() + .then(() => + dc.evaluateRequest({ expression: "notDefinedThing" }) + ) + .catch((response) => { + assert.equal(response.message, "not available"); + }); + }); + + test("returns the error message for another error", () => { + return start() + .then(() => + dc.evaluateRequest({ + expression: 'throw new Error("fail")', + }) + ) + .catch((response) => { + assert.equal(response.message, "Error: fail"); + }); + }); + + test("Shows object previews", () => { + return start() + .then(() => + dc.evaluateRequest({ + expression: "x = {a: 1, b: [1], c: {a: 1}}", + }) + ) + .then((response) => { + assert(response.success); + assert( + response.body.result === + "Object {a: 1, b: Array(1), c: Object}" || + response.body.result === + "Object {a: 1, b: Array[1], c: Object}" + ); + assert(response.body.variablesReference > 0); + }); + }); + + test("Shows array previews", () => { + return start() + .then(() => + dc.evaluateRequest({ expression: "[1, [1], {a: 3}]" }) + ) + .then((response) => { + assert(response.success); + assert( + response.body.result === + "Array[3] [1, Array[1], Object]" || + response.body.result === + "Array(3) [1, Array(1), Object]" + ); + assert(response.body.variablesReference > 0); + }); + }); + }); + + suite("completions", () => { + const PROGRAM = path.join(DATA_ROOT, "programWithVariables.js"); + + function start(): Promise { + return Promise.all([ + dc.configurationSequence(), + dc.launch({ program: PROGRAM }), + dc.waitForEvent("initialized"), + dc.waitForEvent("stopped"), + ]).then(() => {}); + } + + function testCompletions( + text: string, + column = text.length + 1, + frameIdx = 0 + ): Promise { + return start() + .then(() => dc.stackTraceRequest()) + .then((stackTraceResponse) => + stackTraceResponse.body.stackFrames.map((frame) => frame.id) + ) + .then((frameIds) => + dc.send("completions", { + text, + column, + frameId: frameIds[frameIdx], + }) + ) + .then( + (response: DebugProtocol.CompletionsResponse) => + response.body.targets + ); + } + + function inCompletionsList( + completions: DebugProtocol.CompletionItem[], + ...labels: string[] + ): boolean { + return labels.every( + (label) => + completions.filter((target) => target.label === label) + .length === 1 + ); + } + + test("returns global vars", () => { + return testCompletions("").then((completions) => + assert(inCompletionsList(completions, "global")) + ); + }); + + test("returns local vars", () => { + return testCompletions("").then((completions) => + assert( + inCompletionsList(completions, "num", "str", "arr", "obj") + ) + ); + }); + + test("returns methods", () => { + return testCompletions("arr.").then((completions) => + assert(inCompletionsList(completions, "push", "indexOf")) + ); + }); + + test("returns object properties", () => { + return testCompletions("obj.").then((completions) => + assert(inCompletionsList(completions, "a", "b")) + ); + }); + + test("multiple dots", () => { + return testCompletions("obj.b.").then((completions) => + assert(inCompletionsList(completions, "startsWith", "endsWith")) + ); + }); + + test("returns from the correct column", () => { + return testCompletions("obj.b.", /*column=*/ 6).then( + (completions) => + assert(inCompletionsList(completions, "a", "b")) + ); + }); + + test("returns from the correct frameId", () => { + return testCompletions("obj", undefined, /*frameId=*/ 1).then( + (completions) => assert(!inCompletionsList(completions, "obj")) + ); + }); + + test("returns properties of string literals", () => { + return testCompletions('"".').then((completions) => + assert(inCompletionsList(completions, "startsWith")) + ); + }); + }); + + suite("hit condition bps", () => { + const PROGRAM = path.join(DATA_ROOT, "programWithFunction.js"); + function continueAndStop(line: number): Promise { + return dc.continueTo("breakpoint", { path: PROGRAM, line }); + } + + test("Works for =", () => { + const noCondBpLine = 15; + const condBpLine = 14; + const bps: DebugProtocol.SourceBreakpoint[] = [ + { line: condBpLine, hitCondition: "=2" }, + { line: noCondBpLine }, + ]; + + return Promise.all([ + ts.debugClient.setBreakpointOnStart(dc, bps, PROGRAM), + + dc.launch({ program: PROGRAM }), + + // Assert that it skips + dc + .assertStoppedLocation("breakpoint", { + path: PROGRAM, + line: noCondBpLine, + }) + .then(() => continueAndStop(condBpLine)) + .then(() => continueAndStop(noCondBpLine)) + .then(() => continueAndStop(noCondBpLine)), + ]); + }); + + test("Works for %", () => { + const noCondBpLine = 15; + const condBpLine = 14; + const bps: DebugProtocol.SourceBreakpoint[] = [ + { line: condBpLine, hitCondition: "%3" }, + { line: noCondBpLine }, + ]; + + return Promise.all([ + ts.debugClient.setBreakpointOnStart(dc, bps, PROGRAM), + + dc.launch({ program: PROGRAM }), + + // Assert that it skips + dc + .assertStoppedLocation("breakpoint", { + path: PROGRAM, + line: noCondBpLine, + }) + .then(() => continueAndStop(noCondBpLine)) + .then(() => continueAndStop(condBpLine)) + .then(() => continueAndStop(noCondBpLine)), + ]); + }); + + test("Does not bind when invalid", () => { + const condBpLine = 14; + const bps: DebugProtocol.SourceBreakpoint[] = [ + { line: condBpLine, hitCondition: "lsdf" }, + ]; + + return Promise.all([ + ts.debugClient.setBreakpointOnStart( + dc, + bps, + PROGRAM, + undefined, + undefined, + /*expVerified=*/ false + ), + dc.launch({ program: PROGRAM }), + ]); + }); + }); + + suite("get loaded scripts", () => { + function assertHasSource( + loadedSources: DebugProtocol.Source[], + expectedPath: string + ): void { + assert( + loadedSources.find((source) => source.path === expectedPath) + ); + } + + test("returns all scripts", async () => { + const PROGRAM = path.join(DATA_ROOT, "simple-eval/index.js"); + await dc.hitBreakpoint( + { program: PROGRAM }, + { path: PROGRAM, line: 3 } + ); + const { sources } = await dc.loadedSources({}); + + assert(!!sources); + assert(sources.length > 10); + + // Has the program + assertHasSource(sources, PROGRAM); + + // Has some node_internals script + const nodeInternalsScript = "/timers.js"; + assertHasSource(sources, nodeInternalsScript); + + // Has the eval script + assert( + sources.filter((source) => source.path.match(/VM\d+/)).length >= + 1 + ); + }); + }); + + suite("async callstacks", () => { + function assertAsyncLabelCount( + stackTrace: DebugProtocol.StackTraceResponse, + expectedAsyncLabels: number + ): void { + assert.equal( + stackTrace.body.stackFrames.filter((frame) => !frame.source) + .length, + expectedAsyncLabels + ); + } + + function assertStackFrame( + stackTrace: DebugProtocol.StackTraceResponse, + i: number, + sourcePath: string, + line: number + ): void { + const frame = stripAsyncHookFrames(stackTrace)[i]; + + assert(!!frame); + assert.equal(frame.source && frame.source.path, sourcePath); + + // Before node 8.7, a stackframe before an async call is on the first line of the calling function, not the function decl line. + // Same with 8.9.4 exactly. So just check for either one. + assert( + frame.line === line || frame.line === line - 1, + `Expected line ${line} or ${line - 1}` + ); + } + + /** + * After node 8.7, there are two async_hooks frames to count. In 8.9.4 exactly, the async_hook frames don't show up in the stack. + * Then in later versions they show up again. Easier to just remove them to use the same stack trace indexes for all versions. + */ + function stripAsyncHookFrames( + stackTrace: DebugProtocol.StackTraceResponse + ): DebugProtocol.StackFrame[] { + return stackTrace.body.stackFrames.filter( + (frame) => + !frame.source || frame.source.path.indexOf("async_hook") < 0 + ); + } + + test("shows async stacks for promise resolution", async () => { + const PROGRAM = path.join(DATA_ROOT, "promise-chain/main.js"); + const breakpoints: DebugProtocol.SourceBreakpoint[] = [ + 7, 13, 19, 25, 31, + ].map((line) => ({ line })); + + await dc.hitBreakpoint( + { program: PROGRAM, showAsyncStacks: true }, + { path: PROGRAM, line: 45 } + ); + await dc.setBreakpointsRequest({ + source: { path: PROGRAM }, + breakpoints, + }); + + await dc.continueAndStop(); + assertAsyncLabelCount(await dc.stackTraceRequest(), 1); + + await dc.continueAndStop(); + assertAsyncLabelCount(await dc.stackTraceRequest(), 2); + + await dc.continueAndStop(); + assertAsyncLabelCount(await dc.stackTraceRequest(), 3); + + await dc.continueAndStop(); + assertAsyncLabelCount(await dc.stackTraceRequest(), 4); + + // Hit the limit of 4 async parents + await dc.continueAndStop(); + assertAsyncLabelCount(await dc.stackTraceRequest(), 4); + }); + + async function stepOverNativeAwait(fromLine: number, afterBp = false) { + const toLine = fromLine + 1; + + if ( + utils.compareSemver(process.version, "v8.0.0") < 0 || + (utils.compareSemver(process.version, "v8.4.0") >= 0 && + utils.compareSemver(process.version, "v8.7.0") < 0) + ) { + // In pre-8, must always step twice over await lines + await dc.nextTo("step", { line: fromLine }); + await dc.nextTo("step", { line: fromLine }); + } else if ( + !afterBp && + utils.compareSemver(process.version, "v8.7.0") < 0 + ) { + // In 8, must step an extra time if a BP on this line didn't cause the break + await dc.nextTo("step", { line: fromLine }); + } + + await dc.nextTo("step", { line: toLine }); + } + + test("shows async stacks and steps correctly for native async/await, pre v10", async () => { + if ( + utils.compareSemver(process.version, "v7.6.0") < 0 || + utils.compareSemver(process.version, "v10.0.0") >= 0 + ) { + return Promise.resolve(); + } + + const PROGRAM = path.join(DATA_ROOT, "native-async-await/main.js"); + await dc.hitBreakpoint( + { + program: PROGRAM, + showAsyncStacks: true, + skipFiles: ["/**"], + }, + { path: PROGRAM, line: 8 } + ); + + await stepOverNativeAwait(8, /*afterBp=*/ true); + let stackTrace = await dc.stepInTo("step", { line: 13 }); + assertStackFrame(stackTrace, 3, PROGRAM, 8); + assertStackFrame(stackTrace, 4, PROGRAM, 40); + assertAsyncLabelCount(stackTrace, 1); + + await stepOverNativeAwait(13); + stackTrace = await dc.stepInTo("step", { line: 18 }); + assertStackFrame(stackTrace, 3, PROGRAM, 13); + assertStackFrame(stackTrace, 4, PROGRAM, 9); + assertAsyncLabelCount(stackTrace, 2); + + await stepOverNativeAwait(18); + stackTrace = await dc.stepInTo("step", { line: 23 }); + assertStackFrame(stackTrace, 3, PROGRAM, 18); + assertStackFrame(stackTrace, 4, PROGRAM, 14); + assertAsyncLabelCount(stackTrace, 3); + + await stepOverNativeAwait(23); + stackTrace = await dc.stepInTo("step", { line: 28 }); + assertStackFrame(stackTrace, 3, PROGRAM, 23); + assertStackFrame(stackTrace, 4, PROGRAM, 19); + assertAsyncLabelCount(stackTrace, 4); + }); + + // test.only('shows async stacks and steps correctly for native async/await', async () => { + // if (utils.compareSemver(process.version, 'v10.0.0') < 0) { + // return Promise.resolve(); + // } + + // const PROGRAM = path.join(DATA_ROOT, 'native-async-await/main.js'); + // await dc.hitBreakpoint({ program: PROGRAM, showAsyncStacks: true, skipFiles: ['/**'] }, { path: PROGRAM, line: 8 }); + + // await stepOverNativeAwait(8, /*afterBp=*/true); + // let stackTrace = await dc.stepInTo('step', { line: 13 }); + // assertStackFrame(stackTrace, 3, PROGRAM, 8); + // assertStackFrame(stackTrace, 4, PROGRAM, 40); + // assertAsyncLabelCount(stackTrace, 1); + + // await stepOverNativeAwait(13); + // stackTrace = await dc.stepInTo('step', { line: 18 }); + // assertStackFrame(stackTrace, 3, PROGRAM, 8); + // assertAsyncLabelCount(stackTrace, 2); + + // await stepOverNativeAwait(18); + // stackTrace = await dc.stepInTo('step', { line: 23 }); + // assertStackFrame(stackTrace, 3, PROGRAM, 13); + // assertAsyncLabelCount(stackTrace, 3); + + // await stepOverNativeAwait(23); + // stackTrace = await dc.stepInTo('step', { line: 28 }); + // assertStackFrame(stackTrace, 3, PROGRAM, 18); + // assertAsyncLabelCount(stackTrace, 4); + // }); + }); }); diff --git a/test/breakpoints.test.ts b/test/breakpoints.test.ts index e475e255..b75f3e0a 100644 --- a/test/breakpoints.test.ts +++ b/test/breakpoints.test.ts @@ -3,559 +3,829 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as assert from 'assert'; -import * as child_process from 'child_process'; -import * as path from 'path'; -import { DebugProtocol } from 'vscode-debugprotocol'; -import * as ts from 'vscode-chrome-debug-core-testsupport'; -import * as utils from '../src/utils'; - -import * as testSetup from './testSetup'; - -suite('Breakpoints', () => { - const DATA_ROOT = testSetup.DATA_ROOT; - - let dc: ts.debugClient.ExtendedDebugClient; - setup(() => { - return testSetup.setup() - .then(_dc => dc = _dc); - }); - - teardown(() => { - return testSetup.teardown(); - }); - - suite('setBreakpoints', () => { - test('should stop on a breakpoint', () => { - const PROGRAM = path.join(DATA_ROOT, 'program.js'); - const BREAKPOINT_LINE = 2; - - return dc.hitBreakpoint({ program: PROGRAM }, { path: PROGRAM, line: BREAKPOINT_LINE} ); - }); - - test('should stop on a breakpoint in file with spaces in its name', () => { - const PROGRAM = path.join(DATA_ROOT, 'folder with spaces', 'file with spaces.js'); - const BREAKPOINT_LINE = 2; - - return dc.hitBreakpoint({ program: PROGRAM }, { path: PROGRAM, line: BREAKPOINT_LINE} ); - }); - - test('should stop on a breakpoint identical to the entrypoint', () => { // verifies the 'hide break on entry point' logic - const PROGRAM = path.join(DATA_ROOT, 'program.js'); - const ENTRY_LINE = 1; - - return dc.hitBreakpoint({ program: PROGRAM }, { path: PROGRAM, line: ENTRY_LINE } ); - }); - - // Microsoft/vscode-chrome-debug-core#73 - test.skip('should break on a specific column in a single line program', () => { - const SINGLE_LINE_PROGRAM = path.join(DATA_ROOT, 'programSingleLine.js'); - const LINE = 1; - const COLUMN = 55; - - return dc.hitBreakpoint({ program: SINGLE_LINE_PROGRAM }, { path: SINGLE_LINE_PROGRAM, line: LINE, column: COLUMN } ); - }); - - test('should stop on a conditional breakpoint', () => { - const PROGRAM = path.join(DATA_ROOT, 'program.js'); - const COND_BREAKPOINT_LINE = 13; - - const bp: DebugProtocol.SourceBreakpoint = { line: COND_BREAKPOINT_LINE, condition: 'i === 3' }; - return Promise.all([ - ts.debugClient.setBreakpointOnStart(dc, [bp], PROGRAM, COND_BREAKPOINT_LINE), - - dc.launch({ program: PROGRAM }), - - dc.assertStoppedLocation('breakpoint', { path: PROGRAM, line: COND_BREAKPOINT_LINE } ).then(response => { - const frame = response.body.stackFrames[0]; - return dc.evaluateRequest({ context: 'watch', frameId: frame.id, expression: 'x' }).then(response => { - assert.equal(response.body.result, 9, 'x !== 9'); - return response; - }); - }) - ]); - }); - }); - - suite('setBreakpoints in TypeScript', () => { - test('should stop on a breakpoint in source (all files top level)', () => { - const PROGRAM = path.join(DATA_ROOT, 'sourcemaps-simple/classes.js'); - const TS_SOURCE = path.join(DATA_ROOT, 'sourcemaps-simple/classes.ts'); - const TS_LINE = 17; - - return dc.hitBreakpoint({ - program: PROGRAM, - sourceMaps: true, - runtimeArgs: [ '--nolazy' ] - }, { - path: TS_SOURCE, - line: TS_LINE - }); - }); - - // Find map beside generated - test.skip('should stop on a breakpoint in source (all files top level, missing sourceMappingURL)', () => { - const PROGRAM = path.join(DATA_ROOT, 'sourcemaps-simple-no-sourceMappingURL/classes.js'); - const TS_SOURCE = path.join(DATA_ROOT, 'sourcemaps-simple-no-sourceMappingURL/classes.ts'); - const TS_LINE = 17; - - return dc.hitBreakpoint({ - program: PROGRAM, - sourceMaps: true, - runtimeArgs: [ '--nolazy' ] - }, { - path: TS_SOURCE, - line: TS_LINE - }); - }); - - test('should stop on a breakpoint in source (outDir)', () => { - const PROGRAM = path.join(DATA_ROOT, 'sourcemaps-inline/src/classes.ts'); - const OUT_DIR = path.join(DATA_ROOT, 'sourcemaps-inline/dist'); - const BREAKPOINT_LINE = 17; - - return dc.hitBreakpoint({ - program: PROGRAM, - sourceMaps: true, - outDir: OUT_DIR, - runtimeArgs: [ '--nolazy' ] - }, { - path: PROGRAM, - line: BREAKPOINT_LINE - }); - }); - - test('should stop on a breakpoint in source (outFiles)', () => { - const PROGRAM = path.join(DATA_ROOT, 'sourcemaps-inline/src/classes.ts'); - const OUT_FILES = path.join(DATA_ROOT, 'sourcemaps-inline/dist/**/*.js'); - const BREAKPOINT_LINE = 17; - - return dc.hitBreakpoint({ - program: PROGRAM, - sourceMaps: true, - outFiles: [ OUT_FILES ], - runtimeArgs: [ '--nolazy' ], - verboseDiagnosticLogging: true - }, { - path: PROGRAM, - line: BREAKPOINT_LINE - }); - }); - - test('should stop on a breakpoint in source with spaces in paths (outDir)', () => { - const PROGRAM = path.join(DATA_ROOT, 'sourcemaps with spaces', 'the source/classes.ts'); - const OUT_DIR = path.join(DATA_ROOT, 'sourcemaps with spaces/the distribution'); - const BREAKPOINT_LINE = 17; - - return dc.hitBreakpoint({ - program: PROGRAM, - sourceMaps: true, - outDir: OUT_DIR, - runtimeArgs: [ '--nolazy' ], - verboseDiagnosticLogging: true - }, { - path: PROGRAM, - line: BREAKPOINT_LINE - }); - }); - - test('should stop on a breakpoint in source with spaces in paths (outFiles)', () => { - const PROGRAM = path.join(DATA_ROOT, 'sourcemaps with spaces', 'the source/classes.ts'); - const OUT_FILES = path.join(DATA_ROOT, 'sourcemaps with spaces/the distribution/**/*.js'); - const BREAKPOINT_LINE = 17; - - return dc.hitBreakpoint({ - program: PROGRAM, - sourceMaps: true, - outFiles: [ OUT_FILES ], - runtimeArgs: [ '--nolazy' ], - verboseDiagnosticLogging: true - }, { - path: PROGRAM, - line: BREAKPOINT_LINE - }); - }); - - - test('should stop on a breakpoint in source - Microsoft/vscode#2574', () => { - const PROGRAM = path.join(DATA_ROOT, 'sourcemaps-2574/out/classes.js'); - const OUT_DIR = path.join(DATA_ROOT, 'sourcemaps-2574/out'); - const TS_SOURCE = path.join(DATA_ROOT, 'sourcemaps-2574/src/classes.ts'); - const TS_LINE = 17; - - return dc.hitBreakpoint({ - program: PROGRAM, - sourceMaps: true, - outDir: OUT_DIR, - runtimeArgs: [ '--nolazy' ] - }, { - path: TS_SOURCE, - line: TS_LINE - }); - }); - - // Find map next to js - test.skip('should stop on a breakpoint in source (sourceMappingURL missing)', () => { - const PROGRAM = path.join(DATA_ROOT, 'sourcemap-no-sourceMappingURL/out/classes.js'); - const OUT_DIR = path.join(DATA_ROOT, 'sourcemap-no-sourceMappingURL/out'); - const TS_SOURCE = path.join(DATA_ROOT, 'sourcemap-no-sourceMappingURL/src/classes.ts'); - const TS_LINE = 17; - - return dc.hitBreakpoint({ - program: PROGRAM, - sourceMaps: true, - outDir: OUT_DIR, - runtimeArgs: [ '--nolazy' ] - }, { - path: TS_SOURCE, - line: TS_LINE - }); - }); - - test('should stop on a breakpoint in source even if breakpoint was set in JavaScript - Microsoft/vscode-node-debug#43', () => { - const PROGRAM = path.join(DATA_ROOT, 'sourcemaps-2574/out/classes.js'); - const OUT_DIR = path.join(DATA_ROOT, 'sourcemaps-2574/out'); - const JS_SOURCE = PROGRAM; - const JS_LINE = 21; - const TS_SOURCE = path.join(DATA_ROOT, 'sourcemaps-2574/src/classes.ts'); - const TS_LINE = 17; - - return dc.hitBreakpoint({ - program: PROGRAM, - sourceMaps: true, - outDir: OUT_DIR, - runtimeArgs: [ '--nolazy' ] - }, { - path: JS_SOURCE, - line: JS_LINE - }, { - path: TS_SOURCE, - line: TS_LINE - }); - }); - - test('should stop on a breakpoint when the sourcemap is loaded after the bp is set', () => { - const projectRoot = path.join(DATA_ROOT, 'sourcemaps-setinterval'); - const BP_PROGRAM = path.join(projectRoot, 'src/file2.ts'); - const LAUNCH_PROGRAM = path.join(projectRoot, 'dist/program.js'); - const BP_LINE = 10; - const outFiles = [path.join(projectRoot, 'dist/*.js')]; - - let bpChangedEventCount = 0; - return Promise.all([ - dc.waitForEvent('initialized').then(event => { - return dc.setBreakpointsRequest({ source: { path: BP_PROGRAM }, breakpoints: [{ line: BP_LINE }]}).then(response => { - assert.equal(response.body.breakpoints.length, 1); - assert(!response.body.breakpoints[0].verified, 'Expected bp to not be verified yet'); - - dc.on('breakpoint', e => { - bpChangedEventCount++; - }); - - return dc.configurationDoneRequest(); - }); - }), - dc.launch({ program: LAUNCH_PROGRAM, outFiles }), - dc.waitForEvent('breakpoint').then((event: DebugProtocol.BreakpointEvent) => { - assert(event.body.breakpoint.verified); - return null; - }), - - dc.assertStoppedLocation('breakpoint', { path: BP_PROGRAM, line: BP_LINE } ).then(() => { - if (bpChangedEventCount > 1) { - // Test that we didn't unnecessarily reset the BP when the script loaded - throw new Error('Too many BP changed events'); - } - }) - ]); - }); - - // Microsoft/vscode-chrome-debug-core#38 - test('should stop on a breakpoint in source even if program\'s entry point is in JavaScript', () => { - const PROGRAM = path.join(DATA_ROOT, 'sourcemaps-js-entrypoint/out/entry.js'); - const OUT_DIR = path.join(DATA_ROOT, 'sourcemaps-js-entrypoint/out'); - const TS_SOURCE = path.join(DATA_ROOT, 'sourcemaps-js-entrypoint/src/classes.ts'); - const TS_LINE = 17; - - return dc.hitBreakpointUnverified({ - program: PROGRAM, - sourceMaps: true, - outDir: OUT_DIR, - runtimeArgs: [ '--nolazy' ] - }, { path: TS_SOURCE, line: TS_LINE } ); - }); - - test('can set a breakpoint in inlined sources', async () => { - const TEST_ROOT = path.join(DATA_ROOT, 'sourcemaps-inline-sources'); - const outFiles = [path.join(TEST_ROOT, '**/*.js')]; - const LAUNCH_PROGRAM = path.join(TEST_ROOT, 'program.js'); - const PROGRAM = path.join(TEST_ROOT, 'program.ts'); - const DEBUGGER_LINE = 5; - const BP_LINE = 4; - - let inlinedSource: DebugProtocol.Source; - await Promise.all([ - dc.configurationSequence(), - dc.launch({ program: LAUNCH_PROGRAM, outFiles }), - dc.assertStoppedLocation('debugger_statement', { path: PROGRAM, line: DEBUGGER_LINE }).then(stackTrace => { - inlinedSource = stackTrace.body.stackFrames[0].source; - }) - ]); - - const bpRequest = await dc.setBreakpointsRequest({ breakpoints: [{ line: BP_LINE }], source: inlinedSource }); - assert(bpRequest.body.breakpoints[0] && bpRequest.body.breakpoints[0].verified); - - await dc.continueTo('breakpoint', { line: BP_LINE, path: PROGRAM }); - }); - - const execP = (command, options) => { - return new Promise((resolve, reject) => { - child_process.exec(command, options, (err, stdout) => { - if (err) { - return reject(err); - } - - resolve(stdout); - }); - }); - }; - - test('still resolves sourcemap paths when they are absolute local paths', async () => { - const TEST_ROOT = path.join(DATA_ROOT, 'sourcemaps-local-paths'); - - await execP('npm install', { cwd: TEST_ROOT }); - await execP('npm run postinstall', { cwd: TEST_ROOT }); // This doesn't run automatically on Linux for some reason. - const PROGRAM = path.join(DATA_ROOT, 'sourcemaps-local-paths/out/classes.js'); - const TS_SOURCE = path.join(DATA_ROOT, 'sourcemaps-local-paths/src/classes.ts'); - const TS_LINE = 17; - - return dc.hitBreakpointUnverified({ - program: PROGRAM, - outFiles: [path.join(DATA_ROOT, 'sourcemaps-local-paths/out/*.js')], - runtimeArgs: ['--nolazy'] - }, { path: TS_SOURCE, line: TS_LINE }); - }); - }); - - suite('setExceptionBreakpoints', () => { - const PROGRAM = path.join(DATA_ROOT, 'programWithException.js'); - - test('should not stop on an exception', () => { - if (utils.compareSemver(process.version, 'v8.0.0') < 0) { - // Terminating at program end only works after Node 8 - return Promise.resolve(); - } - - return Promise.all([ - dc.waitForEvent('initialized').then(event => { - return dc.setExceptionBreakpointsRequest({ - filters: [ ] - }); - }).then(response => { - return dc.configurationDoneRequest(); - }), - - dc.launch({ program: PROGRAM }), - - dc.waitForEvent('terminated') - ]); - }); - - test('should stop on a caught exception', () => { - const EXCEPTION_LINE = 6; - - return Promise.all([ - dc.waitForEvent('initialized').then(event => { - return dc.setExceptionBreakpointsRequest({ - filters: [ 'all' ] - }); - }).then(response => { - return dc.configurationDoneRequest(); - }), - - dc.launch({ program: PROGRAM }), - - dc.assertStoppedLocation('exception', { path: PROGRAM, line: EXCEPTION_LINE } ) - ]); - }); - - test('should stop on uncaught exception', () => { - const UNCAUGHT_EXCEPTION_LINE = 12; - - return Promise.all([ - dc.waitForEvent('initialized').then(event => { - return dc.setExceptionBreakpointsRequest({ - filters: [ 'uncaught' ] - }); - }).then(response => { - return dc.configurationDoneRequest(); - }), - - dc.launch({ program: PROGRAM }), - - dc.assertStoppedLocation('exception', { path: PROGRAM, line: UNCAUGHT_EXCEPTION_LINE } ) - ]); - }); - - test('should not stop on exception in when skipFiles is used', async () => { - const program = path.join(DATA_ROOT, 'nodeInternalsCaughtException.js'); - - return Promise.all([ - dc.waitForEvent('initialized').then(event => { - return dc.setExceptionBreakpointsRequest({ - filters: ['all'] - }); - }).then(response => { - return dc.setBreakpointsRequest({ source: { path: program }, breakpoints: [{ line: 7 }]}); - }).then(() => { - return dc.configurationDoneRequest(); - }), - - dc.launch({ program, skipFiles: ['/**'] }), - - // assert that we did not stop on the exception, but stopped on the breakpoint - dc.assertStoppedLocation('breakpoint', { path: program, line: 7 }) - ]); - }); - - test('should still stop on exception in user code when skipFiles is used with ', async () => { - const program = path.join(DATA_ROOT, 'programWithException.js'); - - return Promise.all([ - dc.waitForEvent('initialized').then(event => { - return dc.setExceptionBreakpointsRequest({ - filters: ['all'] - }); - }).then(response => { - return dc.setBreakpointsRequest({ source: { path: program }, breakpoints: [{ line: 11 }] }); - }).then(() => { - return dc.configurationDoneRequest(); - }), - - dc.launch({ program, skipFiles: ['/**'] }), - - // assert that we did not stop on the exception, but stopped on the breakpoint - dc.assertStoppedLocation('exception', { path: program, line: 6 }) - ]); - }); - }); - - suite('exception scope', () => { - const PROGRAM = path.join(DATA_ROOT, 'programWithException.js'); - - test('should only show exception scope in the first frame', () => { - const EXCEPTION_LINE = 6; - - return Promise.all([ - dc.waitForEvent('initialized') - .then(event => dc.setExceptionBreakpointsRequest({ filters: ['all'] })) - .then(response => dc.configurationDoneRequest()), - - dc.launch({ program: PROGRAM }), - - dc.assertStoppedLocation('exception', { path: PROGRAM, line: EXCEPTION_LINE }).then(async response => { - const frame0Id = response.body.stackFrames[0].id; - const frame0Scopes = await dc.scopesRequest({ frameId: frame0Id }); - assert.equal(frame0Scopes.body.scopes[0].name, 'Exception', 'First frame should be named Exception'); - - const frame1Id = response.body.stackFrames[1].id; - const frame1Scopes = await dc.scopesRequest({ frameId: frame1Id }); - assert.notEqual(frame1Scopes.body.scopes[0].name, 'Exception', 'First frame should not be named Exception'); - }) - ]); - }); - }); - - suite('setBreakpoints using Webpack', () => { - test('webpack', () => { - const TS_SOURCE = path.join(DATA_ROOT, 'webpack/app.ts'); - const TS_LINE = 1; - - return dc.hitBreakpoint({ - program: TS_SOURCE, - sourceMaps: true, - outFiles: [ path.join(DATA_ROOT, 'webpack/**/*.js') ], - cwd: path.join(DATA_ROOT, 'webpack'), - runtimeArgs: [ '--nolazy' ] - }, { - path: TS_SOURCE, - line: TS_LINE - }); - }); - }); - - suite('es modules', () => { - test('breakpoint in es module', () => { - const file2 = path.join(DATA_ROOT, 'es-modules/file2.mjs'); - const line = 1; - - return dc.hitBreakpoint({ - program: file2, - cwd: path.join(DATA_ROOT, 'es-modules'), - runtimeArgs: ['--nolazy'] - }, { - path: file2, - line: line - }); - }); - }); - - suite('symlinks', () => { - test('breakpoint in symlinked library module', () => { - if (process.platform === 'win32') { - return Promise.resolve(); - } - - const main = path.join(DATA_ROOT, 'symlinked-file/main.js'); - const file2 = path.join(DATA_ROOT, 'symlinked-file/symlinkToSrc/file.js'); - const line = 1; - - return dc.hitBreakpointUnverified({ - program: main, - cwd: path.join(DATA_ROOT, 'symlinked-file'), - runtimeArgs: ['--nolazy', '--preserve-symlinks'] - }, { - path: file2, - line: line - }); - }); - - test('breakpoint in symlinked main module', () => { - if (utils.compareSemver(process.version, 'v10.0.0') < 0 || process.platform === 'win32') { - // --preserve-symlinks-main only supported after Node 10 - return Promise.resolve(); - } - - const main = path.join(DATA_ROOT, 'symlinked-file/symlinkToSrc/file.js'); - const line = 1; - - return dc.hitBreakpointUnverified({ - program: main, - cwd: path.join(DATA_ROOT, 'symlinked-file'), - runtimeArgs: ['--nolazy', '--preserve-symlinks', '--preserve-symlinks-main'] - }, { - path: main, - line: line - }); - }); - - test('breakpoint in symlinked cwd', () => { - if (utils.compareSemver(process.version, 'v10.0.0') < 0 || process.platform === 'win32') { - // --preserve-symlinks-main only supported after Node 10 - return Promise.resolve(); - } - - const main = path.join(DATA_ROOT, 'symlinked-file/symlinkToSrc/file.js'); - const line = 1; - - return dc.hitBreakpointUnverified({ - program: main, - cwd: path.join(DATA_ROOT, 'symlinked-file/symlinkToSrc'), - runtimeArgs: ['--nolazy', '--preserve-symlinks', '--preserve-symlinks-main'] - }, { - path: main, - line: line - }); - }); - }); -}); \ No newline at end of file +import * as assert from "assert"; +import * as child_process from "child_process"; +import * as path from "path"; +import { DebugProtocol } from "vscode-debugprotocol"; +import * as ts from "vscode-chrome-debug-core-testsupport"; +import * as utils from "../src/utils"; + +import * as testSetup from "./testSetup"; + +suite("Breakpoints", () => { + const DATA_ROOT = testSetup.DATA_ROOT; + + let dc: ts.debugClient.ExtendedDebugClient; + setup(() => { + return testSetup.setup().then((_dc) => (dc = _dc)); + }); + + teardown(() => { + return testSetup.teardown(); + }); + + suite("setBreakpoints", () => { + test("should stop on a breakpoint", () => { + const PROGRAM = path.join(DATA_ROOT, "program.js"); + const BREAKPOINT_LINE = 2; + + return dc.hitBreakpoint( + { program: PROGRAM }, + { path: PROGRAM, line: BREAKPOINT_LINE } + ); + }); + + test("should stop on a breakpoint in file with spaces in its name", () => { + const PROGRAM = path.join( + DATA_ROOT, + "folder with spaces", + "file with spaces.js" + ); + const BREAKPOINT_LINE = 2; + + return dc.hitBreakpoint( + { program: PROGRAM }, + { path: PROGRAM, line: BREAKPOINT_LINE } + ); + }); + + test("should stop on a breakpoint identical to the entrypoint", () => { + // verifies the 'hide break on entry point' logic + const PROGRAM = path.join(DATA_ROOT, "program.js"); + const ENTRY_LINE = 1; + + return dc.hitBreakpoint( + { program: PROGRAM }, + { path: PROGRAM, line: ENTRY_LINE } + ); + }); + + // Microsoft/vscode-chrome-debug-core#73 + test.skip("should break on a specific column in a single line program", () => { + const SINGLE_LINE_PROGRAM = path.join( + DATA_ROOT, + "programSingleLine.js" + ); + const LINE = 1; + const COLUMN = 55; + + return dc.hitBreakpoint( + { program: SINGLE_LINE_PROGRAM }, + { path: SINGLE_LINE_PROGRAM, line: LINE, column: COLUMN } + ); + }); + + test("should stop on a conditional breakpoint", () => { + const PROGRAM = path.join(DATA_ROOT, "program.js"); + const COND_BREAKPOINT_LINE = 13; + + const bp: DebugProtocol.SourceBreakpoint = { + line: COND_BREAKPOINT_LINE, + condition: "i === 3", + }; + return Promise.all([ + ts.debugClient.setBreakpointOnStart( + dc, + [bp], + PROGRAM, + COND_BREAKPOINT_LINE + ), + + dc.launch({ program: PROGRAM }), + + dc + .assertStoppedLocation("breakpoint", { + path: PROGRAM, + line: COND_BREAKPOINT_LINE, + }) + .then((response) => { + const frame = response.body.stackFrames[0]; + return dc + .evaluateRequest({ + context: "watch", + frameId: frame.id, + expression: "x", + }) + .then((response) => { + assert.equal( + response.body.result, + 9, + "x !== 9" + ); + return response; + }); + }), + ]); + }); + }); + + suite("setBreakpoints in TypeScript", () => { + test("should stop on a breakpoint in source (all files top level)", () => { + const PROGRAM = path.join( + DATA_ROOT, + "sourcemaps-simple/classes.js" + ); + const TS_SOURCE = path.join( + DATA_ROOT, + "sourcemaps-simple/classes.ts" + ); + const TS_LINE = 17; + + return dc.hitBreakpoint( + { + program: PROGRAM, + sourceMaps: true, + runtimeArgs: ["--nolazy"], + }, + { + path: TS_SOURCE, + line: TS_LINE, + } + ); + }); + + // Find map beside generated + test.skip("should stop on a breakpoint in source (all files top level, missing sourceMappingURL)", () => { + const PROGRAM = path.join( + DATA_ROOT, + "sourcemaps-simple-no-sourceMappingURL/classes.js" + ); + const TS_SOURCE = path.join( + DATA_ROOT, + "sourcemaps-simple-no-sourceMappingURL/classes.ts" + ); + const TS_LINE = 17; + + return dc.hitBreakpoint( + { + program: PROGRAM, + sourceMaps: true, + runtimeArgs: ["--nolazy"], + }, + { + path: TS_SOURCE, + line: TS_LINE, + } + ); + }); + + test("should stop on a breakpoint in source (outDir)", () => { + const PROGRAM = path.join( + DATA_ROOT, + "sourcemaps-inline/src/classes.ts" + ); + const OUT_DIR = path.join(DATA_ROOT, "sourcemaps-inline/dist"); + const BREAKPOINT_LINE = 17; + + return dc.hitBreakpoint( + { + program: PROGRAM, + sourceMaps: true, + outDir: OUT_DIR, + runtimeArgs: ["--nolazy"], + }, + { + path: PROGRAM, + line: BREAKPOINT_LINE, + } + ); + }); + + test("should stop on a breakpoint in source (outFiles)", () => { + const PROGRAM = path.join( + DATA_ROOT, + "sourcemaps-inline/src/classes.ts" + ); + const OUT_FILES = path.join( + DATA_ROOT, + "sourcemaps-inline/dist/**/*.js" + ); + const BREAKPOINT_LINE = 17; + + return dc.hitBreakpoint( + { + program: PROGRAM, + sourceMaps: true, + outFiles: [OUT_FILES], + runtimeArgs: ["--nolazy"], + verboseDiagnosticLogging: true, + }, + { + path: PROGRAM, + line: BREAKPOINT_LINE, + } + ); + }); + + test("should stop on a breakpoint in source with spaces in paths (outDir)", () => { + const PROGRAM = path.join( + DATA_ROOT, + "sourcemaps with spaces", + "the source/classes.ts" + ); + const OUT_DIR = path.join( + DATA_ROOT, + "sourcemaps with spaces/the distribution" + ); + const BREAKPOINT_LINE = 17; + + return dc.hitBreakpoint( + { + program: PROGRAM, + sourceMaps: true, + outDir: OUT_DIR, + runtimeArgs: ["--nolazy"], + verboseDiagnosticLogging: true, + }, + { + path: PROGRAM, + line: BREAKPOINT_LINE, + } + ); + }); + + test("should stop on a breakpoint in source with spaces in paths (outFiles)", () => { + const PROGRAM = path.join( + DATA_ROOT, + "sourcemaps with spaces", + "the source/classes.ts" + ); + const OUT_FILES = path.join( + DATA_ROOT, + "sourcemaps with spaces/the distribution/**/*.js" + ); + const BREAKPOINT_LINE = 17; + + return dc.hitBreakpoint( + { + program: PROGRAM, + sourceMaps: true, + outFiles: [OUT_FILES], + runtimeArgs: ["--nolazy"], + verboseDiagnosticLogging: true, + }, + { + path: PROGRAM, + line: BREAKPOINT_LINE, + } + ); + }); + + test("should stop on a breakpoint in source - Microsoft/vscode#2574", () => { + const PROGRAM = path.join( + DATA_ROOT, + "sourcemaps-2574/out/classes.js" + ); + const OUT_DIR = path.join(DATA_ROOT, "sourcemaps-2574/out"); + const TS_SOURCE = path.join( + DATA_ROOT, + "sourcemaps-2574/src/classes.ts" + ); + const TS_LINE = 17; + + return dc.hitBreakpoint( + { + program: PROGRAM, + sourceMaps: true, + outDir: OUT_DIR, + runtimeArgs: ["--nolazy"], + }, + { + path: TS_SOURCE, + line: TS_LINE, + } + ); + }); + + // Find map next to js + test.skip("should stop on a breakpoint in source (sourceMappingURL missing)", () => { + const PROGRAM = path.join( + DATA_ROOT, + "sourcemap-no-sourceMappingURL/out/classes.js" + ); + const OUT_DIR = path.join( + DATA_ROOT, + "sourcemap-no-sourceMappingURL/out" + ); + const TS_SOURCE = path.join( + DATA_ROOT, + "sourcemap-no-sourceMappingURL/src/classes.ts" + ); + const TS_LINE = 17; + + return dc.hitBreakpoint( + { + program: PROGRAM, + sourceMaps: true, + outDir: OUT_DIR, + runtimeArgs: ["--nolazy"], + }, + { + path: TS_SOURCE, + line: TS_LINE, + } + ); + }); + + test("should stop on a breakpoint in source even if breakpoint was set in JavaScript - Microsoft/vscode-node-debug#43", () => { + const PROGRAM = path.join( + DATA_ROOT, + "sourcemaps-2574/out/classes.js" + ); + const OUT_DIR = path.join(DATA_ROOT, "sourcemaps-2574/out"); + const JS_SOURCE = PROGRAM; + const JS_LINE = 21; + const TS_SOURCE = path.join( + DATA_ROOT, + "sourcemaps-2574/src/classes.ts" + ); + const TS_LINE = 17; + + return dc.hitBreakpoint( + { + program: PROGRAM, + sourceMaps: true, + outDir: OUT_DIR, + runtimeArgs: ["--nolazy"], + }, + { + path: JS_SOURCE, + line: JS_LINE, + }, + { + path: TS_SOURCE, + line: TS_LINE, + } + ); + }); + + test("should stop on a breakpoint when the sourcemap is loaded after the bp is set", () => { + const projectRoot = path.join(DATA_ROOT, "sourcemaps-setinterval"); + const BP_PROGRAM = path.join(projectRoot, "src/file2.ts"); + const LAUNCH_PROGRAM = path.join(projectRoot, "dist/program.js"); + const BP_LINE = 10; + const outFiles = [path.join(projectRoot, "dist/*.js")]; + + let bpChangedEventCount = 0; + return Promise.all([ + dc.waitForEvent("initialized").then((event) => { + return dc + .setBreakpointsRequest({ + source: { path: BP_PROGRAM }, + breakpoints: [{ line: BP_LINE }], + }) + .then((response) => { + assert.equal(response.body.breakpoints.length, 1); + assert( + !response.body.breakpoints[0].verified, + "Expected bp to not be verified yet" + ); + + dc.on("breakpoint", (e) => { + bpChangedEventCount++; + }); + + return dc.configurationDoneRequest(); + }); + }), + dc.launch({ program: LAUNCH_PROGRAM, outFiles }), + dc + .waitForEvent("breakpoint") + .then((event: DebugProtocol.BreakpointEvent) => { + assert(event.body.breakpoint.verified); + return null; + }), + + dc + .assertStoppedLocation("breakpoint", { + path: BP_PROGRAM, + line: BP_LINE, + }) + .then(() => { + if (bpChangedEventCount > 1) { + // Test that we didn't unnecessarily reset the BP when the script loaded + throw new Error("Too many BP changed events"); + } + }), + ]); + }); + + // Microsoft/vscode-chrome-debug-core#38 + test("should stop on a breakpoint in source even if program's entry point is in JavaScript", () => { + const PROGRAM = path.join( + DATA_ROOT, + "sourcemaps-js-entrypoint/out/entry.js" + ); + const OUT_DIR = path.join( + DATA_ROOT, + "sourcemaps-js-entrypoint/out" + ); + const TS_SOURCE = path.join( + DATA_ROOT, + "sourcemaps-js-entrypoint/src/classes.ts" + ); + const TS_LINE = 17; + + return dc.hitBreakpointUnverified( + { + program: PROGRAM, + sourceMaps: true, + outDir: OUT_DIR, + runtimeArgs: ["--nolazy"], + }, + { path: TS_SOURCE, line: TS_LINE } + ); + }); + + test("can set a breakpoint in inlined sources", async () => { + const TEST_ROOT = path.join(DATA_ROOT, "sourcemaps-inline-sources"); + const outFiles = [path.join(TEST_ROOT, "**/*.js")]; + const LAUNCH_PROGRAM = path.join(TEST_ROOT, "program.js"); + const PROGRAM = path.join(TEST_ROOT, "program.ts"); + const DEBUGGER_LINE = 5; + const BP_LINE = 4; + + let inlinedSource: DebugProtocol.Source; + await Promise.all([ + dc.configurationSequence(), + dc.launch({ program: LAUNCH_PROGRAM, outFiles }), + dc + .assertStoppedLocation("debugger_statement", { + path: PROGRAM, + line: DEBUGGER_LINE, + }) + .then((stackTrace) => { + inlinedSource = stackTrace.body.stackFrames[0].source; + }), + ]); + + const bpRequest = await dc.setBreakpointsRequest({ + breakpoints: [{ line: BP_LINE }], + source: inlinedSource, + }); + assert( + bpRequest.body.breakpoints[0] && + bpRequest.body.breakpoints[0].verified + ); + + await dc.continueTo("breakpoint", { line: BP_LINE, path: PROGRAM }); + }); + + const execP = (command, options) => { + return new Promise((resolve, reject) => { + child_process.exec(command, options, (err, stdout) => { + if (err) { + return reject(err); + } + + resolve(stdout); + }); + }); + }; + + test("still resolves sourcemap paths when they are absolute local paths", async () => { + const TEST_ROOT = path.join(DATA_ROOT, "sourcemaps-local-paths"); + + await execP("npm install", { cwd: TEST_ROOT }); + await execP("npm run postinstall", { cwd: TEST_ROOT }); // This doesn't run automatically on Linux for some reason. + const PROGRAM = path.join( + DATA_ROOT, + "sourcemaps-local-paths/out/classes.js" + ); + const TS_SOURCE = path.join( + DATA_ROOT, + "sourcemaps-local-paths/src/classes.ts" + ); + const TS_LINE = 17; + + return dc.hitBreakpointUnverified( + { + program: PROGRAM, + outFiles: [ + path.join(DATA_ROOT, "sourcemaps-local-paths/out/*.js"), + ], + runtimeArgs: ["--nolazy"], + }, + { path: TS_SOURCE, line: TS_LINE } + ); + }); + }); + + suite("setExceptionBreakpoints", () => { + const PROGRAM = path.join(DATA_ROOT, "programWithException.js"); + + test("should not stop on an exception", () => { + if (utils.compareSemver(process.version, "v8.0.0") < 0) { + // Terminating at program end only works after Node 8 + return Promise.resolve(); + } + + return Promise.all([ + dc + .waitForEvent("initialized") + .then((event) => { + return dc.setExceptionBreakpointsRequest({ + filters: [], + }); + }) + .then((response) => { + return dc.configurationDoneRequest(); + }), + + dc.launch({ program: PROGRAM }), + + dc.waitForEvent("terminated"), + ]); + }); + + test("should stop on a caught exception", () => { + const EXCEPTION_LINE = 6; + + return Promise.all([ + dc + .waitForEvent("initialized") + .then((event) => { + return dc.setExceptionBreakpointsRequest({ + filters: ["all"], + }); + }) + .then((response) => { + return dc.configurationDoneRequest(); + }), + + dc.launch({ program: PROGRAM }), + + dc.assertStoppedLocation("exception", { + path: PROGRAM, + line: EXCEPTION_LINE, + }), + ]); + }); + + test("should stop on uncaught exception", () => { + const UNCAUGHT_EXCEPTION_LINE = 12; + + return Promise.all([ + dc + .waitForEvent("initialized") + .then((event) => { + return dc.setExceptionBreakpointsRequest({ + filters: ["uncaught"], + }); + }) + .then((response) => { + return dc.configurationDoneRequest(); + }), + + dc.launch({ program: PROGRAM }), + + dc.assertStoppedLocation("exception", { + path: PROGRAM, + line: UNCAUGHT_EXCEPTION_LINE, + }), + ]); + }); + + test("should not stop on exception in when skipFiles is used", async () => { + const program = path.join( + DATA_ROOT, + "nodeInternalsCaughtException.js" + ); + + return Promise.all([ + dc + .waitForEvent("initialized") + .then((event) => { + return dc.setExceptionBreakpointsRequest({ + filters: ["all"], + }); + }) + .then((response) => { + return dc.setBreakpointsRequest({ + source: { path: program }, + breakpoints: [{ line: 7 }], + }); + }) + .then(() => { + return dc.configurationDoneRequest(); + }), + + dc.launch({ program, skipFiles: ["/**"] }), + + // assert that we did not stop on the exception, but stopped on the breakpoint + dc.assertStoppedLocation("breakpoint", { + path: program, + line: 7, + }), + ]); + }); + + test("should still stop on exception in user code when skipFiles is used with ", async () => { + const program = path.join(DATA_ROOT, "programWithException.js"); + + return Promise.all([ + dc + .waitForEvent("initialized") + .then((event) => { + return dc.setExceptionBreakpointsRequest({ + filters: ["all"], + }); + }) + .then((response) => { + return dc.setBreakpointsRequest({ + source: { path: program }, + breakpoints: [{ line: 11 }], + }); + }) + .then(() => { + return dc.configurationDoneRequest(); + }), + + dc.launch({ program, skipFiles: ["/**"] }), + + // assert that we did not stop on the exception, but stopped on the breakpoint + dc.assertStoppedLocation("exception", { + path: program, + line: 6, + }), + ]); + }); + }); + + suite("exception scope", () => { + const PROGRAM = path.join(DATA_ROOT, "programWithException.js"); + + test("should only show exception scope in the first frame", () => { + const EXCEPTION_LINE = 6; + + return Promise.all([ + dc + .waitForEvent("initialized") + .then((event) => + dc.setExceptionBreakpointsRequest({ filters: ["all"] }) + ) + .then((response) => dc.configurationDoneRequest()), + + dc.launch({ program: PROGRAM }), + + dc + .assertStoppedLocation("exception", { + path: PROGRAM, + line: EXCEPTION_LINE, + }) + .then(async (response) => { + const frame0Id = response.body.stackFrames[0].id; + const frame0Scopes = await dc.scopesRequest({ + frameId: frame0Id, + }); + assert.equal( + frame0Scopes.body.scopes[0].name, + "Exception", + "First frame should be named Exception" + ); + + const frame1Id = response.body.stackFrames[1].id; + const frame1Scopes = await dc.scopesRequest({ + frameId: frame1Id, + }); + assert.notEqual( + frame1Scopes.body.scopes[0].name, + "Exception", + "First frame should not be named Exception" + ); + }), + ]); + }); + }); + + suite("setBreakpoints using Webpack", () => { + test("webpack", () => { + const TS_SOURCE = path.join(DATA_ROOT, "webpack/app.ts"); + const TS_LINE = 1; + + return dc.hitBreakpoint( + { + program: TS_SOURCE, + sourceMaps: true, + outFiles: [path.join(DATA_ROOT, "webpack/**/*.js")], + cwd: path.join(DATA_ROOT, "webpack"), + runtimeArgs: ["--nolazy"], + }, + { + path: TS_SOURCE, + line: TS_LINE, + } + ); + }); + }); + + suite("es modules", () => { + test("breakpoint in es module", () => { + const file2 = path.join(DATA_ROOT, "es-modules/file2.mjs"); + const line = 1; + + return dc.hitBreakpoint( + { + program: file2, + cwd: path.join(DATA_ROOT, "es-modules"), + runtimeArgs: ["--nolazy"], + }, + { + path: file2, + line: line, + } + ); + }); + }); + + suite("symlinks", () => { + test("breakpoint in symlinked library module", () => { + if (process.platform === "win32") { + return Promise.resolve(); + } + + const main = path.join(DATA_ROOT, "symlinked-file/main.js"); + const file2 = path.join( + DATA_ROOT, + "symlinked-file/symlinkToSrc/file.js" + ); + const line = 1; + + return dc.hitBreakpointUnverified( + { + program: main, + cwd: path.join(DATA_ROOT, "symlinked-file"), + runtimeArgs: ["--nolazy", "--preserve-symlinks"], + }, + { + path: file2, + line: line, + } + ); + }); + + test("breakpoint in symlinked main module", () => { + if ( + utils.compareSemver(process.version, "v10.0.0") < 0 || + process.platform === "win32" + ) { + // --preserve-symlinks-main only supported after Node 10 + return Promise.resolve(); + } + + const main = path.join( + DATA_ROOT, + "symlinked-file/symlinkToSrc/file.js" + ); + const line = 1; + + return dc.hitBreakpointUnverified( + { + program: main, + cwd: path.join(DATA_ROOT, "symlinked-file"), + runtimeArgs: [ + "--nolazy", + "--preserve-symlinks", + "--preserve-symlinks-main", + ], + }, + { + path: main, + line: line, + } + ); + }); + + test("breakpoint in symlinked cwd", () => { + if ( + utils.compareSemver(process.version, "v10.0.0") < 0 || + process.platform === "win32" + ) { + // --preserve-symlinks-main only supported after Node 10 + return Promise.resolve(); + } + + const main = path.join( + DATA_ROOT, + "symlinked-file/symlinkToSrc/file.js" + ); + const line = 1; + + return dc.hitBreakpointUnverified( + { + program: main, + cwd: path.join(DATA_ROOT, "symlinked-file/symlinkToSrc"), + runtimeArgs: [ + "--nolazy", + "--preserve-symlinks", + "--preserve-symlinks-main", + ], + }, + { + path: main, + line: line, + } + ); + }); + }); +}); diff --git a/test/stepping.test.ts b/test/stepping.test.ts index 3a72e983..aa1a2b73 100644 --- a/test/stepping.test.ts +++ b/test/stepping.test.ts @@ -3,265 +3,422 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as assert from 'assert'; -import * as path from 'path'; - -import * as ts from 'vscode-chrome-debug-core-testsupport'; -import * as testSetup from './testSetup'; - -suite('Stepping', () => { - const DATA_ROOT = testSetup.DATA_ROOT; - - let dc: ts.debugClient.ExtendedDebugClient; - setup(async () => { - dc = await testSetup.setup(); - }); - - teardown(() => { - return testSetup.teardown(); - }); - - suite('basic', () => { - const PROGRAM = path.join(DATA_ROOT, 'program.js'); - - function start(): Promise { - return dc.hitBreakpoint({ program: PROGRAM }, { path: PROGRAM, line: 1 }); - } - - test('returns the same frameIDs between steps', async () => { - let firstFrameIDs: number[]; - await start(); - await dc.nextAndStop(); - const stackTraceResponse = await dc.stackTraceRequest(); - firstFrameIDs = stackTraceResponse.body.stackFrames.map(frame => frame.id); - await dc.nextAndStop(); - const stackTraceResponse2 = await dc.stackTraceRequest(); - const secondFrameIDs = stackTraceResponse2.body.stackFrames.map(frame => frame.id); - assert.deepEqual(firstFrameIDs, secondFrameIDs); - }); - - test('smart stepping stops on exceptions in unmapped files', () => { - const PROGRAM = path.join(DATA_ROOT, 'programWithException.js'); - const EXCEPTION_LINE = 6; - - return Promise.all([ - dc.waitForEvent('initialized').then(event => { - return dc.setExceptionBreakpointsRequest({ - filters: [ 'all' ] - }); - }).then(response => { - return dc.configurationDoneRequest(); - }), - - dc.launch({ program: PROGRAM, sourceMaps: true, smartStep: true }), - - dc.assertStoppedLocation('exception', { path: PROGRAM, line: EXCEPTION_LINE } ) - ]); - }); - }); - - suite('skipFiles', () => { - test('steps through un-sourcemapped file', async () => { - const program = path.join(DATA_ROOT, 'sourcemaps-with-and-without/out/mapped.js'); - const programSource = path.join(DATA_ROOT, 'sourcemaps-with-and-without/src/mapped.ts'); - - const skipFiles = ['unmapped']; - - await dc.hitBreakpoint({ program, sourceMaps: true, skipFiles }, { path: programSource, line: 7 }); - await dc.stepInAndStop(); - const stackTraceResponse = await dc.stackTraceRequest(); - const firstFrame = stackTraceResponse.body.stackFrames[0]; - assert.equal(firstFrame.source.path, programSource); - assert.equal(firstFrame.line, 4); - }); - - test('steps through sourcemapped file', async () => { - const program = path.join(DATA_ROOT, 'calls-between-sourcemapped-files/out/sourceA.js'); - const programSource = path.join(DATA_ROOT, 'calls-between-sourcemapped-files/src/sourceA.ts'); - - const skipFiles = ['calls-between-sourcemapped-*/*B']; - - await dc.hitBreakpoint({ program, sourceMaps: true, skipFiles }, { path: programSource, line: 8 }); - await dc.stepInAndStop(); - const stackTraceResponse = await dc.stackTraceRequest(); - const firstFrame = stackTraceResponse.body.stackFrames[0]; - assert.equal(firstFrame.source.path, programSource); - assert.equal(firstFrame.line, 4); - }); - - test('steps over exception in skipped file', () => { - const program = path.join(DATA_ROOT, 'calls-between-files-with-exception/out/sourceA.js'); - const programSource = path.join(DATA_ROOT, 'calls-between-files-with-exception/src/sourceA.ts'); - - const skipFiles = ['calls-between-files-*/*B']; - - return Promise.all([ - dc.waitForEvent('initialized').then(event => { - return dc.setExceptionBreakpointsRequest({ - filters: ['all'] - }); - }) - .then(() => dc.setBreakpointsRequest({ source: { path: programSource }, breakpoints: [{ line: 7 }]})) - .then(() => dc.configurationDoneRequest()), - - dc.launch({ program, sourceMaps: true, skipFiles }), - dc.assertStoppedLocation('breakpoint', { path: programSource, line: 7 }) - ]).then(() => dc.nextTo('step', { path: programSource, line: 8 })); - }); - - test('still stops at breakpoint in skipped file', async () => { - const program = path.join(DATA_ROOT, 'calls-between-sourcemapped-files/out/sourceA.js'); - const programASource = path.join(DATA_ROOT, 'calls-between-sourcemapped-files/src/sourceA.ts'); - const programBSource = path.join(DATA_ROOT, 'calls-between-sourcemapped-files/src/sourceB.ts'); - - const skipFiles = ['calls-between-sourcemapped-*/*B']; - - const bpLineB = 2; - await dc.hitBreakpoint({ program, sourceMaps: true, skipFiles }, { path: programASource, line: 8 }); - await dc.setBreakpointsRequest({ source: { path: programBSource }, breakpoints: [{ line: bpLineB }]}); - await dc.stepInTo('breakpoint', { path: programBSource, line: bpLineB }); - }); - - test('can toggle skipping on and off', async () => { - const program = path.join(DATA_ROOT, 'calls-between-sourcemapped-files/out/sourceA.js'); - const programASource = path.join(DATA_ROOT, 'calls-between-sourcemapped-files/src/sourceA.ts'); - const programBSource = path.join(DATA_ROOT, 'calls-between-sourcemapped-files/src/sourceB.ts'); - - const bpLineA = 8; - await Promise.all([ - dc.waitForEvent('initialized').then(event => { - return dc.setExceptionBreakpointsRequest({ - filters: ['all'] - }); - }) - .then(() => dc.setBreakpointsRequest({ source: { path: programASource }, breakpoints: [{ line: bpLineA }]})) - .then(() => dc.configurationDoneRequest()), - - dc.launch({ program, sourceMaps: true }), - dc.assertStoppedLocation('breakpoint', { path: programASource, line: bpLineA }) - ]); - - // Step into sourceB, set it to be skipped - await dc.stepInTo('step', { path: programBSource, line: 2 }); - await dc.toggleSkipFileStatus(programBSource); - - // Continue back to sourceA, step through B, back to A - await dc.continueTo('breakpoint', { path: programASource, line: bpLineA }); - await dc.stepInTo('step', { path: programASource, line: 4 }); - - // Toggle B back to not being skipped, continue to A, step in to B - await dc.toggleSkipFileStatus(programBSource); - await dc.continueTo('breakpoint', { path: programASource, line: bpLineA }); - await dc.stepInTo('step', { path: programBSource, line: 2 }); - }); - - test('when generated script is skipped via regex, the source can be un-skipped', async () => { - const program = path.join(DATA_ROOT, 'calls-between-merged-files/out/sourceA.js'); - const sourceA = path.join(DATA_ROOT, 'calls-between-merged-files/sourceA.ts'); - const sourceB2 = path.join(DATA_ROOT, 'calls-between-merged-files/sourceB2.ts'); - - // Skip the full B generated script via launch config - const skipFiles = ['**/out/sourceB1.js']; - const bpLineA = 8; - await dc.hitBreakpoint({ program, sourceMaps: true, skipFiles }, { path: sourceA, line: bpLineA }); - - // Step in, verify B sources are skipped - await dc.stepInTo('step', { path: sourceA, line: 4 }); - await dc.toggleSkipFileStatus(sourceB2); - - // Continue back to sourceA, step in, should skip B1 and land on B2 - await dc.continueTo('breakpoint', { path: sourceA, line: bpLineA }); - await dc.stepInTo('step', { path: sourceB2, line: 2 }); - }); - - test('when a non-sourcemapped script is skipped via regex, it can be unskipped', async () => { - // Using this program, but run with sourcemaps disabled - const program = path.join(DATA_ROOT, 'calls-between-sourcemapped-files/out/sourceA.js'); - const sourceB = path.join(DATA_ROOT, 'calls-between-sourcemapped-files/out/sourceB.js'); - - // Skip the full B generated script via launch config - const skipFiles = ['sourceB.js']; - const bpLineA = 7; - await dc.hitBreakpoint({ program, sourceMaps: false, skipFiles }, { path: program, line: bpLineA }); - - // Step in, verify B sources are skipped - await dc.stepInTo('step', { path: program, line: 4 }); - await dc.toggleSkipFileStatus(sourceB); - - // Continue back to A, step in, should land in B - await dc.continueTo('breakpoint', { path: program, line: bpLineA }); - await dc.stepInTo('step', { path: sourceB, line: 3 }); - }); - - test.skip('can toggle skipping a non-sourcemapped file', async () => { - // Using this program, but run with sourcemaps disabled - const program = path.join(DATA_ROOT, 'calls-between-sourcemapped-files/out/sourceA.js'); - const sourceB = path.join(DATA_ROOT, 'calls-between-sourcemapped-files/out/sourceB.js'); - - // Skip the full B generated script via launch config - const bpLineA = 7; - const stepLineB = 3; - await dc.hitBreakpoint({ program, sourceMaps: false }, { path: program, line: bpLineA }); - - // Step in, verify B sources are not skipped - await dc.stepInTo('step', { path: sourceB, line: stepLineB }); - await dc.toggleSkipFileStatus(sourceB); - - // Continue back to sourceA, step in, should skip B - await dc.continueTo('breakpoint', { path: program, line: bpLineA }); - await dc.stepInTo('step', { path: program, line: 4 }); - await dc.toggleSkipFileStatus(sourceB); - - // Continue back to A, step in, should not skip B - await dc.continueTo('breakpoint', { path: program, line: bpLineA }); - await dc.stepInTo('step', { path: sourceB, line: stepLineB }); - }); - - test('when multiple generated scripts are skipped via one regex, one source can be un-skipped and re-skipped', async () => { - const program = path.join(DATA_ROOT, 'calls-between-multiple-files/sourceA.ts'); - const sourceB2 = path.join(DATA_ROOT, 'calls-between-multiple-files/sourceB2.ts'); - - // Skip both B scripts - const bpLineA = 8; - const skipFiles = ['sourceB*.js']; - const outFiles = [path.join(DATA_ROOT, 'calls-between-multiple-files/out/**/*.js')]; - await dc.hitBreakpoint({ program, skipFiles, outFiles }, { path: program, line: bpLineA }); - - // Step in, verify B sources are skipped - await dc.stepInTo('step', { path: program, line: 4 }); - await dc.toggleSkipFileStatus(sourceB2); - - // Continue back to A, step in, should land in B2, B1 still is skipped - await dc.continueTo('breakpoint', { path: program, line: bpLineA }); - await dc.stepInTo('step', { path: sourceB2, line: 2 }); - - // Re-skip B2 - await dc.toggleSkipFileStatus(sourceB2); - await dc.continueTo('breakpoint', { path: program, line: bpLineA }); - await dc.stepInTo('step', { path: program, line: 4 }); - }); - - test('can skip node internal files using ', async () => { - const program = path.join(DATA_ROOT, 'calls-between-sourcemapped-files/out/sourceA.js'); - const programSource = path.join(DATA_ROOT, 'calls-between-sourcemapped-files/src/sourceA.ts'); - const timersSource = '/timers.js'; - - const skipFiles = ['/**']; - await dc.hitBreakpoint({ program, skipFiles }, { path: programSource, line: 8 }); - const stackTraceResponse = await dc.stackTraceRequest(); - - // Assert that there are at least a few frames with paths marked with , and they are deemphasized - const internalsFrames = stackTraceResponse.body.stackFrames.filter(frame => frame.source && frame.source.path && frame.source.path.startsWith('/')); - assert(internalsFrames.length > 1); - internalsFrames.forEach(frame => assert.equal((frame.source).presentationHint, 'deemphasize')); - - await dc.nextTo('step', { path: programSource, line: 9 }); - await dc.stepOutTo('breakpoint', { path: programSource, line: 8 }); - - // Unskip a node_internals file - await dc.toggleSkipFileStatus(timersSource); - - await dc.stepOutTo('step', { path: timersSource }); - }); - }); +import * as assert from "assert"; +import * as path from "path"; + +import * as ts from "vscode-chrome-debug-core-testsupport"; +import * as testSetup from "./testSetup"; + +suite("Stepping", () => { + const DATA_ROOT = testSetup.DATA_ROOT; + + let dc: ts.debugClient.ExtendedDebugClient; + setup(async () => { + dc = await testSetup.setup(); + }); + + teardown(() => { + return testSetup.teardown(); + }); + + suite("basic", () => { + const PROGRAM = path.join(DATA_ROOT, "program.js"); + + function start(): Promise { + return dc.hitBreakpoint( + { program: PROGRAM }, + { path: PROGRAM, line: 1 } + ); + } + + test("returns the same frameIDs between steps", async () => { + let firstFrameIDs: number[]; + await start(); + await dc.nextAndStop(); + const stackTraceResponse = await dc.stackTraceRequest(); + firstFrameIDs = stackTraceResponse.body.stackFrames.map( + (frame) => frame.id + ); + await dc.nextAndStop(); + const stackTraceResponse2 = await dc.stackTraceRequest(); + const secondFrameIDs = stackTraceResponse2.body.stackFrames.map( + (frame) => frame.id + ); + assert.deepEqual(firstFrameIDs, secondFrameIDs); + }); + + test("smart stepping stops on exceptions in unmapped files", () => { + const PROGRAM = path.join(DATA_ROOT, "programWithException.js"); + const EXCEPTION_LINE = 6; + + return Promise.all([ + dc + .waitForEvent("initialized") + .then((event) => { + return dc.setExceptionBreakpointsRequest({ + filters: ["all"], + }); + }) + .then((response) => { + return dc.configurationDoneRequest(); + }), + + dc.launch({ + program: PROGRAM, + sourceMaps: true, + smartStep: true, + }), + + dc.assertStoppedLocation("exception", { + path: PROGRAM, + line: EXCEPTION_LINE, + }), + ]); + }); + }); + + suite("skipFiles", () => { + test("steps through un-sourcemapped file", async () => { + const program = path.join( + DATA_ROOT, + "sourcemaps-with-and-without/out/mapped.js" + ); + const programSource = path.join( + DATA_ROOT, + "sourcemaps-with-and-without/src/mapped.ts" + ); + + const skipFiles = ["unmapped"]; + + await dc.hitBreakpoint( + { program, sourceMaps: true, skipFiles }, + { path: programSource, line: 7 } + ); + await dc.stepInAndStop(); + const stackTraceResponse = await dc.stackTraceRequest(); + const firstFrame = stackTraceResponse.body.stackFrames[0]; + assert.equal(firstFrame.source.path, programSource); + assert.equal(firstFrame.line, 4); + }); + + test("steps through sourcemapped file", async () => { + const program = path.join( + DATA_ROOT, + "calls-between-sourcemapped-files/out/sourceA.js" + ); + const programSource = path.join( + DATA_ROOT, + "calls-between-sourcemapped-files/src/sourceA.ts" + ); + + const skipFiles = ["calls-between-sourcemapped-*/*B"]; + + await dc.hitBreakpoint( + { program, sourceMaps: true, skipFiles }, + { path: programSource, line: 8 } + ); + await dc.stepInAndStop(); + const stackTraceResponse = await dc.stackTraceRequest(); + const firstFrame = stackTraceResponse.body.stackFrames[0]; + assert.equal(firstFrame.source.path, programSource); + assert.equal(firstFrame.line, 4); + }); + + test("steps over exception in skipped file", () => { + const program = path.join( + DATA_ROOT, + "calls-between-files-with-exception/out/sourceA.js" + ); + const programSource = path.join( + DATA_ROOT, + "calls-between-files-with-exception/src/sourceA.ts" + ); + + const skipFiles = ["calls-between-files-*/*B"]; + + return Promise.all([ + dc + .waitForEvent("initialized") + .then((event) => { + return dc.setExceptionBreakpointsRequest({ + filters: ["all"], + }); + }) + .then(() => + dc.setBreakpointsRequest({ + source: { path: programSource }, + breakpoints: [{ line: 7 }], + }) + ) + .then(() => dc.configurationDoneRequest()), + + dc.launch({ program, sourceMaps: true, skipFiles }), + dc.assertStoppedLocation("breakpoint", { + path: programSource, + line: 7, + }), + ]).then(() => dc.nextTo("step", { path: programSource, line: 8 })); + }); + + test("still stops at breakpoint in skipped file", async () => { + const program = path.join( + DATA_ROOT, + "calls-between-sourcemapped-files/out/sourceA.js" + ); + const programASource = path.join( + DATA_ROOT, + "calls-between-sourcemapped-files/src/sourceA.ts" + ); + const programBSource = path.join( + DATA_ROOT, + "calls-between-sourcemapped-files/src/sourceB.ts" + ); + + const skipFiles = ["calls-between-sourcemapped-*/*B"]; + + const bpLineB = 2; + await dc.hitBreakpoint( + { program, sourceMaps: true, skipFiles }, + { path: programASource, line: 8 } + ); + await dc.setBreakpointsRequest({ + source: { path: programBSource }, + breakpoints: [{ line: bpLineB }], + }); + await dc.stepInTo("breakpoint", { + path: programBSource, + line: bpLineB, + }); + }); + + test("can toggle skipping on and off", async () => { + const program = path.join( + DATA_ROOT, + "calls-between-sourcemapped-files/out/sourceA.js" + ); + const programASource = path.join( + DATA_ROOT, + "calls-between-sourcemapped-files/src/sourceA.ts" + ); + const programBSource = path.join( + DATA_ROOT, + "calls-between-sourcemapped-files/src/sourceB.ts" + ); + + const bpLineA = 8; + await Promise.all([ + dc + .waitForEvent("initialized") + .then((event) => { + return dc.setExceptionBreakpointsRequest({ + filters: ["all"], + }); + }) + .then(() => + dc.setBreakpointsRequest({ + source: { path: programASource }, + breakpoints: [{ line: bpLineA }], + }) + ) + .then(() => dc.configurationDoneRequest()), + + dc.launch({ program, sourceMaps: true }), + dc.assertStoppedLocation("breakpoint", { + path: programASource, + line: bpLineA, + }), + ]); + + // Step into sourceB, set it to be skipped + await dc.stepInTo("step", { path: programBSource, line: 2 }); + await dc.toggleSkipFileStatus(programBSource); + + // Continue back to sourceA, step through B, back to A + await dc.continueTo("breakpoint", { + path: programASource, + line: bpLineA, + }); + await dc.stepInTo("step", { path: programASource, line: 4 }); + + // Toggle B back to not being skipped, continue to A, step in to B + await dc.toggleSkipFileStatus(programBSource); + await dc.continueTo("breakpoint", { + path: programASource, + line: bpLineA, + }); + await dc.stepInTo("step", { path: programBSource, line: 2 }); + }); + + test("when generated script is skipped via regex, the source can be un-skipped", async () => { + const program = path.join( + DATA_ROOT, + "calls-between-merged-files/out/sourceA.js" + ); + const sourceA = path.join( + DATA_ROOT, + "calls-between-merged-files/sourceA.ts" + ); + const sourceB2 = path.join( + DATA_ROOT, + "calls-between-merged-files/sourceB2.ts" + ); + + // Skip the full B generated script via launch config + const skipFiles = ["**/out/sourceB1.js"]; + const bpLineA = 8; + await dc.hitBreakpoint( + { program, sourceMaps: true, skipFiles }, + { path: sourceA, line: bpLineA } + ); + + // Step in, verify B sources are skipped + await dc.stepInTo("step", { path: sourceA, line: 4 }); + await dc.toggleSkipFileStatus(sourceB2); + + // Continue back to sourceA, step in, should skip B1 and land on B2 + await dc.continueTo("breakpoint", { path: sourceA, line: bpLineA }); + await dc.stepInTo("step", { path: sourceB2, line: 2 }); + }); + + test("when a non-sourcemapped script is skipped via regex, it can be unskipped", async () => { + // Using this program, but run with sourcemaps disabled + const program = path.join( + DATA_ROOT, + "calls-between-sourcemapped-files/out/sourceA.js" + ); + const sourceB = path.join( + DATA_ROOT, + "calls-between-sourcemapped-files/out/sourceB.js" + ); + + // Skip the full B generated script via launch config + const skipFiles = ["sourceB.js"]; + const bpLineA = 7; + await dc.hitBreakpoint( + { program, sourceMaps: false, skipFiles }, + { path: program, line: bpLineA } + ); + + // Step in, verify B sources are skipped + await dc.stepInTo("step", { path: program, line: 4 }); + await dc.toggleSkipFileStatus(sourceB); + + // Continue back to A, step in, should land in B + await dc.continueTo("breakpoint", { path: program, line: bpLineA }); + await dc.stepInTo("step", { path: sourceB, line: 3 }); + }); + + test.skip("can toggle skipping a non-sourcemapped file", async () => { + // Using this program, but run with sourcemaps disabled + const program = path.join( + DATA_ROOT, + "calls-between-sourcemapped-files/out/sourceA.js" + ); + const sourceB = path.join( + DATA_ROOT, + "calls-between-sourcemapped-files/out/sourceB.js" + ); + + // Skip the full B generated script via launch config + const bpLineA = 7; + const stepLineB = 3; + await dc.hitBreakpoint( + { program, sourceMaps: false }, + { path: program, line: bpLineA } + ); + + // Step in, verify B sources are not skipped + await dc.stepInTo("step", { path: sourceB, line: stepLineB }); + await dc.toggleSkipFileStatus(sourceB); + + // Continue back to sourceA, step in, should skip B + await dc.continueTo("breakpoint", { path: program, line: bpLineA }); + await dc.stepInTo("step", { path: program, line: 4 }); + await dc.toggleSkipFileStatus(sourceB); + + // Continue back to A, step in, should not skip B + await dc.continueTo("breakpoint", { path: program, line: bpLineA }); + await dc.stepInTo("step", { path: sourceB, line: stepLineB }); + }); + + test("when multiple generated scripts are skipped via one regex, one source can be un-skipped and re-skipped", async () => { + const program = path.join( + DATA_ROOT, + "calls-between-multiple-files/sourceA.ts" + ); + const sourceB2 = path.join( + DATA_ROOT, + "calls-between-multiple-files/sourceB2.ts" + ); + + // Skip both B scripts + const bpLineA = 8; + const skipFiles = ["sourceB*.js"]; + const outFiles = [ + path.join( + DATA_ROOT, + "calls-between-multiple-files/out/**/*.js" + ), + ]; + await dc.hitBreakpoint( + { program, skipFiles, outFiles }, + { path: program, line: bpLineA } + ); + + // Step in, verify B sources are skipped + await dc.stepInTo("step", { path: program, line: 4 }); + await dc.toggleSkipFileStatus(sourceB2); + + // Continue back to A, step in, should land in B2, B1 still is skipped + await dc.continueTo("breakpoint", { path: program, line: bpLineA }); + await dc.stepInTo("step", { path: sourceB2, line: 2 }); + + // Re-skip B2 + await dc.toggleSkipFileStatus(sourceB2); + await dc.continueTo("breakpoint", { path: program, line: bpLineA }); + await dc.stepInTo("step", { path: program, line: 4 }); + }); + + test("can skip node internal files using ", async () => { + const program = path.join( + DATA_ROOT, + "calls-between-sourcemapped-files/out/sourceA.js" + ); + const programSource = path.join( + DATA_ROOT, + "calls-between-sourcemapped-files/src/sourceA.ts" + ); + const timersSource = "/timers.js"; + + const skipFiles = ["/**"]; + await dc.hitBreakpoint( + { program, skipFiles }, + { path: programSource, line: 8 } + ); + const stackTraceResponse = await dc.stackTraceRequest(); + + // Assert that there are at least a few frames with paths marked with , and they are deemphasized + const internalsFrames = stackTraceResponse.body.stackFrames.filter( + (frame) => + frame.source && + frame.source.path && + frame.source.path.startsWith("/") + ); + assert(internalsFrames.length > 1); + internalsFrames.forEach((frame) => + assert.equal( + (frame.source).presentationHint, + "deemphasize" + ) + ); + + await dc.nextTo("step", { path: programSource, line: 9 }); + await dc.stepOutTo("breakpoint", { path: programSource, line: 8 }); + + // Unskip a node_internals file + await dc.toggleSkipFileStatus(timersSource); + + await dc.stepOutTo("step", { path: timersSource }); + }); + }); }); diff --git a/test/testSetup.ts b/test/testSetup.ts index 983445a0..b9007b7a 100644 --- a/test/testSetup.ts +++ b/test/testSetup.ts @@ -3,50 +3,55 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as os from 'os'; -import * as path from 'path'; -import * as ts from 'vscode-chrome-debug-core-testsupport'; -import * as findFreePort from 'find-free-port'; +import * as os from "os"; +import * as path from "path"; +import * as ts from "vscode-chrome-debug-core-testsupport"; +import * as findFreePort from "find-free-port"; -const NIGHTLY_NAME = os.platform() === 'win32' ? 'node-nightly.cmd' : 'node-nightly'; +const NIGHTLY_NAME = + os.platform() === "win32" ? "node-nightly.cmd" : "node-nightly"; function findPort(): Promise { - return new Promise(resolve => { - findFreePort(9000, (err, port) => { - if (err) return resolve(9229); + return new Promise((resolve) => { + findFreePort(9000, (err, port) => { + if (err) return resolve(9229); - resolve(port); - }); - }); + resolve(port); + }); + }); } async function patchLaunchArgs(launchArgs: any): Promise { - launchArgs.trace = 'verbose'; - if (process.version.startsWith('v6.2')) { - launchArgs.runtimeExecutable = NIGHTLY_NAME; - } - - if (!launchArgs.port) { - launchArgs.port = await findPort(); - launchArgs.runtimeArgs = launchArgs.runtimeArgs || []; - launchArgs.runtimeArgs.push(`--inspect-brk=${launchArgs.port}`); - } + launchArgs.trace = "verbose"; + if (process.version.startsWith("v6.2")) { + launchArgs.runtimeExecutable = NIGHTLY_NAME; + } + + if (!launchArgs.port) { + launchArgs.port = await findPort(); + launchArgs.runtimeArgs = launchArgs.runtimeArgs || []; + launchArgs.runtimeArgs.push(`--inspect-brk=${launchArgs.port}`); + } } -export function setup(_opts?: { port?: number, alwaysDumpLogs?: boolean }) { - const opts = Object.assign({ - entryPoint: './out/src/nodeDebug.js', - type: 'legacy-node2', - patchLaunchArgs - }, _opts); - - return ts.setup(opts); +export function setup(_opts?: { port?: number; alwaysDumpLogs?: boolean }) { + const opts = Object.assign( + { + entryPoint: "./out/src/nodeDebug.js", + type: "legacy-node2", + patchLaunchArgs, + }, + _opts + ); + + return ts.setup(opts); } export function teardown() { - ts.teardown(); + ts.teardown(); } -export const lowercaseDriveLetterDirname = __dirname.charAt(0).toLowerCase() + __dirname.substr(1); -export const PROJECT_ROOT = path.join(lowercaseDriveLetterDirname, '../../'); -export const DATA_ROOT = path.join(PROJECT_ROOT, 'testdata/'); +export const lowercaseDriveLetterDirname = + __dirname.charAt(0).toLowerCase() + __dirname.substr(1); +export const PROJECT_ROOT = path.join(lowercaseDriveLetterDirname, "../../"); +export const DATA_ROOT = path.join(PROJECT_ROOT, "testdata/"); diff --git a/test/variables.test.ts b/test/variables.test.ts index 1f7d89d4..be67295f 100644 --- a/test/variables.test.ts +++ b/test/variables.test.ts @@ -3,49 +3,74 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as assert from 'assert'; -import * as path from 'path'; +import * as assert from "assert"; +import * as path from "path"; -import * as ts from 'vscode-chrome-debug-core-testsupport'; +import * as ts from "vscode-chrome-debug-core-testsupport"; // import { DebugProtocol } from 'vscode-debugprotocol'; -import * as testSetup from './testSetup'; +import * as testSetup from "./testSetup"; const DATA_ROOT = testSetup.DATA_ROOT; -suite('Variables', () => { +suite("Variables", () => { + let dc: ts.debugClient.ExtendedDebugClient; + setup(() => { + return testSetup.setup().then((_dc) => (dc = _dc)); + }); - let dc: ts.debugClient.ExtendedDebugClient; - setup(() => { - return testSetup.setup() - .then(_dc => dc = _dc); - }); + teardown(() => { + return testSetup.teardown(); + }); - teardown(() => { - return testSetup.teardown(); - }); + test("retrieves props of a large buffer", async () => { + const PROGRAM = path.join(DATA_ROOT, "large-buffer/largeBuffer.js"); + await dc.hitBreakpoint( + { program: PROGRAM }, + { path: PROGRAM, line: 2 } + ); - test('retrieves props of a large buffer', async () => { - const PROGRAM = path.join(DATA_ROOT, 'large-buffer/largeBuffer.js'); - await dc.hitBreakpoint({ program: PROGRAM }, { path: PROGRAM, line: 2 }); + const stack = await dc.stackTraceRequest(); + assert( + stack.body.stackFrames && stack.body.stackFrames.length > 0, + "Did not return any stackframes" + ); - const stack = await dc.stackTraceRequest(); - assert(stack.body.stackFrames && stack.body.stackFrames.length > 0, 'Did not return any stackframes'); + const firstFrameId = stack.body.stackFrames[0].id; + const scopes = await dc.scopesRequest({ frameId: firstFrameId }); + assert( + scopes.body.scopes && scopes.body.scopes.length > 0, + "Did not return any scopes" + ); - const firstFrameId = stack.body.stackFrames[0].id; - const scopes = await dc.scopesRequest({ frameId: firstFrameId }); - assert(scopes.body.scopes && scopes.body.scopes.length > 0, 'Did not return any scopes'); + const localScope = scopes.body.scopes[0]; + const localScopeVars = await dc.variablesRequest({ + variablesReference: localScope.variablesReference, + }); + const bufferVar = localScopeVars.body.variables.find( + (vbl) => vbl.name === "buffer" + ); + assert(bufferVar, "Did not return a var named buffer"); + assert( + bufferVar.indexedVariables > 0, + "Must return some indexedVariables" + ); + assert( + bufferVar.namedVariables === 0, + "Must not return namedVariables" + ); - const localScope = scopes.body.scopes[0]; - const localScopeVars = await dc.variablesRequest({ variablesReference: localScope.variablesReference }); - const bufferVar = localScopeVars.body.variables.find(vbl => vbl.name === 'buffer'); - assert(bufferVar, 'Did not return a var named buffer'); - assert(bufferVar.indexedVariables > 0, 'Must return some indexedVariables'); - assert(bufferVar.namedVariables === 0, 'Must not return namedVariables'); + const bufferProps = await dc.variablesRequest({ + variablesReference: bufferVar.variablesReference, + filter: "indexed", + start: 0, + count: 100, + }); - const bufferProps = await dc.variablesRequest({ variablesReference: bufferVar.variablesReference, filter: 'indexed', start: 0, count: 100 }); - - // Just assert that something is returned, and that the last request doesn't fail or time out - assert(bufferProps.body.variables.length > 0, 'Some variables must be returned'); - }); -}); \ No newline at end of file + // Just assert that something is returned, and that the last request doesn't fail or time out + assert( + bufferProps.body.variables.length > 0, + "Some variables must be returned" + ); + }); +}); diff --git a/testdata/calls-between-files-with-exception/Source/sourceA.ts b/testdata/calls-between-files-with-exception/Source/sourceA.ts index 832749db..64b4a3da 100644 --- a/testdata/calls-between-files-with-exception/Source/sourceA.ts +++ b/testdata/calls-between-files-with-exception/Source/sourceA.ts @@ -1,8 +1,8 @@ -import {callbackCaller} from './sourceB'; +import { callbackCaller } from "./sourceB"; function f() { - console.log('mapped'); + console.log("mapped"); } callbackCaller(f); -console.log('stepped over caught exception'); +console.log("stepped over caught exception"); diff --git a/testdata/calls-between-files-with-exception/Source/sourceB.ts b/testdata/calls-between-files-with-exception/Source/sourceB.ts index f47214a5..062e78d4 100644 --- a/testdata/calls-between-files-with-exception/Source/sourceB.ts +++ b/testdata/calls-between-files-with-exception/Source/sourceB.ts @@ -1,9 +1,7 @@ export function callbackCaller(cb: Function): void { - try { - throw new Error('test error'); - } catch (e) { + try { + throw new Error("test error"); + } catch (e) {} - } - - cb(); + cb(); } diff --git a/testdata/calls-between-files-with-exception/out/sourceA.js b/testdata/calls-between-files-with-exception/out/sourceA.js index 142622b9..dd2a94b6 100644 --- a/testdata/calls-between-files-with-exception/out/sourceA.js +++ b/testdata/calls-between-files-with-exception/out/sourceA.js @@ -1,8 +1,8 @@ "use strict"; -var sourceB_1 = require('./sourceB'); +var sourceB_1 = require("./sourceB"); function f() { - console.log('mapped'); + console.log("mapped"); } sourceB_1.callbackCaller(f); -console.log('stepped over caught exception'); -//# sourceMappingURL=sourceA.js.map \ No newline at end of file +console.log("stepped over caught exception"); +//# sourceMappingURL=sourceA.js.map diff --git a/testdata/calls-between-files-with-exception/out/sourceA.js.map b/testdata/calls-between-files-with-exception/out/sourceA.js.map index 3c6ef0cf..73867111 100644 --- a/testdata/calls-between-files-with-exception/out/sourceA.js.map +++ b/testdata/calls-between-files-with-exception/out/sourceA.js.map @@ -1 +1,10 @@ -{"version":3,"file":"sourceA.js","sourceRoot":"","sources":["../src/sourceA.ts"],"names":[],"mappings":";AAAA,wBAA6B,WAAW,CAAC,CAAA;AAEzC;IACI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC1B,CAAC;AAED,wBAAc,CAAC,CAAC,CAAC,CAAC;AAClB,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC"} \ No newline at end of file +{ + "version": 3, + "file": "sourceA.js", + "sourceRoot": "", + "sources": [ + "../src/sourceA.ts" + ], + "names": [], + "mappings": ";AAAA,wBAA6B,WAAW,CAAC,CAAA;AAEzC;IACI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC1B,CAAC;AAED,wBAAc,CAAC,CAAC,CAAC,CAAC;AAClB,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC" +} diff --git a/testdata/calls-between-files-with-exception/out/sourceB.js b/testdata/calls-between-files-with-exception/out/sourceB.js index 63704293..ed7aa4e7 100644 --- a/testdata/calls-between-files-with-exception/out/sourceB.js +++ b/testdata/calls-between-files-with-exception/out/sourceB.js @@ -1,11 +1,9 @@ "use strict"; function callbackCaller(cb) { - try { - throw new Error('test error'); - } - catch (e) { - } - cb(); + try { + throw new Error("test error"); + } catch (e) {} + cb(); } exports.callbackCaller = callbackCaller; -//# sourceMappingURL=sourceB.js.map \ No newline at end of file +//# sourceMappingURL=sourceB.js.map diff --git a/testdata/calls-between-files-with-exception/out/sourceB.js.map b/testdata/calls-between-files-with-exception/out/sourceB.js.map index 39fe7fc2..27e9b2a5 100644 --- a/testdata/calls-between-files-with-exception/out/sourceB.js.map +++ b/testdata/calls-between-files-with-exception/out/sourceB.js.map @@ -1 +1,10 @@ -{"version":3,"file":"sourceB.js","sourceRoot":"","sources":["../src/sourceB.ts"],"names":[],"mappings":";AAAA,wBAA+B,EAAY;IACvC,IAAI,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;IAClC,CAAE;IAAA,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEb,CAAC;IAED,EAAE,EAAE,CAAC;AACT,CAAC;AARe,sBAAc,iBAQ7B,CAAA"} \ No newline at end of file +{ + "version": 3, + "file": "sourceB.js", + "sourceRoot": "", + "sources": [ + "../src/sourceB.ts" + ], + "names": [], + "mappings": ";AAAA,wBAA+B,EAAY;IACvC,IAAI,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;IAClC,CAAE;IAAA,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEb,CAAC;IAED,EAAE,EAAE,CAAC;AACT,CAAC;AARe,sBAAc,iBAQ7B,CAAA" +} diff --git a/testdata/calls-between-files-with-exception/tsconfig.json b/testdata/calls-between-files-with-exception/tsconfig.json index d2fa4d7e..734c63f2 100644 --- a/testdata/calls-between-files-with-exception/tsconfig.json +++ b/testdata/calls-between-files-with-exception/tsconfig.json @@ -1,6 +1,6 @@ { - "compilerOptions": { - "outDir": "out", - "sourceMap": true - } -} \ No newline at end of file + "compilerOptions": { + "outDir": "out", + "sourceMap": true + } +} diff --git a/testdata/calls-between-merged-files/gulpfile.js b/testdata/calls-between-merged-files/gulpfile.js index c0c8894f..c043dcba 100644 --- a/testdata/calls-between-merged-files/gulpfile.js +++ b/testdata/calls-between-merged-files/gulpfile.js @@ -2,23 +2,24 @@ * Copyright (C) Microsoft Corporation. All rights reserved. *--------------------------------------------------------*/ -const gulp = require('gulp'); -const ts = require('gulp-typescript'); -const typescript = require('typescript'); -const sourcemaps = require('gulp-sourcemaps'); -const concat = require('gulp-concat'); -const filter = require('gulp-filter'); +const gulp = require("gulp"); +const ts = require("gulp-typescript"); +const typescript = require("typescript"); +const sourcemaps = require("gulp-sourcemaps"); +const concat = require("gulp-concat"); +const filter = require("gulp-filter"); -const tsProject = ts.createProject('tsconfig.json', { typescript }); -gulp.task('build', function () { - const sourceBFilter = filter(['**/sourceB*'], { restore: true }); +const tsProject = ts.createProject("tsconfig.json", { typescript }); +gulp.task("build", function () { + const sourceBFilter = filter(["**/sourceB*"], { restore: true }); - return tsProject.src() - .pipe(sourcemaps.init()) - .pipe(tsProject()).js - .pipe(sourceBFilter) - .pipe(concat('sourceB1.js')) // Needs to match what A imports, hacky - .pipe(sourceBFilter.restore) - .pipe(sourcemaps.write('.', { includeContent: false })) - .pipe(gulp.dest('./out')); + return tsProject + .src() + .pipe(sourcemaps.init()) + .pipe(tsProject()) + .js.pipe(sourceBFilter) + .pipe(concat("sourceB1.js")) // Needs to match what A imports, hacky + .pipe(sourceBFilter.restore) + .pipe(sourcemaps.write(".", { includeContent: false })) + .pipe(gulp.dest("./out")); }); diff --git a/testdata/calls-between-merged-files/out/b.js b/testdata/calls-between-merged-files/out/b.js index 288f9023..75c6a631 100644 --- a/testdata/calls-between-merged-files/out/b.js +++ b/testdata/calls-between-merged-files/out/b.js @@ -1,12 +1,12 @@ "use strict"; function callbackCaller1(cb) { - callbackCaller2(cb); + callbackCaller2(cb); } exports.callbackCaller1 = callbackCaller1; -"use strict"; +("use strict"); function callbackCaller2(cb) { - cb(); + cb(); } exports.callbackCaller2 = callbackCaller2; diff --git a/testdata/calls-between-merged-files/out/b.js.map b/testdata/calls-between-merged-files/out/b.js.map index 4245c8c6..684fe2e5 100644 --- a/testdata/calls-between-merged-files/out/b.js.map +++ b/testdata/calls-between-merged-files/out/b.js.map @@ -1 +1,10 @@ -{"version":3,"sources":["../sourceB1.ts","../sourceB2.ts"],"names":[],"mappings":";AAEA,yBAAgC,EAAY;IACxC,eAAe,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAFD,0CAEC;;;ACJD,yBAAgC,EAAY;IACxC,EAAE,EAAE,CAAC;AACT,CAAC;AAFD,0CAEC","file":"b.js"} \ No newline at end of file +{ + "version": 3, + "sources": [ + "../sourceB1.ts", + "../sourceB2.ts" + ], + "names": [], + "mappings": ";AAEA,yBAAgC,EAAY;IACxC,eAAe,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAFD,0CAEC;;;ACJD,yBAAgC,EAAY;IACxC,EAAE,EAAE,CAAC;AACT,CAAC;AAFD,0CAEC", + "file": "b.js" +} diff --git a/testdata/calls-between-merged-files/out/sourceA.js b/testdata/calls-between-merged-files/out/sourceA.js index 26f5d79b..1458f4d3 100644 --- a/testdata/calls-between-merged-files/out/sourceA.js +++ b/testdata/calls-between-merged-files/out/sourceA.js @@ -1,10 +1,10 @@ "use strict"; var sourceB1_1 = require("./sourceB1"); function f() { - console.log('mapped'); + console.log("mapped"); } setInterval(function () { - sourceB1_1.callbackCaller1(f); + sourceB1_1.callbackCaller1(f); }, 0); //# sourceMappingURL=sourceA.js.map diff --git a/testdata/calls-between-merged-files/out/sourceA.js.map b/testdata/calls-between-merged-files/out/sourceA.js.map index 97da9fd7..82b0b97f 100644 --- a/testdata/calls-between-merged-files/out/sourceA.js.map +++ b/testdata/calls-between-merged-files/out/sourceA.js.map @@ -1 +1,9 @@ -{"version":3,"sources":["../sourceA.ts"],"names":[],"mappings":";AAAA,uCAA2C;AAE3C;IACI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC1B,CAAC;AAED,WAAW,CAAC;IACR,0BAAe,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC,EAAE,CAAC,CAAC,CAAC","file":"sourceA.js"} \ No newline at end of file +{ + "version": 3, + "sources": [ + "../sourceA.ts" + ], + "names": [], + "mappings": ";AAAA,uCAA2C;AAE3C;IACI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC1B,CAAC;AAED,WAAW,CAAC;IACR,0BAAe,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC,EAAE,CAAC,CAAC,CAAC", + "file": "sourceA.js" +} diff --git a/testdata/calls-between-merged-files/out/sourceB1.js b/testdata/calls-between-merged-files/out/sourceB1.js index 6567a360..acb6d9e4 100644 --- a/testdata/calls-between-merged-files/out/sourceB1.js +++ b/testdata/calls-between-merged-files/out/sourceB1.js @@ -1,12 +1,12 @@ "use strict"; function callbackCaller1(cb) { - callbackCaller2(cb); + callbackCaller2(cb); } exports.callbackCaller1 = callbackCaller1; -"use strict"; +("use strict"); function callbackCaller2(cb) { - cb(); + cb(); } exports.callbackCaller2 = callbackCaller2; diff --git a/testdata/calls-between-merged-files/out/sourceB1.js.map b/testdata/calls-between-merged-files/out/sourceB1.js.map index a601eb21..80b7f844 100644 --- a/testdata/calls-between-merged-files/out/sourceB1.js.map +++ b/testdata/calls-between-merged-files/out/sourceB1.js.map @@ -1 +1,10 @@ -{"version":3,"sources":["../sourceB1.ts","../sourceB2.ts"],"names":[],"mappings":";AAEA,yBAAgC,EAAY;IACxC,eAAe,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAFD,0CAEC;;;ACJD,yBAAgC,EAAY;IACxC,EAAE,EAAE,CAAC;AACT,CAAC;AAFD,0CAEC","file":"sourceB1.js"} \ No newline at end of file +{ + "version": 3, + "sources": [ + "../sourceB1.ts", + "../sourceB2.ts" + ], + "names": [], + "mappings": ";AAEA,yBAAgC,EAAY;IACxC,eAAe,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAFD,0CAEC;;;ACJD,yBAAgC,EAAY;IACxC,EAAE,EAAE,CAAC;AACT,CAAC;AAFD,0CAEC", + "file": "sourceB1.js" +} diff --git a/testdata/calls-between-merged-files/package.json b/testdata/calls-between-merged-files/package.json index 0b3ceb53..234cb38b 100644 --- a/testdata/calls-between-merged-files/package.json +++ b/testdata/calls-between-merged-files/package.json @@ -1,39 +1,39 @@ { - "name": "testdata-calls-between-merged-files", - "version": "0.0.1", - "private": "false", - "description": "Test project for vscode-node-debug2 using gulp", - "homepage": "https://github.com/CodeEditorLand/CodeEditorLand#readme", - "bugs": { - "url": "https://github.com/CodeEditorLand/CodeEditorLand/issues" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/CodeEditorLand/CodeEditorLand.git" - }, - "license": "MIT", - "author": { - "name": "Nikola Hristov", - "email": "nikola@nikolahristov.tech", - "url": "https://nikolahristov.tech" - }, - "publisher": "playform", - "type": "module", - "scripts": { - "build": "gulp build", - "prepublishOnly": "TypeScriptESBuild Source/**/*.ts" - }, - "devDependencies": { - "@types/node": "20.8.9", - "gulp": "4.0.2", - "gulp-concat": "2.6.1", - "gulp-filter": "8.0.0", - "gulp-sourcemaps": "3.0.0", - "gulp-typescript": "5.0.1", - "typescript": "5.2.2", - "typescript-esbuild": "0.3.1" - }, - "publishConfig": { - "access": "public" - } + "name": "testdata-calls-between-merged-files", + "version": "0.0.1", + "private": "false", + "description": "Test project for vscode-node-debug2 using gulp", + "homepage": "https://github.com/CodeEditorLand/CodeEditorLand#readme", + "bugs": { + "url": "https://github.com/CodeEditorLand/CodeEditorLand/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/CodeEditorLand/CodeEditorLand.git" + }, + "license": "MIT", + "author": { + "name": "Nikola Hristov", + "email": "nikola@nikolahristov.tech", + "url": "https://nikolahristov.tech" + }, + "publisher": "playform", + "type": "module", + "scripts": { + "build": "gulp build", + "prepublishOnly": "TypeScriptESBuild 'Source/**/*.ts'" + }, + "devDependencies": { + "@types/node": "20.8.9", + "gulp": "4.0.2", + "gulp-concat": "2.6.1", + "gulp-filter": "8.0.0", + "gulp-sourcemaps": "3.0.0", + "gulp-typescript": "5.0.1", + "typescript": "5.2.2", + "typescript-esbuild": "0.3.1" + }, + "publishConfig": { + "access": "public" + } } diff --git a/testdata/calls-between-merged-files/sourceA.ts b/testdata/calls-between-merged-files/sourceA.ts index 34e060db..7f4f7b71 100644 --- a/testdata/calls-between-merged-files/sourceA.ts +++ b/testdata/calls-between-merged-files/sourceA.ts @@ -1,9 +1,9 @@ -import {callbackCaller1} from './sourceB1'; +import { callbackCaller1 } from "./sourceB1"; function f() { - console.log('mapped'); + console.log("mapped"); } setInterval(() => { - callbackCaller1(f); -}, 0); \ No newline at end of file + callbackCaller1(f); +}, 0); diff --git a/testdata/calls-between-merged-files/sourceB1.ts b/testdata/calls-between-merged-files/sourceB1.ts index 2c4c9e83..5edddbcb 100644 --- a/testdata/calls-between-merged-files/sourceB1.ts +++ b/testdata/calls-between-merged-files/sourceB1.ts @@ -1,5 +1,5 @@ declare const callbackCaller2: Function; // b1 and b2 are concatenated export function callbackCaller1(cb: Function): void { - callbackCaller2(cb); + callbackCaller2(cb); } diff --git a/testdata/calls-between-merged-files/sourceB2.ts b/testdata/calls-between-merged-files/sourceB2.ts index 7407d536..11ea1b1a 100644 --- a/testdata/calls-between-merged-files/sourceB2.ts +++ b/testdata/calls-between-merged-files/sourceB2.ts @@ -1,3 +1,3 @@ export function callbackCaller2(cb: Function): void { - cb(); + cb(); } diff --git a/testdata/calls-between-merged-files/tsconfig.json b/testdata/calls-between-merged-files/tsconfig.json index 1f04ba14..acd74d3a 100644 --- a/testdata/calls-between-merged-files/tsconfig.json +++ b/testdata/calls-between-merged-files/tsconfig.json @@ -1,7 +1,7 @@ { - "compilerOptions": { - "outDir": "out", - "target": "es5", - "sourceMap": true - } -} \ No newline at end of file + "compilerOptions": { + "outDir": "out", + "target": "es5", + "sourceMap": true + } +} diff --git a/testdata/calls-between-multiple-files/out/sourceA.js b/testdata/calls-between-multiple-files/out/sourceA.js index 2455164e..f93b36ce 100644 --- a/testdata/calls-between-multiple-files/out/sourceA.js +++ b/testdata/calls-between-multiple-files/out/sourceA.js @@ -1,9 +1,9 @@ "use strict"; -var sourceB1_1 = require('./sourceB1'); +var sourceB1_1 = require("./sourceB1"); function f() { - console.log('mapped'); + console.log("mapped"); } setInterval(function () { - sourceB1_1.callbackCaller1(f); + sourceB1_1.callbackCaller1(f); }, 0); -//# sourceMappingURL=sourceA.js.map \ No newline at end of file +//# sourceMappingURL=sourceA.js.map diff --git a/testdata/calls-between-multiple-files/out/sourceA.js.map b/testdata/calls-between-multiple-files/out/sourceA.js.map index 29fa1ae9..d85a06ca 100644 --- a/testdata/calls-between-multiple-files/out/sourceA.js.map +++ b/testdata/calls-between-multiple-files/out/sourceA.js.map @@ -1 +1,10 @@ -{"version":3,"file":"sourceA.js","sourceRoot":"","sources":["../sourceA.ts"],"names":[],"mappings":";AAAA,yBAA8B,YAAY,CAAC,CAAA;AAE3C;IACI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC1B,CAAC;AAED,WAAW,CAAC;IACR,0BAAe,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC,EAAE,CAAC,CAAC,CAAC"} \ No newline at end of file +{ + "version": 3, + "file": "sourceA.js", + "sourceRoot": "", + "sources": [ + "../sourceA.ts" + ], + "names": [], + "mappings": ";AAAA,yBAA8B,YAAY,CAAC,CAAA;AAE3C;IACI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC1B,CAAC;AAED,WAAW,CAAC;IACR,0BAAe,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC,EAAE,CAAC,CAAC,CAAC" +} diff --git a/testdata/calls-between-multiple-files/out/sourceB1.js b/testdata/calls-between-multiple-files/out/sourceB1.js index 14c3d21f..04d4be1a 100644 --- a/testdata/calls-between-multiple-files/out/sourceB1.js +++ b/testdata/calls-between-multiple-files/out/sourceB1.js @@ -1,7 +1,7 @@ "use strict"; -var sourceB2_1 = require('./sourceB2'); +var sourceB2_1 = require("./sourceB2"); function callbackCaller1(cb) { - sourceB2_1.callbackCaller2(cb); + sourceB2_1.callbackCaller2(cb); } exports.callbackCaller1 = callbackCaller1; -//# sourceMappingURL=sourceB1.js.map \ No newline at end of file +//# sourceMappingURL=sourceB1.js.map diff --git a/testdata/calls-between-multiple-files/out/sourceB1.js.map b/testdata/calls-between-multiple-files/out/sourceB1.js.map index 1552cc80..cc6ac7c4 100644 --- a/testdata/calls-between-multiple-files/out/sourceB1.js.map +++ b/testdata/calls-between-multiple-files/out/sourceB1.js.map @@ -1 +1,10 @@ -{"version":3,"file":"sourceB1.js","sourceRoot":"","sources":["../sourceB1.ts"],"names":[],"mappings":";AAAA,yBAA8B,YAAY,CAAC,CAAA;AAE3C,yBAAgC,EAAY;IACxC,0BAAe,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAFe,uBAAe,kBAE9B,CAAA"} \ No newline at end of file +{ + "version": 3, + "file": "sourceB1.js", + "sourceRoot": "", + "sources": [ + "../sourceB1.ts" + ], + "names": [], + "mappings": ";AAAA,yBAA8B,YAAY,CAAC,CAAA;AAE3C,yBAAgC,EAAY;IACxC,0BAAe,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAFe,uBAAe,kBAE9B,CAAA" +} diff --git a/testdata/calls-between-multiple-files/out/sourceB2.js b/testdata/calls-between-multiple-files/out/sourceB2.js index 76d28505..084c4f33 100644 --- a/testdata/calls-between-multiple-files/out/sourceB2.js +++ b/testdata/calls-between-multiple-files/out/sourceB2.js @@ -1,6 +1,6 @@ "use strict"; function callbackCaller2(cb) { - cb(); + cb(); } exports.callbackCaller2 = callbackCaller2; -//# sourceMappingURL=sourceB2.js.map \ No newline at end of file +//# sourceMappingURL=sourceB2.js.map diff --git a/testdata/calls-between-multiple-files/out/sourceB2.js.map b/testdata/calls-between-multiple-files/out/sourceB2.js.map index 63150352..f20d27d6 100644 --- a/testdata/calls-between-multiple-files/out/sourceB2.js.map +++ b/testdata/calls-between-multiple-files/out/sourceB2.js.map @@ -1 +1,10 @@ -{"version":3,"file":"sourceB2.js","sourceRoot":"","sources":["../sourceB2.ts"],"names":[],"mappings":";AAAA,yBAAgC,EAAY;IACxC,EAAE,EAAE,CAAC;AACT,CAAC;AAFe,uBAAe,kBAE9B,CAAA"} \ No newline at end of file +{ + "version": 3, + "file": "sourceB2.js", + "sourceRoot": "", + "sources": [ + "../sourceB2.ts" + ], + "names": [], + "mappings": ";AAAA,yBAAgC,EAAY;IACxC,EAAE,EAAE,CAAC;AACT,CAAC;AAFe,uBAAe,kBAE9B,CAAA" +} diff --git a/testdata/calls-between-multiple-files/sourceA.ts b/testdata/calls-between-multiple-files/sourceA.ts index 34e060db..7f4f7b71 100644 --- a/testdata/calls-between-multiple-files/sourceA.ts +++ b/testdata/calls-between-multiple-files/sourceA.ts @@ -1,9 +1,9 @@ -import {callbackCaller1} from './sourceB1'; +import { callbackCaller1 } from "./sourceB1"; function f() { - console.log('mapped'); + console.log("mapped"); } setInterval(() => { - callbackCaller1(f); -}, 0); \ No newline at end of file + callbackCaller1(f); +}, 0); diff --git a/testdata/calls-between-multiple-files/sourceB1.ts b/testdata/calls-between-multiple-files/sourceB1.ts index e60f44af..461e6a85 100644 --- a/testdata/calls-between-multiple-files/sourceB1.ts +++ b/testdata/calls-between-multiple-files/sourceB1.ts @@ -1,5 +1,5 @@ -import {callbackCaller2} from './sourceB2'; +import { callbackCaller2 } from "./sourceB2"; export function callbackCaller1(cb: Function): void { - callbackCaller2(cb); + callbackCaller2(cb); } diff --git a/testdata/calls-between-multiple-files/sourceB2.ts b/testdata/calls-between-multiple-files/sourceB2.ts index 7407d536..11ea1b1a 100644 --- a/testdata/calls-between-multiple-files/sourceB2.ts +++ b/testdata/calls-between-multiple-files/sourceB2.ts @@ -1,3 +1,3 @@ export function callbackCaller2(cb: Function): void { - cb(); + cb(); } diff --git a/testdata/calls-between-multiple-files/tsconfig.json b/testdata/calls-between-multiple-files/tsconfig.json index 1f04ba14..acd74d3a 100644 --- a/testdata/calls-between-multiple-files/tsconfig.json +++ b/testdata/calls-between-multiple-files/tsconfig.json @@ -1,7 +1,7 @@ { - "compilerOptions": { - "outDir": "out", - "target": "es5", - "sourceMap": true - } -} \ No newline at end of file + "compilerOptions": { + "outDir": "out", + "target": "es5", + "sourceMap": true + } +} diff --git a/testdata/calls-between-sourcemapped-files/Source/sourceA.ts b/testdata/calls-between-sourcemapped-files/Source/sourceA.ts index 4161d777..a64fa733 100644 --- a/testdata/calls-between-sourcemapped-files/Source/sourceA.ts +++ b/testdata/calls-between-sourcemapped-files/Source/sourceA.ts @@ -1,9 +1,9 @@ -import {callbackCaller} from './sourceB'; +import { callbackCaller } from "./sourceB"; function f() { - console.log('mapped'); + console.log("mapped"); } setInterval(() => { - callbackCaller(f); -}, 500); \ No newline at end of file + callbackCaller(f); +}, 500); diff --git a/testdata/calls-between-sourcemapped-files/Source/sourceB.ts b/testdata/calls-between-sourcemapped-files/Source/sourceB.ts index 70b9688b..882189bb 100644 --- a/testdata/calls-between-sourcemapped-files/Source/sourceB.ts +++ b/testdata/calls-between-sourcemapped-files/Source/sourceB.ts @@ -1,3 +1,3 @@ export function callbackCaller(cb: Function): void { - cb(); + cb(); } diff --git a/testdata/calls-between-sourcemapped-files/out/sourceA.js b/testdata/calls-between-sourcemapped-files/out/sourceA.js index e21986e9..c3774bad 100644 --- a/testdata/calls-between-sourcemapped-files/out/sourceA.js +++ b/testdata/calls-between-sourcemapped-files/out/sourceA.js @@ -1,9 +1,9 @@ "use strict"; -var sourceB_1 = require('./sourceB'); +var sourceB_1 = require("./sourceB"); function f() { - console.log('mapped'); + console.log("mapped"); } setInterval(function () { - sourceB_1.callbackCaller(f); + sourceB_1.callbackCaller(f); }, 500); -//# sourceMappingURL=sourceA.js.map \ No newline at end of file +//# sourceMappingURL=sourceA.js.map diff --git a/testdata/calls-between-sourcemapped-files/out/sourceA.js.map b/testdata/calls-between-sourcemapped-files/out/sourceA.js.map index c0c4305a..55dbaf3d 100644 --- a/testdata/calls-between-sourcemapped-files/out/sourceA.js.map +++ b/testdata/calls-between-sourcemapped-files/out/sourceA.js.map @@ -1 +1,10 @@ -{"version":3,"file":"sourceA.js","sourceRoot":"","sources":["../src/sourceA.ts"],"names":[],"mappings":";AAAA,wBAA6B,WAAW,CAAC,CAAA;AAEzC;IACI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC1B,CAAC;AAED,WAAW,CAAC;IACR,wBAAc,CAAC,CAAC,CAAC,CAAC;AACtB,CAAC,EAAE,GAAG,CAAC,CAAC"} \ No newline at end of file +{ + "version": 3, + "file": "sourceA.js", + "sourceRoot": "", + "sources": [ + "../src/sourceA.ts" + ], + "names": [], + "mappings": ";AAAA,wBAA6B,WAAW,CAAC,CAAA;AAEzC;IACI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC1B,CAAC;AAED,WAAW,CAAC;IACR,wBAAc,CAAC,CAAC,CAAC,CAAC;AACtB,CAAC,EAAE,GAAG,CAAC,CAAC" +} diff --git a/testdata/calls-between-sourcemapped-files/out/sourceB.js b/testdata/calls-between-sourcemapped-files/out/sourceB.js index 1ddee03c..d867c4e2 100644 --- a/testdata/calls-between-sourcemapped-files/out/sourceB.js +++ b/testdata/calls-between-sourcemapped-files/out/sourceB.js @@ -1,6 +1,6 @@ "use strict"; function callbackCaller(cb) { - cb(); + cb(); } exports.callbackCaller = callbackCaller; -//# sourceMappingURL=sourceB.js.map \ No newline at end of file +//# sourceMappingURL=sourceB.js.map diff --git a/testdata/calls-between-sourcemapped-files/out/sourceB.js.map b/testdata/calls-between-sourcemapped-files/out/sourceB.js.map index 2cad67c3..c5feb53b 100644 --- a/testdata/calls-between-sourcemapped-files/out/sourceB.js.map +++ b/testdata/calls-between-sourcemapped-files/out/sourceB.js.map @@ -1 +1,10 @@ -{"version":3,"file":"sourceB.js","sourceRoot":"","sources":["../src/sourceB.ts"],"names":[],"mappings":";AAAA,wBAA+B,EAAY;IACvC,EAAE,EAAE,CAAC;AACT,CAAC;AAFe,sBAAc,iBAE7B,CAAA"} \ No newline at end of file +{ + "version": 3, + "file": "sourceB.js", + "sourceRoot": "", + "sources": [ + "../src/sourceB.ts" + ], + "names": [], + "mappings": ";AAAA,wBAA+B,EAAY;IACvC,EAAE,EAAE,CAAC;AACT,CAAC;AAFe,sBAAc,iBAE7B,CAAA" +} diff --git a/testdata/calls-between-sourcemapped-files/tsconfig.json b/testdata/calls-between-sourcemapped-files/tsconfig.json index d2fa4d7e..734c63f2 100644 --- a/testdata/calls-between-sourcemapped-files/tsconfig.json +++ b/testdata/calls-between-sourcemapped-files/tsconfig.json @@ -1,6 +1,6 @@ { - "compilerOptions": { - "outDir": "out", - "sourceMap": true - } -} \ No newline at end of file + "compilerOptions": { + "outDir": "out", + "sourceMap": true + } +} diff --git a/testdata/es-modules/file1.mjs b/testdata/es-modules/file1.mjs index 93dad83d..1ee90bea 100644 --- a/testdata/es-modules/file1.mjs +++ b/testdata/es-modules/file1.mjs @@ -1,3 +1,3 @@ -import './file2.mjs'; +import "./file2.mjs"; -console.log('file1 loaded'); \ No newline at end of file +console.log("file1 loaded"); diff --git a/testdata/es-modules/file2.mjs b/testdata/es-modules/file2.mjs index c8c48bf1..6088e1c2 100644 --- a/testdata/es-modules/file2.mjs +++ b/testdata/es-modules/file2.mjs @@ -1 +1 @@ -console.log(`file2 loaded`); \ No newline at end of file +console.log(`file2 loaded`); diff --git a/testdata/folder with spaces/file with spaces.js b/testdata/folder with spaces/file with spaces.js index 7360aa82..e2525b80 100644 --- a/testdata/folder with spaces/file with spaces.js +++ b/testdata/folder with spaces/file with spaces.js @@ -9,8 +9,8 @@ a.push("line 6"); var x = 0; for (var i = 0; i < a.length; i++) { - x = i*i; + x = i * i; console.log(x); } -process.exit(); // ensure that program terminates \ No newline at end of file +process.exit(); // ensure that program terminates diff --git a/testdata/large-buffer/largeBuffer.js b/testdata/large-buffer/largeBuffer.js index 3d7cdedd..d6788574 100644 --- a/testdata/large-buffer/largeBuffer.js +++ b/testdata/large-buffer/largeBuffer.js @@ -1,2 +1,2 @@ let buffer = Buffer.alloc(1024 * 1024 * 1024 - 1); -console.log(buffer.length); \ No newline at end of file +console.log(buffer.length); diff --git a/testdata/native-async-await/main.js b/testdata/native-async-await/main.js index 4e10dab8..d6dded92 100644 --- a/testdata/native-async-await/main.js +++ b/testdata/native-async-await/main.js @@ -1,42 +1,42 @@ async function asyncFn() { - return new Promise(resolve => { - setTimeout(resolve, 0); - }) + return new Promise((resolve) => { + setTimeout(resolve, 0); + }); } async function asyncFn1() { - await asyncFn(); - return asyncFn2(); + await asyncFn(); + return asyncFn2(); } async function asyncFn2() { - await asyncFn(); - return asyncFn3(); + await asyncFn(); + return asyncFn3(); } async function asyncFn3() { - await asyncFn(); - return asyncFn4(); + await asyncFn(); + return asyncFn4(); } async function asyncFn4() { - await asyncFn(); - return asyncFn5(); + await asyncFn(); + return asyncFn5(); } async function asyncFn5() { - await asyncFn(); - return asyncFn6(); + await asyncFn(); + return asyncFn6(); } async function asyncFn6() { - await asyncFn(); - return asyncFn7(); + await asyncFn(); + return asyncFn7(); } async function asyncFn7() { - await asyncFn(); + await asyncFn(); } asyncFn1().then(() => { - console.log(`done`); + console.log(`done`); }); diff --git a/testdata/nodeInternalsCaughtException.js b/testdata/nodeInternalsCaughtException.js index edba0fc5..473eb36f 100644 --- a/testdata/nodeInternalsCaughtException.js +++ b/testdata/nodeInternalsCaughtException.js @@ -1,7 +1,7 @@ -const fs = require('fs'); +const fs = require("fs"); try { - fs.readFileSync('sldfk'); + fs.readFileSync("sldfk"); } catch (e) {} -console.log('done'); \ No newline at end of file +console.log("done"); diff --git a/testdata/program.js b/testdata/program.js index 7360aa82..e2525b80 100644 --- a/testdata/program.js +++ b/testdata/program.js @@ -9,8 +9,8 @@ a.push("line 6"); var x = 0; for (var i = 0; i < a.length; i++) { - x = i*i; + x = i * i; console.log(x); } -process.exit(); // ensure that program terminates \ No newline at end of file +process.exit(); // ensure that program terminates diff --git a/testdata/programSingleLine.js b/testdata/programSingleLine.js index 8269519d..ad3f3fb9 100644 --- a/testdata/programSingleLine.js +++ b/testdata/programSingleLine.js @@ -1 +1,7 @@ -console.log("1"); console.log("2"); console.log("3"); console.log("4"); console.log("5"); console.log("6"); console.log("7"); \ No newline at end of file +console.log("1"); +console.log("2"); +console.log("3"); +console.log("4"); +console.log("5"); +console.log("6"); +console.log("7"); diff --git a/testdata/programWithConsoleLogging.js b/testdata/programWithConsoleLogging.js index f6b628da..e5930a10 100644 --- a/testdata/programWithConsoleLogging.js +++ b/testdata/programWithConsoleLogging.js @@ -1,4 +1,4 @@ for (var i = 0; i < 10; i++) { - console.log('log: ' + i); - console.error('error: ' + i); + console.log("log: " + i); + console.error("error: " + i); } diff --git a/testdata/programWithException.js b/testdata/programWithException.js index 6f1da1f8..f77057e6 100644 --- a/testdata/programWithException.js +++ b/testdata/programWithException.js @@ -4,7 +4,7 @@ console.log("line 3"); try { throw new Error("error"); -} catch(e) { +} catch (e) { console.log("exception: " + e); } diff --git a/testdata/programWithFunction.js b/testdata/programWithFunction.js index 4c04ad93..f1a85a15 100644 --- a/testdata/programWithFunction.js +++ b/testdata/programWithFunction.js @@ -1,20 +1,19 @@ - // global function -foo = function(n) { +foo = function (n) { return n; -} +}; -bar = function(n) { +bar = function (n) { return n; -} +}; -console.log('foo defined'); +console.log("foo defined"); -setInterval(function() { +setInterval(function () { foo(321); foo(123); }, 300); -setInterval(function() { +setInterval(function () { bar(123); -}, 300); \ No newline at end of file +}, 300); diff --git a/testdata/programWithUncaughtException.js b/testdata/programWithUncaughtException.js index 238e87ce..36498d7d 100644 --- a/testdata/programWithUncaughtException.js +++ b/testdata/programWithUncaughtException.js @@ -1,2 +1,2 @@ -console.log('hi'); -throw new Error('uncaught exception'); +console.log("hi"); +throw new Error("uncaught exception"); diff --git a/testdata/programWithVariables.js b/testdata/programWithVariables.js index 5676ab71..3f6b78d5 100644 --- a/testdata/programWithVariables.js +++ b/testdata/programWithVariables.js @@ -1,11 +1,11 @@ -const global = "global" +const global = "global"; function locals() { - let num = 1 - const str = "hello" - const arr = [num, str] - const obj = { a: 1, b: "hi" } - debugger + let num = 1; + const str = "hello"; + const arr = [num, str]; + const obj = { a: 1, b: "hi" }; + debugger; } -locals() \ No newline at end of file +locals(); diff --git a/testdata/promise-chain/main.js b/testdata/promise-chain/main.js index 0fa9472f..8d3bb1f4 100644 --- a/testdata/promise-chain/main.js +++ b/testdata/promise-chain/main.js @@ -1,47 +1,47 @@ function asyncFn() { - return Promise.resolve('foo'); + return Promise.resolve("foo"); } function async1() { - return asyncFn().then(() => { - return async2(); - }); + return asyncFn().then(() => { + return async2(); + }); } function async2() { - return asyncFn().then(() => { - return async3(); - }); + return asyncFn().then(() => { + return async3(); + }); } function async3() { - return asyncFn().then(() => { - return async4(); - }); + return asyncFn().then(() => { + return async4(); + }); } function async4() { - return asyncFn().then(() => { - return async5(); - }); + return asyncFn().then(() => { + return async5(); + }); } function async5() { - return asyncFn().then(() => { - return async6(); - }); + return asyncFn().then(() => { + return async6(); + }); } function async6() { - return asyncFn().then(() => { - return async7(); - }); + return asyncFn().then(() => { + return async7(); + }); } function async7() { - return asyncFn(); + return asyncFn(); } async1().then(() => { - console.log(`done`); + console.log(`done`); }); diff --git a/testdata/simple-eval/index.js b/testdata/simple-eval/index.js index cea654e2..d59d0409 100644 --- a/testdata/simple-eval/index.js +++ b/testdata/simple-eval/index.js @@ -1,3 +1,3 @@ -eval('let x = 1'); +eval("let x = 1"); -let y = 2; \ No newline at end of file +let y = 2; diff --git a/testdata/sourcemap-no-sourceMappingURL/Source/classes.ts b/testdata/sourcemap-no-sourceMappingURL/Source/classes.ts index 771bf083..a0d85afc 100644 --- a/testdata/sourcemap-no-sourceMappingURL/Source/classes.ts +++ b/testdata/sourcemap-no-sourceMappingURL/Source/classes.ts @@ -1,23 +1,21 @@ class Foo { + private _name: string; - private _name: string; + constructor(name: string) { + this._name = name; + } - constructor(name: string) { - this._name = name; - } - - getName() : string { - return this._name; - } + getName(): string { + return this._name; + } } class Bar extends Foo { - - getName() : string { - return super.getName() + ' Doe'; - } + getName(): string { + return super.getName() + " Doe"; + } } -var bar = new Bar('John2'); +var bar = new Bar("John2"); console.log(bar.getName()); // John Doe diff --git a/testdata/sourcemap-no-sourceMappingURL/out/classes.js b/testdata/sourcemap-no-sourceMappingURL/out/classes.js index a96bd468..42b84d12 100644 --- a/testdata/sourcemap-no-sourceMappingURL/out/classes.js +++ b/testdata/sourcemap-no-sourceMappingURL/out/classes.js @@ -1,27 +1,33 @@ -var __extends = (this && this.__extends) || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); -}; +var __extends = + (this && this.__extends) || + function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { + this.constructor = d; + } + d.prototype = + b === null + ? Object.create(b) + : ((__.prototype = b.prototype), new __()); + }; var Foo = (function () { - function Foo(name) { - this._name = name; - } - Foo.prototype.getName = function () { - return this._name; - }; - return Foo; + function Foo(name) { + this._name = name; + } + Foo.prototype.getName = function () { + return this._name; + }; + return Foo; })(); var Bar = (function (_super) { - __extends(Bar, _super); - function Bar() { - _super.apply(this, arguments); - } - Bar.prototype.getName = function () { - return _super.prototype.getName.call(this) + ' Doe'; - }; - return Bar; + __extends(Bar, _super); + function Bar() { + _super.apply(this, arguments); + } + Bar.prototype.getName = function () { + return _super.prototype.getName.call(this) + " Doe"; + }; + return Bar; })(Foo); -var bar = new Bar('John2'); +var bar = new Bar("John2"); console.log(bar.getName()); // John Doe - diff --git a/testdata/sourcemap-no-sourceMappingURL/out/classes.js.map b/testdata/sourcemap-no-sourceMappingURL/out/classes.js.map index 33dbb452..882b48f7 100644 --- a/testdata/sourcemap-no-sourceMappingURL/out/classes.js.map +++ b/testdata/sourcemap-no-sourceMappingURL/out/classes.js.map @@ -14,4 +14,4 @@ "Bar.getName" ], "mappings": ";;;;;AAAA;IAIEA,aAAYA,IAAYA;QACtBC,IAAIA,CAACA,KAAKA,GAAGA,IAAIA,CAACA;IACpBA,CAACA;IAEDD,qBAAOA,GAAPA;QACEE,MAAMA,CAACA,IAAIA,CAACA,KAAKA,CAACA;IACpBA,CAACA;IACHF,UAACA;AAADA,CAXA,AAWCA,IAAA;AAED;IAAkBG,uBAAGA;IAArBA;QAAkBC,8BAAGA;IAKrBA,CAACA;IAHCD,qBAAOA,GAAPA;QACEE,MAAMA,CAACA,gBAAKA,CAACA,OAAOA,WAAEA,GAAGA,MAAMA,CAACA;IAClCA,CAACA;IACHF,UAACA;AAADA,CALA,AAKCA,EALiB,GAAG,EAKpB;AAED,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;AAE3B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,WAAW" -} \ No newline at end of file +} diff --git a/testdata/sourcemaps with spaces/the distribution/classes.js b/testdata/sourcemaps with spaces/the distribution/classes.js index 4d6bf02d..db2ee481 100644 --- a/testdata/sourcemaps with spaces/the distribution/classes.js +++ b/testdata/sourcemaps with spaces/the distribution/classes.js @@ -1,28 +1,35 @@ -var __extends = (this && this.__extends) || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); -}; +var __extends = + (this && this.__extends) || + function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { + this.constructor = d; + } + d.prototype = + b === null + ? Object.create(b) + : ((__.prototype = b.prototype), new __()); + }; var Foo = (function () { - function Foo(name) { - this._name = name; - } - Foo.prototype.getName = function () { - return this._name; - }; - return Foo; + function Foo(name) { + this._name = name; + } + Foo.prototype.getName = function () { + return this._name; + }; + return Foo; })(); var Bar = (function (_super) { - __extends(Bar, _super); - function Bar() { - _super.apply(this, arguments); - } - Bar.prototype.getName = function () { - return _super.prototype.getName.call(this) + ' Doe'; - }; - return Bar; + __extends(Bar, _super); + function Bar() { + _super.apply(this, arguments); + } + Bar.prototype.getName = function () { + return _super.prototype.getName.call(this) + " Doe"; + }; + return Bar; })(Foo); -var bar = new Bar('John2'); +var bar = new Bar("John2"); console.log(bar.getName()); // John Doe //# sourceMappingURL=../the maps/classes.js.map diff --git a/testdata/sourcemaps with spaces/the maps/classes.js.map b/testdata/sourcemaps with spaces/the maps/classes.js.map index effe5314..440561fa 100644 --- a/testdata/sourcemaps with spaces/the maps/classes.js.map +++ b/testdata/sourcemaps with spaces/the maps/classes.js.map @@ -1 +1,17 @@ -{"version":3,"sources":["classes.ts"],"names":["Foo","Foo.constructor","Foo.getName","Bar","Bar.constructor","Bar.getName"],"mappings":";;;;;AAAA;IAIEA,aAAYA,IAAYA;QACtBC,IAAIA,CAACA,KAAKA,GAAGA,IAAIA,CAACA;IACpBA,CAACA;IAEDD,qBAAOA,GAAPA;QACEE,MAAMA,CAACA,IAAIA,CAACA,KAAKA,CAACA;IACpBA,CAACA;IACHF,UAACA;AAADA,CAXA,AAWCA,IAAA;AAED;IAAkBG,uBAAGA;IAArBA;QAAkBC,8BAAGA;IAKrBA,CAACA;IAHCD,qBAAOA,GAAPA;QACEE,MAAMA,CAACA,gBAAKA,CAACA,OAAOA,WAAEA,GAAGA,MAAMA,CAACA;IAClCA,CAACA;IACHF,UAACA;AAADA,CALA,AAKCA,EALiB,GAAG,EAKpB;AAED,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;AAE3B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,WAAW","file":"classes.js","sourceRoot":"../the source"} \ No newline at end of file +{ + "version": 3, + "sources": [ + "classes.ts" + ], + "names": [ + "Foo", + "Foo.constructor", + "Foo.getName", + "Bar", + "Bar.constructor", + "Bar.getName" + ], + "mappings": ";;;;;AAAA;IAIEA,aAAYA,IAAYA;QACtBC,IAAIA,CAACA,KAAKA,GAAGA,IAAIA,CAACA;IACpBA,CAACA;IAEDD,qBAAOA,GAAPA;QACEE,MAAMA,CAACA,IAAIA,CAACA,KAAKA,CAACA;IACpBA,CAACA;IACHF,UAACA;AAADA,CAXA,AAWCA,IAAA;AAED;IAAkBG,uBAAGA;IAArBA;QAAkBC,8BAAGA;IAKrBA,CAACA;IAHCD,qBAAOA,GAAPA;QACEE,MAAMA,CAACA,gBAAKA,CAACA,OAAOA,WAAEA,GAAGA,MAAMA,CAACA;IAClCA,CAACA;IACHF,UAACA;AAADA,CALA,AAKCA,EALiB,GAAG,EAKpB;AAED,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;AAE3B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,WAAW", + "file": "classes.js", + "sourceRoot": "../the source" +} diff --git a/testdata/sourcemaps with spaces/the source/classes.ts b/testdata/sourcemaps with spaces/the source/classes.ts index 771bf083..a0d85afc 100644 --- a/testdata/sourcemaps with spaces/the source/classes.ts +++ b/testdata/sourcemaps with spaces/the source/classes.ts @@ -1,23 +1,21 @@ class Foo { + private _name: string; - private _name: string; + constructor(name: string) { + this._name = name; + } - constructor(name: string) { - this._name = name; - } - - getName() : string { - return this._name; - } + getName(): string { + return this._name; + } } class Bar extends Foo { - - getName() : string { - return super.getName() + ' Doe'; - } + getName(): string { + return super.getName() + " Doe"; + } } -var bar = new Bar('John2'); +var bar = new Bar("John2"); console.log(bar.getName()); // John Doe diff --git a/testdata/sourcemaps-2574/Source/classes.ts b/testdata/sourcemaps-2574/Source/classes.ts index 771bf083..a0d85afc 100644 --- a/testdata/sourcemaps-2574/Source/classes.ts +++ b/testdata/sourcemaps-2574/Source/classes.ts @@ -1,23 +1,21 @@ class Foo { + private _name: string; - private _name: string; + constructor(name: string) { + this._name = name; + } - constructor(name: string) { - this._name = name; - } - - getName() : string { - return this._name; - } + getName(): string { + return this._name; + } } class Bar extends Foo { - - getName() : string { - return super.getName() + ' Doe'; - } + getName(): string { + return super.getName() + " Doe"; + } } -var bar = new Bar('John2'); +var bar = new Bar("John2"); console.log(bar.getName()); // John Doe diff --git a/testdata/sourcemaps-2574/out/classes.js b/testdata/sourcemaps-2574/out/classes.js index a007c348..2488d55a 100644 --- a/testdata/sourcemaps-2574/out/classes.js +++ b/testdata/sourcemaps-2574/out/classes.js @@ -1,28 +1,35 @@ -var __extends = (this && this.__extends) || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); -}; +var __extends = + (this && this.__extends) || + function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { + this.constructor = d; + } + d.prototype = + b === null + ? Object.create(b) + : ((__.prototype = b.prototype), new __()); + }; var Foo = (function () { - function Foo(name) { - this._name = name; - } - Foo.prototype.getName = function () { - return this._name; - }; - return Foo; + function Foo(name) { + this._name = name; + } + Foo.prototype.getName = function () { + return this._name; + }; + return Foo; })(); var Bar = (function (_super) { - __extends(Bar, _super); - function Bar() { - _super.apply(this, arguments); - } - Bar.prototype.getName = function () { - return _super.prototype.getName.call(this) + ' Doe'; - }; - return Bar; + __extends(Bar, _super); + function Bar() { + _super.apply(this, arguments); + } + Bar.prototype.getName = function () { + return _super.prototype.getName.call(this) + " Doe"; + }; + return Bar; })(Foo); -var bar = new Bar('John2'); +var bar = new Bar("John2"); console.log(bar.getName()); // John Doe //# sourceMappingURL=classes.js.map diff --git a/testdata/sourcemaps-2574/out/classes.js.map b/testdata/sourcemaps-2574/out/classes.js.map index 33dbb452..882b48f7 100644 --- a/testdata/sourcemaps-2574/out/classes.js.map +++ b/testdata/sourcemaps-2574/out/classes.js.map @@ -14,4 +14,4 @@ "Bar.getName" ], "mappings": ";;;;;AAAA;IAIEA,aAAYA,IAAYA;QACtBC,IAAIA,CAACA,KAAKA,GAAGA,IAAIA,CAACA;IACpBA,CAACA;IAEDD,qBAAOA,GAAPA;QACEE,MAAMA,CAACA,IAAIA,CAACA,KAAKA,CAACA;IACpBA,CAACA;IACHF,UAACA;AAADA,CAXA,AAWCA,IAAA;AAED;IAAkBG,uBAAGA;IAArBA;QAAkBC,8BAAGA;IAKrBA,CAACA;IAHCD,qBAAOA,GAAPA;QACEE,MAAMA,CAACA,gBAAKA,CAACA,OAAOA,WAAEA,GAAGA,MAAMA,CAACA;IAClCA,CAACA;IACHF,UAACA;AAADA,CALA,AAKCA,EALiB,GAAG,EAKpB;AAED,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;AAE3B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,WAAW" -} \ No newline at end of file +} diff --git a/testdata/sourcemaps-inline-sources/_program.ts b/testdata/sourcemaps-inline-sources/_program.ts index fab20a38..e9fb18e8 100644 --- a/testdata/sourcemaps-inline-sources/_program.ts +++ b/testdata/sourcemaps-inline-sources/_program.ts @@ -1,8 +1,8 @@ -console.log('Program loaded'); +console.log("Program loaded"); function f() { - console.log('interval'); - debugger; + console.log("interval"); + debugger; } setInterval(f, 200); diff --git a/testdata/sourcemaps-inline-sources/program.js b/testdata/sourcemaps-inline-sources/program.js index 64a33f51..055c2399 100644 --- a/testdata/sourcemaps-inline-sources/program.js +++ b/testdata/sourcemaps-inline-sources/program.js @@ -1,7 +1,7 @@ -console.log('Program loaded'); +console.log("Program loaded"); function f() { - console.log('interval'); - debugger; + console.log("interval"); + debugger; } setInterval(f, 200); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInByb2dyYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBRTlCO0lBQ0ksT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN4QixRQUFRLENBQUM7QUFDYixDQUFDO0FBRUQsV0FBVyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnNvbGUubG9nKCdQcm9ncmFtIGxvYWRlZCcpO1xuXG5mdW5jdGlvbiBmKCkge1xuICAgIGNvbnNvbGUubG9nKCdpbnRlcnZhbCcpO1xuICAgIGRlYnVnZ2VyO1xufVxuXG5zZXRJbnRlcnZhbChmLCAyMDApO1xuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInByb2dyYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBRTlCO0lBQ0ksT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN4QixRQUFRLENBQUM7QUFDYixDQUFDO0FBRUQsV0FBVyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnNvbGUubG9nKCdQcm9ncmFtIGxvYWRlZCcpO1xuXG5mdW5jdGlvbiBmKCkge1xuICAgIGNvbnNvbGUubG9nKCdpbnRlcnZhbCcpO1xuICAgIGRlYnVnZ2VyO1xufVxuXG5zZXRJbnRlcnZhbChmLCAyMDApO1xuIl19 diff --git a/testdata/sourcemaps-inline-sources/tsconfig.json b/testdata/sourcemaps-inline-sources/tsconfig.json index ca3d519c..e09960d4 100644 --- a/testdata/sourcemaps-inline-sources/tsconfig.json +++ b/testdata/sourcemaps-inline-sources/tsconfig.json @@ -1,6 +1,6 @@ { - "compilerOptions": { - "inlineSourceMap": true, - "inlineSources": true - } -} \ No newline at end of file + "compilerOptions": { + "inlineSourceMap": true, + "inlineSources": true + } +} diff --git a/testdata/sourcemaps-inline/Source/classes.ts b/testdata/sourcemaps-inline/Source/classes.ts index 771bf083..a0d85afc 100644 --- a/testdata/sourcemaps-inline/Source/classes.ts +++ b/testdata/sourcemaps-inline/Source/classes.ts @@ -1,23 +1,21 @@ class Foo { + private _name: string; - private _name: string; + constructor(name: string) { + this._name = name; + } - constructor(name: string) { - this._name = name; - } - - getName() : string { - return this._name; - } + getName(): string { + return this._name; + } } class Bar extends Foo { - - getName() : string { - return super.getName() + ' Doe'; - } + getName(): string { + return super.getName() + " Doe"; + } } -var bar = new Bar('John2'); +var bar = new Bar("John2"); console.log(bar.getName()); // John Doe diff --git a/testdata/sourcemaps-inline/dist/classes.js b/testdata/sourcemaps-inline/dist/classes.js index 87ceb299..766a7663 100644 --- a/testdata/sourcemaps-inline/dist/classes.js +++ b/testdata/sourcemaps-inline/dist/classes.js @@ -1,27 +1,34 @@ -var __extends = (this && this.__extends) || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); -}; +var __extends = + (this && this.__extends) || + function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { + this.constructor = d; + } + d.prototype = + b === null + ? Object.create(b) + : ((__.prototype = b.prototype), new __()); + }; var Foo = (function () { - function Foo(name) { - this._name = name; - } - Foo.prototype.getName = function () { - return this._name; - }; - return Foo; -}()); + function Foo(name) { + this._name = name; + } + Foo.prototype.getName = function () { + return this._name; + }; + return Foo; +})(); var Bar = (function (_super) { - __extends(Bar, _super); - function Bar() { - _super.apply(this, arguments); - } - Bar.prototype.getName = function () { - return _super.prototype.getName.call(this) + ' Doe'; - }; - return Bar; -}(Foo)); -var bar = new Bar('John2'); + __extends(Bar, _super); + function Bar() { + _super.apply(this, arguments); + } + Bar.prototype.getName = function () { + return _super.prototype.getName.call(this) + " Doe"; + }; + return Bar; +})(Foo); +var bar = new Bar("John2"); console.log(bar.getName()); // John Doe -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jbGFzc2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7SUFJRSxhQUFZLElBQVk7UUFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7SUFDcEIsQ0FBQztJQUVELHFCQUFPLEdBQVA7UUFDRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBQ0gsVUFBQztBQUFELENBQUMsQUFYRCxJQVdDO0FBRUQ7SUFBa0IsdUJBQUc7SUFBckI7UUFBa0IsOEJBQUc7SUFLckIsQ0FBQztJQUhDLHFCQUFPLEdBQVA7UUFDRSxNQUFNLENBQUMsZ0JBQUssQ0FBQyxPQUFPLFdBQUUsR0FBRyxNQUFNLENBQUM7SUFDbEMsQ0FBQztJQUNILFVBQUM7QUFBRCxDQUFDLEFBTEQsQ0FBa0IsR0FBRyxHQUtwQjtBQUVELElBQUksR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRTNCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jbGFzc2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7SUFJRSxhQUFZLElBQVk7UUFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7SUFDcEIsQ0FBQztJQUVELHFCQUFPLEdBQVA7UUFDRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBQ0gsVUFBQztBQUFELENBQUMsQUFYRCxJQVdDO0FBRUQ7SUFBa0IsdUJBQUc7SUFBckI7UUFBa0IsOEJBQUc7SUFLckIsQ0FBQztJQUhDLHFCQUFPLEdBQVA7UUFDRSxNQUFNLENBQUMsZ0JBQUssQ0FBQyxPQUFPLFdBQUUsR0FBRyxNQUFNLENBQUM7SUFDbEMsQ0FBQztJQUNILFVBQUM7QUFBRCxDQUFDLEFBTEQsQ0FBa0IsR0FBRyxHQUtwQjtBQUVELElBQUksR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRTNCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXIn0= diff --git a/testdata/sourcemaps-inline/tsconfig.json b/testdata/sourcemaps-inline/tsconfig.json index b380856c..d8012a23 100644 --- a/testdata/sourcemaps-inline/tsconfig.json +++ b/testdata/sourcemaps-inline/tsconfig.json @@ -1,9 +1,7 @@ { - "compilerOptions": { - "inlineSourceMap": true, - "outDir": "dist/" - }, - "include": [ - "src/**/*.ts" - ] -} \ No newline at end of file + "compilerOptions": { + "inlineSourceMap": true, + "outDir": "dist/" + }, + "include": ["src/**/*.ts"] +} diff --git a/testdata/sourcemaps-js-entrypoint/Source/classes.ts b/testdata/sourcemaps-js-entrypoint/Source/classes.ts index 771bf083..a0d85afc 100644 --- a/testdata/sourcemaps-js-entrypoint/Source/classes.ts +++ b/testdata/sourcemaps-js-entrypoint/Source/classes.ts @@ -1,23 +1,21 @@ class Foo { + private _name: string; - private _name: string; + constructor(name: string) { + this._name = name; + } - constructor(name: string) { - this._name = name; - } - - getName() : string { - return this._name; - } + getName(): string { + return this._name; + } } class Bar extends Foo { - - getName() : string { - return super.getName() + ' Doe'; - } + getName(): string { + return super.getName() + " Doe"; + } } -var bar = new Bar('John2'); +var bar = new Bar("John2"); console.log(bar.getName()); // John Doe diff --git a/testdata/sourcemaps-js-entrypoint/out/classes.js b/testdata/sourcemaps-js-entrypoint/out/classes.js index a007c348..2488d55a 100644 --- a/testdata/sourcemaps-js-entrypoint/out/classes.js +++ b/testdata/sourcemaps-js-entrypoint/out/classes.js @@ -1,28 +1,35 @@ -var __extends = (this && this.__extends) || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); -}; +var __extends = + (this && this.__extends) || + function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { + this.constructor = d; + } + d.prototype = + b === null + ? Object.create(b) + : ((__.prototype = b.prototype), new __()); + }; var Foo = (function () { - function Foo(name) { - this._name = name; - } - Foo.prototype.getName = function () { - return this._name; - }; - return Foo; + function Foo(name) { + this._name = name; + } + Foo.prototype.getName = function () { + return this._name; + }; + return Foo; })(); var Bar = (function (_super) { - __extends(Bar, _super); - function Bar() { - _super.apply(this, arguments); - } - Bar.prototype.getName = function () { - return _super.prototype.getName.call(this) + ' Doe'; - }; - return Bar; + __extends(Bar, _super); + function Bar() { + _super.apply(this, arguments); + } + Bar.prototype.getName = function () { + return _super.prototype.getName.call(this) + " Doe"; + }; + return Bar; })(Foo); -var bar = new Bar('John2'); +var bar = new Bar("John2"); console.log(bar.getName()); // John Doe //# sourceMappingURL=classes.js.map diff --git a/testdata/sourcemaps-js-entrypoint/out/classes.js.map b/testdata/sourcemaps-js-entrypoint/out/classes.js.map index 33dbb452..882b48f7 100644 --- a/testdata/sourcemaps-js-entrypoint/out/classes.js.map +++ b/testdata/sourcemaps-js-entrypoint/out/classes.js.map @@ -14,4 +14,4 @@ "Bar.getName" ], "mappings": ";;;;;AAAA;IAIEA,aAAYA,IAAYA;QACtBC,IAAIA,CAACA,KAAKA,GAAGA,IAAIA,CAACA;IACpBA,CAACA;IAEDD,qBAAOA,GAAPA;QACEE,MAAMA,CAACA,IAAIA,CAACA,KAAKA,CAACA;IACpBA,CAACA;IACHF,UAACA;AAADA,CAXA,AAWCA,IAAA;AAED;IAAkBG,uBAAGA;IAArBA;QAAkBC,8BAAGA;IAKrBA,CAACA;IAHCD,qBAAOA,GAAPA;QACEE,MAAMA,CAACA,gBAAKA,CAACA,OAAOA,WAAEA,GAAGA,MAAMA,CAACA;IAClCA,CAACA;IACHF,UAACA;AAADA,CALA,AAKCA,EALiB,GAAG,EAKpB;AAED,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;AAE3B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,WAAW" -} \ No newline at end of file +} diff --git a/testdata/sourcemaps-js-entrypoint/out/entry.js b/testdata/sourcemaps-js-entrypoint/out/entry.js index 7e1755d6..e3e13212 100644 --- a/testdata/sourcemaps-js-entrypoint/out/entry.js +++ b/testdata/sourcemaps-js-entrypoint/out/entry.js @@ -1,2 +1 @@ -var entry = require('./classes.js'); - +var entry = require("./classes.js"); diff --git a/testdata/sourcemaps-local-paths/Source/classes.ts b/testdata/sourcemaps-local-paths/Source/classes.ts index 9a48a68c..175fc100 100644 --- a/testdata/sourcemaps-local-paths/Source/classes.ts +++ b/testdata/sourcemaps-local-paths/Source/classes.ts @@ -1,23 +1,21 @@ class Foo { + private _name: string; - private _name: string; + constructor(name: string) { + this._name = name; + } - constructor(name: string) { - this._name = name; - } - - getName(): string { - return this._name; - } + getName(): string { + return this._name; + } } class Bar extends Foo { - - getName(): string { - return super.getName() + ' Doe'; - } + getName(): string { + return super.getName() + " Doe"; + } } -const bar = new Bar('John2'); +const bar = new Bar("John2"); console.log(bar.getName()); // John Doe diff --git a/testdata/sourcemaps-local-paths/package.json b/testdata/sourcemaps-local-paths/package.json index 4a90cc4c..d6d53d68 100644 --- a/testdata/sourcemaps-local-paths/package.json +++ b/testdata/sourcemaps-local-paths/package.json @@ -1,35 +1,35 @@ { - "name": "sourcemaps-local-paths", - "version": "0.0.1", - "private": "false", - "description": "", - "homepage": "https://github.com/CodeEditorLand/CodeEditorLand#readme", - "bugs": { - "url": "https://github.com/CodeEditorLand/CodeEditorLand/issues" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/CodeEditorLand/CodeEditorLand.git" - }, - "license": "MIT", - "author": { - "name": "Nikola Hristov", - "email": "nikola@nikolahristov.tech", - "url": "https://nikolahristov.tech" - }, - "publisher": "playform", - "type": "module", - "scripts": { - "postinstall": "tsc", - "prepublishOnly": "TypeScriptESBuild Source/**/*.ts" - }, - "dependencies": { - "typescript": "5.2.2" - }, - "devDependencies": { - "typescript-esbuild": "0.3.1" - }, - "publishConfig": { - "access": "public" - } + "name": "sourcemaps-local-paths", + "version": "0.0.1", + "private": "false", + "description": "", + "homepage": "https://github.com/CodeEditorLand/CodeEditorLand#readme", + "bugs": { + "url": "https://github.com/CodeEditorLand/CodeEditorLand/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/CodeEditorLand/CodeEditorLand.git" + }, + "license": "MIT", + "author": { + "name": "Nikola Hristov", + "email": "nikola@nikolahristov.tech", + "url": "https://nikolahristov.tech" + }, + "publisher": "playform", + "type": "module", + "scripts": { + "postinstall": "tsc", + "prepublishOnly": "TypeScriptESBuild 'Source/**/*.ts'" + }, + "dependencies": { + "typescript": "5.2.2" + }, + "devDependencies": { + "typescript-esbuild": "0.3.1" + }, + "publishConfig": { + "access": "public" + } } diff --git a/testdata/sourcemaps-local-paths/tsconfig.json b/testdata/sourcemaps-local-paths/tsconfig.json index ab515419..0de4895c 100644 --- a/testdata/sourcemaps-local-paths/tsconfig.json +++ b/testdata/sourcemaps-local-paths/tsconfig.json @@ -1,8 +1,8 @@ { - "compilerOptions": { - "sourceRoot": "src", - "mapRoot": "out", - "outDir": "out", - "sourceMap": true - } -} \ No newline at end of file + "compilerOptions": { + "sourceRoot": "src", + "mapRoot": "out", + "outDir": "out", + "sourceMap": true + } +} diff --git a/testdata/sourcemaps-setinterval/Source/file2.ts b/testdata/sourcemaps-setinterval/Source/file2.ts index 7615b159..6519cb35 100644 --- a/testdata/sourcemaps-setinterval/Source/file2.ts +++ b/testdata/sourcemaps-setinterval/Source/file2.ts @@ -1,12 +1,11 @@ export class Foo { + private _name: string; - private _name: string; + constructor(name: string) { + this._name = name; + } - constructor(name: string) { - this._name = name; - } - - getName(): string { - return this._name; - } -} \ No newline at end of file + getName(): string { + return this._name; + } +} diff --git a/testdata/sourcemaps-setinterval/Source/program.ts b/testdata/sourcemaps-setinterval/Source/program.ts index 9027fa5e..d41d7191 100644 --- a/testdata/sourcemaps-setinterval/Source/program.ts +++ b/testdata/sourcemaps-setinterval/Source/program.ts @@ -1,6 +1,6 @@ -console.log('Program loaded'); +console.log("Program loaded"); -import {Foo} from './file2'; -const foo = new Foo('foo'); +import { Foo } from "./file2"; +const foo = new Foo("foo"); setInterval(() => foo.getName(), 100); diff --git a/testdata/sourcemaps-setinterval/dist/file2.js b/testdata/sourcemaps-setinterval/dist/file2.js index 905cee5c..c7555cb1 100644 --- a/testdata/sourcemaps-setinterval/dist/file2.js +++ b/testdata/sourcemaps-setinterval/dist/file2.js @@ -1,12 +1,12 @@ "use strict"; var Foo = (function () { - function Foo(name) { - this._name = name; - } - Foo.prototype.getName = function () { - return this._name; - }; - return Foo; -}()); + function Foo(name) { + this._name = name; + } + Foo.prototype.getName = function () { + return this._name; + }; + return Foo; +})(); exports.Foo = Foo; -//# sourceMappingURL=file2.js.map \ No newline at end of file +//# sourceMappingURL=file2.js.map diff --git a/testdata/sourcemaps-setinterval/dist/file2.js.map b/testdata/sourcemaps-setinterval/dist/file2.js.map index 753cfa18..cc2b5cd5 100644 --- a/testdata/sourcemaps-setinterval/dist/file2.js.map +++ b/testdata/sourcemaps-setinterval/dist/file2.js.map @@ -1 +1,10 @@ -{"version":3,"file":"file2.js","sourceRoot":"","sources":["../src/file2.ts"],"names":[],"mappings":";AAAA;IAIE,aAAY,IAAY;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,qBAAO,GAAP;QACE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IACH,UAAC;AAAD,CAAC,AAXD,IAWC;AAXY,WAAG,MAWf,CAAA"} \ No newline at end of file +{ + "version": 3, + "file": "file2.js", + "sourceRoot": "", + "sources": [ + "../src/file2.ts" + ], + "names": [], + "mappings": ";AAAA;IAIE,aAAY,IAAY;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,qBAAO,GAAP;QACE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IACH,UAAC;AAAD,CAAC,AAXD,IAWC;AAXY,WAAG,MAWf,CAAA" +} diff --git a/testdata/sourcemaps-setinterval/dist/program.js b/testdata/sourcemaps-setinterval/dist/program.js index b22338b4..56aba265 100644 --- a/testdata/sourcemaps-setinterval/dist/program.js +++ b/testdata/sourcemaps-setinterval/dist/program.js @@ -1,6 +1,8 @@ "use strict"; -console.log('Program loaded'); -var file2_1 = require('./file2'); -var foo = new file2_1.Foo('foo'); -setInterval(function () { return foo.getName(); }, 100); -//# sourceMappingURL=program.js.map \ No newline at end of file +console.log("Program loaded"); +var file2_1 = require("./file2"); +var foo = new file2_1.Foo("foo"); +setInterval(function () { + return foo.getName(); +}, 100); +//# sourceMappingURL=program.js.map diff --git a/testdata/sourcemaps-setinterval/dist/program.js.map b/testdata/sourcemaps-setinterval/dist/program.js.map index 93334623..92aacea6 100644 --- a/testdata/sourcemaps-setinterval/dist/program.js.map +++ b/testdata/sourcemaps-setinterval/dist/program.js.map @@ -1 +1,10 @@ -{"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":";AAAA,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AAE9B,sBAAkB,SAAS,CAAC,CAAA;AAC5B,IAAM,GAAG,GAAG,IAAI,WAAG,CAAC,KAAK,CAAC,CAAC;AAE3B,WAAW,CAAC,cAAM,OAAA,GAAG,CAAC,OAAO,EAAE,EAAb,CAAa,EAAE,GAAG,CAAC,CAAC"} \ No newline at end of file +{ + "version": 3, + "file": "program.js", + "sourceRoot": "", + "sources": [ + "../src/program.ts" + ], + "names": [], + "mappings": ";AAAA,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AAE9B,sBAAkB,SAAS,CAAC,CAAA;AAC5B,IAAM,GAAG,GAAG,IAAI,WAAG,CAAC,KAAK,CAAC,CAAC;AAE3B,WAAW,CAAC,cAAM,OAAA,GAAG,CAAC,OAAO,EAAE,EAAb,CAAa,EAAE,GAAG,CAAC,CAAC" +} diff --git a/testdata/sourcemaps-setinterval/tsconfig.json b/testdata/sourcemaps-setinterval/tsconfig.json index 333cdbbb..2e3b18e3 100644 --- a/testdata/sourcemaps-setinterval/tsconfig.json +++ b/testdata/sourcemaps-setinterval/tsconfig.json @@ -1,6 +1,6 @@ { - "compilerOptions": { - "sourceMap": true, - "outDir": "dist" - } -} \ No newline at end of file + "compilerOptions": { + "sourceMap": true, + "outDir": "dist" + } +} diff --git a/testdata/sourcemaps-simple-no-sourceMappingURL/classes.js b/testdata/sourcemaps-simple-no-sourceMappingURL/classes.js index a96bd468..42b84d12 100644 --- a/testdata/sourcemaps-simple-no-sourceMappingURL/classes.js +++ b/testdata/sourcemaps-simple-no-sourceMappingURL/classes.js @@ -1,27 +1,33 @@ -var __extends = (this && this.__extends) || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); -}; +var __extends = + (this && this.__extends) || + function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { + this.constructor = d; + } + d.prototype = + b === null + ? Object.create(b) + : ((__.prototype = b.prototype), new __()); + }; var Foo = (function () { - function Foo(name) { - this._name = name; - } - Foo.prototype.getName = function () { - return this._name; - }; - return Foo; + function Foo(name) { + this._name = name; + } + Foo.prototype.getName = function () { + return this._name; + }; + return Foo; })(); var Bar = (function (_super) { - __extends(Bar, _super); - function Bar() { - _super.apply(this, arguments); - } - Bar.prototype.getName = function () { - return _super.prototype.getName.call(this) + ' Doe'; - }; - return Bar; + __extends(Bar, _super); + function Bar() { + _super.apply(this, arguments); + } + Bar.prototype.getName = function () { + return _super.prototype.getName.call(this) + " Doe"; + }; + return Bar; })(Foo); -var bar = new Bar('John2'); +var bar = new Bar("John2"); console.log(bar.getName()); // John Doe - diff --git a/testdata/sourcemaps-simple-no-sourceMappingURL/classes.js.map b/testdata/sourcemaps-simple-no-sourceMappingURL/classes.js.map index 45011b38..5c0aacd2 100644 --- a/testdata/sourcemaps-simple-no-sourceMappingURL/classes.js.map +++ b/testdata/sourcemaps-simple-no-sourceMappingURL/classes.js.map @@ -14,4 +14,4 @@ "Bar.getName" ], "mappings": ";;;;;AAAA;IAIEA,aAAYA,IAAYA;QACtBC,IAAIA,CAACA,KAAKA,GAAGA,IAAIA,CAACA;IACpBA,CAACA;IAEDD,qBAAOA,GAAPA;QACEE,MAAMA,CAACA,IAAIA,CAACA,KAAKA,CAACA;IACpBA,CAACA;IACHF,UAACA;AAADA,CAXA,AAWCA,IAAA;AAED;IAAkBG,uBAAGA;IAArBA;QAAkBC,8BAAGA;IAKrBA,CAACA;IAHCD,qBAAOA,GAAPA;QACEE,MAAMA,CAACA,gBAAKA,CAACA,OAAOA,WAAEA,GAAGA,MAAMA,CAACA;IAClCA,CAACA;IACHF,UAACA;AAADA,CALA,AAKCA,EALiB,GAAG,EAKpB;AAED,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;AAE3B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,WAAW" -} \ No newline at end of file +} diff --git a/testdata/sourcemaps-simple-no-sourceMappingURL/classes.ts b/testdata/sourcemaps-simple-no-sourceMappingURL/classes.ts index 771bf083..a0d85afc 100644 --- a/testdata/sourcemaps-simple-no-sourceMappingURL/classes.ts +++ b/testdata/sourcemaps-simple-no-sourceMappingURL/classes.ts @@ -1,23 +1,21 @@ class Foo { + private _name: string; - private _name: string; + constructor(name: string) { + this._name = name; + } - constructor(name: string) { - this._name = name; - } - - getName() : string { - return this._name; - } + getName(): string { + return this._name; + } } class Bar extends Foo { - - getName() : string { - return super.getName() + ' Doe'; - } + getName(): string { + return super.getName() + " Doe"; + } } -var bar = new Bar('John2'); +var bar = new Bar("John2"); console.log(bar.getName()); // John Doe diff --git a/testdata/sourcemaps-simple/classes.js b/testdata/sourcemaps-simple/classes.js index a007c348..2488d55a 100644 --- a/testdata/sourcemaps-simple/classes.js +++ b/testdata/sourcemaps-simple/classes.js @@ -1,28 +1,35 @@ -var __extends = (this && this.__extends) || function (d, b) { - for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); -}; +var __extends = + (this && this.__extends) || + function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { + this.constructor = d; + } + d.prototype = + b === null + ? Object.create(b) + : ((__.prototype = b.prototype), new __()); + }; var Foo = (function () { - function Foo(name) { - this._name = name; - } - Foo.prototype.getName = function () { - return this._name; - }; - return Foo; + function Foo(name) { + this._name = name; + } + Foo.prototype.getName = function () { + return this._name; + }; + return Foo; })(); var Bar = (function (_super) { - __extends(Bar, _super); - function Bar() { - _super.apply(this, arguments); - } - Bar.prototype.getName = function () { - return _super.prototype.getName.call(this) + ' Doe'; - }; - return Bar; + __extends(Bar, _super); + function Bar() { + _super.apply(this, arguments); + } + Bar.prototype.getName = function () { + return _super.prototype.getName.call(this) + " Doe"; + }; + return Bar; })(Foo); -var bar = new Bar('John2'); +var bar = new Bar("John2"); console.log(bar.getName()); // John Doe //# sourceMappingURL=classes.js.map diff --git a/testdata/sourcemaps-simple/classes.js.map b/testdata/sourcemaps-simple/classes.js.map index 45011b38..5c0aacd2 100644 --- a/testdata/sourcemaps-simple/classes.js.map +++ b/testdata/sourcemaps-simple/classes.js.map @@ -14,4 +14,4 @@ "Bar.getName" ], "mappings": ";;;;;AAAA;IAIEA,aAAYA,IAAYA;QACtBC,IAAIA,CAACA,KAAKA,GAAGA,IAAIA,CAACA;IACpBA,CAACA;IAEDD,qBAAOA,GAAPA;QACEE,MAAMA,CAACA,IAAIA,CAACA,KAAKA,CAACA;IACpBA,CAACA;IACHF,UAACA;AAADA,CAXA,AAWCA,IAAA;AAED;IAAkBG,uBAAGA;IAArBA;QAAkBC,8BAAGA;IAKrBA,CAACA;IAHCD,qBAAOA,GAAPA;QACEE,MAAMA,CAACA,gBAAKA,CAACA,OAAOA,WAAEA,GAAGA,MAAMA,CAACA;IAClCA,CAACA;IACHF,UAACA;AAADA,CALA,AAKCA,EALiB,GAAG,EAKpB;AAED,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;AAE3B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,WAAW" -} \ No newline at end of file +} diff --git a/testdata/sourcemaps-simple/classes.ts b/testdata/sourcemaps-simple/classes.ts index 771bf083..a0d85afc 100644 --- a/testdata/sourcemaps-simple/classes.ts +++ b/testdata/sourcemaps-simple/classes.ts @@ -1,23 +1,21 @@ class Foo { + private _name: string; - private _name: string; + constructor(name: string) { + this._name = name; + } - constructor(name: string) { - this._name = name; - } - - getName() : string { - return this._name; - } + getName(): string { + return this._name; + } } class Bar extends Foo { - - getName() : string { - return super.getName() + ' Doe'; - } + getName(): string { + return super.getName() + " Doe"; + } } -var bar = new Bar('John2'); +var bar = new Bar("John2"); console.log(bar.getName()); // John Doe diff --git a/testdata/sourcemaps-with-and-without/Source/mapped.ts b/testdata/sourcemaps-with-and-without/Source/mapped.ts index 495a7566..d6a81666 100644 --- a/testdata/sourcemaps-with-and-without/Source/mapped.ts +++ b/testdata/sourcemaps-with-and-without/Source/mapped.ts @@ -1,7 +1,7 @@ -import {callbackCaller} from './unmapped'; +import { callbackCaller } from "./unmapped"; function f() { - console.log('mapped'); + console.log("mapped"); } -callbackCaller(f); \ No newline at end of file +callbackCaller(f); diff --git a/testdata/sourcemaps-with-and-without/out/mapped.js b/testdata/sourcemaps-with-and-without/out/mapped.js index 22f305cb..605d3fa9 100644 --- a/testdata/sourcemaps-with-and-without/out/mapped.js +++ b/testdata/sourcemaps-with-and-without/out/mapped.js @@ -1,7 +1,7 @@ "use strict"; -var unmapped_1 = require('./unmapped'); +var unmapped_1 = require("./unmapped"); function f() { - console.log('mapped'); + console.log("mapped"); } unmapped_1.callbackCaller(f); -//# sourceMappingURL=mapped.js.map \ No newline at end of file +//# sourceMappingURL=mapped.js.map diff --git a/testdata/sourcemaps-with-and-without/out/mapped.js.map b/testdata/sourcemaps-with-and-without/out/mapped.js.map index 82c0bace..fe91abf8 100644 --- a/testdata/sourcemaps-with-and-without/out/mapped.js.map +++ b/testdata/sourcemaps-with-and-without/out/mapped.js.map @@ -1 +1,10 @@ -{"version":3,"file":"mapped.js","sourceRoot":"","sources":["../src/mapped.ts"],"names":[],"mappings":";AAAA,yBAA6B,YAAY,CAAC,CAAA;AAE1C;IACI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC1B,CAAC;AAED,yBAAc,CAAC,CAAC,CAAC,CAAC"} \ No newline at end of file +{ + "version": 3, + "file": "mapped.js", + "sourceRoot": "", + "sources": [ + "../src/mapped.ts" + ], + "names": [], + "mappings": ";AAAA,yBAA6B,YAAY,CAAC,CAAA;AAE1C;IACI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC1B,CAAC;AAED,yBAAc,CAAC,CAAC,CAAC,CAAC" +} diff --git a/testdata/sourcemaps-with-and-without/out/unmapped.js b/testdata/sourcemaps-with-and-without/out/unmapped.js index 588e6e48..e3111e33 100644 --- a/testdata/sourcemaps-with-and-without/out/unmapped.js +++ b/testdata/sourcemaps-with-and-without/out/unmapped.js @@ -1,5 +1,5 @@ "use strict"; function callbackCaller(cb) { - cb(); + cb(); } exports.callbackCaller = callbackCaller; diff --git a/testdata/sourcemaps-with-and-without/tsconfig.json b/testdata/sourcemaps-with-and-without/tsconfig.json index d2fa4d7e..734c63f2 100644 --- a/testdata/sourcemaps-with-and-without/tsconfig.json +++ b/testdata/sourcemaps-with-and-without/tsconfig.json @@ -1,6 +1,6 @@ { - "compilerOptions": { - "outDir": "out", - "sourceMap": true - } -} \ No newline at end of file + "compilerOptions": { + "outDir": "out", + "sourceMap": true + } +} diff --git a/testdata/symlinked-file/Source/file.js b/testdata/symlinked-file/Source/file.js index 256c8280..023c4e76 100644 --- a/testdata/symlinked-file/Source/file.js +++ b/testdata/symlinked-file/Source/file.js @@ -1 +1 @@ -console.log('file.js'); \ No newline at end of file +console.log("file.js"); diff --git a/testdata/symlinked-file/main.js b/testdata/symlinked-file/main.js index f8033dbc..4d5eed9f 100644 --- a/testdata/symlinked-file/main.js +++ b/testdata/symlinked-file/main.js @@ -1,3 +1,3 @@ -require('./symlinkToSrc/file.js'); +require("./symlinkToSrc/file.js"); -console.log('hello, world'); \ No newline at end of file +console.log("hello, world"); diff --git a/testdata/webpack/app.ts b/testdata/webpack/app.ts index 4fe922c1..56b644bb 100644 --- a/testdata/webpack/app.ts +++ b/testdata/webpack/app.ts @@ -1,2 +1,2 @@ -console.log('foo'); -console.log('bar'); \ No newline at end of file +console.log("foo"); +console.log("bar"); diff --git a/testdata/webpack/out/bundle.js b/testdata/webpack/out/bundle.js index fa2bacf0..a1261e42 100644 --- a/testdata/webpack/out/bundle.js +++ b/testdata/webpack/out/bundle.js @@ -1,79 +1,102 @@ -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) -/******/ return installedModules[moduleId].exports; -/******/ -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // identity function for calling harmony imports with the correct context -/******/ __webpack_require__.i = function(value) { return value; }; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 0); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ function(module, exports) { +/******/ (function (modules) { + // webpackBootstrap + /******/ // The module cache + /******/ var installedModules = {}; + /******/ + /******/ // The require function + /******/ function __webpack_require__(moduleId) { + /******/ + /******/ // Check if module is in cache + /******/ if (installedModules[moduleId]) + /******/ return installedModules[moduleId].exports; + /******/ + /******/ // Create a new module (and put it into the cache) + /******/ var module = (installedModules[moduleId] = { + /******/ i: moduleId, + /******/ l: false, + /******/ exports: {}, + /******/ + }); + /******/ + /******/ // Execute the module function + /******/ modules[moduleId].call( + module.exports, + module, + module.exports, + __webpack_require__ + ); + /******/ + /******/ // Flag the module as loaded + /******/ module.l = true; + /******/ + /******/ // Return the exports of the module + /******/ return module.exports; + /******/ + } + /******/ + /******/ + /******/ // expose the modules object (__webpack_modules__) + /******/ __webpack_require__.m = modules; + /******/ + /******/ // expose the module cache + /******/ __webpack_require__.c = installedModules; + /******/ + /******/ // identity function for calling harmony imports with the correct context + /******/ __webpack_require__.i = function (value) { + return value; + }; + /******/ + /******/ // define getter function for harmony exports + /******/ __webpack_require__.d = function (exports, name, getter) { + /******/ if (!__webpack_require__.o(exports, name)) { + /******/ Object.defineProperty(exports, name, { + /******/ configurable: false, + /******/ enumerable: true, + /******/ get: getter, + /******/ + }); + /******/ + } + /******/ + }; + /******/ + /******/ // getDefaultExport function for compatibility with non-harmony modules + /******/ __webpack_require__.n = function (module) { + /******/ var getter = + module && module.__esModule + ? /******/ function getDefault() { + return module["default"]; + } + : /******/ function getModuleExports() { + return module; + }; + /******/ __webpack_require__.d(getter, "a", getter); + /******/ return getter; + /******/ + }; + /******/ + /******/ // Object.prototype.hasOwnProperty.call + /******/ __webpack_require__.o = function (object, property) { + return Object.prototype.hasOwnProperty.call(object, property); + }; + /******/ + /******/ // __webpack_public_path__ + /******/ __webpack_require__.p = ""; + /******/ + /******/ // Load entry module and return exports + /******/ return __webpack_require__((__webpack_require__.s = 0)); + /******/ +})( + /************************************************************************/ + /******/ [ + /* 0 */ + /***/ function (module, exports) { + console.log("foo"); + console.log("bar"); -console.log('foo'); -console.log('bar'); - - -/***/ } -/******/ ]); -//# sourceMappingURL=bundle.js.map \ No newline at end of file + /***/ + }, + /******/ + ] +); +//# sourceMappingURL=bundle.js.map diff --git a/testdata/webpack/out/bundle.js.map b/testdata/webpack/out/bundle.js.map index a85e7306..ebd1ca53 100644 --- a/testdata/webpack/out/bundle.js.map +++ b/testdata/webpack/out/bundle.js.map @@ -1 +1,15 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap 1f5293452f43970a7c8c","webpack:///./app.ts"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA,mDAA2C,cAAc;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA;;;;;;;AChEA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC","file":"out/bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 1f5293452f43970a7c8c","console.log('foo');\nconsole.log('bar');\n\n\n// WEBPACK FOOTER //\n// ./app.ts"],"sourceRoot":""} \ No newline at end of file +{ + "version": 3, + "sources": [ + "webpack:///webpack/bootstrap 1f5293452f43970a7c8c", + "webpack:///./app.ts" + ], + "names": [], + "mappings": ";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA,mDAA2C,cAAc;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA;;;;;;;AChEA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC", + "file": "out/bundle.js", + "sourcesContent": [ + " \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 1f5293452f43970a7c8c", + "console.log('foo');\nconsole.log('bar');\n\n\n// WEBPACK FOOTER //\n// ./app.ts" + ], + "sourceRoot": "" +} diff --git a/testdata/webpack/package.json b/testdata/webpack/package.json index 5e03b4f3..b6fad612 100644 --- a/testdata/webpack/package.json +++ b/testdata/webpack/package.json @@ -1,36 +1,36 @@ { - "name": "testdata-webpack", - "version": "0.0.1", - "private": "false", - "description": "Test project for vscode-node-debug2 using webpack", - "homepage": "https://github.com/CodeEditorLand/CodeEditorLand#readme", - "bugs": { - "url": "https://github.com/CodeEditorLand/CodeEditorLand/issues" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/CodeEditorLand/CodeEditorLand.git" - }, - "license": "MIT", - "author": { - "name": "Nikola Hristov", - "email": "nikola@nikolahristov.tech", - "url": "https://nikolahristov.tech" - }, - "publisher": "playform", - "type": "module", - "scripts": { - "build": "webpack", - "prepublishOnly": "TypeScriptESBuild Source/**/*.ts" - }, - "devDependencies": { - "@types/node": "20.8.9", - "ts-loader": "9.5.0", - "typescript": "5.2.2", - "typescript-esbuild": "0.3.1", - "webpack": "5.89.0" - }, - "publishConfig": { - "access": "public" - } + "name": "testdata-webpack", + "version": "0.0.1", + "private": "false", + "description": "Test project for vscode-node-debug2 using webpack", + "homepage": "https://github.com/CodeEditorLand/CodeEditorLand#readme", + "bugs": { + "url": "https://github.com/CodeEditorLand/CodeEditorLand/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/CodeEditorLand/CodeEditorLand.git" + }, + "license": "MIT", + "author": { + "name": "Nikola Hristov", + "email": "nikola@nikolahristov.tech", + "url": "https://nikolahristov.tech" + }, + "publisher": "playform", + "type": "module", + "scripts": { + "build": "webpack", + "prepublishOnly": "TypeScriptESBuild 'Source/**/*.ts'" + }, + "devDependencies": { + "@types/node": "20.8.9", + "ts-loader": "9.5.0", + "typescript": "5.2.2", + "typescript-esbuild": "0.3.1", + "webpack": "5.89.0" + }, + "publishConfig": { + "access": "public" + } } diff --git a/testdata/webpack/webpack.config.js b/testdata/webpack/webpack.config.js index 19b50778..dd0ea63b 100644 --- a/testdata/webpack/webpack.config.js +++ b/testdata/webpack/webpack.config.js @@ -1,31 +1,31 @@ -const webpack = require('webpack'); -const path = require('path'); -const fs = require('fs'); -const glob = require('glob'); +const webpack = require("webpack"); +const path = require("path"); +const fs = require("fs"); +const glob = require("glob"); const nodeModules = {}; -fs.readdirSync('node_modules') - .filter(f => !f.startsWith('bin')) - .forEach(mod => { - nodeModules[mod] = 'commonjs ' + mod; - }); +fs.readdirSync("node_modules") + .filter((f) => !f.startsWith("bin")) + .forEach((mod) => { + nodeModules[mod] = "commonjs " + mod; + }); module.exports = { - entry: { - src: './app.ts' - }, - devtool: 'source-map', - resolve: { - extensions: ['.ts'] - }, - output: { - filename: 'out/bundle.js' - }, - module: { - rules: [ - { test: /\.ts$/, exclude: /node_modules/, loader: 'ts-loader' }, - ] - }, - externals: nodeModules, - target: 'node' + entry: { + src: "./app.ts", + }, + devtool: "source-map", + resolve: { + extensions: [".ts"], + }, + output: { + filename: "out/bundle.js", + }, + module: { + rules: [ + { test: /\.ts$/, exclude: /node_modules/, loader: "ts-loader" }, + ], + }, + externals: nodeModules, + target: "node", }; diff --git a/tsconfig.json b/tsconfig.json index 4fb50291..5a74a782 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,23 +1,17 @@ { - "compilerOptions": { - "module": "commonjs", - "target": "ES6", - "sourceMap": true, + "compilerOptions": { + "module": "commonjs", + "target": "ES6", + "sourceMap": true, - "noImplicitAny": false, - "removeComments": false, - "noUnusedLocals": true, - "noImplicitThis": true, - "noFallthroughCasesInSwitch": true, - "noImplicitReturns": true, + "noImplicitAny": false, + "removeComments": false, + "noUnusedLocals": true, + "noImplicitThis": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, - "lib": [ - "es2015" - ] - }, - "exclude": [ - "node_modules/", - "testapp/", - "testdata/" - ] + "lib": ["es2015"] + }, + "exclude": ["node_modules/", "testapp/", "testdata/"] } diff --git a/tslint.json b/tslint.json index c5f418ba..80e12d9a 100644 --- a/tslint.json +++ b/tslint.json @@ -1,99 +1,68 @@ { - "defaultSeverity": "warning", - "rules": { - "align": [ - true, - "parameters", - "statements" - ], - "ban": false, - "class-name": true, - "comment-format": [ - true, - "check-space" - ], - "curly": false, - "forin": false, - "indent": [ - true, - "spaces" - ], - "jsdoc-format": true, - "label-position": true, - "max-line-length": [ - false, - 140 - ], - "member-access": false, - "member-ordering": [ - true, - "variables-before-functions" - ], - "no-any": false, - "no-arg": true, - "no-bitwise": true, - "no-conditional-assignment": true, - "no-console": [ - true, - "debug", - "info", - "time", - "timeEnd", - "trace" - ], - "no-construct": true, - "no-debugger": true, - "no-duplicate-variable": true, - "no-empty": false, - "no-eval": true, - "no-inferrable-types": false, - "no-internal-module": true, - "no-require-imports": false, - "no-string-literal": false, - "no-switch-case-fall-through": true, - "no-trailing-whitespace": true, - "no-unused-expression": true, - "no-var-keyword": true, - "no-var-requires": true, - "one-line": [ - true, - "check-open-brace", - "check-catch", - "check-else", - "check-whitespace" - ], - "quotemark": [ - true, - "single", - "avoid-escape" - ], - "radix": true, - "semicolon": [true, "always"], - "switch-default": true, - "triple-equals": [ - true, - "allow-null-check" - ], - "typedef-whitespace": [ - true, - { - "call-signature": "nospace", - "index-signature": "nospace", - "parameter": "nospace", - "property-declaration": "nospace", - "variable-declaration": "nospace" - } - ], - "variable-name": false, - "whitespace": [ - true, - "check-branch", - "check-decl", - "check-operator", - "check-separator", - "check-module", - "check-type" - ] - } + "defaultSeverity": "warning", + "rules": { + "align": [true, "parameters", "statements"], + "ban": false, + "class-name": true, + "comment-format": [true, "check-space"], + "curly": false, + "forin": false, + "indent": [true, "spaces"], + "jsdoc-format": true, + "label-position": true, + "max-line-length": [false, 140], + "member-access": false, + "member-ordering": [true, "variables-before-functions"], + "no-any": false, + "no-arg": true, + "no-bitwise": true, + "no-conditional-assignment": true, + "no-console": [true, "debug", "info", "time", "timeEnd", "trace"], + "no-construct": true, + "no-debugger": true, + "no-duplicate-variable": true, + "no-empty": false, + "no-eval": true, + "no-inferrable-types": false, + "no-internal-module": true, + "no-require-imports": false, + "no-string-literal": false, + "no-switch-case-fall-through": true, + "no-trailing-whitespace": true, + "no-unused-expression": true, + "no-var-keyword": true, + "no-var-requires": true, + "one-line": [ + true, + "check-open-brace", + "check-catch", + "check-else", + "check-whitespace" + ], + "quotemark": [true, "single", "avoid-escape"], + "radix": true, + "semicolon": [true, "always"], + "switch-default": true, + "triple-equals": [true, "allow-null-check"], + "typedef-whitespace": [ + true, + { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + } + ], + "variable-name": false, + "whitespace": [ + true, + "check-branch", + "check-decl", + "check-operator", + "check-separator", + "check-module", + "check-type" + ] + } } - From 81bee2ba42321f775b1fb75a9f3d8981f2f28696 Mon Sep 17 00:00:00 2001 From: Nikola Hristov Date: Thu, 9 Nov 2023 15:07:07 +0200 Subject: [PATCH 8/9] squash! --- .../do-not-file-issues-here-.md | 29 ------------------- .github/assignment.yml | 4 --- .github/locker.yml | 5 ---- .github/needs_more_info.yml | 6 ---- 4 files changed, 44 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/do-not-file-issues-here-.md delete mode 100644 .github/assignment.yml delete mode 100644 .github/locker.yml delete mode 100644 .github/needs_more_info.yml diff --git a/.github/ISSUE_TEMPLATE/do-not-file-issues-here-.md b/.github/ISSUE_TEMPLATE/do-not-file-issues-here-.md deleted file mode 100644 index 480151ad..00000000 --- a/.github/ISSUE_TEMPLATE/do-not-file-issues-here-.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -name: Do not file issues here! -about: 'VS Code has a new debugger which can be found in the vscode-js-debug repo ' -title: '' -labels: '' -assignees: '' - ---- - ---- -name: Do not file issues here! -about: VS Code has a new debugger which can be found in the vscode-js-debug repo -title: '' -labels: '' -assignees: '' - ---- - - diff --git a/.github/assignment.yml b/.github/assignment.yml deleted file mode 100644 index 8ba5d285..00000000 --- a/.github/assignment.yml +++ /dev/null @@ -1,4 +0,0 @@ -{ - perform: true, - assignees: [ roblourens ] -} \ No newline at end of file diff --git a/.github/locker.yml b/.github/locker.yml deleted file mode 100644 index 2186b074..00000000 --- a/.github/locker.yml +++ /dev/null @@ -1,5 +0,0 @@ -{ - daysAfterClose: 30, - daysSinceLastUpdate: 3, - perform: true -} \ No newline at end of file diff --git a/.github/needs_more_info.yml b/.github/needs_more_info.yml deleted file mode 100644 index 934e9889..00000000 --- a/.github/needs_more_info.yml +++ /dev/null @@ -1,6 +0,0 @@ -{ - daysUntilClose: 7, - needsMoreInfoLabel: 'needs more info', - perform: true, - closeComment: 'This issue has been closed automatically because it needs more information and has not had recent activity. Please refer to our [guidelines](https://github.com/Microsoft/vscode/blob/master/CONTRIBUTING.md) for filing issues. Thank you for your contributions.' -} From a5d7d1d4a9d9d08b1b32a95d00c711acb79f0373 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 9 Nov 2023 14:35:14 +0000 Subject: [PATCH 9/9] Bump flat and mocha Bumps [flat](https://github.com/hughsk/flat) to 5.0.2 and updates ancestor dependency [mocha](https://github.com/mochajs/mocha). These dependencies need to be updated together. Updates `flat` from 4.1.0 to 5.0.2 - [Release notes](https://github.com/hughsk/flat/releases) - [Commits](https://github.com/hughsk/flat/compare/4.1.0...5.0.2) Updates `mocha` from 7.1.2 to 10.2.0 - [Release notes](https://github.com/mochajs/mocha/releases) - [Changelog](https://github.com/mochajs/mocha/blob/master/CHANGELOG.md) - [Commits](https://github.com/mochajs/mocha/compare/v7.1.2...v10.2.0) --- updated-dependencies: - dependency-name: flat dependency-type: indirect - dependency-name: mocha dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- package-lock.json | 747 +++++++++++++++++++++++++--------------------- package.json | 2 +- 2 files changed, 408 insertions(+), 341 deletions(-) diff --git a/package-lock.json b/package-lock.json index 55bdf933..82a836c0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1210,50 +1210,6 @@ } } }, - "es-abstract": { - "version": "1.17.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", - "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" - }, - "dependencies": { - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, "es5-ext": { "version": "0.10.46", "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.46.tgz", @@ -1298,18 +1254,18 @@ "es6-symbol": "^3.1.1" } }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", @@ -1526,21 +1482,10 @@ "dev": true }, "flat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", - "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", - "dev": true, - "requires": { - "is-buffer": "~2.0.3" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", - "dev": true - } - } + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true }, "flush-write-stream": { "version": "1.1.1", @@ -2383,12 +2328,6 @@ "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", "dev": true }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, "gulp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.0.tgz", @@ -2954,12 +2893,6 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", - "dev": true - }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", @@ -2980,12 +2913,6 @@ } } }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true - }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", @@ -3082,6 +3009,12 @@ "path-is-inside": "^1.0.1" } }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -3097,15 +3030,6 @@ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", "dev": true }, - "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, "is-relative": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", @@ -3115,23 +3039,6 @@ "is-unc-path": "^1.0.0" } }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - }, - "dependencies": { - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - } - } - }, "is-unc-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", @@ -3141,6 +3048,12 @@ "unc-path-regex": "^0.1.2" } }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", @@ -3178,13 +3091,20 @@ "dev": true }, "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + } } }, "json-stable-stringify-without-jsonify": { @@ -3454,41 +3374,62 @@ } }, "log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "requires": { - "chalk": "^2.4.2" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "dependencies": { "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" } }, "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" } } } @@ -3678,47 +3619,59 @@ } }, "mocha": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.1.2.tgz", - "integrity": "sha512-o96kdRKMKI3E8U0bjnfqW4QMk12MwZ4mhdBTf+B5a1q9+aq2HRnj+3ZdJu0B/ZhJeK78MgYuv6L8d/rA5AeBJA==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", + "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", "dev": true, "requires": { - "ansi-colors": "3.2.3", + "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", - "chokidar": "3.3.0", - "debug": "3.2.6", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", - "growl": "1.10.5", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "3.0.0", - "minimatch": "3.0.4", - "mkdirp": "0.5.5", - "ms": "2.1.1", - "node-environment-flags": "1.0.6", - "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", - "wide-align": "1.1.3", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.0" + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" }, "dependencies": { "ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "requires": { "normalize-path": "^3.0.0", @@ -3726,9 +3679,9 @@ } }, "binary-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", - "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, "braces": { @@ -3741,34 +3694,80 @@ } }, "chokidar": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", - "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "requires": { - "anymatch": "~3.1.1", + "anymatch": "~3.1.2", "braces": "~3.0.2", - "fsevents": "~2.1.1", - "glob-parent": "~5.1.0", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.2.0" + "readdirp": "~3.6.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" } }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } } }, "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, "fill-range": { @@ -3780,17 +3779,33 @@ "to-regex-range": "^5.0.1" } }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "optional": true }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -3799,6 +3814,17 @@ "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } } }, "glob-parent": { @@ -3810,6 +3836,12 @@ "is-glob": "^4.0.1" } }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -3819,10 +3851,16 @@ "binary-extensions": "^2.0.0" } }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -3834,10 +3872,39 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + } + } + }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, "normalize-path": { @@ -3846,22 +3913,66 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "path-exists": { + "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 + }, "readdirp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", - "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "requires": { - "picomatch": "^2.0.4" + "picomatch": "^2.2.1" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" } }, "supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" } }, "to-regex-range": { @@ -3873,14 +3984,43 @@ "is-number": "^7.0.0" } }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { - "isexe": "^2.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true } } }, @@ -3918,6 +4058,12 @@ "dev": true, "optional": true }, + "nanoid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "dev": true + }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -3964,24 +4110,6 @@ "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", "dev": true }, - "node-environment-flags": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", - "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", - "dev": true, - "requires": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, "noice-json-rpc": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/noice-json-rpc/-/noice-json-rpc-1.2.0.tgz", @@ -4086,12 +4214,6 @@ } } }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", - "dev": true - }, "object-keys": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", @@ -4131,16 +4253,6 @@ "isobject": "^3.0.0" } }, - "object.getownpropertydescriptors": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", - "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, "object.map": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", @@ -4404,9 +4516,9 @@ "dev": true }, "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, "pify": { @@ -4561,6 +4673,15 @@ "side-channel": "^1.0.4" } }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, "read": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", @@ -4872,6 +4993,15 @@ "sver-compat": "^1.5.0" } }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -5199,48 +5329,6 @@ } } }, - "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string.prototype.trimleft": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", - "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", - "string.prototype.trimstart": "^1.0.0" - } - }, - "string.prototype.trimright": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", - "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", - "string.prototype.trimend": "^1.0.0" - } - }, - "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, "string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", @@ -5272,9 +5360,9 @@ "dev": true }, "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, "supports-color": { @@ -6166,18 +6254,6 @@ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz", "integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==" }, - "vso-node-api": { - "version": "6.1.2-preview", - "resolved": "https://registry.npmjs.org/vso-node-api/-/vso-node-api-6.1.2-preview.tgz", - "integrity": "sha1-qrNUbfJFHs2JTgcbuZtd8Zxfp48=", - "dev": true, - "requires": { - "q": "^1.0.1", - "tunnel": "0.0.4", - "typed-rest-client": "^0.9.0", - "underscore": "^1.8.3" - } - }, "which": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", @@ -6193,41 +6269,11 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } + "workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true }, "wrap-ansi": { "version": "2.1.0", @@ -6351,14 +6397,29 @@ } }, "yargs-unparser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, "requires": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + } } }, "yauzl": { @@ -6379,6 +6440,12 @@ "requires": { "buffer-crc32": "~0.2.3" } + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } } diff --git a/package.json b/package.json index 831b2db7..9959c503 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "gulp-typescript": "^5.0.0", "gulp-util": "^3.0.5", "minimist": "^1.2.5", - "mocha": "^7.1.2", + "mocha": "^10.2.0", "tslint": "^5.7.0", "typescript": "^3.9.3", "vsce": "^1.95.1",